Skip to content

Commit 2574c5c

Browse files
committed
use new ConfigReconcilerSpawnToken interface
1 parent 252d4ec commit 2574c5c

File tree

5 files changed

+44
-16
lines changed

5 files changed

+44
-16
lines changed

sled-agent/src/bootstrap/pre_server.rs

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ use illumos_utils::zone::Api;
3535
use illumos_utils::zone::Zones;
3636
use omicron_common::FileKv;
3737
use omicron_common::address::Ipv6Subnet;
38+
use sled_agent_config_reconciler::ConfigReconcilerSpawnToken;
3839
use sled_hardware::DendriteAsic;
3940
use sled_hardware::SledMode;
4041
use sled_hardware::underlay;
@@ -53,6 +54,7 @@ pub(super) struct BootstrapAgentStartup {
5354
pub(super) service_manager: ServiceManager,
5455
pub(super) long_running_task_handles: LongRunningTaskHandles,
5556
pub(super) sled_agent_started_tx: oneshot::Sender<SledAgent>,
57+
pub(super) config_reconciler_spawn_token: ConfigReconcilerSpawnToken,
5658
}
5759

5860
impl BootstrapAgentStartup {
@@ -118,6 +120,7 @@ impl BootstrapAgentStartup {
118120
// the process and are used by both the bootstrap agent and sled agent
119121
let (
120122
long_running_task_handles,
123+
config_reconciler_spawn_token,
121124
sled_agent_started_tx,
122125
service_manager_ready_tx,
123126
) = spawn_all_longrunning_tasks(
@@ -159,6 +162,7 @@ impl BootstrapAgentStartup {
159162
service_manager,
160163
long_running_task_handles,
161164
sled_agent_started_tx,
165+
config_reconciler_spawn_token,
162166
})
163167
}
164168
}

sled-agent/src/bootstrap/server.rs

+21-5
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ use omicron_ddm_admin_client::DdmError;
3939
use omicron_ddm_admin_client::types::EnableStatsRequest;
4040
use omicron_uuid_kinds::GenericUuid;
4141
use omicron_uuid_kinds::RackInitUuid;
42+
use sled_agent_config_reconciler::ConfigReconcilerSpawnToken;
4243
use sled_agent_config_reconciler::InternalDisksReceiver;
4344
use sled_agent_types::rack_init::RackInitializeRequest;
4445
use sled_agent_types::sled::StartSledAgentRequest;
@@ -180,6 +181,7 @@ impl Server {
180181
service_manager,
181182
long_running_task_handles,
182183
sled_agent_started_tx,
184+
config_reconciler_spawn_token,
183185
} = BootstrapAgentStartup::run(config).await?;
184186

