use oxia::OxiaClient;
use std::time::Duration;
use tracing::info;
use tracing::level_filters::LevelFilter;
#[tokio::main]
async fn main() {
tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::builder()
.with_default_directive(LevelFilter::INFO.into())
.from_env_lossy(),
)
.with_target(false)
.init();
let client = OxiaClient::connect("localhost:6648").await.unwrap();
let partition_key = "my-partition";
let base_key = "seq/events";
let mut updates = client
.sequence_updates(base_key, partition_key)
.buffer_size(50)
.await
.unwrap();
info!("Subscribed to sequence updates for key '{}'", base_key);
let listener = tokio::spawn(async move {
let mut count = 0;
while let Some(highest_key) = updates.recv().await {
info!("Sequence update: highest_sequence_key={:?}", highest_key);
count += 1;
if count >= 5 {
break;
}
}
info!("Received {} sequence updates", count);
});
tokio::time::sleep(Duration::from_millis(500)).await;
for i in 1..=5 {
let result = client
.put(base_key, format!("event-{i}"))
.partition_key(partition_key)
.sequence_key_deltas([1])
.await
.unwrap();
info!("Put sequence event {}: generated key={:?}", i, result.key);
}
let _ = tokio::time::timeout(Duration::from_secs(5), listener).await;
client
.delete_range("seq/", "seq/~")
.partition_key(partition_key)
.await
.unwrap();
info!("Cleaned up sequence keys.");
client.close().await.unwrap();
}