mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix(agent/agentcontainers): refresh containers before status change (#18620)
The previous method of refreshing after we change the devcontainer status introduced an intermediary state where the devcontainer might not yet have been assigned a container and will flicker as stopped before going into running.
This commit is contained in:
@@ -1002,6 +1002,15 @@ func (api *API) CreateDevcontainer(workspaceFolder, configPath string, opts ...D
|
||||
|
||||
logger.Info(ctx, "devcontainer created successfully")
|
||||
|
||||
// Ensure the container list is updated immediately after creation.
|
||||
// This makes sure that dc.Container is populated before we acquire
|
||||
// the lock avoiding a temporary inconsistency in the API state
|
||||
// where status is running, but the container is nil.
|
||||
if err := api.RefreshContainers(ctx); err != nil {
|
||||
logger.Error(ctx, "failed to trigger immediate refresh after devcontainer creation", slog.Error(err))
|
||||
return xerrors.Errorf("refresh containers: %w", err)
|
||||
}
|
||||
|
||||
api.mu.Lock()
|
||||
dc = api.knownDevcontainers[dc.WorkspaceFolder]
|
||||
// Update the devcontainer status to Running or Stopped based on the
|
||||
@@ -1020,13 +1029,6 @@ func (api *API) CreateDevcontainer(workspaceFolder, configPath string, opts ...D
|
||||
api.knownDevcontainers[dc.WorkspaceFolder] = dc
|
||||
api.mu.Unlock()
|
||||
|
||||
// Ensure an immediate refresh to accurately reflect the
|
||||
// devcontainer state after recreation.
|
||||
if err := api.RefreshContainers(ctx); err != nil {
|
||||
logger.Error(ctx, "failed to trigger immediate refresh after devcontainer creation", slog.Error(err))
|
||||
return xerrors.Errorf("refresh containers: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user