From aff9df2cf692fefc3c3c9036c99f728ac663a212 Mon Sep 17 00:00:00 2001 From: Iceber Gu Date: Mon, 1 Mar 2021 18:32:16 +0800 Subject: [PATCH] dockershim: fix started and finished timestamp of the container status Signed-off-by: Iceber Gu --- pkg/kubelet/dockershim/docker_container.go | 13 +++++++------ pkg/kubelet/dockershim/docker_container_test.go | 6 ------ 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/pkg/kubelet/dockershim/docker_container.go b/pkg/kubelet/dockershim/docker_container.go index 3c61e13cf91..156a334e830 100644 --- a/pkg/kubelet/dockershim/docker_container.go +++ b/pkg/kubelet/dockershim/docker_container.go @@ -387,12 +387,15 @@ func (ds *dockerService) ContainerStatus(_ context.Context, req *runtimeapi.Cont // Note: Can't set SeLinuxRelabel }) } - // Interpret container states. + // Interpret container states and convert time to unix timestamps. var state runtimeapi.ContainerState var reason, message string + ct, st, ft := createdAt.UnixNano(), int64(0), int64(0) if r.State.Running { // Container is running. state = runtimeapi.ContainerState_CONTAINER_RUNNING + // If container is not in the exited state, not set finished timestamp + st = startedAt.UnixNano() } else { // Container is *not* running. We need to get more details. // * Case 1: container has run and exited with non-zero finishedAt @@ -402,6 +405,7 @@ func (ds *dockerService) ContainerStatus(_ context.Context, req *runtimeapi.Cont // * Case 3: container has been created, but not started (yet). if !finishedAt.IsZero() { // Case 1 state = runtimeapi.ContainerState_CONTAINER_EXITED + st, ft = startedAt.UnixNano(), finishedAt.UnixNano() switch { case r.State.OOMKilled: // TODO: consider exposing OOMKilled via the runtimeAPI. @@ -415,18 +419,15 @@ func (ds *dockerService) ContainerStatus(_ context.Context, req *runtimeapi.Cont } } else if r.State.ExitCode != 0 { // Case 2 state = runtimeapi.ContainerState_CONTAINER_EXITED - // Adjust finshedAt and startedAt time to createdAt time to avoid + // Adjust finished and started timestamp to createdAt time to avoid // the confusion. - finishedAt, startedAt = createdAt, createdAt + st, ft = createdAt.UnixNano(), createdAt.UnixNano() reason = "ContainerCannotRun" } else { // Case 3 state = runtimeapi.ContainerState_CONTAINER_CREATED } message = r.State.Error } - - // Convert to unix timestamps. - ct, st, ft := createdAt.UnixNano(), startedAt.UnixNano(), finishedAt.UnixNano() exitCode := int32(r.State.ExitCode) metadata, err := parseContainerName(r.Name) diff --git a/pkg/kubelet/dockershim/docker_container_test.go b/pkg/kubelet/dockershim/docker_container_test.go index 9ff4195929c..b1c436a9921 100644 --- a/pkg/kubelet/dockershim/docker_container_test.go +++ b/pkg/kubelet/dockershim/docker_container_test.go @@ -182,9 +182,6 @@ func TestContainerStatus(t *testing.T) { imageName := "iamimage" config := makeContainerConfig(sConfig, "pause", imageName, 0, labels, annotations) - var defaultTime time.Time - dt := defaultTime.UnixNano() - ct, st, ft := dt, dt, dt state := runtimeapi.ContainerState_CONTAINER_CREATED imageRef := DockerImageIDPrefix + imageName // The following variables are not set in FakeDockerClient. @@ -193,9 +190,6 @@ func TestContainerStatus(t *testing.T) { expected := &runtimeapi.ContainerStatus{ State: state, - CreatedAt: ct, - StartedAt: st, - FinishedAt: ft, Metadata: config.Metadata, Image: config.Image, ImageRef: imageRef,