···
use metrics_exporter_prometheus::PrometheusBuilder;
use std::time::{Duration, SystemTime};
+
use tokio::task::JoinSet;
···
+
async fn go<B: StoreBackground + 'static>(
read_store: impl StoreReader + 'static + Clone,
mut write_store: impl StoreWriter<B> + 'static,
sketch_secret: SketchSecretPrefix,
) -> anyhow::Result<()> {
+
let mut tasks: JoinSet<anyhow::Result<()>> = JoinSet::new();
println!("starting server with storage...");
let serving = server::serve(read_store.clone());
+
tasks.spawn(async move {
+
serving.await.map_err(|e| {
+
log::warn!("server ended: {e}");
log::info!("not starting jetstream or the write loop.");
+
for t in tasks.join_all().await {
+
return Err(anyhow::anyhow!(e));
···
let rolling = write_store
.background_tasks(args.reroll)?
+
tasks.spawn(async move {
+
.inspect_err(|e| log::warn!("rollup ended: {e}"))?;
+
tasks.spawn(async move {
+
.receive_batches(batches)
+
.inspect_err(|e| log::warn!("consumer ended: {e}"))?;
+
tasks.spawn(async move {
+
do_update_stuff(read_store).await;
+
log::warn!("status task ended");
install_metrics_server()?;
+
for (i, t) in tasks.join_all().await.iter().enumerate() {
+
log::warn!("task {i} done: {t:?}");