Skip to content

Commit c58b66a

Browse files
api & vmm refactoring
We are trying to reverse the dependency between the API and the VMM. The API should depend on the VMM and the VMM should not have structures/functions that suggest that there is an interaction with an HTTP/or any other kind of API. As part of this effort: * renamed the SyncRequest to VmmAction as this enum will be later moved to the vmm crate * renamed the variants from VmmAction enum so we don't have them tied to an API. * renamed the function run_api_cmd to run_vmm_action. * renamed SyncOutcomeSender to OutcomeSender as all out requests are sync. Same for SyncOutcomeReceiver. Signed-off-by: Andreea Florescu <[email protected]>
1 parent 1833715 commit c58b66a

File tree

10 files changed

+102
-111
lines changed

10 files changed

+102
-111
lines changed

api_server/src/http_service.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use request::drive::PatchDrivePayload;
1919
use request::instance_info::InstanceInfo;
2020
use request::logger::APILoggerDescription;
2121
use request::net::NetworkInterfaceBody;
22-
use request::{IntoParsedRequest, ParsedRequest, SyncRequest};
22+
use request::{IntoParsedRequest, ParsedRequest, VmmAction};
2323
use sys_util::EventFd;
2424

2525
fn build_response_base<B: Into<hyper::Body>>(
@@ -399,8 +399,8 @@ fn parse_request<'a>(method: Method, path: &'a str, body: &Chunk) -> Result<'a,
399399
// A helper function which is always used when a message is placed into the communication channel
400400
// with the VMM (so we don't forget to write to the EventFd).
401401
fn send_to_vmm(
402-
req: SyncRequest,
403-
sender: &mpsc::Sender<Box<SyncRequest>>,
402+
req: VmmAction,
403+
sender: &mpsc::Sender<Box<VmmAction>>,
404404
send_event: &EventFd,
405405
) -> result::Result<(), ()> {
406406
sender.send(Box::new(req)).map_err(|_| ())?;
@@ -417,7 +417,7 @@ pub struct ApiServerHttpService {
417417
// This allows sending messages to the VMM thread. It makes sense to use a Rc for the sender
418418
// (instead of cloning) because everything happens on a single thread, so there's no risk of
419419
// having races (if that was even a problem to begin with).
420-
api_request_sender: Rc<mpsc::Sender<Box<SyncRequest>>>,
420+
api_request_sender: Rc<mpsc::Sender<Box<VmmAction>>>,
421421
// We write to this EventFd to let the VMM know about new messages.
422422
vmm_send_event: Rc<EventFd>,
423423
}
@@ -426,7 +426,7 @@ impl ApiServerHttpService {
426426
pub fn new(
427427
mmds_info: Arc<Mutex<Mmds>>,
428428
vmm_shared_info: Arc<RwLock<InstanceInfo>>,
429-
api_request_sender: Rc<mpsc::Sender<Box<SyncRequest>>>,
429+
api_request_sender: Rc<mpsc::Sender<Box<VmmAction>>>,
430430
vmm_send_event: Rc<EventFd>,
431431
) -> Self {
432432
ApiServerHttpService {
@@ -583,7 +583,7 @@ mod tests {
583583
use hyper::header::{ContentType, Headers};
584584
use hyper::Body;
585585
use net_util::MacAddr;
586-
use request::SyncRequest;
586+
use request::VmmAction;
587587

588588
fn body_to_string(body: hyper::Body) -> String {
589589
let ret = body
@@ -724,7 +724,7 @@ mod tests {
724724
Ok(pr) => {
725725
let (sender, receiver) = oneshot::channel();
726726
assert!(pr.eq(&ParsedRequest::Sync(
727-
SyncRequest::StartInstance(sender),
727+
VmmAction::StartMicroVm(sender),
728728
receiver
729729
)));
730730
}
@@ -743,7 +743,7 @@ mod tests {
743743
Ok(pr) => {
744744
let (sender, receiver) = oneshot::channel();
745745
assert!(pr.eq(&ParsedRequest::Sync(
746-
SyncRequest::RescanBlockDevice("dummy_id".to_string(), sender),
746+
VmmAction::RescanBlockDevice("dummy_id".to_string(), sender),
747747
receiver
748748
)));
749749
}
@@ -807,7 +807,7 @@ mod tests {
807807
Ok(pr) => {
808808
let (sender, receiver) = oneshot::channel();
809809
assert!(pr.eq(&ParsedRequest::Sync(
810-
SyncRequest::PutBootSource(boot_source_body, sender),
810+
VmmAction::ConfigureBootSource(boot_source_body, sender),
811811
receiver,
812812
)));
813813
}
@@ -1011,7 +1011,7 @@ mod tests {
10111011
Ok(pr) => {
10121012
let (sender, receiver) = oneshot::channel();
10131013
assert!(pr.eq(&ParsedRequest::Sync(
1014-
SyncRequest::PutLogger(logger_body, sender),
1014+
VmmAction::ConfigureLogger(logger_body, sender),
10151015
receiver,
10161016
)));
10171017
}

api_server/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use data_model::mmds::Mmds;
3535
use http_service::ApiServerHttpService;
3636
use logger::{Metric, METRICS};
3737
use request::instance_info::InstanceInfo;
38-
use request::SyncRequest;
38+
use request::VmmAction;
3939
use sys_util::EventFd;
4040

4141
#[derive(Debug)]
@@ -52,15 +52,15 @@ pub struct ApiServer {
5252
// VMM instance info directly accessible from the API thread.
5353
vmm_shared_info: Arc<RwLock<InstanceInfo>>,
5454
// Sender which allows passing messages to the VMM.
55-
api_request_sender: Rc<mpsc::Sender<Box<SyncRequest>>>,
55+
api_request_sender: Rc<mpsc::Sender<Box<VmmAction>>>,
5656
efd: Rc<EventFd>,
5757
}
5858

5959
impl ApiServer {
6060
pub fn new(
6161
mmds_info: Arc<Mutex<Mmds>>,
6262
vmm_shared_info: Arc<RwLock<InstanceInfo>>,
63-
api_request_sender: mpsc::Sender<Box<SyncRequest>>,
63+
api_request_sender: mpsc::Sender<Box<VmmAction>>,
6464
) -> Result<Self> {
6565
Ok(ApiServer {
6666
mmds_info,

api_server/src/request/actions.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use futures::sync::oneshot;
66
use hyper::Method;
77
use serde_json::Value;
88

9-
use request::{IntoParsedRequest, ParsedRequest, SyncRequest};
9+
use request::{IntoParsedRequest, ParsedRequest, VmmAction};
1010

1111
// The names of the members from this enum must precisely correspond (as a string) to the possible
1212
// values of "action_type" from the json request body. This is useful to get a strongly typed
@@ -78,14 +78,14 @@ impl IntoParsedRequest for ActionBody {
7878
let block_device_id = self.payload.unwrap().as_str().unwrap().to_string();
7979
let (sync_sender, sync_receiver) = oneshot::channel();
8080
Ok(ParsedRequest::Sync(
81-
SyncRequest::RescanBlockDevice(block_device_id, sync_sender),
81+
VmmAction::RescanBlockDevice(block_device_id, sync_sender),
8282
sync_receiver,
8383
))
8484
}
8585
ActionType::InstanceStart => {
8686
let (sync_sender, sync_receiver) = oneshot::channel();
8787
Ok(ParsedRequest::Sync(
88-
SyncRequest::StartInstance(sync_sender),
88+
VmmAction::StartMicroVm(sync_sender),
8989
sync_receiver,
9090
))
9191
}
@@ -147,7 +147,7 @@ mod tests {
147147
}"#;
148148
let (sender, receiver) = oneshot::channel();
149149
let req = ParsedRequest::Sync(
150-
SyncRequest::RescanBlockDevice("dummy_id".to_string(), sender),
150+
VmmAction::RescanBlockDevice("dummy_id".to_string(), sender),
151151
receiver,
152152
);
153153

@@ -171,8 +171,7 @@ mod tests {
171171
\"force\": true}
172172
}";
173173
let (sender, receiver) = oneshot::channel();
174-
let req: ParsedRequest =
175-
ParsedRequest::Sync(SyncRequest::StartInstance(sender), receiver);
174+
let req: ParsedRequest = ParsedRequest::Sync(VmmAction::StartMicroVm(sender), receiver);
176175
let result: Result<ActionBody, serde_json::Error> = serde_json::from_str(json);
177176
assert!(result.is_ok());
178177
assert!(

api_server/src/request/boot_source.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use futures::sync::oneshot;
44
use hyper::{Response, StatusCode};
55

66
use http_service::{json_fault_message, json_response};
7-
use request::{GenerateResponse, ParsedRequest, SyncRequest};
7+
use request::{GenerateResponse, ParsedRequest, VmmAction};
88

99
#[derive(Debug, Deserialize, PartialEq, Serialize)]
1010
pub enum BootSourceType {
@@ -69,7 +69,7 @@ impl BootSourceBody {
6969
pub fn into_parsed_request(self) -> result::Result<ParsedRequest, String> {
7070
let (sender, receiver) = oneshot::channel();
7171
Ok(ParsedRequest::Sync(
72-
SyncRequest::PutBootSource(self, sender),
72+
VmmAction::ConfigureBootSource(self, sender),
7373
receiver,
7474
))
7575
}
@@ -115,7 +115,7 @@ mod tests {
115115
};
116116
let (sender, receiver) = oneshot::channel();
117117
assert!(body.into_parsed_request().eq(&Ok(ParsedRequest::Sync(
118-
SyncRequest::PutBootSource(same_body, sender),
118+
VmmAction::ConfigureBootSource(same_body, sender),
119119
receiver
120120
))))
121121
}

api_server/src/request/drive.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use serde_json::{Map, Value};
66

77
use data_model::vm::{BlockDeviceConfig, DriveError};
88

9-
use super::{GenerateResponse, SyncRequest};
9+
use super::{GenerateResponse, VmmAction};
1010
use http_service::{json_fault_message, json_response};
1111
use request::{IntoParsedRequest, ParsedRequest};
1212

@@ -82,7 +82,7 @@ impl IntoParsedRequest for PatchDrivePayload {
8282

8383
let (sender, receiver) = oneshot::channel();
8484
Ok(ParsedRequest::Sync(
85-
SyncRequest::PatchDrive(drive_id, path_on_host, sender),
85+
VmmAction::UpdateDrivePath(drive_id, path_on_host, sender),
8686
receiver,
8787
))
8888
}
@@ -96,7 +96,7 @@ impl IntoParsedRequest for BlockDeviceConfig {
9696
let (sender, receiver) = oneshot::channel();
9797
match method {
9898
Method::Put => Ok(ParsedRequest::Sync(
99-
SyncRequest::PutDrive(self, sender),
99+
VmmAction::InsertBlockDevice(self, sender),
100100
receiver,
101101
)),
102102
_ => Ok(ParsedRequest::Dummy),
@@ -232,7 +232,7 @@ mod tests {
232232
pdp.clone()
233233
.into_parsed_request(Method::Patch)
234234
.eq(&Ok(ParsedRequest::Sync(
235-
SyncRequest::PatchDrive("foo".to_string(), "dummy".to_string(), sender),
235+
VmmAction::UpdateDrivePath("foo".to_string(), "dummy".to_string(), sender),
236236
receiver
237237
)))
238238
);
@@ -317,7 +317,7 @@ mod tests {
317317
.clone()
318318
.into_parsed_request(Method::Put)
319319
.eq(&Ok(ParsedRequest::Sync(
320-
SyncRequest::PutDrive(desc, sender),
320+
VmmAction::InsertBlockDevice(desc, sender),
321321
receiver
322322
)))
323323
);

api_server/src/request/logger.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use futures::sync::oneshot;
44
use hyper::{Response, StatusCode};
55

66
use http_service::{json_fault_message, json_response};
7-
use request::{GenerateResponse, ParsedRequest, SyncRequest};
7+
use request::{GenerateResponse, ParsedRequest, VmmAction};
88

99
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
1010
pub enum APILoggerLevel {
@@ -48,7 +48,7 @@ impl APILoggerDescription {
4848
pub fn into_parsed_request(self) -> result::Result<ParsedRequest, String> {
4949
let (sender, receiver) = oneshot::channel();
5050
Ok(ParsedRequest::Sync(
51-
SyncRequest::PutLogger(self, sender),
51+
VmmAction::ConfigureLogger(self, sender),
5252
receiver,
5353
))
5454
}
@@ -93,7 +93,7 @@ mod tests {
9393
.clone()
9494
.into_parsed_request()
9595
.eq(&Ok(ParsedRequest::Sync(
96-
SyncRequest::PutLogger(desc, sender),
96+
VmmAction::ConfigureLogger(desc, sender),
9797
receiver
9898
)))
9999
);

api_server/src/request/machine_configuration.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use hyper::{Method, Response, StatusCode};
55

66
use data_model::vm::MachineConfiguration;
77
use http_service::{json_fault_message, json_response};
8-
use request::{GenerateResponse, IntoParsedRequest, ParsedRequest, SyncRequest};
8+
use request::{GenerateResponse, IntoParsedRequest, ParsedRequest, VmmAction};
99

1010
#[derive(Debug, PartialEq)]
1111
pub enum PutMachineConfigurationError {
@@ -62,7 +62,7 @@ impl IntoParsedRequest for MachineConfiguration {
6262
let (sender, receiver) = oneshot::channel();
6363
match method {
6464
Method::Get => Ok(ParsedRequest::Sync(
65-
SyncRequest::GetMachineConfiguration(sender),
65+
VmmAction::GetMachineConfiguration(sender),
6666
receiver,
6767
)),
6868
Method::Put => {
@@ -74,7 +74,7 @@ impl IntoParsedRequest for MachineConfiguration {
7474
return Err(String::from("Empty request."));
7575
}
7676
Ok(ParsedRequest::Sync(
77-
SyncRequest::PutMachineConfiguration(self, sender),
77+
VmmAction::SetVmConfiguration(self, sender),
7878
receiver,
7979
))
8080
}
@@ -123,7 +123,7 @@ mod tests {
123123
body.clone()
124124
.into_parsed_request(Method::Put)
125125
.eq(&Ok(ParsedRequest::Sync(
126-
SyncRequest::PutMachineConfiguration(body, sender),
126+
VmmAction::SetVmConfiguration(body, sender),
127127
receiver
128128
)))
129129
);

api_server/src/request/mod.rs

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@ use self::boot_source::BootSourceBody;
2020
use self::logger::APILoggerDescription;
2121
use self::net::NetworkInterfaceBody;
2222

23-
pub type SyncOutcomeSender = oneshot::Sender<Box<GenerateResponse + Send>>;
24-
pub type SyncOutcomeReceiver = oneshot::Receiver<Box<GenerateResponse + Send>>;
23+
pub type OutcomeSender = oneshot::Sender<Box<GenerateResponse + Send>>;
24+
pub type OutcomeReceiver = oneshot::Receiver<Box<GenerateResponse + Send>>;
2525

2626
pub enum ParsedRequest {
2727
Dummy,
2828
GetInstanceInfo,
2929
GetMMDS,
3030
PatchMMDS(Value),
3131
PutMMDS(Value),
32-
Sync(SyncRequest, SyncOutcomeReceiver),
32+
Sync(VmmAction, OutcomeReceiver),
3333
}
3434

3535
pub trait IntoParsedRequest {
@@ -67,21 +67,21 @@ impl GenerateResponse for () {
6767

6868
// This enum contains messages for the VMM which represent sync requests. They each contain various
6969
// bits of information (ids, paths, etc.), together with an OutcomeSender, which is always present.
70-
pub enum SyncRequest {
71-
GetMachineConfiguration(SyncOutcomeSender),
72-
PatchDrive(String, String, SyncOutcomeSender), // drive_id, path_on_host, channel
73-
PutBootSource(BootSourceBody, SyncOutcomeSender),
74-
PutDrive(BlockDeviceConfig, SyncOutcomeSender),
75-
PutLogger(APILoggerDescription, SyncOutcomeSender),
76-
PutMachineConfiguration(MachineConfiguration, SyncOutcomeSender),
77-
PutNetworkInterface(NetworkInterfaceBody, SyncOutcomeSender),
78-
RescanBlockDevice(String, SyncOutcomeSender),
79-
StartInstance(SyncOutcomeSender),
70+
pub enum VmmAction {
71+
ConfigureBootSource(BootSourceBody, OutcomeSender),
72+
ConfigureLogger(APILoggerDescription, OutcomeSender),
73+
GetMachineConfiguration(OutcomeSender),
74+
InsertBlockDevice(BlockDeviceConfig, OutcomeSender),
75+
InsertNetworkDevice(NetworkInterfaceBody, OutcomeSender),
76+
RescanBlockDevice(String, OutcomeSender),
77+
StartMicroVm(OutcomeSender),
78+
SetVmConfiguration(MachineConfiguration, OutcomeSender),
79+
UpdateDrivePath(String, String, OutcomeSender), // drive_id, path_on_host, channel
8080
}
8181

82-
impl fmt::Debug for SyncRequest {
82+
impl fmt::Debug for VmmAction {
8383
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
84-
write!(f, "SyncRequest")
84+
write!(f, "VmmActions")
8585
}
8686
}
8787

@@ -196,38 +196,38 @@ mod tests {
196196

197197
// Implementation for the "==" operator.
198198
// Can't derive PartialEq directly because the sender members can't be compared.
199-
impl PartialEq for SyncRequest {
200-
fn eq(&self, other: &SyncRequest) -> bool {
199+
impl PartialEq for VmmAction {
200+
fn eq(&self, other: &VmmAction) -> bool {
201201
match (self, other) {
202202
(
203-
&SyncRequest::PatchDrive(ref drive_id, ref path_on_host, _),
204-
&SyncRequest::PatchDrive(ref other_drive_id, ref other_path_on_host, _),
203+
&VmmAction::UpdateDrivePath(ref drive_id, ref path_on_host, _),
204+
&VmmAction::UpdateDrivePath(ref other_drive_id, ref other_path_on_host, _),
205205
) => drive_id == other_drive_id && path_on_host == other_path_on_host,
206206
(
207-
&SyncRequest::PutBootSource(ref bsb, _),
208-
&SyncRequest::PutBootSource(ref other_bsb, _),
207+
&VmmAction::ConfigureBootSource(ref bsb, _),
208+
&VmmAction::ConfigureBootSource(ref other_bsb, _),
209209
) => bsb == other_bsb,
210210
(
211-
&SyncRequest::PutDrive(ref ddesc, _),
212-
&SyncRequest::PutDrive(ref other_ddesc, _),
211+
&VmmAction::InsertBlockDevice(ref ddesc, _),
212+
&VmmAction::InsertBlockDevice(ref other_ddesc, _),
213213
) => ddesc == other_ddesc,
214214
(
215-
&SyncRequest::PutLogger(ref logdesc, _),
216-
&SyncRequest::PutLogger(ref other_logdesc, _),
215+
&VmmAction::ConfigureLogger(ref logdesc, _),
216+
&VmmAction::ConfigureLogger(ref other_logdesc, _),
217217
) => logdesc == other_logdesc,
218218
(
219-
&SyncRequest::PutMachineConfiguration(ref mcb, _),
220-
&SyncRequest::PutMachineConfiguration(ref other_mcb, _),
219+
&VmmAction::SetVmConfiguration(ref mcb, _),
220+
&VmmAction::SetVmConfiguration(ref other_mcb, _),
221221
) => mcb == other_mcb,
222222
(
223-
&SyncRequest::PutNetworkInterface(ref netif, _),
224-
&SyncRequest::PutNetworkInterface(ref other_netif, _),
223+
&VmmAction::InsertNetworkDevice(ref netif, _),
224+
&VmmAction::InsertNetworkDevice(ref other_netif, _),
225225
) => netif == other_netif,
226226
(
227-
&SyncRequest::RescanBlockDevice(ref req, _),
228-
&SyncRequest::RescanBlockDevice(ref other_req, _),
227+
&VmmAction::RescanBlockDevice(ref req, _),
228+
&VmmAction::RescanBlockDevice(ref other_req, _),
229229
) => req == other_req,
230-
(&SyncRequest::StartInstance(_), &SyncRequest::StartInstance(_)) => true,
230+
(&VmmAction::StartMicroVm(_), &VmmAction::StartMicroVm(_)) => true,
231231
_ => false,
232232
}
233233
}

0 commit comments

Comments
 (0)