Merge pull request #91 from Random-Liu/support-oom-event
Handle OOM event.
This commit is contained in:
		@@ -120,6 +120,13 @@ func (c *criContainerdService) handleEvent(e *task.Event) {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	case task.Event_OOM:
 | 
			
		||||
		// TODO(random-liu): [P1] Handle OOM event.
 | 
			
		||||
		err := c.containerStore.Update(e.ID, func(meta metadata.ContainerMetadata) (metadata.ContainerMetadata, error) {
 | 
			
		||||
			meta.Reason = oomExitReason
 | 
			
		||||
			return meta, nil
 | 
			
		||||
		})
 | 
			
		||||
		if err != nil && !metadata.IsNotExistError(err) {
 | 
			
		||||
			glog.Errorf("Failed to update container %q oom: %v", e.ID, err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -100,13 +100,11 @@ func TestHandleEvent(t *testing.T) {
 | 
			
		||||
			containerdErr:       fmt.Errorf("random error"),
 | 
			
		||||
			expected:            &testMetadata,
 | 
			
		||||
		},
 | 
			
		||||
		"should not update state for non-exited events": {
 | 
			
		||||
		"should not update state for irrelevant events": {
 | 
			
		||||
			event: &task.Event{
 | 
			
		||||
				ID:         testID,
 | 
			
		||||
				Type:       task.Event_OOM,
 | 
			
		||||
				Pid:        testPid,
 | 
			
		||||
				ExitStatus: 1,
 | 
			
		||||
				ExitedAt:   testExitedAt,
 | 
			
		||||
				ID:   testID,
 | 
			
		||||
				Type: task.Event_PAUSED,
 | 
			
		||||
				Pid:  testPid,
 | 
			
		||||
			},
 | 
			
		||||
			metadata:            &testMetadata,
 | 
			
		||||
			containerdContainer: &testContainerdContainer,
 | 
			
		||||
@@ -123,6 +121,22 @@ func TestHandleEvent(t *testing.T) {
 | 
			
		||||
			containerdContainer: &testContainerdContainer,
 | 
			
		||||
			expected:            &testFinishedMetadata,
 | 
			
		||||
		},
 | 
			
		||||
		"should update exit reason when container is oom killed": {
 | 
			
		||||
			event: &task.Event{
 | 
			
		||||
				ID:   testID,
 | 
			
		||||
				Type: task.Event_OOM,
 | 
			
		||||
			},
 | 
			
		||||
			metadata: &testMetadata,
 | 
			
		||||
			expected: &metadata.ContainerMetadata{
 | 
			
		||||
				ID:        testID,
 | 
			
		||||
				Name:      "test-name",
 | 
			
		||||
				SandboxID: "test-sandbox-id",
 | 
			
		||||
				Pid:       testPid,
 | 
			
		||||
				CreatedAt: testCreatedAt,
 | 
			
		||||
				StartedAt: testStartedAt,
 | 
			
		||||
				Reason:    oomExitReason,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	} {
 | 
			
		||||
		t.Logf("TestCase %q", desc)
 | 
			
		||||
		c := newTestCRIContainerdService()
 | 
			
		||||
 
 | 
			
		||||
@@ -50,6 +50,8 @@ const (
 | 
			
		||||
	completeExitReason = "Completed"
 | 
			
		||||
	// errorExitReason is the exit reason when container exits with code non-zero.
 | 
			
		||||
	errorExitReason = "Error"
 | 
			
		||||
	// oomExitReason is the exit reason when process in container is oom killed.
 | 
			
		||||
	oomExitReason = "OOMKilled"
 | 
			
		||||
	// unknownExitCode is the exit code when exit reason is unknown.
 | 
			
		||||
	unknownExitCode = 255
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user