Skip to content

Commit

Permalink
Split out a sled-hardware-types crate (#5245)
Browse files Browse the repository at this point in the history
On main as of #5158, we unexpectedly get some binaries depending on
`libnvme` that shouldn't. In release builds:

```
installinator
omicron-dev
omicron-package
services-ledger-check-migrate
sled-agent
sled-agent-sim
wicketd
```

and in debug builds, all of the above plus `omdb`. We don't really care
about this for binaries that don't run on the rack, so stripping the
list down to binaries we do care about:

```
installinator
omdb (debug only)
sled-agent
wicketd
```

It's correct and expected that installinator and sled-agent depend on
libnvme, but omdb shouldn't (and doesn't in release), and wicketd _must
not_, as libnvme isn't available in the switch zone.

This PR fixes that incorrect dependency by splitting the parts of the
`sled-hardware` crate that wicketd and omdb depended on (directly or
transitively) into a new `sled-hardware-types` crate. On this PR, we are
left with only the following needing libnvme, in both debug and release:

```
installinator
omicron-dev
omicron-package
services-ledger-check-migrate
sled-agent
sled-agent-sim
```

I assume with a bit more work we could trim out everything but
`installinator` and `sled-agent`, and that might be worth doing, but
we'd like to land this ASAP so as to not break any updates performed off
of `main`. Separately, we could also imagine a CI check that we don't
have unexpected library dependencies present in the final binaries;
@papertigers is going to work on that.
  • Loading branch information
