mirror of
https://github.com/pockethost/pockethost.git
synced 2025-05-30 18:56:39 +00:00
fix: fire and forget mothership updates in InstanceService (fixes API timeout errors)
This commit is contained in:
parent
30a1964a66
commit
46f71118d2
@ -218,10 +218,22 @@ export const instanceService = mkSingleton(
|
|||||||
Create serialized client communication functions to prevent race conditions
|
Create serialized client communication functions to prevent race conditions
|
||||||
*/
|
*/
|
||||||
const clientLimiter = new Bottleneck({ maxConcurrent: 1 })
|
const clientLimiter = new Bottleneck({ maxConcurrent: 1 })
|
||||||
const updateInstanceStatus = clientLimiter.wrap(
|
const updateInstance = clientLimiter.wrap(
|
||||||
client.updateInstanceStatus,
|
(id: InstanceId, fields: Partial<InstanceFields>) => {
|
||||||
|
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
|
Handle async setup
|
||||||
@ -251,12 +263,11 @@ export const instanceService = mkSingleton(
|
|||||||
Start the instance
|
Start the instance
|
||||||
*/
|
*/
|
||||||
dbg(`Starting instance`)
|
dbg(`Starting instance`)
|
||||||
dbg(`Set instance status: starting`)
|
|
||||||
healthyGuard()
|
healthyGuard()
|
||||||
await updateInstanceStatus(instance.id, InstanceStatus.Starting)
|
updateInstanceStatus(instance.id, InstanceStatus.Starting)
|
||||||
shutdownManager.add(async () => {
|
shutdownManager.add(async () => {
|
||||||
dbg(`Shutting down: set instance status: idle`)
|
dbg(`Shutting down: set instance status: idle`)
|
||||||
await updateInstanceStatus(id, InstanceStatus.Idle).catch(error)
|
updateInstanceStatus(id, InstanceStatus.Idle)
|
||||||
})
|
})
|
||||||
healthyGuard()
|
healthyGuard()
|
||||||
|
|
||||||
@ -317,7 +328,7 @@ export const instanceService = mkSingleton(
|
|||||||
if (UPGRADE_MODE()) {
|
if (UPGRADE_MODE()) {
|
||||||
// Noop
|
// Noop
|
||||||
} else {
|
} else {
|
||||||
await updateInstance(instance.id, {
|
updateInstance(instance.id, {
|
||||||
maintenance: true,
|
maintenance: true,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -337,7 +348,7 @@ export const instanceService = mkSingleton(
|
|||||||
error(
|
error(
|
||||||
`Putting instance in maintenance mode because it shut down with return code ${code}. `,
|
`Putting instance in maintenance mode because it shut down with return code ${code}. `,
|
||||||
)
|
)
|
||||||
await updateInstance(instance.id, {
|
updateInstance(instance.id, {
|
||||||
maintenance: true,
|
maintenance: true,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -395,7 +406,7 @@ export const instanceService = mkSingleton(
|
|||||||
dbg(`${internalUrl} is running`)
|
dbg(`${internalUrl} is running`)
|
||||||
status = InstanceApiStatus.Healthy
|
status = InstanceApiStatus.Healthy
|
||||||
healthyGuard()
|
healthyGuard()
|
||||||
await updateInstanceStatus(instance.id, InstanceStatus.Running)
|
updateInstanceStatus(instance.id, InstanceStatus.Running)
|
||||||
})().catch((e) => {
|
})().catch((e) => {
|
||||||
const detail = (() => {
|
const detail = (() => {
|
||||||
if (e instanceof ClientResponseError) {
|
if (e instanceof ClientResponseError) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user