commit 6604860158bee320d85674db2fd2a7c64d353c67
parent 14ce82ac35fc72faa19bfe621f8af2b091cd8547
Author: triesap <tyson@radroots.org>
Date: Sat, 6 Jun 2026 02:37:19 -0700
bench: add search workload
Diffstat:
1 file changed, 67 insertions(+), 2 deletions(-)
diff --git a/crates/tangle_bench/src/lib.rs b/crates/tangle_bench/src/lib.rs
@@ -3,8 +3,8 @@
use tangle_protocol::Event;
use tangle_store::{StoreEventOutcome, StoredEvent};
use tangle_store_surreal::{
- ListingCurrentOutcome, ListingProjectionQuery, SurrealConnectionConfig, SurrealStore,
- base_migration_plan,
+ ListingCurrentOutcome, ListingProjectionQuery, SearchDocumentOutcome, SearchDocumentQuery,
+ SurrealConnectionConfig, SurrealStore, base_migration_plan,
};
use tangle_test_support::{FixtureKey, build_fixture_event_from_parts};
@@ -140,6 +140,54 @@ pub async fn materialize_listing_workload(
})
}
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub struct SearchWorkloadReport {
+ pub indexed: u64,
+ pub carrot_results: u64,
+ pub browse_results: u64,
+}
+
+pub async fn run_search_workload(dataset: &BenchDataset) -> Result<SearchWorkloadReport, String> {
+ let materialized = materialize_listing_workload(dataset).await?;
+ let store = materialized.store();
+ let mut indexed = 0;
+ for event in dataset.listings() {
+ if store
+ .index_listing_search_document(event)
+ .await
+ .map_err(|error| error.to_string())?
+ == SearchDocumentOutcome::Indexed
+ {
+ indexed += 1;
+ }
+ }
+ let carrot_results = store
+ .query_search_documents(
+ &SearchDocumentQuery::new()
+ .with_text("carrots")
+ .with_doc_type("listing")
+ .with_visible(true),
+ )
+ .await
+ .map_err(|error| error.to_string())?
+ .len() as u64;
+ let browse_results = store
+ .query_search_documents(
+ &SearchDocumentQuery::new()
+ .with_doc_type("listing")
+ .with_visible(true)
+ .with_limit(5),
+ )
+ .await
+ .map_err(|error| error.to_string())?
+ .len() as u64;
+ Ok(SearchWorkloadReport {
+ indexed,
+ carrot_results,
+ browse_results,
+ })
+}
+
async fn bench_memory_store(database: &str) -> Result<SurrealStore, String> {
let config = SurrealConnectionConfig::memory("tangle_bench", database)
.map_err(|error| error.to_string())?;
@@ -291,4 +339,21 @@ mod tests {
3
);
}
+
+ #[tokio::test]
+ async fn search_workload_indexes_and_queries_listing_documents() {
+ let dataset = BenchDataset::generate(BenchDatasetConfig::new(12, 2)).expect("dataset");
+ let report = super::run_search_workload(&dataset)
+ .await
+ .expect("search workload");
+
+ assert_eq!(
+ report,
+ super::SearchWorkloadReport {
+ indexed: 12,
+ carrot_results: 12,
+ browse_results: 5
+ }
+ );
+ }
}