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:
Mathias Fredriksson
2025-06-26 20:12:50 +00:00
committed by GitHub
parent 7a3a6d4d26
commit 73879056f9
+9 -7
View File
@@ -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
}