@@ -34,11 +34,8 @@ use illumos_utils::zone;
34
34
use illumos_utils:: zone:: Zones ;
35
35
use internal_dns_resolver:: Resolver ;
36
36
use omicron_common:: address:: { AZ_PREFIX , Ipv6Subnet } ;
37
- use omicron_common:: backoff:: retry_notify;
38
- use omicron_common:: backoff:: retry_policy_internal_service_aggressive;
39
37
use omicron_common:: ledger;
40
38
use omicron_common:: ledger:: Ledger ;
41
- use omicron_ddm_admin_client:: Client as DdmAdminClient ;
42
39
use omicron_ddm_admin_client:: DdmError ;
43
40
use omicron_ddm_admin_client:: types:: EnableStatsRequest ;
44
41
use omicron_uuid_kinds:: GenericUuid ;
@@ -49,7 +46,6 @@ use sled_hardware::underlay;
49
46
use sled_storage:: dataset:: CONFIG_DATASET ;
50
47
use sled_storage:: manager:: StorageHandle ;
51
48
use slog:: Logger ;
52
- use slog_error_chain:: InlineErrorChain ;
53
49
use std:: io;
54
50
use std:: net:: SocketAddr ;
55
51
use std:: net:: SocketAddrV6 ;
@@ -180,7 +176,6 @@ impl Server {
180
176
let BootstrapAgentStartup {
181
177
config,
182
178
global_zone_bootstrap_ip,
183
- ddm_admin_localhost_client,
184
179
base_log,
185
180
startup_log,
186
181
service_manager,
@@ -251,7 +246,6 @@ impl Server {
251
246
start_sled_agent_request,
252
247
long_running_task_handles. clone ( ) ,
253
248
service_manager. clone ( ) ,
254
- & ddm_admin_localhost_client,
255
249
& base_log,
256
250
& startup_log,
257
251
)
@@ -282,7 +276,6 @@ impl Server {
282
276
state,
283
277
sled_init_rx,
284
278
sled_reset_rx,
285
- ddm_admin_localhost_client,
286
279
long_running_task_handles,
287
280
service_manager,
288
281
_sprockets_server_handle : sprockets_server_handle,
@@ -359,7 +352,6 @@ async fn start_sled_agent(
359
352
request : StartSledAgentRequest ,
360
353
long_running_task_handles : LongRunningTaskHandles ,
361
354
service_manager : ServiceManager ,
362
- ddmd_client : & DdmAdminClient ,
363
355
base_log : & Logger ,
364
356
log : & Logger ,
365
357
) -> Result < SledAgentServer , SledAgentServerStartError > {
@@ -398,88 +390,24 @@ async fn start_sled_agent(
398
390
// Inform the storage service that the key manager is available
399
391
long_running_task_handles. storage_manager . key_manager_ready ( ) . await ;
400
392
401
- // Spawn a background task to notify our local ddmd of our underlay address
402
- // so it can advertise it to other sleds.
403
- //
404
- // TODO-cleanup Spawning a task here is a little suspect; consider moving to
405
- // a reconciler loop when we do omicron#7377.
406
- //
407
- // TODO-security This ddmd_client is used to advertise both this
408
- // (underlay) address and our bootstrap address. Bootstrap addresses are
409
- // unauthenticated (connections made on them are auth'd via sprockets),
410
- // but underlay addresses should be exchanged via authenticated channels
411
- // between ddmd instances. It's TBD how that will work, but presumably
412
- // we'll need to do something different here for underlay vs bootstrap
413
- // addrs (either talk to a differently-configured ddmd, or include info
414
- // indicating which kind of address we're advertising).
415
- tokio:: spawn ( {
416
- let prefix = request. body . subnet . net ( ) ;
417
- let ddmd_client = ddmd_client. clone ( ) ;
418
- async move {
419
- retry_notify (
420
- retry_policy_internal_service_aggressive ( ) ,
421
- || async {
422
- info ! (
423
- ddmd_client. log( ) ,
424
- "Sending underlay prefix to ddmd for advertisement" ;
425
- "prefix" => ?prefix,
426
- ) ;
427
- ddmd_client. advertise_prefixes ( vec ! [ prefix] ) . await ?;
428
- Ok ( ( ) )
429
- } ,
430
- |err, duration| {
431
- info ! (
432
- ddmd_client. log( ) ,
433
- "Failed to notify ddmd of our address (will retry)" ;
434
- "retry_after" => ?duration,
435
- InlineErrorChain :: new( & err) ,
436
- ) ;
437
- } ,
438
- )
439
- . await
440
- . expect ( "retry policy retries until success" ) ;
441
- }
442
- } ) ;
393
+ // Inform our DDM reconciler of our underlay subnet and the information it
394
+ // needs for maghemite to enable Oximeter stats.
395
+ {
396
+ let ddm_reconciler = service_manager. ddm_reconciler ( ) ;
443
397
444
- // Also spawn a task to give ddmd the config it needs to start its oximeter
445
- // stats producer.
446
- tokio:: spawn ( {
447
398
let az_prefix =
448
399
Ipv6Subnet :: < AZ_PREFIX > :: new ( request. body . subnet . net ( ) . addr ( ) ) ;
449
400
let addr = request. body . subnet . net ( ) . iter ( ) . nth ( 1 ) . unwrap ( ) ;
450
401
let dns_servers = Resolver :: servers_from_subnet ( az_prefix) ;
451
- let request = EnableStatsRequest {
402
+
403
+ ddm_reconciler. set_underlay_subnet ( request. body . subnet ) ;
404
+ ddm_reconciler. enable_stats ( EnableStatsRequest {
452
405
addr : addr. into ( ) ,
453
406
dns_servers : dns_servers. iter ( ) . map ( |x| x. to_string ( ) ) . collect ( ) ,
454
407
rack_id : request. body . rack_id ,
455
408
sled_id : request. body . id . into_untyped_uuid ( ) ,
456
- } ;
457
- let ddmd_client = ddmd_client. clone ( ) ;
458
-
459
- async move {
460
- retry_notify (
461
- retry_policy_internal_service_aggressive ( ) ,
462
- || async {
463
- info ! (
464
- ddmd_client. log( ) , "Enabling ddm stats" ;
465
- "request" => ?request,
466
- ) ;
467
- ddmd_client. enable_stats ( & request) . await ?;
468
- Ok ( ( ) )
469
- } ,
470
- |err, duration| {
471
- info ! (
472
- ddmd_client. log( ) ,
473
- "Failed enable ddm stats (will retry)" ;
474
- "retry_after" => ?duration,
475
- InlineErrorChain :: new( & err) ,
476
- ) ;
477
- } ,
478
- )
479
- . await
480
- . unwrap ( ) ;
481
- }
482
- } ) ;
409
+ } ) ;
410
+ }
483
411
484
412
// Server does not exist, initialize it.
485
413
let server = SledAgentServer :: start (
@@ -574,7 +502,6 @@ struct Inner {
574
502
oneshot:: Sender < Result < SledAgentResponse , String > > ,
575
503
) > ,
576
504
sled_reset_rx : mpsc:: Receiver < oneshot:: Sender < Result < ( ) , BootstrapError > > > ,
577
- ddm_admin_localhost_client : DdmAdminClient ,
578
505
long_running_task_handles : LongRunningTaskHandles ,
579
506
service_manager : ServiceManager ,
580
507
_sprockets_server_handle : JoinHandle < ( ) > ,
@@ -637,7 +564,6 @@ impl Inner {
637
564
request,
638
565
self . long_running_task_handles . clone ( ) ,
639
566
self . service_manager . clone ( ) ,
640
- & self . ddm_admin_localhost_client ,
641
567
& self . base_log ,
642
568
& log,
643
569
)
0 commit comments