jgallagher authored Mar 13, 2024
1 parent fdbbbe5 commit 85150a7
Show file tree
Hide file tree
Showing 53 changed files with 279 additions and 222 deletions.
24 changes: 19 additions & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ members = [
"rpaths",
"sled-agent",
"sled-hardware",
"sled-hardware/types",
"sled-storage",
"sp-sim",
"test-utils",
Expand Down Expand Up @@ -142,6 +143,7 @@ default-members = [
"rpaths",
"sled-agent",
"sled-hardware",
"sled-hardware/types",
"sled-storage",
"sp-sim",
"test-utils",
Expand Down Expand Up @@ -373,6 +375,7 @@ similar-asserts = "1.5.0"
sled = "0.34"
sled-agent-client = { path = "clients/sled-agent-client" }
sled-hardware = { path = "sled-hardware" }
sled-hardware-types = { path = "sled-hardware/types" }
sled-storage = { path = "sled-storage" }
slog = { version = "2.7", features = [ "dynamic-keys", "max_level_trace", "release_max_level_debug" ] }
slog-async = "2.8"
Expand Down
2 changes: 1 addition & 1 deletion bootstore/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ secrecy.workspace = true
serde.workspace = true
serde_with.workspace = true
sha3.workspace = true
sled-hardware.workspace = true
sled-hardware-types.workspace = true
slog.workspace = true
thiserror.workspace = true
tokio.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion bootstore/src/schemes/v0/fsm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use secrecy::ExposeSecret;
use serde::{Deserialize, Serialize};
use serde_with::serde_as;
use sha3::{Digest, Sha3_256};
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use std::collections::{BTreeMap, BTreeSet};
use std::fmt::Debug;
use std::time::Instant;
Expand Down
2 changes: 1 addition & 1 deletion bootstore/src/schemes/v0/messages.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use super::{LearnedSharePkg, RackUuid, Share, SharePkg};
use derive_more::From;
use serde::{Deserialize, Serialize};
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use std::net::SocketAddrV6;
use thiserror::Error;
use uuid::Uuid;
Expand Down
2 changes: 1 addition & 1 deletion bootstore/src/schemes/v0/peer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use super::{ApiError, ApiOutput, Fsm, FsmConfig, RackUuid};
use crate::trust_quorum::RackSecret;
use camino::Utf8PathBuf;
use derive_more::From;
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use slog::{error, info, o, warn, Logger};
use std::collections::{BTreeMap, BTreeSet};
use std::net::{SocketAddr, SocketAddrV6};
Expand Down
2 changes: 1 addition & 1 deletion bootstore/src/schemes/v0/peer_networking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use crate::schemes::Hello;
use bytes::Buf;
use derive_more::From;
use serde::{Deserialize, Serialize};
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use slog::{debug, error, info, o, warn, Logger};
use std::collections::VecDeque;
use std::io::Cursor;
Expand Down
2 changes: 1 addition & 1 deletion bootstore/src/schemes/v0/request_manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use super::{
Envelope, FsmConfig, Msg, RackUuid, Request, RequestType, Share, SharePkg,
};
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use std::collections::{BTreeMap, BTreeSet};
use std::time::Instant;
use uuid::Uuid;
Expand Down
2 changes: 1 addition & 1 deletion bootstore/src/schemes/v0/share_pkg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use rand::{rngs::OsRng, RngCore};
use secrecy::{ExposeSecret, Secret};
use serde::{Deserialize, Serialize};
use sha3::{Digest, Sha3_256};
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use std::collections::BTreeSet;
use std::fmt;
use uuid::Uuid;
Expand Down
2 changes: 1 addition & 1 deletion bootstore/src/schemes/v0/storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use super::{Fsm, FsmConfig, State};
use camino::Utf8PathBuf;
use omicron_common::ledger::{Ledger, Ledgerable};
use serde::{Deserialize, Serialize};
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use slog::{info, Logger};

/// A persistent version of `Fsm::State`
Expand Down
2 changes: 1 addition & 1 deletion bootstore/tests/common/generators.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

use bootstore::schemes::v0::{FsmConfig, MsgError};
use proptest::prelude::*;
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use std::collections::BTreeSet;
use std::ops::RangeInclusive;
use std::time::Duration;
Expand Down
2 changes: 1 addition & 1 deletion bootstore/tests/common/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use bootstore::schemes::v0::{
ApiError, Envelope, Fsm, FsmConfig, Msg, MsgError, RackUuid, Request,
RequestType, Response, ResponseType,
};
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use std::collections::{BTreeMap, BTreeSet};
use std::time::Instant;

Expand Down
2 changes: 1 addition & 1 deletion bootstore/tests/v0-fsm-proptest-learner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use bootstore::trust_quorum::RackSecret;
use common::CommonTestState;
use proptest::prelude::*;
use secrecy::ExposeSecret;
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use std::collections::{BTreeMap, BTreeSet};
use uuid::Uuid;

Expand Down
2 changes: 1 addition & 1 deletion bootstore/tests/v0-fsm-proptest-rack-coordinator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ use bootstore::schemes::v0::{
Request, RequestType, Response, ResponseType, Share,
};
use proptest::prelude::*;
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use std::collections::{BTreeMap, BTreeSet};
use uuid::Uuid;

Expand Down
2 changes: 1 addition & 1 deletion clients/bootstrap-agent-client/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ regress.workspace = true
reqwest = { workspace = true, features = [ "json", "rustls-tls", "stream" ] }
schemars.workspace = true
serde.workspace = true
sled-hardware.workspace = true
sled-hardware-types.workspace = true
slog.workspace = true
uuid.workspace = true
omicron-workspace-hack.workspace = true
22 changes: 13 additions & 9 deletions clients/bootstrap-agent-client/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,32 +31,36 @@ impl omicron_common::api::external::ClientError for types::Error {
}
}

impl From<types::Baseboard> for sled_hardware::Baseboard {
impl From<types::Baseboard> for sled_hardware_types::Baseboard {
fn from(value: types::Baseboard) -> Self {
match value {
types::Baseboard::Gimlet { identifier, model, revision } => {
sled_hardware::Baseboard::new_gimlet(
sled_hardware_types::Baseboard::new_gimlet(
identifier, model, revision,
)
}
types::Baseboard::Unknown => sled_hardware::Baseboard::unknown(),
types::Baseboard::Unknown => {
sled_hardware_types::Baseboard::unknown()
}
types::Baseboard::Pc { identifier, model } => {
sled_hardware::Baseboard::new_pc(identifier, model)
sled_hardware_types::Baseboard::new_pc(identifier, model)
}
}
}
}

impl From<sled_hardware::Baseboard> for types::Baseboard {
fn from(value: sled_hardware::Baseboard) -> Self {
impl From<sled_hardware_types::Baseboard> for types::Baseboard {
fn from(value: sled_hardware_types::Baseboard) -> Self {
match value {
sled_hardware::Baseboard::Gimlet {
sled_hardware_types::Baseboard::Gimlet {
identifier,
model,
revision,
} => types::Baseboard::Gimlet { identifier, model, revision },
sled_hardware::Baseboard::Unknown => types::Baseboard::Unknown,
sled_hardware::Baseboard::Pc { identifier, model } => {
sled_hardware_types::Baseboard::Unknown => {
types::Baseboard::Unknown
}
sled_hardware_types::Baseboard::Pc { identifier, model } => {
types::Baseboard::Pc { identifier, model }
}
}
Expand Down
2 changes: 1 addition & 1 deletion clients/ddm-admin-client/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ thiserror.workspace = true
tokio.workspace = true

omicron-common.workspace = true
sled-hardware.workspace = true
sled-hardware-types.workspace = true
omicron-workspace-hack.workspace = true

[build-dependencies]
Expand Down
6 changes: 3 additions & 3 deletions clients/ddm-admin-client/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ use omicron_common::address::Ipv6Subnet;
use omicron_common::address::SLED_PREFIX;
use omicron_common::backoff::retry_notify;
use omicron_common::backoff::retry_policy_internal_service_aggressive;
use sled_hardware::underlay::BootstrapInterface;
use sled_hardware::underlay::BOOTSTRAP_MASK;
use sled_hardware::underlay::BOOTSTRAP_PREFIX;
use sled_hardware_types::underlay::BootstrapInterface;
use sled_hardware_types::underlay::BOOTSTRAP_MASK;
use sled_hardware_types::underlay::BOOTSTRAP_PREFIX;
use slog::info;
use slog::Logger;
use std::net::Ipv6Addr;
Expand Down
1 change: 0 additions & 1 deletion clients/mg-admin-client/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ slog.workspace = true
thiserror.workspace = true
tokio.workspace = true
omicron-common.workspace = true
sled-hardware.workspace = true
omicron-workspace-hack.workspace = true

[build-dependencies]
Expand Down
2 changes: 1 addition & 1 deletion dev-tools/omdb/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,11 @@ unicode-width.workspace = true
uuid.workspace = true
ipnetwork.workspace = true
omicron-workspace-hack.workspace = true
nexus-test-utils.workspace = true
multimap.workspace = true

[dev-dependencies]
expectorate.workspace = true
nexus-test-utils.workspace = true
nexus-test-utils-macros.workspace = true
omicron-nexus.workspace = true
omicron-test-utils.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion dev-tools/omdb/src/bin/omdb/db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,9 @@ use nexus_db_queries::db::datastore::InstanceAndActiveVmm;
use nexus_db_queries::db::identity::Asset;
use nexus_db_queries::db::lookup::LookupPath;
use nexus_db_queries::db::model::ServiceKind;
use nexus_db_queries::db::queries::ALLOW_FULL_TABLE_SCAN_SQL;
use nexus_db_queries::db::DataStore;
use nexus_reconfigurator_preparation::policy_from_db;
use nexus_test_utils::db::ALLOW_FULL_TABLE_SCAN_SQL;
use nexus_types::deployment::Blueprint;
use nexus_types::deployment::OmicronZoneType;
use nexus_types::deployment::UnstableReconfiguratorState;
Expand Down
1 change: 1 addition & 0 deletions installinator/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ omicron-common.workspace = true
reqwest.workspace = true
sha2.workspace = true
sled-hardware.workspace = true
sled-hardware-types.workspace = true
sled-storage.workspace = true
slog.workspace = true
slog-async.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion installinator/src/bootstrap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use illumos_utils::dladm::Dladm;
use illumos_utils::zone::Zones;
use omicron_common::address::Ipv6Subnet;
use sled_hardware::underlay;
use sled_hardware::underlay::BootstrapInterface;
use sled_hardware_types::underlay::BootstrapInterface;
use slog::info;
use slog::Logger;

Expand Down
2 changes: 1 addition & 1 deletion installinator/src/peers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ use itertools::Itertools;
use omicron_common::address::BOOTSTRAP_ARTIFACT_PORT;
use omicron_common::update::ArtifactHashId;
use reqwest::StatusCode;
use sled_hardware::underlay::BootstrapInterface;
use sled_hardware_types::underlay::BootstrapInterface;
use tokio::{sync::mpsc, time::Instant};
use update_engine::events::ProgressUnits;
use uuid::Uuid;
Expand Down
1 change: 1 addition & 0 deletions sled-agent/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ serde_json = { workspace = true, features = ["raw_value"] }
sha3.workspace = true
sled-agent-client.workspace = true
sled-hardware.workspace = true
sled-hardware-types.workspace = true
sled-storage.workspace = true
slog.workspace = true
slog-async.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion sled-agent/src/bin/sled-agent-sim.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ use omicron_sled_agent::sim::{
run_standalone_server, Config, ConfigHardware, ConfigStorage, ConfigZpool,
SimMode,
};
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use std::net::SocketAddr;
use std::net::SocketAddrV6;
use uuid::Uuid;
Expand Down
4 changes: 2 additions & 2 deletions sled-agent/src/bootstrap/bootstore_setup.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ use super::server::StartError;
use bootstore::schemes::v0 as bootstore;
use camino::Utf8PathBuf;
use ddm_admin_client::Client as DdmAdminClient;
use sled_hardware::underlay::BootstrapInterface;
use sled_hardware::Baseboard;
use sled_hardware_types::underlay::BootstrapInterface;
use sled_hardware_types::Baseboard;
use sled_storage::dataset::CLUSTER_DATASET;
use sled_storage::resources::StorageResources;
use slog::Logger;
Expand Down
2 changes: 1 addition & 1 deletion sled-agent/src/bootstrap/http_entrypoints.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use http::StatusCode;
use omicron_common::api::external::Error;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use sled_storage::manager::StorageHandle;
use slog::Logger;
use std::net::Ipv6Addr;
Expand Down
2 changes: 1 addition & 1 deletion sled-agent/src/bootstrap/params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use omicron_common::ledger::Ledgerable;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use sha3::{Digest, Sha3_256};
use sled_hardware::Baseboard;
use sled_hardware_types::Baseboard;
use std::borrow::Cow;
use std::collections::BTreeSet;
use std::net::{IpAddr, Ipv6Addr, SocketAddrV6};
Expand Down
Loading

0 comments on commit 85150a7

Please sign in to comment.