Change StateUnknown to StateInit

Signed-off-by: Lantao Liu <lantaol@google.com>
This commit is contained in:
Lantao Liu 2019-02-04 11:17:31 -08:00
parent dd2846d941
commit bfd25c80b4
6 changed files with 21 additions and 21 deletions

View File

@ -213,7 +213,7 @@ func (em *eventMonitor) handleEvent(any interface{}) error {
} else if err != store.ErrNotExist { } else if err != store.ErrNotExist {
return errors.Wrap(err, "can't find container for TaskExit event") return errors.Wrap(err, "can't find container for TaskExit event")
} }
// Use GetAll to include sandbox in unknown state. // Use GetAll to include sandbox in init state.
sb, err := em.c.sandboxStore.GetAll(e.ID) sb, err := em.c.sandboxStore.GetAll(e.ID)
if err == nil { if err == nil {
if err := handleSandboxExit(ctx, e, sb); err != nil { if err := handleSandboxExit(ctx, e, sb); err != nil {
@ -313,13 +313,13 @@ func handleSandboxExit(ctx context.Context, e *eventtypes.TaskExit, sb sandboxst
} }
} }
err = sb.Status.Update(func(status sandboxstore.Status) (sandboxstore.Status, error) { err = sb.Status.Update(func(status sandboxstore.Status) (sandboxstore.Status, error) {
// NOTE(random-liu): We SHOULD NOT change UNKNOWN state here. // NOTE(random-liu): We SHOULD NOT change INIT state here.
// If sandbox state is UNKNOWN when event monitor receives an TaskExit event, // If sandbox state is INIT when event monitor receives an TaskExit event,
// it means that sandbox start has failed. In that case, `RunPodSandbox` will // it means that sandbox start has failed. In that case, `RunPodSandbox` will
// cleanup everything immediately. // cleanup everything immediately.
// Once sandbox state goes out of UNKNOWN, it becomes visable to the user, which // Once sandbox state goes out of INIT, it becomes visable to the user, which
// is not what we want. // is not what we want.
if status.State != sandboxstore.StateUnknown { if status.State != sandboxstore.StateInit {
status.State = sandboxstore.StateNotReady status.State = sandboxstore.StateNotReady
} }
status.Pid = 0 status.Pid = 0

View File

@ -85,7 +85,7 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox
RuntimeHandler: r.GetRuntimeHandler(), RuntimeHandler: r.GetRuntimeHandler(),
}, },
sandboxstore.Status{ sandboxstore.Status{
State: sandboxstore.StateUnknown, State: sandboxstore.StateInit,
}, },
) )
@ -258,7 +258,7 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox
return nil, errors.Wrap(err, "failed to update sandbox created timestamp") return nil, errors.Wrap(err, "failed to update sandbox created timestamp")
} }
// Add sandbox into sandbox store in UNKNOWN state. // Add sandbox into sandbox store in INIT state.
sandbox.Container = container sandbox.Container = container
if err := c.sandboxStore.Add(sandbox); err != nil { if err := c.sandboxStore.Add(sandbox); err != nil {
return nil, errors.Wrapf(err, "failed to add sandbox %+v into store", sandbox) return nil, errors.Wrapf(err, "failed to add sandbox %+v into store", sandbox)
@ -269,7 +269,7 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox
c.sandboxStore.Delete(id) c.sandboxStore.Delete(id)
} }
}() }()
// NOTE(random-liu): Sandbox state only stay in UNKNOWN state after this point // NOTE(random-liu): Sandbox state only stay in INIT state after this point
// and before the end of this function. // and before the end of this function.
// * If `Update` succeeds, sandbox state will become READY in one transaction. // * If `Update` succeeds, sandbox state will become READY in one transaction.
// * If `Update` fails, sandbox will be removed from the store in the defer above. // * If `Update` fails, sandbox will be removed from the store in the defer above.
@ -279,8 +279,8 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox
// * If the task is running, sandbox state will be READY, // * If the task is running, sandbox state will be READY,
// * Or else, sandbox state will be NOTREADY. // * Or else, sandbox state will be NOTREADY.
// //
// In any case, sandbox will leave UNKNOWN state, so it's safe to ignore sandbox // In any case, sandbox will leave INIT state, so it's safe to ignore sandbox
// in UNKNOWN state in other functions. // in INIT state in other functions.
// Start sandbox container in one transaction to avoid race condition with // Start sandbox container in one transaction to avoid race condition with
// event monitor. // event monitor.
@ -293,8 +293,8 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox
// see the sandbox disappear after the defer clean up, which may confuse // see the sandbox disappear after the defer clean up, which may confuse
// them. // them.
// //
// Given so, we should keep the sandbox in UNKNOWN state if `Update` fails, // Given so, we should keep the sandbox in INIT state if `Update` fails,
// and ignore sandbox in UNKNOWN state in all the inspection functions. // and ignore sandbox in INIT state in all the inspection functions.
// Create sandbox task in containerd. // Create sandbox task in containerd.
log.Tracef("Create sandbox container (id=%q, name=%q).", log.Tracef("Create sandbox container (id=%q, name=%q).",

View File

@ -93,7 +93,7 @@ func (s *Store) Get(id string) (Sandbox, error) {
if err != nil { if err != nil {
return sb, err return sb, err
} }
if sb.Status.Get().State == StateUnknown { if sb.Status.Get().State == StateInit {
return Sandbox{}, store.ErrNotExist return Sandbox{}, store.ErrNotExist
} }
return sb, nil return sb, nil
@ -123,7 +123,7 @@ func (s *Store) List() []Sandbox {
defer s.lock.RUnlock() defer s.lock.RUnlock()
var sandboxes []Sandbox var sandboxes []Sandbox
for _, sb := range s.sandboxes { for _, sb := range s.sandboxes {
if sb.Status.Get().State == StateUnknown { if sb.Status.Get().State == StateInit {
continue continue
} }
sandboxes = append(sandboxes, sb) sandboxes = append(sandboxes, sb)

View File

@ -106,7 +106,7 @@ func TestSandboxStore(t *testing.T) {
}, },
NetNSPath: "TestNetNS-3defg", NetNSPath: "TestNetNS-3defg",
}, },
Status{State: StateUnknown}, Status{State: StateInit},
) )
assert := assertlib.New(t) assert := assertlib.New(t)
s := NewStore() s := NewStore()

View File

@ -22,15 +22,15 @@ import (
) )
// State is the sandbox state we use in containerd/cri. // State is the sandbox state we use in containerd/cri.
// It has unknown state defined. // It has init state defined.
type State uint32 type State uint32
const ( const (
// StateUnknown is unknown state of sandbox. Sandbox // StateInit is init state of sandbox. Sandbox
// is in unknown state before its corresponding sandbox container // is in init state before its corresponding sandbox container
// is created. Sandbox in unknown state should be ignored by most // is created. Sandbox in init state should be ignored by most
// functions, unless the caller needs to update sandbox state. // functions, unless the caller needs to update sandbox state.
StateUnknown State = iota StateInit State = iota
// StateReady is ready state, it means sandbox container // StateReady is ready state, it means sandbox container
// is running. // is running.
StateReady StateReady

View File

@ -28,7 +28,7 @@ func TestStatus(t *testing.T) {
testStatus := Status{ testStatus := Status{
Pid: 123, Pid: 123,
CreatedAt: time.Now(), CreatedAt: time.Now(),
State: StateUnknown, State: StateInit,
} }
updateStatus := Status{ updateStatus := Status{
Pid: 456, Pid: 456,