185187
// Do we have a StartSledAgentRequest stored in the ledger?
@@ -246,6 +248,7 @@ impl Server {
246248
&config,
247249
start_sled_agent_request,
248250
long_running_task_handles.clone(),
251+
config_reconciler_spawn_token,
249252
service_manager.clone(),
250253
&base_log,
251254
&startup_log,
@@ -261,7 +264,10 @@ impl Server {
261264

262265
SledAgentState::ServerStarted(sled_agent_server)
263266
} else {
264-
SledAgentState::Bootstrapping(Some(sled_agent_started_tx))
267+
SledAgentState::Bootstrapping(Some(BootstrappingDependencies {
268+
sled_agent_started_tx,
269+
config_reconciler_spawn_token,
270+
}))
265271
};
266272

267273
// Spawn our inner task that handles any future hardware updates and any
@@ -303,11 +309,16 @@ impl Server {
303309
// bootstrap server).
304310
enum SledAgentState {
305311
// We're still in the bootstrapping phase, waiting for a sled-agent request.
306-
Bootstrapping(Option<oneshot::Sender<SledAgent>>),
312+
Bootstrapping(Option<BootstrappingDependencies>),
307313
// ... or the sled agent server is running.
308314
ServerStarted(SledAgentServer),
309315
}
310316

317+
struct BootstrappingDependencies {
318+
sled_agent_started_tx: oneshot::Sender<SledAgent>,
319+
config_reconciler_spawn_token: ConfigReconcilerSpawnToken,
320+
}
321+
311322
#[derive(thiserror::Error, Debug)]
312323
pub enum SledAgentServerStartError {
313324
#[error("Failed to start sled-agent server: {0}")]
@@ -347,6 +358,7 @@ async fn start_sled_agent(
347358
config: &SledConfig,
348359
request: StartSledAgentRequest,
349360
long_running_task_handles: LongRunningTaskHandles,
361+
config_reconciler_spawn_token: ConfigReconcilerSpawnToken,
350362
service_manager: ServiceManager,
351363
base_log: &Logger,
352364
log: &Logger,
@@ -398,6 +410,7 @@ async fn start_sled_agent(
398410
base_log.clone(),
399411
request.clone(),
400412
long_running_task_handles.clone(),
413+
config_reconciler_spawn_token,
401414
service_manager,
402415
)
403416
.await
@@ -531,7 +544,7 @@ impl Inner {
531544
log: &Logger,
532545
) {
533546
match &mut self.state {
534-
SledAgentState::Bootstrapping(sled_agent_started_tx) => {
547+
SledAgentState::Bootstrapping(deps) => {
535548
let request_id = request.body.id.into_untyped_uuid();
536549

537550
// Extract from options to satisfy the borrow checker.
@@ -540,13 +553,16 @@ impl Inner {
540553
// we explicitly unwrap here, and panic on error below.
541554
//
542555
// See https://github.com/oxidecomputer/omicron/issues/4494
543-
let sled_agent_started_tx =
544-
sled_agent_started_tx.take().unwrap();
556+
let BootstrappingDependencies {
557+
sled_agent_started_tx,
558+
config_reconciler_spawn_token,
559+
} = deps.take().unwrap();
545560

546561
let response = match start_sled_agent(
547562
&self.config,
548563
request,
549564
self.long_running_task_handles.clone(),
565+
config_reconciler_spawn_token,
550566
self.service_manager.clone(),
551567
&self.base_log,
552568
&log,

sled-agent/src/long_running_tasks.rs

+11-7
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ use crate::zone_bundle::ZoneBundler;
2424
use bootstore::schemes::v0 as bootstore;
2525
use key_manager::{KeyManager, StorageKeyRequester};
2626
use sled_agent_config_reconciler::{
27-
ConfigReconcilerHandle, RawDisksSender, TimeSyncConfig,
27+
ConfigReconcilerHandle, ConfigReconcilerSpawnToken, RawDisksSender,
28+
TimeSyncConfig,
2829
};
2930
use sled_agent_types::zone_bundle::CleanupContext;
3031
use sled_hardware::{HardwareManager, SledMode, UnparsedDisk};
@@ -61,6 +62,7 @@ pub async fn spawn_all_longrunning_tasks(
6162
config: &Config,
6263
) -> (
6364
LongRunningTaskHandles,
65+
ConfigReconcilerSpawnToken,
6466
oneshot::Sender<SledAgent>,
6567
oneshot::Sender<ServiceManager>,
6668
) {
@@ -71,12 +73,13 @@ pub async fn spawn_all_longrunning_tasks(
7173
} else {
7274
TimeSyncConfig::Normal
7375
};
74-
let mut config_reconciler = ConfigReconcilerHandle::new(
75-
MountConfig::default(),
76-
storage_key_requester,
77-
time_sync_config,
78-
log,
79-
);
76+
let (mut config_reconciler, config_reconciler_spawn_token) =
77+
ConfigReconcilerHandle::new(
78+
MountConfig::default(),
79+
storage_key_requester,
80+
time_sync_config,
81+
log,
82+
);
8083

8184
let nongimlet_observed_disks =
8285
config.nongimlet_observed_disks.clone().unwrap_or(vec![]);
@@ -114,6 +117,7 @@ pub async fn spawn_all_longrunning_tasks(
114117
bootstore,
115118
zone_bundler,
116119
},
120+
config_reconciler_spawn_token,
117121
sled_agent_started_tx,
118122
service_manager_ready_tx,
119123
)

sled-agent/src/server.rs

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use crate::nexus::make_nexus_client;
1212
use crate::services::ServiceManager;
1313
use internal_dns_resolver::Resolver;
1414
use omicron_uuid_kinds::SledUuid;
15+
use sled_agent_config_reconciler::ConfigReconcilerSpawnToken;
1516
use sled_agent_types::sled::StartSledAgentRequest;
1617
use slog::Logger;
1718
use std::net::SocketAddr;
@@ -39,6 +40,7 @@ impl Server {
3940
log: Logger,
4041
request: StartSledAgentRequest,
4142
long_running_tasks_handles: LongRunningTaskHandles,
43+
config_reconciler_spawn_token: ConfigReconcilerSpawnToken,
4244
services: ServiceManager,
4345
) -> Result<Server, String> {
4446
info!(log, "setting up sled agent server");
@@ -61,6 +63,7 @@ impl Server {
6163
request,
6264
services,
6365
long_running_tasks_handles,
66+
config_reconciler_spawn_token,
6467
)
6568
.await
6669
.map_err(|e| e.to_string())?;

sled-agent/src/sled_agent.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ use omicron_common::disk::M2Slot;
5454
use omicron_ddm_admin_client::Client as DdmAdminClient;
5555
use omicron_uuid_kinds::{GenericUuid, PropolisUuid, SledUuid};
5656
use sled_agent_config_reconciler::{
57-
ConfigReconcilerHandle, InternalDisksReceiver, LedgerNewConfigError,
58-
LedgerTaskError, ReconcilerInventory, SledAgentArtifactStore,
59-
SledAgentFacilities, TimeSyncStatus,
57+
ConfigReconcilerHandle, ConfigReconcilerSpawnToken, InternalDisksReceiver,
58+
LedgerNewConfigError, LedgerTaskError, ReconcilerInventory,
59+
SledAgentArtifactStore, SledAgentFacilities, TimeSyncStatus,
6060
};
6161
use sled_agent_types::disk::DiskStateRequested;
6262
use sled_agent_types::early_networking::EarlyNetworkConfig;
@@ -399,6 +399,7 @@ impl SledAgent {
399399
request: StartSledAgentRequest,
400400
services: ServiceManager,
401401
long_running_task_handles: LongRunningTaskHandles,
402+
config_reconciler_spawn_token: ConfigReconcilerSpawnToken,
402403
) -> Result<SledAgent, Error> {
403404
// Pass the "parent_log" to all subcomponents that want to set their own
404405
// "component" value.
@@ -606,7 +607,7 @@ impl SledAgent {
606607
zone_bundler: long_running_task_handles.zone_bundler.clone(),
607608
},
608609
SledAgentArtifactStoreWrapper(Arc::clone(&artifact_store)),
609-
&parent_log,
610+
config_reconciler_spawn_token,
610611
);
611612

612613
services

0 commit comments

Comments
 (0)