Skip to content

Commit 93eb0eb

Browse files
committed
(wsman-mk2] Prevent partial backups
1 parent ea5adbf commit 93eb0eb

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ func (wsc *WorkspaceController) handleWorkspaceStop(ctx context.Context, ws *wor
269269
}
270270
}
271271

272-
gitStatus, disposeErr := wsc.operations.DisposeWorkspace(ctx, DisposeOptions{
272+
gitStatus, disposeErr := wsc.operations.BackupWorkspace(ctx, DisposeOptions{
273273
Meta: WorkspaceMeta{
274274
Owner: ws.Spec.Ownership.Owner,
275275
WorkspaceId: ws.Spec.Ownership.WorkspaceID,
@@ -289,7 +289,7 @@ func (wsc *WorkspaceController) handleWorkspaceStop(ctx context.Context, ws *wor
289289
ws.Status.GitStatus = toWorkspaceGitStatus(gitStatus)
290290

291291
if disposeErr != nil {
292-
log.Error(disposeErr, "failed to dispose workspace", "name", ws.Name)
292+
log.Error(disposeErr, "failed to backup workspace", "name", ws.Name)
293293
ws.Status.SetCondition(workspacev1.NewWorkspaceConditionBackupFailure(disposeErr.Error()))
294294
} else {
295295
ws.Status.SetCondition(workspacev1.NewWorkspaceConditionBackupComplete())
@@ -302,7 +302,14 @@ func (wsc *WorkspaceController) handleWorkspaceStop(ctx context.Context, ws *wor
302302
wsc.metrics.recordFinalizeTime(time.Since(disposeStart).Seconds(), ws)
303303
}
304304

305-
wsc.emitEvent(ws, "Backup", disposeErr)
305+
wsc.emitEvent(ws, "Backup", fmt.Errorf("failed to backup workspace: %w", disposeErr))
306+
307+
err = wsc.operations.DeleteWorkspace(ctx, ws.Name)
308+
if err != nil {
309+
wsc.emitEvent(ws, "Backup", fmt.Errorf("failed to clean up workspace: %w", err))
310+
return ctrl.Result{}, err
311+
}
312+
306313
return ctrl.Result{}, err
307314
}
308315

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ func (wso *WorkspaceOperations) creator(owner, workspaceId, instanceId string, i
171171
}
172172
}
173173

174-
func (wso *WorkspaceOperations) DisposeWorkspace(ctx context.Context, opts DisposeOptions) (*csapi.GitStatus, error) {
174+
func (wso *WorkspaceOperations) BackupWorkspace(ctx context.Context, opts DisposeOptions) (*csapi.GitStatus, error) {
175175
ws, err := wso.provider.Get(ctx, opts.Meta.InstanceId)
176176
if err != nil {
177177
return nil, fmt.Errorf("cannot find workspace %s during DisposeWorkspace: %w", opts.Meta.InstanceId, err)
@@ -207,16 +207,27 @@ func (wso *WorkspaceOperations) DisposeWorkspace(ctx context.Context, opts Dispo
207207
}
208208
}
209209

210+
return repo, nil
211+
}
212+
213+
func (wso *WorkspaceOperations) DeleteWorkspace(ctx context.Context, instanceID string) error {
214+
ws, err := wso.provider.Get(ctx, instanceID)
215+
if err != nil {
216+
return fmt.Errorf("cannot find workspace %s during DisposeWorkspace: %w", instanceID, err)
217+
}
218+
210219
if err = ws.Dispose(ctx, wso.provider.hooks[session.WorkspaceDisposed]); err != nil {
211220
glog.WithError(err).Error("cannot dispose session")
221+
return err
212222
}
213223

214224
// remove workspace daemon directory in the node
215225
if err := os.RemoveAll(ws.ServiceLocDaemon); err != nil {
216226
glog.WithError(err).Error("cannot delete workspace daemon directory")
227+
return err
217228
}
218229

219-
return repo, nil
230+
return nil
220231
}
221232

222233
func (wso *WorkspaceOperations) SnapshotIDs(ctx context.Context, workspaceID string) (snapshotUrl, snapshotName string, err error) {

0 commit comments

Comments
 (0)