From 7ad23c3443cf1d10050049530aa8b00e8ae7af02 Mon Sep 17 00:00:00 2001
From: Alexey Zinoviev <alexey.zinoviev@xored.com>
Date: Tue, 10 Sep 2024 15:15:53 +0400
Subject: [PATCH] Qfix default workspace mode (#6508)

Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>
---
 server/account/src/operations.ts        | 23 ++++++++++++++++++++---
 server/workspace-service/src/service.ts |  4 +++-
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/server/account/src/operations.ts b/server/account/src/operations.ts
index 3f735d996c..f989c57a80 100644
--- a/server/account/src/operations.ts
+++ b/server/account/src/operations.ts
@@ -1490,11 +1490,16 @@ export async function getPendingWorkspace (
       operationQuery,
       attemptsQuery,
       region !== '' ? { region } : defaultRegionQuery,
-      { lastProcessingTime: { $lt: Date.now() - processingTimeoutMs } }
+      {
+        $or: [
+          { lastProcessingTime: { $exists: false } },
+          { lastProcessingTime: { $lt: Date.now() - processingTimeoutMs } }
+        ]
+      }
     ]
   }
 
-  return (
+  const result =
     (await wsCollection.findOneAndUpdate(
       query,
       {
@@ -1512,7 +1517,19 @@ export async function getPendingWorkspace (
         }
       }
     )) ?? undefined
-  )
+
+  if (result != null) {
+    ctx.info('getPendingWorkspace', {
+      workspaceId: result.workspace,
+      mode: result.mode,
+      workspaceName: result.workspaceName,
+      operation,
+      region,
+      version
+    })
+  }
+
+  return result
 }
 
 /**
diff --git a/server/workspace-service/src/service.ts b/server/workspace-service/src/service.ts
index a6399c761e..1ce0a6c3c3 100644
--- a/server/workspace-service/src/service.ts
+++ b/server/workspace-service/src/service.ts
@@ -220,7 +220,7 @@ export class WorkspaceWorker {
     workspace: BaseWorkspaceInfo,
     opt: WorkspaceOptions
   ): Promise<void> {
-    switch (workspace.mode) {
+    switch (workspace.mode ?? 'active') {
       case 'creating':
       case 'pending-creation':
         // We need to either start workspace creation
@@ -237,6 +237,8 @@ export class WorkspaceWorker {
         // Seems we failed to delete, so let's restore deletion.
         // TODO: move from account
         break
+      default:
+        ctx.error('Unknown workspace mode', { workspace: workspace.workspace, mode: workspace.mode })
     }
   }