From 46f71118d2b5050533406d4e95ad83a549b987ae Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Mon, 26 Feb 2024 11:57:27 +0000 Subject: [PATCH] fix: fire and forget mothership updates in InstanceService (fixes API timeout errors) --- src/services/InstanceService/index.ts | 29 ++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/services/InstanceService/index.ts b/src/services/InstanceService/index.ts index 2e6ec664..499819b9 100644 --- a/src/services/InstanceService/index.ts +++ b/src/services/InstanceService/index.ts @@ -218,10 +218,22 @@ export const instanceService = mkSingleton( Create serialized client communication functions to prevent race conditions */ const clientLimiter = new Bottleneck({ maxConcurrent: 1 }) - const updateInstanceStatus = clientLimiter.wrap( - client.updateInstanceStatus, + const updateInstance = clientLimiter.wrap( + (id: InstanceId, fields: Partial) => { + dbg(`Updating instance fields`, fields) + return client + .updateInstance(id, fields) + .then(() => { + dbg(`Updated instance fields`, fields) + }) + .catch((e) => { + dbg(`Error updating instance fields`, fields) + error(e) + }) + }, ) - const updateInstance = clientLimiter.wrap(client.updateInstance) + const updateInstanceStatus = (id: InstanceId, status: InstanceStatus) => + updateInstance(id, { status }) /* Handle async setup @@ -251,12 +263,11 @@ export const instanceService = mkSingleton( Start the instance */ dbg(`Starting instance`) - dbg(`Set instance status: starting`) healthyGuard() - await updateInstanceStatus(instance.id, InstanceStatus.Starting) + updateInstanceStatus(instance.id, InstanceStatus.Starting) shutdownManager.add(async () => { dbg(`Shutting down: set instance status: idle`) - await updateInstanceStatus(id, InstanceStatus.Idle).catch(error) + updateInstanceStatus(id, InstanceStatus.Idle) }) healthyGuard() @@ -317,7 +328,7 @@ export const instanceService = mkSingleton( if (UPGRADE_MODE()) { // Noop } else { - await updateInstance(instance.id, { + updateInstance(instance.id, { maintenance: true, }) } @@ -337,7 +348,7 @@ export const instanceService = mkSingleton( error( `Putting instance in maintenance mode because it shut down with return code ${code}. `, ) - await updateInstance(instance.id, { + updateInstance(instance.id, { maintenance: true, }) }) @@ -395,7 +406,7 @@ export const instanceService = mkSingleton( dbg(`${internalUrl} is running`) status = InstanceApiStatus.Healthy healthyGuard() - await updateInstanceStatus(instance.id, InstanceStatus.Running) + updateInstanceStatus(instance.id, InstanceStatus.Running) })().catch((e) => { const detail = (() => { if (e instanceof ClientResponseError) {