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
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	case task.Event_OOM:
 | 
						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"),
 | 
								containerdErr:       fmt.Errorf("random error"),
 | 
				
			||||||
			expected:            &testMetadata,
 | 
								expected:            &testMetadata,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		"should not update state for non-exited events": {
 | 
							"should not update state for irrelevant events": {
 | 
				
			||||||
			event: &task.Event{
 | 
								event: &task.Event{
 | 
				
			||||||
				ID:         testID,
 | 
									ID:   testID,
 | 
				
			||||||
				Type:       task.Event_OOM,
 | 
									Type: task.Event_PAUSED,
 | 
				
			||||||
				Pid:        testPid,
 | 
									Pid:  testPid,
 | 
				
			||||||
				ExitStatus: 1,
 | 
					 | 
				
			||||||
				ExitedAt:   testExitedAt,
 | 
					 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			metadata:            &testMetadata,
 | 
								metadata:            &testMetadata,
 | 
				
			||||||
			containerdContainer: &testContainerdContainer,
 | 
								containerdContainer: &testContainerdContainer,
 | 
				
			||||||
@@ -123,6 +121,22 @@ func TestHandleEvent(t *testing.T) {
 | 
				
			|||||||
			containerdContainer: &testContainerdContainer,
 | 
								containerdContainer: &testContainerdContainer,
 | 
				
			||||||
			expected:            &testFinishedMetadata,
 | 
								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)
 | 
							t.Logf("TestCase %q", desc)
 | 
				
			||||||
		c := newTestCRIContainerdService()
 | 
							c := newTestCRIContainerdService()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,8 @@ const (
 | 
				
			|||||||
	completeExitReason = "Completed"
 | 
						completeExitReason = "Completed"
 | 
				
			||||||
	// errorExitReason is the exit reason when container exits with code non-zero.
 | 
						// errorExitReason is the exit reason when container exits with code non-zero.
 | 
				
			||||||
	errorExitReason = "Error"
 | 
						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 is the exit code when exit reason is unknown.
 | 
				
			||||||
	unknownExitCode = 255
 | 
						unknownExitCode = 255
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user