Skip to main content

local_bench/
local_bench.rs

1//! Run only against a disposable benchmark console; existing keys are refused.
2use polybase_client::{Client, Query};
3use serde_json::json;
4use std::time::Instant;
5fn main() -> Result<(), Box<dyn std::error::Error>> {
6    let args: Vec<_> = std::env::args().skip(1).collect();
7    assert_eq!(
8        args.len(),
9        3,
10        "ADDRESS PREFIX COUNT on a disposable console"
11    );
12    let client = Client::new(args[0].parse()?)?;
13    let count = args[2].parse::<usize>()?;
14    assert!((1..=128).contains(&count));
15    let query = Query::all(args[1].as_bytes());
16    let session = client.subscribe(&query)?;
17    assert!(session.rows.is_empty());
18    let started = Instant::now();
19    for i in 0..count {
20        let key = format!("{}{i:04}", args[1]);
21        let read = client.read_revision(key.as_bytes())?;
22        assert!(read.value.is_none());
23        let value = json!({"client":"rust","n":i}).to_string();
24        let receipt = client.write_revision(&read.revision, Some(value.as_bytes()))?;
25        assert!(receipt.durable);
26    }
27    let write_us = started.elapsed().as_micros();
28    let started = Instant::now();
29    let page = client.page(&query, None, 128)?;
30    assert_eq!(page.rows.len(), count);
31    let page_us = started.elapsed().as_micros();
32    let started = Instant::now();
33    let delta = client.poll(&session, &session.token)?;
34    assert_eq!(delta.commits.len(), count);
35    let poll_us = started.elapsed().as_micros();
36    client.unsubscribe(&session, &delta.token)?;
37    println!(
38        "{}",
39        json!({"client":"rust","records":count,"revision_read_write_us":write_us,"page_us":page_us,"poll_us":poll_us,"correctness_verified":true})
40    );
41    Ok(())
42}