Skip to content

Commit 77ac69d

Browse files
committed
fix(volume): fail immediately on activation errors
1 parent 34c1d6b commit 77ac69d

2 files changed

Lines changed: 11 additions & 47 deletions

File tree

dstack/crates/dstack-volume/src/bin/dstack-volume.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,13 @@ fn main() -> Result<()> {
6363
"discovered dstack volumes"
6464
);
6565
let mut used = HashSet::new();
66-
let mut failures = 0;
6766
for (index, requested) in compose.verity_volumes.iter().enumerate() {
68-
if let Err(err) = activate_requested(index, requested, &volumes, &mut used) {
69-
failures += 1;
70-
warn!(index, target = %requested.target.display(), error = %format_args!("{err:#}"), "failed to activate required volume");
71-
}
72-
}
73-
if failures != 0 {
74-
bail!("failed to activate {failures} required volume(s)");
67+
activate_requested(index, requested, &volumes, &mut used).with_context(|| {
68+
format!(
69+
"failed to activate required volume {index} at {}",
70+
requested.target.display()
71+
)
72+
})?;
7573
}
7674
Ok(())
7775
}

dstack/vmm/src/main_service.rs

Lines changed: 5 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@ use dstack_types::AppCompose;
1111
use dstack_vmm_rpc as rpc;
1212
use dstack_vmm_rpc::vmm_server::{VmmRpc, VmmServer};
1313
use dstack_vmm_rpc::{
14-
AppId, ComposeHash as RpcComposeHash, DhcpLeaseRequest, GatewaySettings, GetInfoResponse,
15-
GetMetaResponse, Id, ImageInfo as RpcImageInfo, ImageListResponse, KmsSettings,
16-
ListGpusResponse, PublicKeyResponse, PullRegistryImageRequest, RegistryImageInfo,
17-
RegistryImageListResponse, ReloadVmsResponse, ResizeVmRequest, ResourcesSettings,
18-
StatusRequest, StatusResponse, SvListResponse, SvProcessInfo, UpdateVmRequest, VersionResponse,
19-
VmConfiguration,
14+
AppId, ComposeHash as RpcComposeHash, GatewaySettings, GetInfoResponse, GetMetaResponse, Id,
15+
ImageInfo as RpcImageInfo, ImageListResponse, KmsSettings, ListGpusResponse, PublicKeyResponse,
16+
PullRegistryImageRequest, RegistryImageInfo, RegistryImageListResponse, ReloadVmsResponse,
17+
ResizeVmRequest, ResourcesSettings, StatusRequest, StatusResponse, SvListResponse,
18+
SvProcessInfo, UpdateVmRequest, VersionResponse, VmConfiguration,
2019
};
2120
use fs_err as fs;
2221
use or_panic::ResultOrPanic;
@@ -285,7 +284,6 @@ fn networking_from_proto(proto: &rpc::NetworkingConfig) -> Result<Option<Network
285284
dhcp_start: String::new(),
286285
restrict: false,
287286
netdev: String::new(),
288-
forward_service_enabled: false,
289287
}))
290288
}
291289

@@ -577,9 +575,6 @@ impl VmmRpc for RpcHandler {
577575
.load_vm(&vm_work_dir, &Default::default(), false)
578576
.await
579577
.context("Failed to load VM")?;
580-
if request.update_ports {
581-
self.app.reconfigure_port_forward(&request.id).await;
582-
}
583578
Ok(Id { id: new_id })
584579
}
585580

@@ -695,7 +690,6 @@ impl VmmRpc for RpcHandler {
695690
NetworkingMode::Bridge => "bridge".to_string(),
696691
NetworkingMode::Custom => String::new(),
697692
},
698-
forward_service_enabled: default_networking.forward_service_enabled,
699693
default_bridge: default_networking.bridge.clone(),
700694
}),
701695
})
@@ -724,11 +718,6 @@ impl VmmRpc for RpcHandler {
724718
self.app.reload_vms_sync().await
725719
}
726720

727-
async fn report_dhcp_lease(self, request: DhcpLeaseRequest) -> Result<()> {
728-
self.app.report_dhcp_lease(&request.mac, &request.ip).await;
729-
Ok(())
730-
}
731-
732721
async fn sv_list(self) -> Result<SvListResponse> {
733722
use supervisor_client::supervisor::ProcessStatus;
734723
let list = self.app.supervisor.list().await?;
@@ -991,29 +980,6 @@ mod tests {
991980
assert!(err.to_string().contains("custom networking mode"));
992981
}
993982

994-
#[test]
995-
fn multiple_bridges_are_rejected_when_builtin_forwarding_is_enabled() {
996-
let mut cvm_config = test_cvm_config();
997-
cvm_config.networking.forward_service_enabled = true;
998-
let mut request = test_vm_configuration();
999-
request.networks = vec![
1000-
rpc::NetworkingConfig {
1001-
mode: "bridge".to_string(),
1002-
bridge_name: "lo".to_string(),
1003-
},
1004-
rpc::NetworkingConfig {
1005-
mode: "bridge".to_string(),
1006-
bridge_name: "lo".to_string(),
1007-
},
1008-
];
1009-
1010-
let err = create_manifest_from_vm_config(request, &cvm_config).unwrap_err();
1011-
1012-
assert!(err
1013-
.to_string()
1014-
.contains("built-in port forwarding supports only one bridge"));
1015-
}
1016-
1017983
#[test]
1018984
fn resolve_volume_source_rejects_escape_symlink_and_qemu_metachars() -> Result<()> {
1019985
let tmp = tempfile::tempdir()?;

0 commit comments

Comments
 (0)