Skip to content

Commit 12f3c91

Browse files
authored
[ws-manager-mk2] Ensure workspace enters stopped (#16479)
1 parent 1ca1aa6 commit 12f3c91

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

components/ws-daemon/pkg/controller/workspace_operations.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func NewWorkspaceOperations(config content.Config, store *session.Store, reg pro
8686
func (wso *WorkspaceOperations) InitWorkspaceContent(ctx context.Context, options InitContentOptions) (bool, string, error) {
8787
res, err := wso.store.NewWorkspace(
8888
ctx, options.Meta.InstanceId, filepath.Join(wso.store.Location, options.Meta.InstanceId),
89-
wso.creator(options.Meta.Owner, options.Meta.WorkspaceId, options.Meta.InstanceId, options.Initializer, options.Headless))
89+
wso.creator(options.Meta.Owner, options.Meta.WorkspaceId, options.Meta.InstanceId, options.Initializer, false))
9090
if errors.Is(err, storage.ErrNotFound) {
9191
return false, "", nil
9292
}

components/ws-manager-mk2/controllers/status.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,10 @@ func updateWorkspaceStatus(ctx context.Context, workspace *workspacev1.Workspace
171171
case workspace.IsHeadless() && (pod.Status.Phase == corev1.PodSucceeded || pod.Status.Phase == corev1.PodFailed):
172172
workspace.Status.Phase = workspacev1.WorkspacePhaseStopping
173173

174+
if isDisposalFinished(workspace) {
175+
workspace.Status.Phase = workspacev1.WorkspacePhaseStopped
176+
}
177+
174178
case pod.Status.Phase == corev1.PodUnknown:
175179
workspace.Status.Phase = workspacev1.WorkspacePhaseUnknown
176180

components/ws-manager-mk2/controllers/workspace_controller.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,16 @@ func (r *WorkspaceReconciler) actOnStatus(ctx context.Context, workspace *worksp
241241
return ctrl.Result{Requeue: true}, err
242242
}
243243

244+
case workspace.Status.Headless && workspace.Status.Phase == workspacev1.WorkspacePhaseStopped && !isPodBeingDeleted(pod):
245+
// Workspace was requested to be deleted, propagate by deleting the Pod.
246+
// The Pod deletion will then trigger workspace disposal steps.
247+
err := r.Client.Delete(ctx, pod)
248+
if errors.IsNotFound(err) {
249+
// pod is gone - nothing to do here
250+
} else {
251+
return ctrl.Result{Requeue: true}, err
252+
}
253+
244254
// we've disposed already - try to remove the finalizer and call it a day
245255
case workspace.Status.Phase == workspacev1.WorkspacePhaseStopped:
246256
hadFinalizer := controllerutil.ContainsFinalizer(pod, workspacev1.GitpodFinalizerName)

0 commit comments

Comments
 (0)