@@ -39,7 +39,7 @@ use relay_redis::redis::Script;
39
39
use relay_redis:: AsyncRedisClient ;
40
40
#[ cfg( feature = "processing" ) ]
41
41
use relay_redis:: { PooledClient , RedisError , RedisPool , RedisPools , RedisScripts } ;
42
- use relay_system:: { channel, Addr , Service , ServiceRunner } ;
42
+ use relay_system:: { channel, Addr , Service , ServiceSpawn , ServiceSpawnExt as _ } ;
43
43
44
44
/// Indicates the type of failure of the server.
45
45
#[ derive( Debug , thiserror:: Error ) ]
@@ -150,12 +150,12 @@ pub struct ServiceState {
150
150
impl ServiceState {
151
151
/// Starts all services and returns addresses to all of them.
152
152
pub async fn start (
153
- rt_metrics : relay_system:: RuntimeMetrics ,
153
+ handle : & relay_system:: Handle ,
154
+ services : & dyn ServiceSpawn ,
154
155
config : Arc < Config > ,
155
- ) -> Result < ( Self , ServiceRunner ) > {
156
- let mut runner = ServiceRunner :: new ( ) ;
157
- let upstream_relay = runner. start ( UpstreamRelayService :: new ( config. clone ( ) ) ) ;
158
- let test_store = runner. start ( TestStoreService :: new ( config. clone ( ) ) ) ;
156
+ ) -> Result < Self > {
157
+ let upstream_relay = services. start ( UpstreamRelayService :: new ( config. clone ( ) ) ) ;
158
+ let test_store = services. start ( TestStoreService :: new ( config. clone ( ) ) ) ;
159
159
160
160
#[ cfg( feature = "processing" ) ]
161
161
let redis_pools = match config. redis ( ) . filter ( |_| config. processing_enabled ( ) ) {
@@ -181,43 +181,44 @@ impl ServiceState {
181
181
// Create an address for the `EnvelopeProcessor`, which can be injected into the
182
182
// other services.
183
183
let ( processor, processor_rx) = channel ( EnvelopeProcessorService :: name ( ) ) ;
184
- let outcome_producer = runner . start ( OutcomeProducerService :: create (
184
+ let outcome_producer = services . start ( OutcomeProducerService :: create (
185
185
config. clone ( ) ,
186
186
upstream_relay. clone ( ) ,
187
187
processor. clone ( ) ,
188
188
) ?) ;
189
189
let outcome_aggregator =
190
- runner . start ( OutcomeAggregator :: new ( & config, outcome_producer. clone ( ) ) ) ;
190
+ services . start ( OutcomeAggregator :: new ( & config, outcome_producer. clone ( ) ) ) ;
191
191
192
- let keda = runner . start ( AutoscalingMetricService :: new ( memory_stat. clone ( ) ) ) ;
192
+ let keda = services . start ( AutoscalingMetricService :: new ( memory_stat. clone ( ) ) ) ;
193
193
194
194
let ( global_config, global_config_rx) =
195
195
GlobalConfigService :: new ( config. clone ( ) , upstream_relay. clone ( ) ) ;
196
196
let global_config_handle = global_config. handle ( ) ;
197
197
// The global config service must start before dependant services are
198
198
// started. Messages like subscription requests to the global config
199
199
// service fail if the service is not running.
200
- let global_config = runner . start ( global_config) ;
200
+ let global_config = services . start ( global_config) ;
201
201
202
202
let project_source = ProjectSource :: start_in (
203
- & mut runner ,
203
+ services ,
204
204
Arc :: clone ( & config) ,
205
205
upstream_relay. clone ( ) ,
206
206
#[ cfg( feature = "processing" ) ]
207
207
redis_pools. clone ( ) ,
208
208
)
209
209
. await ;
210
210
let project_cache_handle =
211
- ProjectCacheService :: new ( Arc :: clone ( & config) , project_source) . start_in ( & mut runner ) ;
211
+ ProjectCacheService :: new ( Arc :: clone ( & config) , project_source) . start_in ( services ) ;
212
212
213
213
let aggregator = RouterService :: new (
214
+ handle. clone ( ) ,
214
215
config. default_aggregator_config ( ) . clone ( ) ,
215
216
config. secondary_aggregator_configs ( ) . clone ( ) ,
216
217
Some ( processor. clone ( ) . recipient ( ) ) ,
217
218
project_cache_handle. clone ( ) ,
218
219
) ;
219
220
let aggregator_handle = aggregator. handle ( ) ;
220
- let aggregator = runner . start ( aggregator) ;
221
+ let aggregator = services . start ( aggregator) ;
221
222
222
223
let metric_stats = MetricStats :: new (
223
224
config. clone ( ) ,
@@ -238,14 +239,14 @@ impl ServiceState {
238
239
outcome_aggregator. clone ( ) ,
239
240
metric_outcomes. clone ( ) ,
240
241
)
241
- . map ( |s| runner . start ( s) )
242
+ . map ( |s| services . start ( s) )
242
243
} )
243
244
. transpose ( ) ?;
244
245
245
246
let cogs = CogsService :: new ( & config) ;
246
- let cogs = Cogs :: new ( CogsServiceRecorder :: new ( & config, runner . start ( cogs) ) ) ;
247
+ let cogs = Cogs :: new ( CogsServiceRecorder :: new ( & config, services . start ( cogs) ) ) ;
247
248
248
- runner . start_with (
249
+ services . start_with (
249
250
EnvelopeProcessorService :: new (
250
251
create_processor_pool ( & config) ?,
251
252
config. clone ( ) ,
@@ -276,26 +277,26 @@ impl ServiceState {
276
277
processor. clone ( ) ,
277
278
outcome_aggregator. clone ( ) ,
278
279
test_store. clone ( ) ,
279
- & mut runner ,
280
+ services ,
280
281
) ;
281
282
282
- let health_check = runner . start ( HealthCheckService :: new (
283
+ let health_check = services . start ( HealthCheckService :: new (
283
284
config. clone ( ) ,
284
285
MemoryChecker :: new ( memory_stat. clone ( ) , config. clone ( ) ) ,
285
286
aggregator_handle,
286
287
upstream_relay. clone ( ) ,
287
288
envelope_buffer. clone ( ) ,
288
289
) ) ;
289
290
290
- runner . start ( RelayStats :: new (
291
+ services . start ( RelayStats :: new (
291
292
config. clone ( ) ,
292
- rt_metrics ,
293
+ handle . clone ( ) ,
293
294
upstream_relay. clone ( ) ,
294
295
#[ cfg( feature = "processing" ) ]
295
296
redis_pools. clone ( ) ,
296
297
) ) ;
297
298
298
- let relay_cache = runner . start ( RelayCacheService :: new (
299
+ let relay_cache = services . start ( RelayCacheService :: new (
299
300
config. clone ( ) ,
300
301
upstream_relay. clone ( ) ,
301
302
) ) ;
@@ -320,12 +321,9 @@ impl ServiceState {
320
321
registry,
321
322
} ;
322
323
323
- Ok ( (
324
- ServiceState {
325
- inner : Arc :: new ( state) ,
326
- } ,
327
- runner,
328
- ) )
324
+ Ok ( ServiceState {
325
+ inner : Arc :: new ( state) ,
326
+ } )
329
327
}
330
328
331
329
/// Returns a reference to the Relay configuration.
0 commit comments