use std::sync::Arc;
use criterion::{criterion_group, criterion_main, Criterion};
use delta_kernel::engine::default::executor::tokio::TokioBackgroundExecutor;
use delta_kernel::engine::default::{DefaultEngine, DefaultEngineBuilder};
use delta_kernel::snapshot::Snapshot;
use delta_kernel::try_parse_uri;
use tempfile::TempDir;
use test_utils::load_test_data;
use url::Url;
const SCAN_METADATA_BENCH_SAMPLE_SIZE: usize = 20;
fn setup() -> (TempDir, Url, Arc<DefaultEngine<TokioBackgroundExecutor>>) {
let table = "300k-add-files-100-col-partitioned";
let tempdir = load_test_data("./tests/data", table).unwrap();
let table_path = tempdir.path().join(table);
let url = try_parse_uri(table_path.to_str().unwrap()).expect("Failed to parse table path");
use delta_kernel::engine::default::storage::store_from_url;
let store = store_from_url(&url).expect("Failed to create store");
let engine = DefaultEngineBuilder::new(store).build();
(tempdir, url, Arc::new(engine))
}
fn create_snapshot_benchmark(c: &mut Criterion) {
let (_tempdir, url, engine) = setup();
c.bench_function("create_snapshot", |b| {
b.iter(|| {
Snapshot::builder_for(url.clone())
.build(engine.as_ref())
.expect("Failed to create snapshot")
})
});
}
fn scan_metadata_benchmark(c: &mut Criterion) {
let (_tempdir, url, engine) = setup();
let snapshot = Snapshot::builder_for(url.clone())
.build(engine.as_ref())
.expect("Failed to create snapshot");
let mut group = c.benchmark_group("scan_metadata");
group.sample_size(SCAN_METADATA_BENCH_SAMPLE_SIZE);
group.bench_function("scan_metadata", |b| {
b.iter(|| {
let scan = snapshot
.clone() .scan_builder()
.build()
.expect("Failed to build scan");
let metadata_iter = scan
.scan_metadata(engine.as_ref())
.expect("Failed to get scan metadata");
for result in metadata_iter {
result.expect("Failed to process scan metadata");
}
})
});
group.finish();
}
criterion_group!(benches, create_snapshot_benchmark, scan_metadata_benchmark);
criterion_main!(benches);