Skip to content

Commit 8967fe2

Browse files
authored
[api] reorganize per RFD 619 (#996)
In RFD 619, we've decided on a new way to organize published types; this PR makes the Propolis API conform to the RFD.
1 parent a3fa970 commit 8967fe2

57 files changed

Lines changed: 1925 additions & 1614 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.lock

Lines changed: 18 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ nvpair_sys = { path = "crates/nvpair/sys" }
5656
pbind = { path = "crates/pbind" }
5757
propolis-config-toml = { path = "crates/propolis-config-toml" }
5858
propolis_api_types = { path = "crates/propolis-api-types" }
59+
propolis-api-types-versions = { path = "crates/propolis-api-types-versions" }
5960
propolis-server-api = { path = "crates/propolis-server-api" }
6061
propolis_types = { path = "crates/propolis-types" }
6162
rfb = { path = "crates/rfb" }

bin/mock-server/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ futures.workspace = true
2828
hyper.workspace = true
2929
serde.workspace = true
3030
propolis_api_types.workspace = true
31+
propolis-api-types-versions.workspace = true
3132
propolis_types.workspace = true
3233
semver.workspace = true
3334
serde_json.workspace = true

bin/mock-server/src/lib/api_types.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ progenitor::generate_api!(
99
spec = "../../openapi/propolis-server/propolis-server-latest.json",
1010
derives = [schemars::JsonSchema],
1111
replace = {
12-
SpecKey = propolis_api_types::instance_spec::SpecKey,
12+
SpecKey = propolis_api_types_versions::latest::instance_spec::SpecKey,
1313
},
1414
patch = {
1515
InstanceMetadata = { derives = [Clone, Eq, PartialEq] },

bin/propolis-server/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ slog-term.workspace = true
6262
strum = { workspace = true, features = ["derive"] }
6363
propolis = { workspace = true, features = ["crucible-full", "oximeter"] }
6464
propolis_api_types = { workspace = true }
65+
propolis-api-types-versions.workspace = true
6566
propolis-server-api.workspace = true
6667
propolis_types.workspace = true
6768
rgb_frame.workspace = true

bin/propolis-server/src/lib/initializer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ use propolis::hw::uart::LpcUart;
4646
use propolis::hw::{nvme, virtio};
4747
use propolis::intr_pins;
4848
use propolis::vmm::{self, Builder, Machine};
49+
use propolis_api_types::instance::InstanceProperties;
4950
use propolis_api_types::instance_spec::components::devices::SerialPortNumber;
5051
use propolis_api_types::instance_spec::{self, SpecKey};
51-
use propolis_api_types::InstanceProperties;
5252
use propolis_types::{CpuidIdent, CpuidVendor};
5353
use slog::info;
5454
use strum::IntoEnumIterator;

bin/propolis-server/src/lib/migrate/destination.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ use propolis::migrate::{
1010
MigrateCtx, MigrateStateError, Migrator, PayloadOffer, PayloadOffers,
1111
};
1212
use propolis::vmm;
13+
use propolis_api_types::instance::ReplacementComponent;
1314
use propolis_api_types::instance_spec::SpecKey;
14-
use propolis_api_types::ReplacementComponent;
1515
use slog::{error, info, trace, warn};
1616
use std::collections::BTreeMap;
1717
use std::convert::TryInto;

bin/propolis-server/src/lib/migrate/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
use bit_field::BitField;
66
use dropshot::HttpError;
77
use propolis::migrate::MigrateStateError;
8-
use propolis_api_types::MigrationState;
8+
use propolis_api_types::migration::MigrationState;
99
use serde::{Deserialize, Serialize};
1010
use slog::error;
1111
use thiserror::Error;

bin/propolis-server/src/lib/migrate/preamble.rs

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@
44

55
use std::collections::BTreeMap;
66

7-
use propolis_api_types::{
8-
instance_spec::{v0::ComponentV0, SpecKey, VersionedInstanceSpec},
9-
ReplacementComponent,
10-
};
7+
use propolis_api_types::instance::ReplacementComponent;
8+
use propolis_api_types_versions::v1;
119
use serde::{Deserialize, Serialize};
1210

1311
use crate::spec::{api_spec_v0::ApiSpecError, Spec};
@@ -16,12 +14,14 @@ use super::MigrateError;
1614

1715
#[derive(Deserialize, Serialize, Debug)]
1816
pub(crate) struct Preamble {
19-
pub instance_spec: VersionedInstanceSpec,
17+
pub instance_spec: v1::instance_spec::VersionedInstanceSpec,
2018
pub blobs: Vec<Vec<u8>>,
2119
}
2220

2321
impl Preamble {
24-
pub fn new(instance_spec: VersionedInstanceSpec) -> Preamble {
22+
pub fn new(
23+
instance_spec: v1::instance_spec::VersionedInstanceSpec,
24+
) -> Preamble {
2525
Preamble { instance_spec, blobs: Vec::new() }
2626
}
2727

@@ -35,15 +35,22 @@ impl Preamble {
3535
/// not present in the source spec, this routine fails.
3636
pub fn amend_spec(
3737
self,
38-
replacements: &BTreeMap<SpecKey, ReplacementComponent>,
38+
replacements: &BTreeMap<
39+
v1::instance_spec::SpecKey,
40+
ReplacementComponent,
41+
>,
3942
) -> Result<Spec, MigrateError> {
40-
fn wrong_type_error(id: &SpecKey, kind: &str) -> MigrateError {
43+
fn wrong_type_error(
44+
id: &v1::instance_spec::SpecKey,
45+
kind: &str,
46+
) -> MigrateError {
4147
let msg =
4248
format!("component {id} is not a {kind} in the source spec");
4349
MigrateError::InstanceSpecsIncompatible(msg)
4450
}
4551

46-
let VersionedInstanceSpec::V0(mut source_spec) = self.instance_spec;
52+
let v1::instance_spec::VersionedInstanceSpec::V0(mut source_spec) =
53+
self.instance_spec;
4754
for (id, comp) in replacements {
4855
let Some(to_amend) = source_spec.components.get_mut(id) else {
4956
return Err(MigrateError::InstanceSpecsIncompatible(format!(
@@ -64,7 +71,9 @@ impl Preamble {
6471

6572
#[cfg(feature = "failure-injection")]
6673
ReplacementComponent::MigrationFailureInjector(comp) => {
67-
let ComponentV0::MigrationFailureInjector(src) = to_amend
74+
let v1::instance_spec::Component::MigrationFailureInjector(
75+
src,
76+
) = to_amend
6877
else {
6978
return Err(wrong_type_error(
7079
id,
@@ -75,15 +84,18 @@ impl Preamble {
7584
*src = comp.clone();
7685
}
7786
ReplacementComponent::CrucibleStorageBackend(comp) => {
78-
let ComponentV0::CrucibleStorageBackend(src) = to_amend
87+
let v1::instance_spec::Component::CrucibleStorageBackend(
88+
src,
89+
) = to_amend
7990
else {
8091
return Err(wrong_type_error(id, "crucible backend"));
8192
};
8293

8394
*src = comp.clone();
8495
}
8596
ReplacementComponent::VirtioNetworkBackend(comp) => {
86-
let ComponentV0::VirtioNetworkBackend(src) = to_amend
97+
let v1::instance_spec::Component::VirtioNetworkBackend(src) =
98+
to_amend
8799
else {
88100
return Err(wrong_type_error(id, "viona backend"));
89101
};

bin/propolis-server/src/lib/migrate/source.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use propolis::migrate::{
99
MigrateCtx, MigrateStateError, Migrator, PayloadOutputs,
1010
};
1111
use propolis::vmm;
12-
use propolis_api_types::instance_spec::VersionedInstanceSpec;
12+
use propolis_api_types_versions::v1;
1313
use slog::{debug, error, info, trace, warn};
1414
use std::collections::HashMap;
1515
use std::convert::TryInto;
@@ -467,9 +467,10 @@ impl<T: MigrateConn> RonV0Runner<'_, T> {
467467

468468
async fn sync(&mut self) -> Result<(), MigrateError> {
469469
self.update_state(MigrationState::Sync);
470-
let preamble = Preamble::new(VersionedInstanceSpec::V0(
471-
self.vm.lock_shared().await.instance_spec().clone().into(),
472-
));
470+
let preamble =
471+
Preamble::new(v1::instance_spec::VersionedInstanceSpec::V0(
472+
self.vm.lock_shared().await.instance_spec().clone().into(),
473+
));
473474
let s = ron::ser::to_string(&preamble)
474475
.map_err(codec::ProtocolError::from)?;
475476
self.send_msg(codec::Message::Serialized(s)).await?;

0 commit comments

Comments
 (0)