+37
-10
ufos/src/main.rs
+37
-10
ufos/src/main.rs
···
4
use metrics_exporter_prometheus::PrometheusBuilder;
5
use std::path::PathBuf;
6
use std::time::{Duration, SystemTime};
7
use ufos::consumer;
8
use ufos::file_consumer;
9
use ufos::server;
···
72
Ok(())
73
}
74
75
-
async fn go<B: StoreBackground>(
76
args: Args,
77
read_store: impl StoreReader + 'static + Clone,
78
mut write_store: impl StoreWriter<B> + 'static,
79
cursor: Option<Cursor>,
80
sketch_secret: SketchSecretPrefix,
81
) -> anyhow::Result<()> {
82
println!("starting server with storage...");
83
let serving = server::serve(read_store.clone());
84
85
if args.pause_writer {
86
log::info!("not starting jetstream or the write loop.");
87
-
serving.await.map_err(|e| anyhow::anyhow!(e))?;
88
return Ok(());
89
}
90
···
102
let rolling = write_store
103
.background_tasks(args.reroll)?
104
.run(args.backfill);
105
-
let consuming = write_store.receive_batches(batches);
106
107
-
let stating = do_update_stuff(read_store);
108
109
install_metrics_server()?;
110
111
-
tokio::select! {
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:?}"),
116
-
};
117
118
println!("bye!");
119
···
4
use metrics_exporter_prometheus::PrometheusBuilder;
5
use std::path::PathBuf;
6
use std::time::{Duration, SystemTime};
7
+
use tokio::task::JoinSet;
8
use ufos::consumer;
9
use ufos::file_consumer;
10
use ufos::server;
···
73
Ok(())
74
}
75
76
+
async fn go<B: StoreBackground + 'static>(
77
args: Args,
78
read_store: impl StoreReader + 'static + Clone,
79
mut write_store: impl StoreWriter<B> + 'static,
80
cursor: Option<Cursor>,
81
sketch_secret: SketchSecretPrefix,
82
) -> anyhow::Result<()> {
83
+
let mut tasks: JoinSet<anyhow::Result<()>> = JoinSet::new();
84
+
85
println!("starting server with storage...");
86
let serving = server::serve(read_store.clone());
87
+
tasks.spawn(async move {
88
+
serving.await.map_err(|e| {
89
+
log::warn!("server ended: {e}");
90
+
anyhow::anyhow!(e)
91
+
})
92
+
});
93
94
if args.pause_writer {
95
log::info!("not starting jetstream or the write loop.");
96
+
for t in tasks.join_all().await {
97
+
if let Err(e) = t {
98
+
return Err(anyhow::anyhow!(e));
99
+
}
100
+
}
101
return Ok(());
102
}
103
···
115
let rolling = write_store
116
.background_tasks(args.reroll)?
117
.run(args.backfill);
118
+
tasks.spawn(async move {
119
+
rolling
120
+
.await
121
+
.inspect_err(|e| log::warn!("rollup ended: {e}"))?;
122
+
Ok(())
123
+
});
124
+
125
+
tasks.spawn(async move {
126
+
write_store
127
+
.receive_batches(batches)
128
+
.await
129
+
.inspect_err(|e| log::warn!("consumer ended: {e}"))?;
130
+
Ok(())
131
+
});
132
133
+
tasks.spawn(async move {
134
+
do_update_stuff(read_store).await;
135
+
log::warn!("status task ended");
136
+
Ok(())
137
+
});
138
139
install_metrics_server()?;
140
141
+
for (i, t) in tasks.join_all().await.iter().enumerate() {
142
+
log::warn!("task {i} done: {t:?}");
143
+
}
144
145
println!("bye!");
146