oci: fix two incompatible issues with OCI spec

The first incompatible issue is caused by a typo, "swapiness" should
be "swappiness". The second incompatible issue is caused by a serde
format. The struct LinuxBlockIODevice is introduced for convenience,
but it also changes serialized data, so "#[serde(flatten)]" should
be used for compatibility with OCI spec.

Fixes: #1211

Signed-off-by: Liu Jiang <gerry@linux.alibaba.com>
This commit is contained in:
Liu Jiang 2020-12-22 11:16:15 +08:00
parent 406a91ffdd
commit 9321e1b21b
3 changed files with 18 additions and 44 deletions

View File

@ -302,6 +302,7 @@ pub struct LinuxBlockIODevice {
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
pub struct LinuxWeightDevice {
#[serde(flatten)]
pub blk: LinuxBlockIODevice,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub weight: Option<u16>,
@ -315,6 +316,7 @@ pub struct LinuxWeightDevice {
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
pub struct LinuxThrottleDevice {
#[serde(flatten)]
pub blk: LinuxBlockIODevice,
#[serde(default)]
pub rate: u64,
@ -375,7 +377,7 @@ pub struct LinuxMemory {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "kernelTCP")]
pub kernel_tcp: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub swapiness: Option<i64>,
pub swappiness: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
@ -833,7 +835,7 @@ mod tests {
}
#[test]
fn test_deserialize_sepc() {
fn test_deserialize_spec() {
let data = r#"{
"ociVersion": "1.0.1",
"process": {
@ -1118,36 +1120,28 @@ mod tests {
"leafWeight": 10,
"weightDevice": [
{
"blk": {
"major": 8,
"minor": 0
},
"major": 8,
"minor": 0,
"weight": 500,
"leafWeight": 300
},
{
"blk":{
"major": 8,
"minor": 16
},
"major": 8,
"minor": 16,
"weight": 500
}
],
"throttleReadBpsDevice": [
{
"blk":{
"major": 8,
"minor": 0
},
"major": 8,
"minor": 0,
"rate": 600
}
],
"throttleWriteIOPSDevice": [
{
"blk":{
"major": 8,
"minor": 16
},
"major": 8,
"minor": 16,
"rate": 300
}
]
@ -1436,8 +1430,7 @@ mod tests {
swap: Some(536870912),
kernel: Some(-1),
kernel_tcp: Some(-1),
// incompatible with oci
swapiness: None,
swappiness: Some(0),
disable_oom_killer: Some(false),
}),
cpu: Some(crate::LinuxCPU {
@ -1590,25 +1583,6 @@ mod tests {
vm: None,
};
// warning : incompatible with oci : https://github.com/opencontainers/runtime-spec/blob/master/config.md
// 1. User use addtionalGids while oci use additionalGids
// 2. LinuxMemory use swapiness while oci use swappiness
// 3. LinuxWeightDevice with blk
// {
// "blk": {
// "major": 8,
// "minor": 0
// },
// "weight": 500,
// "leafWeight": 300
// }
// oci without blk
// {
// "major": 8,
// "minor": 0,
// "weight": 500,
// "leafWeight": 300
// }
let current: crate::Spec = serde_json::from_str(data).unwrap();
assert_eq!(expected, current);
}

View File

@ -423,13 +423,13 @@ fn set_memory_resources(cg: &cgroups::Cgroup, memory: &LinuxMemory, update: bool
}
}
if let Some(swapiness) = memory.swapiness {
if swapiness >= 0 && swapiness <= 100 {
mem_controller.set_swappiness(swapiness as u64)?;
if let Some(swappiness) = memory.swappiness {
if swappiness >= 0 && swappiness <= 100 {
mem_controller.set_swappiness(swappiness as u64)?;
} else {
return Err(anyhow!(
"invalid value:{}. valid memory swappiness range is 0-100",
swapiness
swappiness
));
}
}

View File

@ -310,7 +310,7 @@ pub fn resources_grpc_to_oci(res: &grpcLinuxResources) -> ociLinuxResources {
swap: Some(mem.Swap),
kernel: Some(mem.Kernel),
kernel_tcp: Some(mem.KernelTCP),
swapiness: Some(mem.Swappiness as i64),
swappiness: Some(mem.Swappiness as i64),
disable_oom_killer: Some(mem.DisableOOMKiller),
})
} else {