oxidecomputer / oxidecomputer/omicron

sled-agent-sim fails to start with "No control plane disks" error

Open
#8,354 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
572
Forks
97
Avg merge
2d 12h
Merged PRs (30d)
96

Description

I worked around #8348 by providing 0 as the listen port, but then startup failed without reporting any error at all.

I added these changes to try to get more data:

dap@ivanova omicron-fix $ git diff
diff --git a/common/src/cmd.rs b/common/src/cmd.rs
index f7ede8d12..0c8576e10 100644
--- a/common/src/cmd.rs
+++ b/common/src/cmd.rs
@@ -26,7 +26,7 @@ pub fn fatal(cmd_error: CmdError) -> ! {
         .unwrap_or("command");
     let (exit_code, message) = match cmd_error {
         CmdError::Usage(m) => (2, m),
-        CmdError::Failure(e) => (1, format!("{e:?}")),
+        CmdError::Failure(e) => (1, format!("{e:#}")),
     };
     eprintln!("{}: {}", arg0, message);
     exit(exit_code);
diff --git a/sled-agent/src/sim/server.rs b/sled-agent/src/sim/server.rs
index 05c75e18c..863f4610b 100644
--- a/sled-agent/src/sim/server.rs
+++ b/sled-agent/src/sim/server.rs
@@ -54,6 +54,7 @@ use omicron_uuid_kinds::ZpoolUuid;
 use oxnet::Ipv6Net;
 use sled_agent_types::rack_init::RecoverySiloConfig;
 use slog::{Drain, Logger, info};
+use slog_error_chain::InlineErrorChain;
 use std::collections::BTreeMap;
 use std::collections::HashMap;
 use std::net::IpAddr;
@@ -175,7 +176,7 @@ impl Server {
             };
             let log_notification_failure = |error, delay| {
                 warn!(log, "failed to contact nexus, will retry in {:?}", delay;
-                    "error" => ?error);
+                    InlineErrorChain::new(&error));
             };
             retry_notify(
                 retry_policy_internal_service_aggressive(),
@@ -542,13 +543,26 @@ pub async fn run_standalone_server(
         }
     }
 
+    eprintln!("\n\n\nDAP: 8\n\n\n");
+
     let certs = match &rss_args.tls_certificate {
         Some(c) => vec![c.clone()],
         None => vec![],
     };
 
     let omicron_physical_disks_config =
-        server.sled_agent.omicron_physical_disks_list()?;
+        server.sled_agent.omicron_physical_disks_list().map_err(|e| {
+            anyhow!(
+                "omicron_physical_disks_list(): {} {} {:?} {:?}",
+                e.status_code,
+                e.error_code
+                    .as_ref()
+                    .map(|s| s.as_str())
+                    .unwrap_or("<no code>"),
+                e.external_message,
+                e.internal_message
+            )
+        })?;
     let mut sled_configs = BTreeMap::new();
     sled_configs.insert(
         config.id,
@@ -568,6 +582,8 @@ pub async fn run_standalone_server(
         },
     );
 
