diff --git a/packages/daemon/src/server.ts b/packages/daemon/src/server.ts index 6be7e4a3..0ef1fb17 100644 --- a/packages/daemon/src/server.ts +++ b/packages/daemon/src/server.ts @@ -61,9 +61,6 @@ global.EventSource = require('eventsource') version: DAEMON_PB_SEMVER, name: PUBLIC_MOTHERSHIP_NAME, slug: PUBLIC_MOTHERSHIP_NAME, - onUnexpectedStop: () => { - error(`migrate had an unexpected stop. Check it out`) - }, }, { logger }, ) @@ -71,20 +68,14 @@ global.EventSource = require('eventsource') info(`Migrating done`) } info(`Serving`) - const { url } = await pbService.spawn( - { - command: 'serve', - isMothership: true, - version: DAEMON_PB_SEMVER, - name: PUBLIC_MOTHERSHIP_NAME, - slug: PUBLIC_MOTHERSHIP_NAME, - port: MOTHERSHIP_PORT, - onUnexpectedStop: () => { - error(`serve had an unexpected stop. Check it out`) - }, - }, - { logger }, - ) + const { url } = await pbService.spawn({ + command: 'serve', + isMothership: true, + version: DAEMON_PB_SEMVER, + name: PUBLIC_MOTHERSHIP_NAME, + slug: PUBLIC_MOTHERSHIP_NAME, + port: MOTHERSHIP_PORT, + }) /** * Launch services diff --git a/packages/daemon/src/services/InstanceService/index.ts b/packages/daemon/src/services/InstanceService/index.ts index 68e83660..ef787930 100644 --- a/packages/daemon/src/services/InstanceService/index.ts +++ b/packages/daemon/src/services/InstanceService/index.ts @@ -257,26 +257,6 @@ export const instanceService = mkSingleton( port: newPort, env: instance.secrets || {}, version, - onUnexpectedStop: (code) => { - warn( - `PocketBase processes exited unexpectedly with ${code}. Putting in maintenance mode.`, - ) - shutdownManager.add(async () => { - await updateInstance(instance.id, { - maintenance: true, - }) - userInstanceLogger.error( - `Putting instance in maintenance mode because it shut down with return code ${code}. `, - ) - }) - setImmediate(() => { - _safeShutdown( - new Error( - `PocketBase processes exited unexpectedly with ${code}. Putting in maintenance mode.`, - ), - ).catch(error) - }) - }, }) return cp } catch (e) { @@ -289,10 +269,27 @@ export const instanceService = mkSingleton( ) } })() - const { pid: _pid } = childProcess + const { pid: _pid, exited } = childProcess const pid = _pid() + exited.then((code) => { + dbg(`PocketBase processes exited with ${code}.`) + if (code !== 0) { + shutdownManager.add(async () => { + userInstanceLogger.error( + `Putting instance in maintenance mode because it shut down with return code ${code}. `, + ) + await updateInstance(instance.id, { + maintenance: true, + }) + }) + } + setImmediate(() => { + _safeShutdown().catch(error) + }) + }) assertTruthy(pid, `Expected PID here but got ${pid}`) dbg(`PocketBase instance PID: ${pid}`) + systemInstanceLogger.breadcrumb(`pid:${pid}`) shutdownManager.add(async () => { dbg(`killing ${id}`) diff --git a/packages/daemon/src/services/PocketBaseService/index.ts b/packages/daemon/src/services/PocketBaseService/index.ts index dcdebbe7..18835d4a 100644 --- a/packages/daemon/src/services/PocketBaseService/index.ts +++ b/packages/daemon/src/services/PocketBaseService/index.ts @@ -39,7 +39,6 @@ export type SpawnConfig = { env?: Env stdout?: MemoryStream stderr?: MemoryStream - onUnexpectedStop: (code: number | null) => void } export type PocketbaseServiceApi = AsyncReturnType< typeof createPocketbaseService @@ -91,7 +90,6 @@ export const createPocketbaseService = async ( name, slug, port, - onUnexpectedStop, isMothership, env, stderr, @@ -208,7 +206,6 @@ export const createPocketbaseService = async ( `Unexpected stop with code ${StatusCode} and error ${err}`, ) error(`${slug} stopped unexpectedly with code ${err}`, data) - onUnexpectedStop?.(StatusCode) resolveExit(StatusCode || 999) } else { resolveExit(0) @@ -223,7 +220,6 @@ export const createPocketbaseService = async ( if (!container) { iLogger.error(`Could not start container`) error(`${slug} could not start container`) - onUnexpectedStop?.(999) resolveExit(999) } }) @@ -249,9 +245,8 @@ export const createPocketbaseService = async ( kill: async () => { unsub() if (!container) { - throw new Error( - `Attempt to kill a PocketBase process that was never running.`, - ) + dbg(`Already exited`) + return } iLogger.info(`Stopping instance`) await container.stop()