2022-02-16 13:38:33 +00:00
|
|
|
use std::{collections::BTreeSet, iter, sync::Arc};
|
2022-01-28 17:44:10 +00:00
|
|
|
|
2022-02-16 13:38:33 +00:00
|
|
|
use criterion::{criterion_group, criterion_main, Criterion, Throughput};
|
2022-02-25 18:44:54 +00:00
|
|
|
use data_types2::{PartitionTemplate, TemplatePart};
|
2022-01-28 17:44:10 +00:00
|
|
|
use hyper::{Body, Request};
|
2022-02-16 13:38:33 +00:00
|
|
|
use iox_catalog::{interface::Catalog, mem::MemCatalog};
|
|
|
|
use router2::{
|
|
|
|
dml_handlers::{
|
|
|
|
DmlHandlerChainExt, FanOutAdaptor, Partitioner, SchemaValidator, ShardedWriteBuffer,
|
|
|
|
},
|
|
|
|
namespace_cache::{MemoryNamespaceCache, ShardedCache},
|
|
|
|
sequencer::Sequencer,
|
|
|
|
server::http::HttpDelegate,
|
|
|
|
sharder::JumpHash,
|
|
|
|
};
|
2022-01-28 17:44:10 +00:00
|
|
|
use tokio::runtime::Runtime;
|
|
|
|
use write_buffer::core::WriteBufferWriting;
|
|
|
|
use write_buffer::mock::{MockBufferForWriting, MockBufferSharedState};
|
|
|
|
|
|
|
|
// Init a mock write buffer with the given number of sequencers.
|
2022-02-03 14:48:54 +00:00
|
|
|
fn init_write_buffer(n_sequencers: u32) -> ShardedWriteBuffer<JumpHash<Arc<Sequencer>>> {
|
2022-01-28 17:44:10 +00:00
|
|
|
let time = time::MockProvider::new(time::Time::from_timestamp_millis(668563200000));
|
|
|
|
let write_buffer: Arc<dyn WriteBufferWriting> = Arc::new(
|
|
|
|
MockBufferForWriting::new(
|
|
|
|
MockBufferSharedState::empty_with_n_sequencers(
|
|
|
|
n_sequencers.try_into().expect("cannot have 0 sequencers"),
|
|
|
|
),
|
|
|
|
None,
|
|
|
|
Arc::new(time),
|
|
|
|
)
|
|
|
|
.expect("failed to init mock write buffer"),
|
|
|
|
);
|
|
|
|
|
|
|
|
let shards: BTreeSet<_> = write_buffer.sequencer_ids();
|
|
|
|
ShardedWriteBuffer::new(
|
|
|
|
shards
|
|
|
|
.into_iter()
|
2022-03-03 16:24:51 +00:00
|
|
|
.map(|id| Sequencer::new(id as _, Arc::clone(&write_buffer), &Default::default()))
|
2022-01-28 17:44:10 +00:00
|
|
|
.map(Arc::new)
|
2022-02-03 14:48:54 +00:00
|
|
|
.collect::<JumpHash<_>>(),
|
2022-01-28 17:44:10 +00:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn runtime() -> Runtime {
|
|
|
|
tokio::runtime::Builder::new_multi_thread()
|
|
|
|
.enable_io()
|
|
|
|
.enable_time()
|
|
|
|
.build()
|
|
|
|
.unwrap()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn e2e_benchmarks(c: &mut Criterion) {
|
|
|
|
let mut group = c.benchmark_group("e2e");
|
|
|
|
|
2022-02-16 13:38:33 +00:00
|
|
|
let delegate = {
|
2022-03-01 11:33:54 +00:00
|
|
|
let metrics = Arc::new(metric::Registry::new());
|
2022-03-02 12:42:31 +00:00
|
|
|
let catalog: Arc<dyn Catalog> = Arc::new(MemCatalog::new(Arc::clone(&metrics)));
|
2022-02-16 13:38:33 +00:00
|
|
|
let ns_cache = Arc::new(ShardedCache::new(
|
|
|
|
iter::repeat_with(|| Arc::new(MemoryNamespaceCache::default())).take(10),
|
|
|
|
));
|
2022-01-28 17:44:10 +00:00
|
|
|
|
2022-02-16 13:38:33 +00:00
|
|
|
let write_buffer = init_write_buffer(1);
|
|
|
|
let schema_validator = SchemaValidator::new(Arc::clone(&catalog), Arc::clone(&ns_cache));
|
|
|
|
let partitioner = Partitioner::new(PartitionTemplate {
|
|
|
|
parts: vec![TemplatePart::TimeFormat("%Y-%m-%d".to_owned())],
|
|
|
|
});
|
|
|
|
|
|
|
|
let handler_stack =
|
2022-02-23 18:59:14 +00:00
|
|
|
schema_validator.and_then(partitioner.and_then(FanOutAdaptor::new(write_buffer)));
|
2022-02-16 13:38:33 +00:00
|
|
|
|
2022-02-23 15:42:59 +00:00
|
|
|
HttpDelegate::new(1024, Arc::new(handler_stack), &metrics)
|
2022-02-16 13:38:33 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
let body_str = "platanos,tag1=A,tag2=B val=42i 123456";
|
2022-01-28 17:44:10 +00:00
|
|
|
|
|
|
|
group.throughput(Throughput::Bytes(body_str.len() as u64));
|
|
|
|
group.bench_function("e2e", |b| {
|
|
|
|
b.to_async(runtime()).iter(|| {
|
|
|
|
let request = Request::builder()
|
2022-02-16 13:38:33 +00:00
|
|
|
.uri("https://bananas.example/api/v2/write?org=bananas&bucket=test")
|
2022-01-28 17:44:10 +00:00
|
|
|
.method("POST")
|
|
|
|
.body(Body::from(body_str.as_bytes()))
|
|
|
|
.unwrap();
|
2022-02-16 13:38:33 +00:00
|
|
|
delegate.route(request)
|
2022-01-28 17:44:10 +00:00
|
|
|
})
|
|
|
|
});
|
2022-02-16 13:38:33 +00:00
|
|
|
|
|
|
|
group.finish();
|
2022-01-28 17:44:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
criterion_group!(benches, e2e_benchmarks);
|
|
|
|
criterion_main!(benches);
|