+    eprintln!("\n\n\nDAP: 10\n\n\n");
+
     let blueprint = build_initial_blueprint_from_sled_configs(
         &sled_configs,
         internal_dns_version,

and now I get:

$  cargo run --bin=sled-agent-sim -- d0900913-88c6-4702-8eaf-d2e88e714657 [::1]:0 [::1]:12221 --rss-nexus-external-addr 127.0.0.1:12220 --rss-external-dns-internal-addr [::1]:5353 --rss-internal-dns-dns-addr [::1]:3535 --rss-tls-cert demo-cert.pem --rss-tls-key demo-key.pem 
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.06s
     Running `target/debug/sled-agent-sim d0900913-88c6-4702-8eaf-d2e88e714657 '[::1]:0' '[::1]:12221' --rss-nexus-external-addr '127.0.0.1:12220' --rss-external-dns-internal-addr '[::1]:5353' --rss-internal-dns-dns-addr '[::1]:3535' --rss-tls-cert demo-cert.pem --rss-tls-key demo-key.pem`
Jun 17 17:41:38.038 INFO setting up sled agent server, file: sled-agent/src/sim/server.rs:95
Jun 17 17:41:38.086 INFO created simulated sled agent, sim_mode: Auto, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: sled-agent/src/sim/sled_agent.rs:124
Jun 17 17:41:38.086 INFO registered sled d0900913-88c6-4702-8eaf-d2e88e714657 storage, file: sled-agent/src/sim/upstairs.rs:48
Jun 17 17:41:38.087 INFO No ledger in /dangerzone/omicron_tmp/.tmppjeJd4/artifact-config.json, component: ArtifactStore, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: common/src/ledger.rs:186
Jun 17 17:41:38.087 INFO No ledger in /dangerzone/omicron_tmp/.tmp5s1zym/artifact-config.json, component: ArtifactStore, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: common/src/ledger.rs:186
Jun 17 17:41:38.123 INFO listening, local_addr: [::1]:37092, component: dropshot (Repo Depot), server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.128 INFO listening, local_addr: [::1]:54743, component: dropshot, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.142 INFO listening, local_addr: [::1]:51401, component: Simulated CrucibleAgent Dropshot Server, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.142 INFO Created Simulated Crucible Server, address: [::1]:51401, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: sled-agent/src/sim/storage.rs:1116
Jun 17 17:41:38.143 INFO listening, local_addr: [::1]:59677, component: Simulated CrucibleAgent Dropshot Server, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.143 INFO Created Simulated Crucible Server, address: [::1]:59677, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: sled-agent/src/sim/storage.rs:1116
Jun 17 17:41:38.143 INFO listening, local_addr: [::1]:38977, component: Simulated CrucibleAgent Dropshot Server, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.143 INFO Created Simulated Crucible Server, address: [::1]:38977, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: sled-agent/src/sim/storage.rs:1116
Jun 17 17:41:38.143 INFO listening, local_addr: [::1]:39819, component: Simulated CrucibleAgent Dropshot Server, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.144 INFO Created Simulated Crucible Server, address: [::1]:39819, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: sled-agent/src/sim/storage.rs:1116
Jun 17 17:41:38.144 INFO listening, local_addr: [::1]:35383, component: Simulated CrucibleAgent Dropshot Server, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.144 INFO Created Simulated Crucible Server, address: [::1]:35383, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: sled-agent/src/sim/storage.rs:1116
Jun 17 17:41:38.144 INFO listening, local_addr: [::1]:65247, component: Simulated CrucibleAgent Dropshot Server, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.145 INFO Created Simulated Crucible Server, address: [::1]:65247, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: sled-agent/src/sim/storage.rs:1116
Jun 17 17:41:38.145 INFO listening, local_addr: [::1]:53593, component: Simulated CrucibleAgent Dropshot Server, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.145 INFO Created Simulated Crucible Server, address: [::1]:53593, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: sled-agent/src/sim/storage.rs:1116
Jun 17 17:41:38.145 INFO listening, local_addr: [::1]:53322, component: Simulated CrucibleAgent Dropshot Server, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.146 INFO Created Simulated Crucible Server, address: [::1]:53322, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: sled-agent/src/sim/storage.rs:1116
Jun 17 17:41:38.146 INFO listening, local_addr: [::1]:60283, component: Simulated CrucibleAgent Dropshot Server, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.146 INFO Created Simulated Crucible Server, address: [::1]:60283, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: sled-agent/src/sim/storage.rs:1116
Jun 17 17:41:38.146 INFO listening, local_addr: [::1]:62983, component: Simulated CrucibleAgent Dropshot Server, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.147 INFO Created Simulated Crucible Server, address: [::1]:62983, kind: storage, server: d0900913-88c6-4702-8eaf-d2e88e714657, component: SledAgent, file: sled-agent/src/sim/storage.rs:1116
Jun 17 17:41:38.147 INFO sled agent started successfully, file: sled-agent/src/sim/server.rs:341
Jun 17 17:41:38.147 INFO opening sled database, path: /dangerzone/omicron_tmp/.tmpc22ent, component: store, file: dns-server/src/storage.rs:262
Jun 17 17:41:38.194 INFO pruning trees for generations newer than 0, component: store, file: dns-server/src/storage.rs:667
Jun 17 17:41:38.194 INFO pruning trees for generations older than 0, keep: 3, component: store, file: dns-server/src/storage.rs:731
Jun 17 17:41:38.194 INFO DNS server bound to address, local_address: [::1]:3535, component: dns, kind: dns, file: dns-server/src/dns_server.rs:97
Jun 17 17:41:38.194 INFO listening, local_addr: [::1]:47801, component: http, kind: dns, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.195 INFO listening, local_addr: [::1]:63067, component: dropshot, kind: pantry, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:328
Jun 17 17:41:38.195 INFO Started Simulated Crucible Pantry, address: [::1]:63067, kind: pantry, file: sled-agent/src/sim/storage.rs:2178
Jun 17 17:41:38.231 INFO accepted connection, remote_addr: [::1]:52072, local_addr: [::1]:47801, component: http, kind: dns, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:1025
Jun 17 17:41:38.233 INFO attempting generation update, new_generation: 1, req_id: b1289f3d-c58e-4165-bb93-572fb7129fa4, component: store, file: dns-server/src/storage.rs:514
Jun 17 17:41:38.233 INFO pruning trees for generations newer than 0, component: store, file: dns-server/src/storage.rs:667
Jun 17 17:41:38.233 INFO pruning trees for generations older than 1, keep: 3, component: store, file: dns-server/src/storage.rs:731
Jun 17 17:41:38.234 INFO updated generation, new_generation: 1, req_id: b1289f3d-c58e-4165-bb93-572fb7129fa4, component: store, file: dns-server/src/storage.rs:517
Jun 17 17:41:38.234 INFO request completed, latency_us: 1587, response_code: 204, uri: /config, method: PUT, req_id: b1289f3d-c58e-4165-bb93-572fb7129fa4, remote_addr: [::1]:52072, local_addr: [::1]:47801, component: http, kind: dns, file: /home/dap/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dropshot-0.16.2/src/server.rs:867



DAP: 8



sled-agent-sim: omicron_physical_disks_list(): 404 Not Found <no code> "Not Found" "No control plane disks"
Jun 17 17:41:38.236 INFO beginning graceful shutdown, local_addr: [::1]:47801

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the failure with the cargo run --bin=sled-agent-sim command and inspect sled-agent/src/sim/server.rs, especially run_standalone_server and its omicron_physical_disks_list() call. Compare the error path with common/src/cmd.rs; done means the simulator either starts successfully or reports a clear, actionable startup error instead of failing silently.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.