Use wait instead of TaskExit.
Signed-off-by: Lantao Liu <lantaol@google.com>
This commit is contained in:
@@ -112,7 +112,7 @@ func TestContainerStore(t *testing.T) {
|
||||
ExitCode: 3,
|
||||
Reason: "TestReason-4a333",
|
||||
Message: "TestMessage-4a333",
|
||||
Removing: true,
|
||||
Starting: true,
|
||||
},
|
||||
"4abcd": {
|
||||
Pid: 4,
|
||||
|
||||
@@ -88,6 +88,10 @@ type Status struct {
|
||||
// Human-readable message indicating details about why container is in its
|
||||
// current state.
|
||||
Message string
|
||||
// Starting indicates that the container is in starting state.
|
||||
// This field doesn't need to be checkpointed.
|
||||
// TODO(now): Add unit test.
|
||||
Starting bool `json:"-"`
|
||||
// Removing indicates that the container is in removing state.
|
||||
// This field doesn't need to be checkpointed.
|
||||
Removing bool `json:"-"`
|
||||
|
||||
@@ -75,6 +75,7 @@ func TestStatusEncodeDecode(t *testing.T) {
|
||||
Reason: "test-reason",
|
||||
Message: "test-message",
|
||||
Removing: true,
|
||||
Starting: true,
|
||||
}
|
||||
assert := assertlib.New(t)
|
||||
data, err := s.encode()
|
||||
@@ -82,6 +83,7 @@ func TestStatusEncodeDecode(t *testing.T) {
|
||||
newS := &Status{}
|
||||
assert.NoError(newS.decode(data))
|
||||
s.Removing = false // Removing should not be encoded.
|
||||
s.Starting = false // Starting should not be encoded.
|
||||
assert.Equal(s, newS)
|
||||
|
||||
unsupported, err := json.Marshal(&versionedStatus{
|
||||
|
||||
@@ -86,22 +86,9 @@ func (s *Store) Add(sb Sandbox) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get returns the sandbox with specified id. Returns store.ErrNotExist
|
||||
// if the sandbox doesn't exist.
|
||||
// Get returns the sandbox with specified id.
|
||||
// Returns store.ErrNotExist if the sandbox doesn't exist.
|
||||
func (s *Store) Get(id string) (Sandbox, error) {
|
||||
sb, err := s.GetAll(id)
|
||||
if err != nil {
|
||||
return sb, err
|
||||
}
|
||||
if sb.Status.Get().State == StateInit {
|
||||
return Sandbox{}, store.ErrNotExist
|
||||
}
|
||||
return sb, nil
|
||||
}
|
||||
|
||||
// GetAll returns the sandbox with specified id, including sandbox in unknown
|
||||
// state. Returns store.ErrNotExist if the sandbox doesn't exist.
|
||||
func (s *Store) GetAll(id string) (Sandbox, error) {
|
||||
s.lock.RLock()
|
||||
defer s.lock.RUnlock()
|
||||
id, err := s.idIndex.Get(id)
|
||||
@@ -123,9 +110,6 @@ func (s *Store) List() []Sandbox {
|
||||
defer s.lock.RUnlock()
|
||||
var sandboxes []Sandbox
|
||||
for _, sb := range s.sandboxes {
|
||||
if sb.Status.Get().State == StateInit {
|
||||
continue
|
||||
}
|
||||
sandboxes = append(sandboxes, sb)
|
||||
}
|
||||
return sandboxes
|
||||
|
||||
@@ -106,7 +106,7 @@ func TestSandboxStore(t *testing.T) {
|
||||
},
|
||||
NetNSPath: "TestNetNS-3defg",
|
||||
},
|
||||
Status{State: StateInit},
|
||||
Status{State: StateUnknown},
|
||||
)
|
||||
assert := assertlib.New(t)
|
||||
s := NewStore()
|
||||
@@ -125,21 +125,16 @@ func TestSandboxStore(t *testing.T) {
|
||||
assert.Equal(sb, got)
|
||||
}
|
||||
|
||||
t.Logf("should not be able to get unknown sandbox")
|
||||
t.Logf("should be able to get sandbox in unknown state with Get")
|
||||
got, err := s.Get(unknown.ID)
|
||||
assert.Equal(store.ErrNotExist, err)
|
||||
assert.Equal(Sandbox{}, got)
|
||||
|
||||
t.Logf("should be able to get unknown sandbox with GetAll")
|
||||
got, err = s.GetAll(unknown.ID)
|
||||
assert.NoError(err)
|
||||
assert.Equal(unknown, got)
|
||||
|
||||
t.Logf("should be able to list sandboxes")
|
||||
sbNum := len(sandboxes) + 1
|
||||
sbs := s.List()
|
||||
assert.Len(sbs, len(sandboxes))
|
||||
assert.Len(sbs, sbNum)
|
||||
|
||||
sbNum := len(sandboxes)
|
||||
for testID, v := range sandboxes {
|
||||
truncID := genTruncIndex(testID)
|
||||
|
||||
|
||||
@@ -26,11 +26,11 @@ import (
|
||||
// | |
|
||||
// | Create(Run) | Load
|
||||
// | |
|
||||
// Start +----v----+ |
|
||||
// (failed) | | |
|
||||
// +-------------+ INIT | +-----------+
|
||||
// | | | | |
|
||||
// | +----+----+ | |
|
||||
// Start | |
|
||||
// (failed) | |
|
||||
// +------------------+ +-----------+
|
||||
// | | | |
|
||||
// | | | |
|
||||
// | | | |
|
||||
// | | Start(Run) | |
|
||||
// | | | |
|
||||
@@ -53,23 +53,17 @@ import (
|
||||
// +-------------> DELETED
|
||||
|
||||
// State is the sandbox state we use in containerd/cri.
|
||||
// It includes init and unknown, which are internal states not defined in CRI.
|
||||
// It includes unknown, which is internal states not defined in CRI.
|
||||
// The state mapping from internal states to CRI states:
|
||||
// * ready -> ready
|
||||
// * not ready -> not ready
|
||||
// * init -> not exist
|
||||
// * unknown -> not ready
|
||||
type State uint32
|
||||
|
||||
const (
|
||||
// StateInit is init state of sandbox. Sandbox
|
||||
// is in init state before its corresponding sandbox container
|
||||
// is created. Sandbox in init state should be ignored by most
|
||||
// functions, unless the caller needs to update sandbox state.
|
||||
StateInit State = iota
|
||||
// StateReady is ready state, it means sandbox container
|
||||
// is running.
|
||||
StateReady
|
||||
StateReady = iota
|
||||
// StateNotReady is notready state, it ONLY means sandbox
|
||||
// container is not running.
|
||||
// StopPodSandbox should still be called for NOTREADY sandbox to
|
||||
|
||||
@@ -28,7 +28,7 @@ func TestStatus(t *testing.T) {
|
||||
testStatus := Status{
|
||||
Pid: 123,
|
||||
CreatedAt: time.Now(),
|
||||
State: StateInit,
|
||||
State: StateUnknown,
|
||||
}
|
||||
updateStatus := Status{
|
||||
Pid: 456,
|
||||
|
||||
Reference in New Issue
Block a user