Change the timestamp unit to nanosecond.
This commit is contained in:
		@@ -812,7 +812,7 @@ type PodSandboxStatus struct {
 | 
				
			|||||||
	Metadata *PodSandboxMetadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"`
 | 
						Metadata *PodSandboxMetadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"`
 | 
				
			||||||
	// State of the sandbox.
 | 
						// State of the sandbox.
 | 
				
			||||||
	State *PodSandBoxState `protobuf:"varint,3,opt,name=state,enum=runtime.PodSandBoxState" json:"state,omitempty"`
 | 
						State *PodSandBoxState `protobuf:"varint,3,opt,name=state,enum=runtime.PodSandBoxState" json:"state,omitempty"`
 | 
				
			||||||
	// Creation timestamp of the sandbox
 | 
						// Creation timestamp of the sandbox in nanoseconds.
 | 
				
			||||||
	CreatedAt *int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt" json:"created_at,omitempty"`
 | 
						CreatedAt *int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt" json:"created_at,omitempty"`
 | 
				
			||||||
	// Network contains network status if network is handled by the runtime.
 | 
						// Network contains network status if network is handled by the runtime.
 | 
				
			||||||
	Network *PodSandboxNetworkStatus `protobuf:"bytes,5,opt,name=network" json:"network,omitempty"`
 | 
						Network *PodSandboxNetworkStatus `protobuf:"bytes,5,opt,name=network" json:"network,omitempty"`
 | 
				
			||||||
@@ -971,7 +971,7 @@ type PodSandbox struct {
 | 
				
			|||||||
	Metadata *PodSandboxMetadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"`
 | 
						Metadata *PodSandboxMetadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"`
 | 
				
			||||||
	// The state of the PodSandbox
 | 
						// The state of the PodSandbox
 | 
				
			||||||
	State *PodSandBoxState `protobuf:"varint,3,opt,name=state,enum=runtime.PodSandBoxState" json:"state,omitempty"`
 | 
						State *PodSandBoxState `protobuf:"varint,3,opt,name=state,enum=runtime.PodSandBoxState" json:"state,omitempty"`
 | 
				
			||||||
	// Creation timestamps of the sandbox
 | 
						// Creation timestamps of the sandbox in nanoseconds
 | 
				
			||||||
	CreatedAt *int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt" json:"created_at,omitempty"`
 | 
						CreatedAt *int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt" json:"created_at,omitempty"`
 | 
				
			||||||
	// The labels of the PodSandbox
 | 
						// The labels of the PodSandbox
 | 
				
			||||||
	Labels map[string]string `protobuf:"bytes,5,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 | 
						Labels map[string]string `protobuf:"bytes,5,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 | 
				
			||||||
@@ -1740,7 +1740,7 @@ type Container struct {
 | 
				
			|||||||
	ImageRef *string `protobuf:"bytes,5,opt,name=image_ref,json=imageRef" json:"image_ref,omitempty"`
 | 
						ImageRef *string `protobuf:"bytes,5,opt,name=image_ref,json=imageRef" json:"image_ref,omitempty"`
 | 
				
			||||||
	// State is the state of the container.
 | 
						// State is the state of the container.
 | 
				
			||||||
	State *ContainerState `protobuf:"varint,6,opt,name=state,enum=runtime.ContainerState" json:"state,omitempty"`
 | 
						State *ContainerState `protobuf:"varint,6,opt,name=state,enum=runtime.ContainerState" json:"state,omitempty"`
 | 
				
			||||||
	// Creation time of the container.
 | 
						// Creation time of the container in nanoseconds.
 | 
				
			||||||
	CreatedAt *int64 `protobuf:"varint,7,opt,name=created_at,json=createdAt" json:"created_at,omitempty"`
 | 
						CreatedAt *int64 `protobuf:"varint,7,opt,name=created_at,json=createdAt" json:"created_at,omitempty"`
 | 
				
			||||||
	// Labels are key value pairs that may be used to scope and select individual resources.
 | 
						// Labels are key value pairs that may be used to scope and select individual resources.
 | 
				
			||||||
	Labels map[string]string `protobuf:"bytes,8,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 | 
						Labels map[string]string `protobuf:"bytes,8,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
 | 
				
			||||||
@@ -1862,11 +1862,11 @@ type ContainerStatus struct {
 | 
				
			|||||||
	Metadata *ContainerMetadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"`
 | 
						Metadata *ContainerMetadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"`
 | 
				
			||||||
	// Status of the container.
 | 
						// Status of the container.
 | 
				
			||||||
	State *ContainerState `protobuf:"varint,3,opt,name=state,enum=runtime.ContainerState" json:"state,omitempty"`
 | 
						State *ContainerState `protobuf:"varint,3,opt,name=state,enum=runtime.ContainerState" json:"state,omitempty"`
 | 
				
			||||||
	// Creation time of the container.
 | 
						// Creation time of the container in nanoseconds.
 | 
				
			||||||
	CreatedAt *int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt" json:"created_at,omitempty"`
 | 
						CreatedAt *int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt" json:"created_at,omitempty"`
 | 
				
			||||||
	// Start time of the container.
 | 
						// Start time of the container in nanoseconds.
 | 
				
			||||||
	StartedAt *int64 `protobuf:"varint,5,opt,name=started_at,json=startedAt" json:"started_at,omitempty"`
 | 
						StartedAt *int64 `protobuf:"varint,5,opt,name=started_at,json=startedAt" json:"started_at,omitempty"`
 | 
				
			||||||
	// Finish time of the container.
 | 
						// Finish time of the container in nanoseconds.
 | 
				
			||||||
	FinishedAt *int64 `protobuf:"varint,6,opt,name=finished_at,json=finishedAt" json:"finished_at,omitempty"`
 | 
						FinishedAt *int64 `protobuf:"varint,6,opt,name=finished_at,json=finishedAt" json:"finished_at,omitempty"`
 | 
				
			||||||
	// Exit code of the container.
 | 
						// Exit code of the container.
 | 
				
			||||||
	ExitCode *int32 `protobuf:"varint,7,opt,name=exit_code,json=exitCode" json:"exit_code,omitempty"`
 | 
						ExitCode *int32 `protobuf:"varint,7,opt,name=exit_code,json=exitCode" json:"exit_code,omitempty"`
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -251,7 +251,7 @@ message PodSandboxStatus {
 | 
				
			|||||||
    optional PodSandboxMetadata metadata = 2;
 | 
					    optional PodSandboxMetadata metadata = 2;
 | 
				
			||||||
    // State of the sandbox.
 | 
					    // State of the sandbox.
 | 
				
			||||||
    optional PodSandBoxState state = 3;
 | 
					    optional PodSandBoxState state = 3;
 | 
				
			||||||
    // Creation timestamp of the sandbox
 | 
					    // Creation timestamp of the sandbox in nanoseconds.
 | 
				
			||||||
    optional int64 created_at = 4;
 | 
					    optional int64 created_at = 4;
 | 
				
			||||||
    // Network contains network status if network is handled by the runtime.
 | 
					    // Network contains network status if network is handled by the runtime.
 | 
				
			||||||
    optional PodSandboxNetworkStatus network = 5;
 | 
					    optional PodSandboxNetworkStatus network = 5;
 | 
				
			||||||
@@ -296,7 +296,7 @@ message PodSandbox {
 | 
				
			|||||||
    optional PodSandboxMetadata metadata = 2;
 | 
					    optional PodSandboxMetadata metadata = 2;
 | 
				
			||||||
    // The state of the PodSandbox
 | 
					    // The state of the PodSandbox
 | 
				
			||||||
    optional PodSandBoxState state = 3;
 | 
					    optional PodSandBoxState state = 3;
 | 
				
			||||||
    // Creation timestamps of the sandbox
 | 
					    // Creation timestamps of the sandbox in nanoseconds
 | 
				
			||||||
    optional int64 created_at = 4;
 | 
					    optional int64 created_at = 4;
 | 
				
			||||||
    // The labels of the PodSandbox
 | 
					    // The labels of the PodSandbox
 | 
				
			||||||
    map<string, string> labels = 5;
 | 
					    map<string, string> labels = 5;
 | 
				
			||||||
@@ -533,7 +533,7 @@ message Container {
 | 
				
			|||||||
    optional string image_ref = 5;
 | 
					    optional string image_ref = 5;
 | 
				
			||||||
    // State is the state of the container.
 | 
					    // State is the state of the container.
 | 
				
			||||||
    optional ContainerState state = 6;
 | 
					    optional ContainerState state = 6;
 | 
				
			||||||
    // Creation time of the container.
 | 
					    // Creation time of the container in nanoseconds.
 | 
				
			||||||
    optional int64 created_at = 7;
 | 
					    optional int64 created_at = 7;
 | 
				
			||||||
    // Labels are key value pairs that may be used to scope and select individual resources.
 | 
					    // Labels are key value pairs that may be used to scope and select individual resources.
 | 
				
			||||||
    map<string, string> labels = 8;
 | 
					    map<string, string> labels = 8;
 | 
				
			||||||
@@ -560,11 +560,11 @@ message ContainerStatus {
 | 
				
			|||||||
    optional ContainerMetadata metadata = 2;
 | 
					    optional ContainerMetadata metadata = 2;
 | 
				
			||||||
    // Status of the container.
 | 
					    // Status of the container.
 | 
				
			||||||
    optional ContainerState state = 3;
 | 
					    optional ContainerState state = 3;
 | 
				
			||||||
    // Creation time of the container.
 | 
					    // Creation time of the container in nanoseconds.
 | 
				
			||||||
    optional int64 created_at = 4;
 | 
					    optional int64 created_at = 4;
 | 
				
			||||||
    // Start time of the container.
 | 
					    // Start time of the container in nanoseconds.
 | 
				
			||||||
    optional int64 started_at = 5;
 | 
					    optional int64 started_at = 5;
 | 
				
			||||||
    // Finish time of the container.
 | 
					    // Finish time of the container in nanoseconds.
 | 
				
			||||||
    optional int64 finished_at = 6;
 | 
					    optional int64 finished_at = 6;
 | 
				
			||||||
    // Exit code of the container.
 | 
					    // Exit code of the container.
 | 
				
			||||||
    optional int32 exit_code = 7;
 | 
					    optional int32 exit_code = 7;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ package dockershim
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dockertypes "github.com/docker/engine-api/types"
 | 
						dockertypes "github.com/docker/engine-api/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -57,6 +58,8 @@ func toRuntimeAPIContainer(c *dockertypes.Container) (*runtimeApi.Container, err
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	labels, annotations := extractLabels(c.Labels)
 | 
						labels, annotations := extractLabels(c.Labels)
 | 
				
			||||||
	sandboxID := c.Labels[sandboxIDLabelKey]
 | 
						sandboxID := c.Labels[sandboxIDLabelKey]
 | 
				
			||||||
 | 
						// The timestamp in dockertypes.Container is in seconds.
 | 
				
			||||||
 | 
						createdAt := c.Created * int64(time.Second)
 | 
				
			||||||
	return &runtimeApi.Container{
 | 
						return &runtimeApi.Container{
 | 
				
			||||||
		Id:           &c.ID,
 | 
							Id:           &c.ID,
 | 
				
			||||||
		PodSandboxId: &sandboxID,
 | 
							PodSandboxId: &sandboxID,
 | 
				
			||||||
@@ -64,6 +67,7 @@ func toRuntimeAPIContainer(c *dockertypes.Container) (*runtimeApi.Container, err
 | 
				
			|||||||
		Image:        &runtimeApi.ImageSpec{Image: &c.Image},
 | 
							Image:        &runtimeApi.ImageSpec{Image: &c.Image},
 | 
				
			||||||
		ImageRef:     &c.ImageID,
 | 
							ImageRef:     &c.ImageID,
 | 
				
			||||||
		State:        &state,
 | 
							State:        &state,
 | 
				
			||||||
 | 
							CreatedAt:    &createdAt,
 | 
				
			||||||
		Labels:       labels,
 | 
							Labels:       labels,
 | 
				
			||||||
		Annotations:  annotations,
 | 
							Annotations:  annotations,
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
@@ -117,11 +121,13 @@ func toRuntimeAPISandbox(c *dockertypes.Container) (*runtimeApi.PodSandbox, erro
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	labels, annotations := extractLabels(c.Labels)
 | 
						labels, annotations := extractLabels(c.Labels)
 | 
				
			||||||
 | 
						// The timestamp in dockertypes.Container is in seconds.
 | 
				
			||||||
 | 
						createdAt := c.Created * int64(time.Second)
 | 
				
			||||||
	return &runtimeApi.PodSandbox{
 | 
						return &runtimeApi.PodSandbox{
 | 
				
			||||||
		Id:          &c.ID,
 | 
							Id:          &c.ID,
 | 
				
			||||||
		Metadata:    metadata,
 | 
							Metadata:    metadata,
 | 
				
			||||||
		State:       &state,
 | 
							State:       &state,
 | 
				
			||||||
		CreatedAt:   &c.Created,
 | 
							CreatedAt:   &createdAt,
 | 
				
			||||||
		Labels:      labels,
 | 
							Labels:      labels,
 | 
				
			||||||
		Annotations: annotations,
 | 
							Annotations: annotations,
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,6 +61,7 @@ func TestListContainers(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	expected := []*runtimeApi.Container{}
 | 
						expected := []*runtimeApi.Container{}
 | 
				
			||||||
	state := runtimeApi.ContainerState_RUNNING
 | 
						state := runtimeApi.ContainerState_RUNNING
 | 
				
			||||||
 | 
						var createdAt int64 = 0
 | 
				
			||||||
	for i := range configs {
 | 
						for i := range configs {
 | 
				
			||||||
		// We don't care about the sandbox id; pass a bogus one.
 | 
							// We don't care about the sandbox id; pass a bogus one.
 | 
				
			||||||
		sandboxID := fmt.Sprintf("sandboxid%d", i)
 | 
							sandboxID := fmt.Sprintf("sandboxid%d", i)
 | 
				
			||||||
@@ -77,6 +78,7 @@ func TestListContainers(t *testing.T) {
 | 
				
			|||||||
			Id:           &id,
 | 
								Id:           &id,
 | 
				
			||||||
			PodSandboxId: &sandboxID,
 | 
								PodSandboxId: &sandboxID,
 | 
				
			||||||
			State:        &state,
 | 
								State:        &state,
 | 
				
			||||||
 | 
								CreatedAt:    &createdAt,
 | 
				
			||||||
			Image:        configs[i].Image,
 | 
								Image:        configs[i].Image,
 | 
				
			||||||
			ImageRef:     &imageRef,
 | 
								ImageRef:     &imageRef,
 | 
				
			||||||
			Labels:       configs[i].Labels,
 | 
								Labels:       configs[i].Labels,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -379,16 +379,16 @@ func (m *kubeGenericRuntimeManager) getPodContainerStatuses(uid kubetypes.UID, n
 | 
				
			|||||||
			Hash:         annotatedInfo.Hash,
 | 
								Hash:         annotatedInfo.Hash,
 | 
				
			||||||
			RestartCount: annotatedInfo.RestartCount,
 | 
								RestartCount: annotatedInfo.RestartCount,
 | 
				
			||||||
			State:        toKubeContainerState(c.GetState()),
 | 
								State:        toKubeContainerState(c.GetState()),
 | 
				
			||||||
			CreatedAt:    time.Unix(status.GetCreatedAt(), 0),
 | 
								CreatedAt:    time.Unix(0, status.GetCreatedAt()),
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if c.GetState() == runtimeApi.ContainerState_RUNNING {
 | 
							if c.GetState() == runtimeApi.ContainerState_RUNNING {
 | 
				
			||||||
			cStatus.StartedAt = time.Unix(status.GetStartedAt(), 0)
 | 
								cStatus.StartedAt = time.Unix(0, status.GetStartedAt())
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			cStatus.Reason = status.GetReason()
 | 
								cStatus.Reason = status.GetReason()
 | 
				
			||||||
			cStatus.Message = status.GetMessage()
 | 
								cStatus.Message = status.GetMessage()
 | 
				
			||||||
			cStatus.ExitCode = int(status.GetExitCode())
 | 
								cStatus.ExitCode = int(status.GetExitCode())
 | 
				
			||||||
			cStatus.FinishedAt = time.Unix(status.GetFinishedAt(), 0)
 | 
								cStatus.FinishedAt = time.Unix(0, status.GetFinishedAt())
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		tMessage := getTerminationMessage(status, cStatus, annotatedInfo.TerminationMessagePath)
 | 
							tMessage := getTerminationMessage(status, cStatus, annotatedInfo.TerminationMessagePath)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -141,7 +141,7 @@ func (cgc *containerGC) evictableContainers(minAge time.Duration) (containersByE
 | 
				
			|||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		createdAt := time.Unix(container.GetCreatedAt(), 0)
 | 
							createdAt := time.Unix(0, container.GetCreatedAt())
 | 
				
			||||||
		if newestGCTime.Before(createdAt) {
 | 
							if newestGCTime.Before(createdAt) {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user