@@ -132,18 +132,23 @@ impl ServeCommand {
132
132
let mut dependencies_builder =
133
133
DependenciesBuilder :: new ( root_logger. clone ( ) , Arc :: new ( config. clone ( ) ) ) ;
134
134
135
- // start servers
136
135
println ! ( "Starting server..." ) ;
137
136
println ! ( "Press Ctrl+C to stop" ) ;
138
137
139
- // start the monitoring thread
138
+ // Create the stop signal channel
139
+ let ( stop_tx, _stop_rx) = dependencies_builder
140
+ . get_stop_signal_channel ( )
141
+ . await
142
+ . with_context ( || "Dependencies Builder can not create stop signal channel" ) ?;
143
+
144
+ // Start the monitoring thread
140
145
let mut event_store = dependencies_builder
141
146
. create_event_store ( )
142
147
. await
143
148
. with_context ( || "Dependencies Builder can not create event store" ) ?;
144
149
let event_store_thread = tokio:: spawn ( async move { event_store. run ( ) . await . unwrap ( ) } ) ;
145
150
146
- // start the database vacuum operation, if needed
151
+ // Start the database vacuum operation, if needed
147
152
self . perform_database_vacuum_if_needed (
148
153
& config. data_stores_directory ,
149
154
& mut dependencies_builder,
@@ -152,15 +157,15 @@ impl ServeCommand {
152
157
)
153
158
. await ?;
154
159
155
- // start the aggregator runtime
160
+ // Start the aggregator runtime
156
161
let mut runtime = dependencies_builder
157
162
. create_aggregator_runner ( )
158
163
. await
159
164
. with_context ( || "Dependencies Builder can not create aggregator runner" ) ?;
160
165
let mut join_set = JoinSet :: new ( ) ;
161
166
join_set. spawn ( async move { runtime. run ( ) . await . map_err ( |e| e. to_string ( ) ) } ) ;
162
167
163
- // start the cardano transactions preloader
168
+ // Start the cardano transactions preloader
164
169
let cardano_transactions_preloader = dependencies_builder
165
170
. create_cardano_transactions_preloader ( )
166
171
. await
@@ -170,7 +175,7 @@ impl ServeCommand {
170
175
let preload_task =
171
176
tokio:: spawn ( async move { cardano_transactions_preloader. preload ( ) . await } ) ;
172
177
173
- // start the HTTP server
178
+ // sStart the HTTP server
174
179
let ( shutdown_tx, shutdown_rx) = oneshot:: channel ( ) ;
175
180
let routes = dependencies_builder
176
181
. create_http_routes ( )
@@ -279,14 +284,16 @@ impl ServeCommand {
279
284
. send ( ( ) )
280
285
. map_err ( |e| anyhow ! ( "Metrics server shutdown signal could not be sent: {e:?}" ) ) ?;
281
286
282
- // stop servers
287
+ // Stop servers
283
288
join_set. shutdown ( ) . await ;
284
289
let _ = shutdown_tx. send ( ( ) ) ;
285
290
291
+ // Send the stop signal to all services
292
+ let _ = stop_tx. send ( ( ) ) ;
293
+
286
294
if !preload_task. is_finished ( ) {
287
295
preload_task. abort ( ) ;
288
296
}
289
- signature_processor. stop ( ) . await ?;
290
297
291
298
info ! ( root_logger, "Event store is finishing..." ) ;
292
299
event_store_thread. await . unwrap ( ) ;
0 commit comments