#![allow(clippy::unwrap_used)]
mod common;
use std::net::SocketAddr;
use std::sync::mpsc;
use common::{build_handler, payload, run_cell, serve, start_upstream};
use osproxy_server::tenancy::PlacementMode;
const CONNS: &[usize] = &[16, 64, 256];
const REQS_PER_CONN: usize = 60;
const PAYLOAD: usize = 64 * 1024;
const PROXY_WORKERS: usize = 6;
async fn spawn_proxy_colocated() -> SocketAddr {
let upstream = start_upstream().await;
serve(build_handler(&upstream, Some(PlacementMode::SharedIndex))).await
}
fn spawn_proxy_isolated() -> SocketAddr {
let (tx, rx) = mpsc::channel();
std::thread::spawn(move || {
let rt = tokio::runtime::Builder::new_multi_thread()
.worker_threads(PROXY_WORKERS)
.enable_all()
.build()
.unwrap();
rt.block_on(async move {
let upstream = start_upstream().await;
let addr = serve(build_handler(&upstream, Some(PlacementMode::SharedIndex))).await;
tx.send(addr).unwrap();
std::future::pending::<()>().await;
});
});
rx.recv().unwrap()
}
#[tokio::test(flavor = "multi_thread", worker_threads = 6)]
#[ignore = "isolation ablation; run with --ignored --nocapture"]
async fn co_located_vs_isolated_64kb_connection_sweep() {
let body = payload(PAYLOAD);
let colocated = spawn_proxy_colocated().await;
let isolated = spawn_proxy_isolated();
println!("64KB connection sweep — co-located vs isolated proxy runtime");
println!(
"(generator on the test runtime; isolated proxy+upstream on a dedicated {PROXY_WORKERS}-thread runtime)"
);
println!(
"{:>6} | {:>22} | {:>22}",
"conns", "co-located rps/p50/p99", "isolated rps/p50/p99"
);
for &conns in CONNS {
let (crps, cp50, cp99) = run_cell(
colocated,
"/orders/_doc",
body.clone(),
conns,
REQS_PER_CONN,
)
.await;
let (irps, ip50, ip99) =
run_cell(isolated, "/orders/_doc", body.clone(), conns, REQS_PER_CONN).await;
println!(
"{conns:>6} | {crps:>8.0} {cp50:>6.2} {cp99:>6.2} | {irps:>8.0} {ip50:>6.2} {ip99:>6.2}"
);
}
}