···
use metrics_exporter_prometheus::PrometheusBuilder;
use std::time::{Duration, SystemTime};
7
+
use tokio::task::JoinSet;
···
75
-
async fn go<B: StoreBackground>(
76
+
async fn go<B: StoreBackground + 'static>(
read_store: impl StoreReader + 'static + Clone,
mut write_store: impl StoreWriter<B> + 'static,
sketch_secret: SketchSecretPrefix,
) -> anyhow::Result<()> {
83
+
let mut tasks: JoinSet<anyhow::Result<()>> = JoinSet::new();
println!("starting server with storage...");
let serving = server::serve(read_store.clone());
87
+
tasks.spawn(async move {
88
+
serving.await.map_err(|e| {
89
+
log::warn!("server ended: {e}");
log::info!("not starting jetstream or the write loop.");
87
-
serving.await.map_err(|e| anyhow::anyhow!(e))?;
96
+
for t in tasks.join_all().await {
98
+
return Err(anyhow::anyhow!(e));
···
let rolling = write_store
.background_tasks(args.reroll)?
105
-
let consuming = write_store.receive_batches(batches);
118
+
tasks.spawn(async move {
121
+
.inspect_err(|e| log::warn!("rollup ended: {e}"))?;
125
+
tasks.spawn(async move {
127
+
.receive_batches(batches)
129
+
.inspect_err(|e| log::warn!("consumer ended: {e}"))?;
107
-
let stating = do_update_stuff(read_store);
133
+
tasks.spawn(async move {
134
+
do_update_stuff(read_store).await;
135
+
log::warn!("status task ended");
install_metrics_server()?;
112
-
z = serving => log::warn!("serve task ended: {z:?}"),
113
-
z = rolling => log::warn!("rollup task ended: {z:?}"),
114
-
z = consuming => log::warn!("consuming task ended: {z:?}"),
115
-
z = stating => log::warn!("status task ended: {z:?}"),
141
+
for (i, t) in tasks.join_all().await.iter().enumerate() {
142
+
log::warn!("task {i} done: {t:?}");