Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 17 additions & 7 deletions Cargo.lock

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

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ nvpair = { path = "crates/nvpair" }
nvpair_sys = { path = "crates/nvpair/sys" }
propolis-config-toml = { path = "crates/propolis-config-toml" }
propolis_api_types = { path = "crates/propolis-api-types" }
propolis-api-types-versions = { path = "crates/propolis-api-types-versions" }
propolis-server-api = { path = "crates/propolis-server-api" }
propolis_types = { path = "crates/propolis-types" }
rfb = { path = "crates/rfb" }
Expand Down
1 change: 1 addition & 0 deletions bin/propolis-server/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ slog-term.workspace = true
strum = { workspace = true, features = ["derive"] }
propolis = { workspace = true, features = ["crucible-full", "oximeter"] }
propolis_api_types = { workspace = true }
propolis-api-types-versions.workspace = true
propolis-server-api.workspace = true
propolis_types.workspace = true
rgb_frame.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion bin/propolis-server/src/lib/initializer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@ use propolis::hw::uart::LpcUart;
use propolis::hw::{nvme, virtio};
use propolis::intr_pins;
use propolis::vmm::{self, Builder, Machine};
use propolis_api_types::instance::InstanceProperties;
use propolis_api_types::instance_spec::components::devices::SerialPortNumber;
use propolis_api_types::instance_spec::{self, SpecKey};
use propolis_api_types::InstanceProperties;
use propolis_types::{CpuidIdent, CpuidVendor};
use slog::info;
use strum::IntoEnumIterator;
Expand Down
2 changes: 1 addition & 1 deletion bin/propolis-server/src/lib/migrate/destination.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ use propolis::migrate::{
MigrateCtx, MigrateStateError, Migrator, PayloadOffer, PayloadOffers,
};
use propolis::vmm;
use propolis_api_types::instance::ReplacementComponent;
use propolis_api_types::instance_spec::SpecKey;
use propolis_api_types::ReplacementComponent;
use slog::{error, info, trace, warn};
use std::collections::BTreeMap;
use std::convert::TryInto;
Expand Down
2 changes: 1 addition & 1 deletion bin/propolis-server/src/lib/migrate/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
use bit_field::BitField;
use dropshot::HttpError;
use propolis::migrate::MigrateStateError;
use propolis_api_types::MigrationState;
use propolis_api_types::migration::MigrationState;
use serde::{Deserialize, Serialize};
use slog::error;
use thiserror::Error;
Expand Down
36 changes: 24 additions & 12 deletions bin/propolis-server/src/lib/migrate/preamble.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@

use std::collections::BTreeMap;

use propolis_api_types::{
instance_spec::{v0::ComponentV0, SpecKey, VersionedInstanceSpec},
ReplacementComponent,
};
use propolis_api_types::instance::ReplacementComponent;
use propolis_api_types_versions::v1;
use serde::{Deserialize, Serialize};

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

#[derive(Deserialize, Serialize, Debug)]
pub(crate) struct Preamble {
pub instance_spec: VersionedInstanceSpec,
pub instance_spec: v1::instance_spec::VersionedInstanceSpec,
pub blobs: Vec<Vec<u8>>,
}

impl Preamble {
pub fn new(instance_spec: VersionedInstanceSpec) -> Preamble {
pub fn new(
instance_spec: v1::instance_spec::VersionedInstanceSpec,
) -> Preamble {
Preamble { instance_spec, blobs: Vec::new() }
}

Expand All @@ -35,15 +35,22 @@ impl Preamble {
/// not present in the source spec, this routine fails.
pub fn amend_spec(
self,
replacements: &BTreeMap<SpecKey, ReplacementComponent>,
replacements: &BTreeMap<
v1::instance_spec::SpecKey,
ReplacementComponent,
>,
) -> Result<Spec, MigrateError> {
fn wrong_type_error(id: &SpecKey, kind: &str) -> MigrateError {
fn wrong_type_error(
id: &v1::instance_spec::SpecKey,
kind: &str,
) -> MigrateError {
let msg =
format!("component {id} is not a {kind} in the source spec");
MigrateError::InstanceSpecsIncompatible(msg)
}

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

#[cfg(feature = "failure-injection")]
ReplacementComponent::MigrationFailureInjector(comp) => {
let ComponentV0::MigrationFailureInjector(src) = to_amend
let v1::instance_spec::Component::MigrationFailureInjector(
src,
) = to_amend
else {
return Err(wrong_type_error(
id,
Expand All @@ -75,15 +84,18 @@ impl Preamble {
*src = comp.clone();
}
ReplacementComponent::CrucibleStorageBackend(comp) => {
let ComponentV0::CrucibleStorageBackend(src) = to_amend
let v1::instance_spec::Component::CrucibleStorageBackend(
src,
) = to_amend
else {
return Err(wrong_type_error(id, "crucible backend"));
};

*src = comp.clone();
}
ReplacementComponent::VirtioNetworkBackend(comp) => {
let ComponentV0::VirtioNetworkBackend(src) = to_amend
let v1::instance_spec::Component::VirtioNetworkBackend(src) =
to_amend
else {
return Err(wrong_type_error(id, "viona backend"));
};
Expand Down
9 changes: 5 additions & 4 deletions bin/propolis-server/src/lib/migrate/source.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use propolis::migrate::{
MigrateCtx, MigrateStateError, Migrator, PayloadOutputs,
};
use propolis::vmm;
use propolis_api_types::instance_spec::VersionedInstanceSpec;
use propolis_api_types_versions::v1;
use slog::{debug, error, info, trace, warn};
use std::collections::HashMap;
use std::convert::TryInto;
Expand Down Expand Up @@ -467,9 +467,10 @@ impl<T: MigrateConn> RonV0Runner<'_, T> {

async fn sync(&mut self) -> Result<(), MigrateError> {
self.update_state(MigrationState::Sync);
let preamble = Preamble::new(VersionedInstanceSpec::V0(
self.vm.lock_shared().await.instance_spec().clone().into(),
));
let preamble =
Preamble::new(v1::instance_spec::VersionedInstanceSpec::V0(
self.vm.lock_shared().await.instance_spec().clone().into(),
));
let s = ron::ser::to_string(&preamble)
.map_err(codec::ProtocolError::from)?;
self.send_msg(codec::Message::Serialized(s)).await?;
Expand Down
2 changes: 1 addition & 1 deletion bin/propolis-server/src/lib/serial/history_buffer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
//! first mebibyte and the most recent mebibyte of console output.

use dropshot::HttpError;
use propolis_api_types as api;
use propolis_api_types::serial as api;
use serde::{Deserialize, Serialize};
use std::collections::VecDeque;
use std::convert::TryFrom;
Expand Down
2 changes: 1 addition & 1 deletion bin/propolis-server/src/lib/serial/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use futures::future::Fuse;
use futures::stream::SplitSink;
use futures::{FutureExt, SinkExt, StreamExt};
use propolis::chardev::{pollers, Sink, Source};
use propolis_api_types::InstanceSerialConsoleControlMessage;
use propolis_api_types::serial::InstanceSerialConsoleControlMessage;
use slog::{info, warn, Logger};
use thiserror::Error;
use tokio::sync::{mpsc, oneshot, Mutex, RwLock as AsyncRwLock};
Expand Down
Loading
Loading