206 lines
6.8 KiB
Diff
206 lines
6.8 KiB
Diff
From a84f3ee6e929dc1d1899dfe8e0bcaafb43bf510d Mon Sep 17 00:00:00 2001
|
|
From: zhongjiawei <zhongjiawei1@huawei.com>
|
|
Date: Wed, 26 Jul 2023 16:04:21 +0800
|
|
Subject: [PATCH] runc:modify linuxcontainer starttime uint64 type tobe string
|
|
|
|
---
|
|
libcontainer/container.go | 2 +-
|
|
libcontainer/container_linux.go | 4 ++--
|
|
libcontainer/container_linux_test.go | 14 +++++++-------
|
|
libcontainer/process_linux.go | 6 +++---
|
|
libcontainer/restored_process.go | 8 ++++----
|
|
libcontainer/system/proc.go | 4 ++--
|
|
6 files changed, 19 insertions(+), 19 deletions(-)
|
|
|
|
diff --git a/libcontainer/container.go b/libcontainer/container.go
|
|
index 300c952..1759e4c 100644
|
|
--- a/libcontainer/container.go
|
|
+++ b/libcontainer/container.go
|
|
@@ -55,7 +55,7 @@ type BaseState struct {
|
|
InitProcessPid int `json:"init_process_pid"`
|
|
|
|
// InitProcessStartTime is the init process start time in clock cycles since boot time.
|
|
- InitProcessStartTime uint64 `json:"init_process_start"`
|
|
+ InitProcessStartTime string `json:"init_process_start"`
|
|
|
|
// Created is the unix timestamp for the creation time of the container in UTC
|
|
Created time.Time `json:"created"`
|
|
diff --git a/libcontainer/container_linux.go b/libcontainer/container_linux.go
|
|
index e27cd7d..7141001 100644
|
|
--- a/libcontainer/container_linux.go
|
|
+++ b/libcontainer/container_linux.go
|
|
@@ -44,7 +44,7 @@ type linuxContainer struct {
|
|
initPath string
|
|
initArgs []string
|
|
initProcess parentProcess
|
|
- initProcessStartTime uint64
|
|
+ initProcessStartTime string
|
|
criuPath string
|
|
newuidmapPath string
|
|
newgidmapPath string
|
|
@@ -2003,7 +2003,7 @@ func (c *linuxContainer) isPaused() (bool, error) {
|
|
|
|
func (c *linuxContainer) currentState() (*State, error) {
|
|
var (
|
|
- startTime uint64
|
|
+ startTime string
|
|
externalDescriptors []string
|
|
pid = -1
|
|
)
|
|
diff --git a/libcontainer/container_linux_test.go b/libcontainer/container_linux_test.go
|
|
index 3eb6e5a..1a4b027 100644
|
|
--- a/libcontainer/container_linux_test.go
|
|
+++ b/libcontainer/container_linux_test.go
|
|
@@ -102,7 +102,7 @@ func (m *mockIntelRdtManager) GetCgroups() (*configs.Cgroup, error) {
|
|
|
|
type mockProcess struct {
|
|
_pid int
|
|
- started uint64
|
|
+ started string
|
|
}
|
|
|
|
func (m *mockProcess) terminate() error {
|
|
@@ -113,7 +113,7 @@ func (m *mockProcess) pid() int {
|
|
return m._pid
|
|
}
|
|
|
|
-func (m *mockProcess) startTime() (uint64, error) {
|
|
+func (m *mockProcess) startTime() (string, error) {
|
|
return m.started, nil
|
|
}
|
|
|
|
@@ -157,7 +157,7 @@ func TestGetContainerPids(t *testing.T) {
|
|
},
|
|
initProcess: &mockProcess{
|
|
_pid: 1,
|
|
- started: 10,
|
|
+ started: "10",
|
|
},
|
|
initProcessStartTime: stat.StartTime,
|
|
}
|
|
@@ -244,7 +244,7 @@ func TestGetContainerState(t *testing.T) {
|
|
},
|
|
initProcess: &mockProcess{
|
|
_pid: pid,
|
|
- started: 10,
|
|
+ started: "010",
|
|
},
|
|
cgroupManager: &mockCgroupManager{
|
|
pids: []int{1, 2, 3},
|
|
@@ -275,8 +275,8 @@ func TestGetContainerState(t *testing.T) {
|
|
if state.InitProcessPid != pid {
|
|
t.Fatalf("expected pid %d but received %d", pid, state.InitProcessPid)
|
|
}
|
|
- if state.InitProcessStartTime != 10 {
|
|
- t.Fatalf("expected process start time 10 but received %d", state.InitProcessStartTime)
|
|
+ if state.InitProcessStartTime != "010" {
|
|
+ t.Fatalf("expected process start time 10 but received %s", state.InitProcessStartTime)
|
|
}
|
|
paths := state.CgroupPaths
|
|
if paths == nil {
|
|
@@ -368,7 +368,7 @@ func TestGetContainerStateAfterUpdate(t *testing.T) {
|
|
t.Fatalf("expected pid %d but received %d", pid, state.InitProcessPid)
|
|
}
|
|
if state.InitProcessStartTime != stat.StartTime {
|
|
- t.Fatalf("expected process start time %d but received %d", stat.StartTime, state.InitProcessStartTime)
|
|
+ t.Fatalf("expected process start time %s but received %s", stat.StartTime, state.InitProcessStartTime)
|
|
}
|
|
if state.Config.Cgroups.Resources.Memory != 1024 {
|
|
t.Fatalf("expected Memory to be 1024 but received %q", state.Config.Cgroups.Memory)
|
|
diff --git a/libcontainer/process_linux.go b/libcontainer/process_linux.go
|
|
index 75d05b7..1124cf5 100644
|
|
--- a/libcontainer/process_linux.go
|
|
+++ b/libcontainer/process_linux.go
|
|
@@ -38,7 +38,7 @@ type parentProcess interface {
|
|
wait() (*os.ProcessState, error)
|
|
|
|
// startTime returns the process start time.
|
|
- startTime() (uint64, error)
|
|
+ startTime() (string, error)
|
|
signal(os.Signal) error
|
|
externalDescriptors() []string
|
|
setExternalDescriptors(fds []string)
|
|
@@ -65,7 +65,7 @@ type setnsProcess struct {
|
|
initProcessPid int
|
|
}
|
|
|
|
-func (p *setnsProcess) startTime() (uint64, error) {
|
|
+func (p *setnsProcess) startTime() (string, error) {
|
|
stat, err := system.Stat(p.pid())
|
|
return stat.StartTime, err
|
|
}
|
|
@@ -641,7 +641,7 @@ func (p *initProcess) terminate() error {
|
|
return err
|
|
}
|
|
|
|
-func (p *initProcess) startTime() (uint64, error) {
|
|
+func (p *initProcess) startTime() (string, error) {
|
|
stat, err := system.Stat(p.pid())
|
|
return stat.StartTime, err
|
|
}
|
|
diff --git a/libcontainer/restored_process.go b/libcontainer/restored_process.go
|
|
index cdffbd3..6f26e75 100644
|
|
--- a/libcontainer/restored_process.go
|
|
+++ b/libcontainer/restored_process.go
|
|
@@ -24,7 +24,7 @@ func newRestoredProcess(cmd *exec.Cmd, fds []string) (*restoredProcess, error) {
|
|
|
|
type restoredProcess struct {
|
|
cmd *exec.Cmd
|
|
- processStartTime uint64
|
|
+ processStartTime string
|
|
fds []string
|
|
}
|
|
|
|
@@ -58,7 +58,7 @@ func (p *restoredProcess) wait() (*os.ProcessState, error) {
|
|
return st, nil
|
|
}
|
|
|
|
-func (p *restoredProcess) startTime() (uint64, error) {
|
|
+func (p *restoredProcess) startTime() (string, error) {
|
|
return p.processStartTime, nil
|
|
}
|
|
|
|
@@ -83,7 +83,7 @@ func (p *restoredProcess) forwardChildLogs() chan error {
|
|
// a persisted state.
|
|
type nonChildProcess struct {
|
|
processPid int
|
|
- processStartTime uint64
|
|
+ processStartTime string
|
|
fds []string
|
|
}
|
|
|
|
@@ -103,7 +103,7 @@ func (p *nonChildProcess) wait() (*os.ProcessState, error) {
|
|
return nil, errors.New("restored process cannot be waited on")
|
|
}
|
|
|
|
-func (p *nonChildProcess) startTime() (uint64, error) {
|
|
+func (p *nonChildProcess) startTime() (string, error) {
|
|
return p.processStartTime, nil
|
|
}
|
|
|
|
diff --git a/libcontainer/system/proc.go b/libcontainer/system/proc.go
|
|
index 774443e..768a16e 100644
|
|
--- a/libcontainer/system/proc.go
|
|
+++ b/libcontainer/system/proc.go
|
|
@@ -62,7 +62,7 @@ type Stat_t struct {
|
|
|
|
// StartTime is the number of clock ticks after system boot (since
|
|
// Linux 2.6).
|
|
- StartTime uint64
|
|
+ StartTime string
|
|
}
|
|
|
|
// Stat returns a Stat_t instance for the specified process.
|
|
@@ -118,7 +118,7 @@ func parseStat(data string) (stat Stat_t, err error) {
|
|
if i < 0 {
|
|
return stat, fmt.Errorf("invalid stat data (too short): %q", data)
|
|
}
|
|
- stat.StartTime, err = strconv.ParseUint(data[first:first+i], 10, 64)
|
|
+ stat.StartTime = data[first:first+i]
|
|
if err != nil {
|
|
return stat, fmt.Errorf("invalid stat data (bad start time): %w", err)
|
|
}
|
|
--
|
|
2.33.0
|
|
|