runc/patch/0084-oci-fix-runc-panic-and-support-oom-score.patch

109 lines
3.4 KiB
Diff
Raw Normal View History

From 19106da5ad20c3b46888a75b08c00d0b0b12e13b Mon Sep 17 00:00:00 2001
From: jingrui <jingrui@huawei.com>
Date: Wed, 23 Jan 2019 22:40:51 +0800
Subject: [PATCH 84/94] oci: fix runc panic and support oom score
reason: see below.
1. docker plugin using simple spec, should add more check to avoid runc
panic.
2. add oom-score support.
Change-Id: I0999c8f61209e8127390508577034446d9ae1b4f
Signed-off-by: jingrui <jingrui@huawei.com>
---
script/runc-euleros.spec | 2 +-
spec.go | 39 ++++++++++++++++++++++++++++++++++++---
2 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/script/runc-euleros.spec b/script/runc-euleros.spec
index faccbf6..bcbcff1 100644
--- a/script/runc-euleros.spec
+++ b/script/runc-euleros.spec
@@ -2,7 +2,7 @@
Name: docker-runc
Version: 1.0.0.rc3
-Release: 17%{?dist}
+Release: 18%{?dist}
Summary: runc is a CLI tool for spawning and running containers according to the OCF specification
License: ASL 2.0
diff --git a/spec.go b/spec.go
index 0bbe967..3b90791 100644
--- a/spec.go
+++ b/spec.go
@@ -118,7 +118,8 @@ func sPtr(s string) *string { return &s }
type compatSpec struct {
specs.Spec
- Linux *linux `json:"linux,omitempty" platform:"linux"`
+ Linux *linux `json:"linux,omitempty" platform:"linux"`
+ Process processRc6 `json:"process"`
}
// linuxBlockIODevice holds major:minor format supported in blkio cgroup
@@ -150,6 +151,11 @@ type linux struct {
Resources *linuxResources `json:"resources,omitempty"`
}
+type processRc6 struct {
+ specs.Process
+ OOMScoreAdj *int `json:"oomScoreAdj,omitempty" platform:"linux"`
+}
+
type linuxResources struct {
specs.LinuxResources
Memory *linuxMemory `json:"memory,omitempty"`
@@ -191,10 +197,26 @@ type linuxMemory struct {
DisableOOMKiller *bool `json:"disableOOMKiller,omitempty"`
}
+func versionRc6Plus(ver string) bool {
+ if len(ver) < 5 { // version should be a.b.c[-rcn][x]
+ return false
+ }
+
+ // docker-18.09 1.0.1
+ if ver[:5] >= "1.0.1" {
+ return true
+ }
+
+ // TODO: add more version detect, support ab.cd.ef format.
+
+ // < 1.0.0-rc6: include 1.0.0-rc5xxx
+ return false
+}
+
// loadSpec loads the specification from the provided path.
func loadSpec(cPath string) (spec *specs.Spec, err error) {
spec, err = loadOriginSpec(cPath)
- if err != nil || spec.Linux.Resources.DisableOOMKiller == nil {
+ if err != nil || versionRc6Plus(spec.Version) {
return loadCompactSpec(cPath)
}
@@ -251,7 +273,18 @@ func updateCompactSpec(compatSpec *compatSpec) (*specs.Spec, error) {
return nil, fmt.Errorf("update config failed %v", err)
}
- spec.Linux.Resources.DisableOOMKiller = compatSpec.Linux.Resources.Memory.DisableOOMKiller
+ if compatSpec != nil && compatSpec.Linux != nil &&
+ compatSpec.Linux.Resources != nil &&
+ compatSpec.Linux.Resources.Memory != nil &&
+ compatSpec.Linux.Resources.Memory.DisableOOMKiller != nil {
+ spec.Linux.Resources.DisableOOMKiller = compatSpec.Linux.Resources.Memory.DisableOOMKiller
+ }
+
+ if compatSpec != nil && compatSpec.Process.OOMScoreAdj != nil &&
+ spec.Linux != nil && spec.Linux.Resources != nil {
+ spec.Linux.Resources.OOMScoreAdj = compatSpec.Process.OOMScoreAdj
+ }
+
if compatSpec.Linux.Resources.BlockIO != nil {
spec.Linux.Resources.BlockIO.Weight = compatSpec.Linux.Resources.BlockIO.Weight
spec.Linux.Resources.BlockIO.LeafWeight = compatSpec.Linux.Resources.BlockIO.LeafWeight
--
2.7.4.3