velocious 1.0.556 → 1.0.558

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +16 -2
  2. package/build/background-jobs/forked-runner-child.js +20 -2
  3. package/build/background-jobs/main.js +35 -12
  4. package/build/background-jobs/pooled-runner-child.js +20 -2
  5. package/build/background-jobs/runner-graceful-shutdown.js +73 -0
  6. package/build/background-jobs/worker.js +53 -28
  7. package/build/configuration.js +77 -12
  8. package/build/database/advisory-lock-runner.js +12 -3
  9. package/build/database/record/index.js +12 -0
  10. package/build/frontend-models/base.js +192 -41
  11. package/build/http-client/websocket-client.js +48 -0
  12. package/build/src/background-jobs/forked-runner-child.js +20 -3
  13. package/build/src/background-jobs/main.d.ts +14 -1
  14. package/build/src/background-jobs/main.d.ts.map +1 -1
  15. package/build/src/background-jobs/main.js +37 -14
  16. package/build/src/background-jobs/pooled-runner-child.js +19 -3
  17. package/build/src/background-jobs/runner-graceful-shutdown.d.ts +49 -0
  18. package/build/src/background-jobs/runner-graceful-shutdown.d.ts.map +1 -0
  19. package/build/src/background-jobs/runner-graceful-shutdown.js +70 -0
  20. package/build/src/background-jobs/worker.d.ts +18 -1
  21. package/build/src/background-jobs/worker.d.ts.map +1 -1
  22. package/build/src/background-jobs/worker.js +55 -31
  23. package/build/src/configuration.d.ts +29 -0
  24. package/build/src/configuration.d.ts.map +1 -1
  25. package/build/src/configuration.js +71 -11
  26. package/build/src/database/advisory-lock-runner.d.ts.map +1 -1
  27. package/build/src/database/advisory-lock-runner.js +12 -4
  28. package/build/src/database/record/index.d.ts.map +1 -1
  29. package/build/src/database/record/index.js +9 -1
  30. package/build/src/frontend-models/base.d.ts +13 -4
  31. package/build/src/frontend-models/base.d.ts.map +1 -1
  32. package/build/src/frontend-models/base.js +173 -44
  33. package/build/src/http-client/websocket-client.d.ts +3 -0
  34. package/build/src/http-client/websocket-client.d.ts.map +1 -1
  35. package/build/src/http-client/websocket-client.js +42 -1
  36. package/build/src/tenants/tenant.d.ts +20 -9
  37. package/build/src/tenants/tenant.d.ts.map +1 -1
  38. package/build/src/tenants/tenant.js +47 -12
  39. package/build/src/testing/factory/factory-registry.d.ts +22 -3
  40. package/build/src/testing/factory/factory-registry.d.ts.map +1 -1
  41. package/build/src/testing/factory/factory-registry.js +32 -9
  42. package/build/src/testing/factory/factory-runner.d.ts +16 -4
  43. package/build/src/testing/factory/factory-runner.d.ts.map +1 -1
  44. package/build/src/testing/factory/factory-runner.js +33 -10
  45. package/build/src/utils/shutdown-lifecycle.d.ts +12 -0
  46. package/build/src/utils/shutdown-lifecycle.d.ts.map +1 -0
  47. package/build/src/utils/shutdown-lifecycle.js +36 -0
  48. package/build/tenants/tenant.js +51 -11
  49. package/build/testing/factory/factory-registry.js +33 -8
  50. package/build/testing/factory/factory-runner.js +38 -12
  51. package/build/tsconfig.tsbuildinfo +1 -1
  52. package/build/utils/shutdown-lifecycle.js +41 -0
  53. package/package.json +5 -4
  54. package/src/background-jobs/forked-runner-child.js +20 -2
  55. package/src/background-jobs/main.js +35 -12
  56. package/src/background-jobs/pooled-runner-child.js +20 -2
  57. package/src/background-jobs/runner-graceful-shutdown.js +73 -0
  58. package/src/background-jobs/worker.js +53 -28
  59. package/src/configuration.js +77 -12
  60. package/src/database/advisory-lock-runner.js +12 -3
  61. package/src/database/record/index.js +12 -0
  62. package/src/frontend-models/base.js +192 -41
  63. package/src/http-client/websocket-client.js +48 -0
  64. package/src/tenants/tenant.js +51 -11
  65. package/src/testing/factory/factory-registry.js +33 -8
  66. package/src/testing/factory/factory-runner.js +38 -12
  67. package/src/utils/shutdown-lifecycle.js +41 -0
@@ -1,8 +1,24 @@
1
1
  // @ts-check
2
2
  import runJobPayload, { BackgroundJobPerformedFailure } from "./job-runner.js";
3
+ import { closeRunnerConnections, currentConfigurationOrNull } from "./runner-graceful-shutdown.js";
3
4
  import setRunnerProcessTitle from "./runner-process-title.js";
4
5
  const BASE_PROCESS_TITLE = "velocious background-jobs-runner";
5
6
  setRunnerProcessTitle();
7
+ let shuttingDown = false;
8
+ /**
9
+ * Closes the runner's connections — releasing any advisory lock a killed-mid-pass
10
+ * job still holds — before exiting, instead of leaving a half-open session that
11
+ * keeps the lock until the DB server's `wait_timeout`.
12
+ * @param {number} exitCode - Process exit code.
13
+ * @returns {Promise<void>}
14
+ */
15
+ async function shutdownRunner(exitCode) {
16
+ if (shuttingDown)
17
+ return;
18
+ shuttingDown = true;
19
+ await closeRunnerConnections(currentConfigurationOrNull());
20
+ process.exit(exitCode);
21
+ }
6
22
  /**
7
23
  * Ids of jobs currently running in this child. A pooled child runs up to
8
24
  * `pooledRunnerConcurrency` jobs at once (the worker only dispatches within that
@@ -102,7 +118,7 @@ function handleMessage(message) {
102
118
  void runJob(message.payload);
103
119
  }
104
120
  process.on("message", (message) => handleMessage(message));
105
- process.once("disconnect", () => process.exit(0));
121
+ process.once("disconnect", () => void shutdownRunner(0));
106
122
  for (const signal of ["SIGTERM", "SIGINT"])
107
- process.once(signal, () => process.exit(1));
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbGVkLXJ1bm5lci1jaGlsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvcG9vbGVkLXJ1bm5lci1jaGlsZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxhQUFhLEVBQUUsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlFLE9BQU8scUJBQXFCLE1BQU0sMkJBQTJCLENBQUE7QUFFN0QsTUFBTSxrQkFBa0IsR0FBRyxrQ0FBa0MsQ0FBQTtBQUU3RCxxQkFBcUIsRUFBRSxDQUFBO0FBRXZCOzs7Ozs7R0FNRztBQUNILE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFL0I7Ozs7Ozs7R0FPRztBQUNILFNBQVMsa0JBQWtCO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUE7SUFFaEMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixLQUFLLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQTtBQUNwSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsWUFBWSxDQUFDLE9BQU87SUFDM0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDekQsTUFBTSxNQUFNLEdBQUcsc0NBQXNDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUUvRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsT0FB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QyxDQUFDLENBQUMsQ0FBQTtBQUNqRCxLQUFLLE1BQU0sTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQztJQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcnVuSm9iUGF5bG9hZCwgeyBCYWNrZ3JvdW5kSm9iUGVyZm9ybWVkRmFpbHVyZSB9IGZyb20gXCIuL2pvYi1ydW5uZXIuanNcIlxuaW1wb3J0IHNldFJ1bm5lclByb2Nlc3NUaXRsZSBmcm9tIFwiLi9ydW5uZXItcHJvY2Vzcy10aXRsZS5qc1wiXG5cbmNvbnN0IEJBU0VfUFJPQ0VTU19USVRMRSA9IFwidmVsb2Npb3VzIGJhY2tncm91bmQtam9icy1ydW5uZXJcIlxuXG5zZXRSdW5uZXJQcm9jZXNzVGl0bGUoKVxuXG4vKipcbiAqIElkcyBvZiBqb2JzIGN1cnJlbnRseSBydW5uaW5nIGluIHRoaXMgY2hpbGQuIEEgcG9vbGVkIGNoaWxkIHJ1bnMgdXAgdG9cbiAqIGBwb29sZWRSdW5uZXJDb25jdXJyZW5jeWAgam9icyBhdCBvbmNlICh0aGUgd29ya2VyIG9ubHkgZGlzcGF0Y2hlcyB3aXRoaW4gdGhhdFxuICogYm91bmQpOyB0aGUgc2V0IGRlZHVwZXMgYSByZWRlbGl2ZXJlZCBqb2IgaWQgYW5kIGxldHMgZWFjaCBqb2Igc2V0dGxlXG4gKiBpbmRlcGVuZGVudGx5LlxuICogQHR5cGUge1NldDxzdHJpbmc+fVxuICovXG5jb25zdCBydW5uaW5nSm9iSWRzID0gbmV3IFNldCgpXG5cbi8qKlxuICogU2V0cyBhbiBhZ2dyZWdhdGUgcHJvY2VzcyB0aXRsZSBmcm9tIHRoZSBjdXJyZW50IGluLWZsaWdodCBjb3VudC4gQSBjaGlsZCBydW5zXG4gKiBqb2JzIGNvbmN1cnJlbnRseSwgc28gYSBwZXItam9iIHRpdGxlICh3aGljaCBgcnVuSm9iUGF5bG9hZGAgd291bGQgc25hcHNob3QgYW5kXG4gKiByZXN0b3JlIGFyb3VuZCBhIHNpbmdsZSBqb2IpIGNhbm5vdCByZXByZXNlbnQgdGhlIHByb2Nlc3Mg4oCUIGludGVybGVhdmVkXG4gKiBjb21wbGV0aW9ucyB3b3VsZCBsZWF2ZSBhIHN0YWxlIGxhYmVsLiBSZWNvbXB1dGluZyBmcm9tIGBydW5uaW5nSm9iSWRzLnNpemVgIGlzXG4gKiBjb25jdXJyZW5jeS1zYWZlIGFuZCBob25lc3Q6IGBwc2AvYHRvcGAgc2hvdyBob3cgbWFueSBqb2JzIHRoZSBjaGlsZCBpcyBydW5uaW5nLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVByb2Nlc3NUaXRsZSgpIHtcbiAgY29uc3QgY291bnQgPSBydW5uaW5nSm9iSWRzLnNpemVcblxuICBwcm9jZXNzLnRpdGxlID0gY291bnQgPiAwID8gYCR7QkFTRV9QUk9DRVNTX1RJVExFfTogJHtjb3VudH0gJHtjb3VudCA9PT0gMSA/IFwiam9iXCIgOiBcImpvYnNcIn1gIDogQkFTRV9QUk9DRVNTX1RJVExFXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gSVBDIHZhbHVlIGlzIGEgcnVubmFibGUgcG9vbGVkIGpvYiBtZXNzYWdlLlxuICogQHBhcmFtIHs/fSBtZXNzYWdlIC0gSVBDIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7bWVzc2FnZSBpcyB7dHlwZTogXCJqb2JcIiwgcGF5bG9hZDogaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iUGF5bG9hZCAmIHtpZDogc3RyaW5nfX19IC0gV2hldGhlciB0aGlzIGlzIGEgdmFsaWQgam9iIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGlzSm9iTWVzc2FnZShtZXNzYWdlKSB7XG4gIGlmICghbWVzc2FnZSB8fCB0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG4gIGNvbnN0IHJlY29yZCA9IC8qKiBAdHlwZSB7e3R5cGU/OiA/LCBwYXlsb2FkPzogP319ICovIChtZXNzYWdlKVxuXG4gIHJldHVybiByZWNvcmQudHlwZSA9PT0gXCJqb2JcIiAmJiAhIXJlY29yZC5wYXlsb2FkICYmIHR5cGVvZiByZWNvcmQucGF5bG9hZCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjb3JkLnBheWxvYWQuaWQgPT09IFwic3RyaW5nXCJcbn1cblxuLyoqXG4gKiBTZW5kcyB0aGUgdGVybWluYWwgb3V0Y29tZSBhZnRlciB0aGUgbWFpbi9EQiByZXBvcnQgaGFzIGJlZW4gYWNrbm93bGVkZ2VkIG9yIHJlamVjdGVkLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPdXRjb21lLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Muam9iSWQgLSBKb2IgaWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFyZ3MuYWNrbm93bGVkZ2VkIC0gV2hldGhlciB0aGUgdGVybWluYWwgcmVwb3J0IHdhcyBhY2tub3dsZWRnZWQuXG4gKiBAcGFyYW0ge1wiY29tcGxldGVkXCIgfCBcImZhaWxlZFwifSBbYXJncy5zdGF0dXNdIC0gQWNrbm93bGVkZ2VkIHRlcm1pbmFsIHN0YXR1cy5cbiAqIEBwYXJhbSB7RXJyb3J9IFthcmdzLmVycm9yXSAtIFJlcG9ydGluZyBlcnJvciB3aGVuIGFja25vd2xlZGdlbWVudCB3YXMgbm90IG9idGFpbmVkLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgSVBDIGFjY2VwdHMgdGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIHNlbmRPdXRjb21lKHtqb2JJZCwgYWNrbm93bGVkZ2VkLCBzdGF0dXMsIGVycm9yfSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBpZiAoIXByb2Nlc3Muc2VuZCkge1xuICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBwcm9jZXNzLnNlbmQoe1xuICAgICAgdHlwZTogXCJqb2Itb3V0Y29tZVwiLFxuICAgICAgam9iSWQsXG4gICAgICBhY2tub3dsZWRnZWQsXG4gICAgICBzdGF0dXMsXG4gICAgICByc3NCeXRlczogcHJvY2Vzcy5tZW1vcnlVc2FnZSgpLnJzcyxcbiAgICAgIGVycm9yOiBlcnJvcj8ubWVzc2FnZVxuICAgIH0sICgpID0+IHJlc29sdmUodW5kZWZpbmVkKSlcbiAgfSlcbn1cblxuLyoqXG4gKiBSdW5zIG9uZSBqb2IgY29uY3VycmVudGx5IHdpdGggYW55IHNpYmxpbmdzIGFuZCByZXBvcnRzIGl0cyBvd24gdGVybWluYWxcbiAqIG91dGNvbWUuIEEgc2luZ2xlIGpvYidzIHVuZXhwZWN0ZWQgZmFpbHVyZSByZXBvcnRzIHRoYXQgam9iIGZvciByZWNsYW1hdGlvblxuICogKGBhY2tub3dsZWRnZWQ6IGZhbHNlYCkgYnV0IGRvZXMgTk9UIHRha2UgZG93biB0aGUgY2hpbGQg4oCUIGl0cyBjb25jdXJyZW50XG4gKiBzaWJsaW5ncyBrZWVwIHJ1bm5pbmcuIE9ubHkgYSBwcm9jZXNzLWxldmVsIGZhdWx0ICh3aGljaCBlc2NhcGVzIGV2ZXJ5XG4gKiBwZXItam9iIHRyeS9jYXRjaCkgZW5kcyB0aGUgY2hpbGQsIHdoaWNoIHRoZSB3b3JrZXIgc2VlcyBhcyBhbiBleGl0IGFuZFxuICogcmVjbGFpbXMgZm9yIHRoZSB3aG9sZSBpbi1mbGlnaHQgc2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JQYXlsb2FkICYge2lkOiBzdHJpbmd9fSBwYXlsb2FkIC0gSm9iIHBheWxvYWQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciByZXBvcnRpbmcuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bkpvYihwYXlsb2FkKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcnVuSm9iUGF5bG9hZChwYXlsb2FkLCB7Y2xvc2VDb25uZWN0aW9uczogZmFsc2UsIG1hbmFnZVByb2Nlc3NUaXRsZTogZmFsc2V9KVxuICAgIGF3YWl0IHNlbmRPdXRjb21lKHtqb2JJZDogcGF5bG9hZC5pZCwgYWNrbm93bGVkZ2VkOiB0cnVlLCBzdGF0dXM6IFwiY29tcGxldGVkXCJ9KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhY2tncm91bmRKb2JQZXJmb3JtZWRGYWlsdXJlKSB7XG4gICAgICBhd2FpdCBzZW5kT3V0Y29tZSh7am9iSWQ6IHBheWxvYWQuaWQsIGFja25vd2xlZGdlZDogdHJ1ZSwgc3RhdHVzOiBcImZhaWxlZFwifSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVwb3J0RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSlcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJQb29sZWQgYmFja2dyb3VuZCBqb2IgcnVubmVyIGZhaWxlZCBiZWZvcmUgdGVybWluYWwgYWNrbm93bGVkZ2VtZW50OlwiLCByZXBvcnRFcnJvcilcbiAgICAgIGF3YWl0IHNlbmRPdXRjb21lKHtqb2JJZDogcGF5bG9hZC5pZCwgYWNrbm93bGVkZ2VkOiBmYWxzZSwgZXJyb3I6IHJlcG9ydEVycm9yfSlcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcnVubmluZ0pvYklkcy5kZWxldGUocGF5bG9hZC5pZClcbiAgICB1cGRhdGVQcm9jZXNzVGl0bGUoKVxuICB9XG59XG5cbi8qKlxuICogSGFuZGxlcyBhIGpvYiBtZXNzYWdlLCBzdGFydGluZyBpdCBhbG9uZ3NpZGUgYW55IGNvbmN1cnJlbnQgc2libGluZ3MuXG4gKiBAcGFyYW0gez99IG1lc3NhZ2UgLSBJUEMgbWVzc2FnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBoYW5kbGVNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgaWYgKCFpc0pvYk1lc3NhZ2UobWVzc2FnZSkgfHwgcnVubmluZ0pvYklkcy5oYXMobWVzc2FnZS5wYXlsb2FkLmlkKSkgcmV0dXJuXG5cbiAgcnVubmluZ0pvYklkcy5hZGQobWVzc2FnZS5wYXlsb2FkLmlkKVxuICB1cGRhdGVQcm9jZXNzVGl0bGUoKVxuICB2b2lkIHJ1bkpvYihtZXNzYWdlLnBheWxvYWQpXG59XG5cbnByb2Nlc3Mub24oXCJtZXNzYWdlXCIsIChtZXNzYWdlKSA9PiBoYW5kbGVNZXNzYWdlKG1lc3NhZ2UpKVxucHJvY2Vzcy5vbmNlKFwiZGlzY29ubmVjdFwiLCAoKSA9PiBwcm9jZXNzLmV4aXQoMCkpXG5mb3IgKGNvbnN0IHNpZ25hbCBvZiBbXCJTSUdURVJNXCIsIFwiU0lHSU5UXCJdKSBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiBwcm9jZXNzLmV4aXQoMSkpXG4iXX0=
123
+ process.once(signal, () => void shutdownRunner(1));
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbGVkLXJ1bm5lci1jaGlsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvcG9vbGVkLXJ1bm5lci1jaGlsZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxhQUFhLEVBQUUsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBQ2xHLE9BQU8scUJBQXFCLE1BQU0sMkJBQTJCLENBQUE7QUFFN0QsTUFBTSxrQkFBa0IsR0FBRyxrQ0FBa0MsQ0FBQTtBQUU3RCxxQkFBcUIsRUFBRSxDQUFBO0FBRXZCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQTtBQUV4Qjs7Ozs7O0dBTUc7QUFDSCxLQUFLLFVBQVUsY0FBYyxDQUFDLFFBQVE7SUFDcEMsSUFBSSxZQUFZO1FBQUUsT0FBTTtJQUN4QixZQUFZLEdBQUcsSUFBSSxDQUFBO0lBRW5CLE1BQU0sc0JBQXNCLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFBO0lBQzFELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDeEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFL0I7Ozs7Ozs7R0FPRztBQUNILFNBQVMsa0JBQWtCO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUE7SUFFaEMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixLQUFLLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQTtBQUNwSCxDQUFD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QUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNyQyxrQkFBa0IsRUFBRSxDQUFBO0lBQ3BCLEtBQUssTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUM5QixDQUFDO0FBRUQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0FBQzFELE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDeEQsS0FBSyxNQUFNLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7SUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBydW5Kb2JQYXlsb2FkLCB7IEJhY2tncm91bmRKb2JQZXJmb3JtZWRGYWlsdXJlIH0gZnJvbSBcIi4vam9iLXJ1bm5lci5qc1wiXG5pbXBvcnQgeyBjbG9zZVJ1bm5lckNvbm5lY3Rpb25zLCBjdXJyZW50Q29uZmlndXJhdGlvbk9yTnVsbCB9IGZyb20gXCIuL3J1bm5lci1ncmFjZWZ1bC1zaHV0ZG93bi5qc1wiXG5pbXBvcnQgc2V0UnVubmVyUHJvY2Vzc1RpdGxlIGZyb20gXCIuL3J1bm5lci1wcm9jZXNzLXRpdGxlLmpzXCJcblxuY29uc3QgQkFTRV9QUk9DRVNTX1RJVExFID0gXCJ2ZWxvY2lvdXMgYmFja2dyb3VuZC1qb2JzLXJ1bm5lclwiXG5cbnNldFJ1bm5lclByb2Nlc3NUaXRsZSgpXG5cbmxldCBzaHV0dGluZ0Rvd24gPSBmYWxzZVxuXG4vKipcbiAqIENsb3NlcyB0aGUgcnVubmVyJ3MgY29ubmVjdGlvbnMg4oCUIHJlbGVhc2luZyBhbnkgYWR2aXNvcnkgbG9jayBhIGtpbGxlZC1taWQtcGFzc1xuICogam9iIHN0aWxsIGhvbGRzIOKAlCBiZWZvcmUgZXhpdGluZywgaW5zdGVhZCBvZiBsZWF2aW5nIGEgaGFsZi1vcGVuIHNlc3Npb24gdGhhdFxuICoga2VlcHMgdGhlIGxvY2sgdW50aWwgdGhlIERCIHNlcnZlcidzIGB3YWl0X3RpbWVvdXRgLlxuICogQHBhcmFtIHtudW1iZXJ9IGV4aXRDb2RlIC0gUHJvY2VzcyBleGl0IGNvZGUuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2h1dGRvd25SdW5uZXIoZXhpdENvZGUpIHtcbiAgaWYgKHNodXR0aW5nRG93bikgcmV0dXJuXG4gIHNodXR0aW5nRG93biA9IHRydWVcblxuICBhd2FpdCBjbG9zZVJ1bm5lckNvbm5lY3Rpb25zKGN1cnJlbnRDb25maWd1cmF0aW9uT3JOdWxsKCkpXG4gIHByb2Nlc3MuZXhpdChleGl0Q29kZSlcbn1cblxuLyoqXG4gKiBJZHMgb2Ygam9icyBjdXJyZW50bHkgcnVubmluZyBpbiB0aGlzIGNoaWxkLiBBIHBvb2xlZCBjaGlsZCBydW5zIHVwIHRvXG4gKiBgcG9vbGVkUnVubmVyQ29uY3VycmVuY3lgIGpvYnMgYXQgb25jZSAodGhlIHdvcmtlciBvbmx5IGRpc3BhdGNoZXMgd2l0aGluIHRoYXRcbiAqIGJvdW5kKTsgdGhlIHNldCBkZWR1cGVzIGEgcmVkZWxpdmVyZWQgam9iIGlkIGFuZCBsZXRzIGVhY2ggam9iIHNldHRsZVxuICogaW5kZXBlbmRlbnRseS5cbiAqIEB0eXBlIHtTZXQ8c3RyaW5nPn1cbiAqL1xuY29uc3QgcnVubmluZ0pvYklkcyA9IG5ldyBTZXQoKVxuXG4vKipcbiAqIFNldHMgYW4gYWdncmVnYXRlIHByb2Nlc3MgdGl0bGUgZnJvbSB0aGUgY3VycmVudCBpbi1mbGlnaHQgY291bnQuIEEgY2hpbGQgcnVuc1xuICogam9icyBjb25jdXJyZW50bHksIHNvIGEgcGVyLWpvYiB0aXRsZSAod2hpY2ggYHJ1bkpvYlBheWxvYWRgIHdvdWxkIHNuYXBzaG90IGFuZFxuICogcmVzdG9yZSBhcm91bmQgYSBzaW5nbGUgam9iKSBjYW5ub3QgcmVwcmVzZW50IHRoZSBwcm9jZXNzIOKAlCBpbnRlcmxlYXZlZFxuICogY29tcGxldGlvbnMgd291bGQgbGVhdmUgYSBzdGFsZSBsYWJlbC4gUmVjb21wdXRpbmcgZnJvbSBgcnVubmluZ0pvYklkcy5zaXplYCBpc1xuICogY29uY3VycmVuY3ktc2FmZSBhbmQgaG9uZXN0OiBgcHNgL2B0b3BgIHNob3cgaG93IG1hbnkgam9icyB0aGUgY2hpbGQgaXMgcnVubmluZy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB1cGRhdGVQcm9jZXNzVGl0bGUoKSB7XG4gIGNvbnN0IGNvdW50ID0gcnVubmluZ0pvYklkcy5zaXplXG5cbiAgcHJvY2Vzcy50aXRsZSA9IGNvdW50ID4gMCA/IGAke0JBU0VfUFJPQ0VTU19USVRMRX06ICR7Y291bnR9ICR7Y291bnQgPT09IDEgPyBcImpvYlwiIDogXCJqb2JzXCJ9YCA6IEJBU0VfUFJPQ0VTU19USVRMRVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIElQQyB2YWx1ZSBpcyBhIHJ1bm5hYmxlIHBvb2xlZCBqb2IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7P30gbWVzc2FnZSAtIElQQyBtZXNzYWdlLlxuICogQHJldHVybnMge21lc3NhZ2UgaXMge3R5cGU6IFwiam9iXCIsIHBheWxvYWQ6IGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlBheWxvYWQgJiB7aWQ6IHN0cmluZ319fSAtIFdoZXRoZXIgdGhpcyBpcyBhIHZhbGlkIGpvYiBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBpc0pvYk1lc3NhZ2UobWVzc2FnZSkge1xuICBpZiAoIW1lc3NhZ2UgfHwgdHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuICBjb25zdCByZWNvcmQgPSAvKiogQHR5cGUge3t0eXBlPzogPywgcGF5bG9hZD86ID99fSAqLyAobWVzc2FnZSlcblxuICByZXR1cm4gcmVjb3JkLnR5cGUgPT09IFwiam9iXCIgJiYgISFyZWNvcmQucGF5bG9hZCAmJiB0eXBlb2YgcmVjb3JkLnBheWxvYWQgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY29yZC5wYXlsb2FkLmlkID09PSBcInN0cmluZ1wiXG59XG5cbi8qKlxuICogU2VuZHMgdGhlIHRlcm1pbmFsIG91dGNvbWUgYWZ0ZXIgdGhlIG1haW4vREIgcmVwb3J0IGhhcyBiZWVuIGFja25vd2xlZGdlZCBvciByZWplY3RlZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3V0Y29tZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmpvYklkIC0gSm9iIGlkLlxuICogQHBhcmFtIHtib29sZWFufSBhcmdzLmFja25vd2xlZGdlZCAtIFdoZXRoZXIgdGhlIHRlcm1pbmFsIHJlcG9ydCB3YXMgYWNrbm93bGVkZ2VkLlxuICogQHBhcmFtIHtcImNvbXBsZXRlZFwiIHwgXCJmYWlsZWRcIn0gW2FyZ3Muc3RhdHVzXSAtIEFja25vd2xlZGdlZCB0ZXJtaW5hbCBzdGF0dXMuXG4gKiBAcGFyYW0ge0Vycm9yfSBbYXJncy5lcnJvcl0gLSBSZXBvcnRpbmcgZXJyb3Igd2hlbiBhY2tub3dsZWRnZW1lbnQgd2FzIG5vdCBvYnRhaW5lZC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIElQQyBhY2NlcHRzIHRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBzZW5kT3V0Y29tZSh7am9iSWQsIGFja25vd2xlZGdlZCwgc3RhdHVzLCBlcnJvcn0pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKCFwcm9jZXNzLnNlbmQpIHtcbiAgICAgIHJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5zZW5kKHtcbiAgICAgIHR5cGU6IFwiam9iLW91dGNvbWVcIixcbiAgICAgIGpvYklkLFxuICAgICAgYWNrbm93bGVkZ2VkLFxuICAgICAgc3RhdHVzLFxuICAgICAgcnNzQnl0ZXM6IHByb2Nlc3MubWVtb3J5VXNhZ2UoKS5yc3MsXG4gICAgICBlcnJvcjogZXJyb3I/Lm1lc3NhZ2VcbiAgICB9LCAoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkpXG4gIH0pXG59XG5cbi8qKlxuICogUnVucyBvbmUgam9iIGNvbmN1cnJlbnRseSB3aXRoIGFueSBzaWJsaW5ncyBhbmQgcmVwb3J0cyBpdHMgb3duIHRlcm1pbmFsXG4gKiBvdXRjb21lLiBBIHNpbmdsZSBqb2IncyB1bmV4cGVjdGVkIGZhaWx1cmUgcmVwb3J0cyB0aGF0IGpvYiBmb3IgcmVjbGFtYXRpb25cbiAqIChgYWNrbm93bGVkZ2VkOiBmYWxzZWApIGJ1dCBkb2VzIE5PVCB0YWtlIGRvd24gdGhlIGNoaWxkIOKAlCBpdHMgY29uY3VycmVudFxuICogc2libGluZ3Mga2VlcCBydW5uaW5nLiBPbmx5IGEgcHJvY2Vzcy1sZXZlbCBmYXVsdCAod2hpY2ggZXNjYXBlcyBldmVyeVxuICogcGVyLWpvYiB0cnkvY2F0Y2gpIGVuZHMgdGhlIGNoaWxkLCB3aGljaCB0aGUgd29ya2VyIHNlZXMgYXMgYW4gZXhpdCBhbmRcbiAqIHJlY2xhaW1zIGZvciB0aGUgd2hvbGUgaW4tZmxpZ2h0IHNldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iUGF5bG9hZCAmIHtpZDogc3RyaW5nfX0gcGF5bG9hZCAtIEpvYiBwYXlsb2FkLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgcmVwb3J0aW5nLlxuICovXG5hc3luYyBmdW5jdGlvbiBydW5Kb2IocGF5bG9hZCkge1xuICB0cnkge1xuICAgIGF3YWl0IHJ1bkpvYlBheWxvYWQocGF5bG9hZCwge2Nsb3NlQ29ubmVjdGlvbnM6IGZhbHNlLCBtYW5hZ2VQcm9jZXNzVGl0bGU6IGZhbHNlfSlcbiAgICBhd2FpdCBzZW5kT3V0Y29tZSh7am9iSWQ6IHBheWxvYWQuaWQsIGFja25vd2xlZGdlZDogdHJ1ZSwgc3RhdHVzOiBcImNvbXBsZXRlZFwifSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBCYWNrZ3JvdW5kSm9iUGVyZm9ybWVkRmFpbHVyZSkge1xuICAgICAgYXdhaXQgc2VuZE91dGNvbWUoe2pvYklkOiBwYXlsb2FkLmlkLCBhY2tub3dsZWRnZWQ6IHRydWUsIHN0YXR1czogXCJmYWlsZWRcIn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlcG9ydEVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpXG4gICAgICBjb25zb2xlLmVycm9yKFwiUG9vbGVkIGJhY2tncm91bmQgam9iIHJ1bm5lciBmYWlsZWQgYmVmb3JlIHRlcm1pbmFsIGFja25vd2xlZGdlbWVudDpcIiwgcmVwb3J0RXJyb3IpXG4gICAgICBhd2FpdCBzZW5kT3V0Y29tZSh7am9iSWQ6IHBheWxvYWQuaWQsIGFja25vd2xlZGdlZDogZmFsc2UsIGVycm9yOiByZXBvcnRFcnJvcn0pXG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJ1bm5pbmdKb2JJZHMuZGVsZXRlKHBheWxvYWQuaWQpXG4gICAgdXBkYXRlUHJvY2Vzc1RpdGxlKClcbiAgfVxufVxuXG4vKipcbiAqIEhhbmRsZXMgYSBqb2IgbWVzc2FnZSwgc3RhcnRpbmcgaXQgYWxvbmdzaWRlIGFueSBjb25jdXJyZW50IHNpYmxpbmdzLlxuICogQHBhcmFtIHs/fSBtZXNzYWdlIC0gSVBDIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShtZXNzYWdlKSB7XG4gIGlmICghaXNKb2JNZXNzYWdlKG1lc3NhZ2UpIHx8IHJ1bm5pbmdKb2JJZHMuaGFzKG1lc3NhZ2UucGF5bG9hZC5pZCkpIHJldHVyblxuXG4gIHJ1bm5pbmdKb2JJZHMuYWRkKG1lc3NhZ2UucGF5bG9hZC5pZClcbiAgdXBkYXRlUHJvY2Vzc1RpdGxlKClcbiAgdm9pZCBydW5Kb2IobWVzc2FnZS5wYXlsb2FkKVxufVxuXG5wcm9jZXNzLm9uKFwibWVzc2FnZVwiLCAobWVzc2FnZSkgPT4gaGFuZGxlTWVzc2FnZShtZXNzYWdlKSlcbnByb2Nlc3Mub25jZShcImRpc2Nvbm5lY3RcIiwgKCkgPT4gdm9pZCBzaHV0ZG93blJ1bm5lcigwKSlcbmZvciAoY29uc3Qgc2lnbmFsIG9mIFtcIlNJR1RFUk1cIiwgXCJTSUdJTlRcIl0pIHByb2Nlc3Mub25jZShzaWduYWwsICgpID0+IHZvaWQgc2h1dGRvd25SdW5uZXIoMSkpXG4iXX0=
@@ -0,0 +1,49 @@
1
+ /**
2
+ * The subset of a configuration a runner closes on shutdown. Typed structurally so
3
+ * the shutdown path stays typechecked without a broad cast, and a future signature
4
+ * drift surfaces at the call sites (and in tests) instead of hiding behind `any`.
5
+ * @typedef {{disconnectBeacon: () => Promise<void>, closeDatabaseConnections: () => Promise<void>}} RunnerCloseableConfiguration
6
+ */
7
+ /**
8
+ * Gracefully closes a background-job runner's framework connections (beacon +
9
+ * database) on shutdown, so the database server ends the session and releases any
10
+ * advisory lock the runner still holds *immediately* — instead of leaving a
11
+ * half-open session that keeps the lock (e.g. the build-planner lock) held until
12
+ * the server's idle `wait_timeout` (hours).
13
+ *
14
+ * A runner child otherwise exits abruptly on shutdown (`process.exit`) and relies
15
+ * on the OS tearing down its sockets. A named lock releases only when its owning
16
+ * session ends, and an abrupt exit / container teardown does not reliably deliver a
17
+ * clean disconnect to the server — so the lock leaks. Sending a real close here
18
+ * (`COM_QUIT` via `closeDatabaseConnections`) makes the server end the session and
19
+ * release the lock deterministically.
20
+ *
21
+ * The beacon disconnect and the database close run independently, each bounded by
22
+ * `closeTimeoutMs`: the database close releases the locks and must still run even if
23
+ * the beacon disconnect hangs (a wedged beacon socket during teardown), and neither
24
+ * may block the exit forever. A failed or timed-out close is thrown, not swallowed —
25
+ * the caller surfaces it (a lock that failed to release must be visible).
26
+ * @param {RunnerCloseableConfiguration | null} configuration - Configuration whose connections to close; null when none is set (nothing to close).
27
+ * @param {number} [closeTimeoutMs] - Max time to spend on each close before giving up.
28
+ * @returns {Promise<void>} - Resolves once both closes have settled; rejects if either failed.
29
+ */
30
+ export function closeRunnerConnections(configuration: RunnerCloseableConfiguration | null, closeTimeoutMs?: number): Promise<void>;
31
+ /**
32
+ * The current configuration, or null when none has been set yet — a runner that is
33
+ * signalled before it runs any job holds no connections (and no locks) to close.
34
+ * Only that expected "not set yet" case is treated as null; any other error is a real
35
+ * fault and is rethrown rather than masked.
36
+ * @returns {Configuration | null} - The current configuration, or null when none is set.
37
+ */
38
+ export function currentConfigurationOrNull(): Configuration | null;
39
+ /**
40
+ * The subset of a configuration a runner closes on shutdown. Typed structurally so
41
+ * the shutdown path stays typechecked without a broad cast, and a future signature
42
+ * drift surfaces at the call sites (and in tests) instead of hiding behind `any`.
43
+ */
44
+ export type RunnerCloseableConfiguration = {
45
+ disconnectBeacon: () => Promise<void>;
46
+ closeDatabaseConnections: () => Promise<void>;
47
+ };
48
+ import Configuration from "../configuration.js";
49
+ //# sourceMappingURL=runner-graceful-shutdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-graceful-shutdown.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/runner-graceful-shutdown.js"],"names":[],"mappings":"AASA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,sDAJW,4BAA4B,GAAG,IAAI,mBACnC,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAkBzB;AAED;;;;;;GAMG;AACH,8CAFa,aAAa,GAAG,IAAI,CAUhC;;;;;;2CA3DY;IAAC,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,wBAAwB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAC;0BATtC,qBAAqB"}
@@ -0,0 +1,70 @@
1
+ // @ts-check
2
+ import timeout from "awaitery/build/timeout.js";
3
+ import Configuration, { CurrentConfigurationNotSetError } from "../configuration.js";
4
+ /** Bounded grace for closing framework connections on shutdown before forcing exit. */
5
+ const SHUTDOWN_CLOSE_TIMEOUT_MS = 5000;
6
+ /**
7
+ * The subset of a configuration a runner closes on shutdown. Typed structurally so
8
+ * the shutdown path stays typechecked without a broad cast, and a future signature
9
+ * drift surfaces at the call sites (and in tests) instead of hiding behind `any`.
10
+ * @typedef {{disconnectBeacon: () => Promise<void>, closeDatabaseConnections: () => Promise<void>}} RunnerCloseableConfiguration
11
+ */
12
+ /**
13
+ * Gracefully closes a background-job runner's framework connections (beacon +
14
+ * database) on shutdown, so the database server ends the session and releases any
15
+ * advisory lock the runner still holds *immediately* — instead of leaving a
16
+ * half-open session that keeps the lock (e.g. the build-planner lock) held until
17
+ * the server's idle `wait_timeout` (hours).
18
+ *
19
+ * A runner child otherwise exits abruptly on shutdown (`process.exit`) and relies
20
+ * on the OS tearing down its sockets. A named lock releases only when its owning
21
+ * session ends, and an abrupt exit / container teardown does not reliably deliver a
22
+ * clean disconnect to the server — so the lock leaks. Sending a real close here
23
+ * (`COM_QUIT` via `closeDatabaseConnections`) makes the server end the session and
24
+ * release the lock deterministically.
25
+ *
26
+ * The beacon disconnect and the database close run independently, each bounded by
27
+ * `closeTimeoutMs`: the database close releases the locks and must still run even if
28
+ * the beacon disconnect hangs (a wedged beacon socket during teardown), and neither
29
+ * may block the exit forever. A failed or timed-out close is thrown, not swallowed —
30
+ * the caller surfaces it (a lock that failed to release must be visible).
31
+ * @param {RunnerCloseableConfiguration | null} configuration - Configuration whose connections to close; null when none is set (nothing to close).
32
+ * @param {number} [closeTimeoutMs] - Max time to spend on each close before giving up.
33
+ * @returns {Promise<void>} - Resolves once both closes have settled; rejects if either failed.
34
+ */
35
+ export async function closeRunnerConnections(configuration, closeTimeoutMs = SHUTDOWN_CLOSE_TIMEOUT_MS) {
36
+ if (!configuration)
37
+ return;
38
+ const [beaconResult, databaseResult] = await Promise.allSettled([
39
+ timeout({ timeout: closeTimeoutMs }, () => configuration.disconnectBeacon()),
40
+ timeout({ timeout: closeTimeoutMs }, () => configuration.closeDatabaseConnections())
41
+ ]);
42
+ /** @type {unknown[]} */
43
+ const errors = [];
44
+ if (beaconResult.status == "rejected")
45
+ errors.push(beaconResult.reason);
46
+ if (databaseResult.status == "rejected")
47
+ errors.push(databaseResult.reason);
48
+ if (errors.length == 1)
49
+ throw errors[0];
50
+ if (errors.length > 1)
51
+ throw new AggregateError(errors, "Failed to close background-job runner connections on shutdown");
52
+ }
53
+ /**
54
+ * The current configuration, or null when none has been set yet — a runner that is
55
+ * signalled before it runs any job holds no connections (and no locks) to close.
56
+ * Only that expected "not set yet" case is treated as null; any other error is a real
57
+ * fault and is rethrown rather than masked.
58
+ * @returns {Configuration | null} - The current configuration, or null when none is set.
59
+ */
60
+ export function currentConfigurationOrNull() {
61
+ try {
62
+ return Configuration.current();
63
+ }
64
+ catch (error) {
65
+ if (error instanceof CurrentConfigurationNotSetError)
66
+ return null;
67
+ throw error;
68
+ }
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLWdyYWNlZnVsLXNodXRkb3duLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tncm91bmQtam9icy9ydW5uZXItZ3JhY2VmdWwtc2h1dGRvd24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sT0FBTyxNQUFNLDJCQUEyQixDQUFBO0FBRS9DLE9BQU8sYUFBYSxFQUFFLEVBQUMsK0JBQStCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUVsRix1RkFBdUY7QUFDdkYsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUE7QUFFdEM7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsc0JBQXNCLENBQUMsYUFBYSxFQUFFLGNBQWMsR0FBRyx5QkFBeUI7SUFDcEcsSUFBSSxDQUFDLGFBQWE7UUFBRSxPQUFNO0lBRTFCLE1BQU0sQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQzlELE9BQU8sQ0FBQyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxRSxPQUFPLENBQUMsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLHdCQUF3QixFQUFFLENBQUM7S0FDbkYsQ0FBQyxDQUFBO0lBRUYsd0JBQXdCO0lBQ3hCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtJQUVqQixJQUFJLFlBQVksQ0FBQyxNQUFNLElBQUksVUFBVTtRQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3ZFLElBQUksY0FBYyxDQUFDLE1BQU0sSUFBSSxVQUFVO1FBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFM0UsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUM7UUFBRSxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN2QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLE1BQU0sSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLCtEQUErRCxDQUFDLENBQUE7QUFDMUgsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDaEMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSwrQkFBK0I7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUVqRSxNQUFNLEtBQUssQ0FBQTtJQUNiLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB0aW1lb3V0IGZyb20gXCJhd2FpdGVyeS9idWlsZC90aW1lb3V0LmpzXCJcblxuaW1wb3J0IENvbmZpZ3VyYXRpb24sIHtDdXJyZW50Q29uZmlndXJhdGlvbk5vdFNldEVycm9yfSBmcm9tIFwiLi4vY29uZmlndXJhdGlvbi5qc1wiXG5cbi8qKiBCb3VuZGVkIGdyYWNlIGZvciBjbG9zaW5nIGZyYW1ld29yayBjb25uZWN0aW9ucyBvbiBzaHV0ZG93biBiZWZvcmUgZm9yY2luZyBleGl0LiAqL1xuY29uc3QgU0hVVERPV05fQ0xPU0VfVElNRU9VVF9NUyA9IDUwMDBcblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGEgY29uZmlndXJhdGlvbiBhIHJ1bm5lciBjbG9zZXMgb24gc2h1dGRvd24uIFR5cGVkIHN0cnVjdHVyYWxseSBzb1xuICogdGhlIHNodXRkb3duIHBhdGggc3RheXMgdHlwZWNoZWNrZWQgd2l0aG91dCBhIGJyb2FkIGNhc3QsIGFuZCBhIGZ1dHVyZSBzaWduYXR1cmVcbiAqIGRyaWZ0IHN1cmZhY2VzIGF0IHRoZSBjYWxsIHNpdGVzIChhbmQgaW4gdGVzdHMpIGluc3RlYWQgb2YgaGlkaW5nIGJlaGluZCBgYW55YC5cbiAqIEB0eXBlZGVmIHt7ZGlzY29ubmVjdEJlYWNvbjogKCkgPT4gUHJvbWlzZTx2b2lkPiwgY2xvc2VEYXRhYmFzZUNvbm5lY3Rpb25zOiAoKSA9PiBQcm9taXNlPHZvaWQ+fX0gUnVubmVyQ2xvc2VhYmxlQ29uZmlndXJhdGlvblxuICovXG5cbi8qKlxuICogR3JhY2VmdWxseSBjbG9zZXMgYSBiYWNrZ3JvdW5kLWpvYiBydW5uZXIncyBmcmFtZXdvcmsgY29ubmVjdGlvbnMgKGJlYWNvbiArXG4gKiBkYXRhYmFzZSkgb24gc2h1dGRvd24sIHNvIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgZW5kcyB0aGUgc2Vzc2lvbiBhbmQgcmVsZWFzZXMgYW55XG4gKiBhZHZpc29yeSBsb2NrIHRoZSBydW5uZXIgc3RpbGwgaG9sZHMgKmltbWVkaWF0ZWx5KiDigJQgaW5zdGVhZCBvZiBsZWF2aW5nIGFcbiAqIGhhbGYtb3BlbiBzZXNzaW9uIHRoYXQga2VlcHMgdGhlIGxvY2sgKGUuZy4gdGhlIGJ1aWxkLXBsYW5uZXIgbG9jaykgaGVsZCB1bnRpbFxuICogdGhlIHNlcnZlcidzIGlkbGUgYHdhaXRfdGltZW91dGAgKGhvdXJzKS5cbiAqXG4gKiBBIHJ1bm5lciBjaGlsZCBvdGhlcndpc2UgZXhpdHMgYWJydXB0bHkgb24gc2h1dGRvd24gKGBwcm9jZXNzLmV4aXRgKSBhbmQgcmVsaWVzXG4gKiBvbiB0aGUgT1MgdGVhcmluZyBkb3duIGl0cyBzb2NrZXRzLiBBIG5hbWVkIGxvY2sgcmVsZWFzZXMgb25seSB3aGVuIGl0cyBvd25pbmdcbiAqIHNlc3Npb24gZW5kcywgYW5kIGFuIGFicnVwdCBleGl0IC8gY29udGFpbmVyIHRlYXJkb3duIGRvZXMgbm90IHJlbGlhYmx5IGRlbGl2ZXIgYVxuICogY2xlYW4gZGlzY29ubmVjdCB0byB0aGUgc2VydmVyIOKAlCBzbyB0aGUgbG9jayBsZWFrcy4gU2VuZGluZyBhIHJlYWwgY2xvc2UgaGVyZVxuICogKGBDT01fUVVJVGAgdmlhIGBjbG9zZURhdGFiYXNlQ29ubmVjdGlvbnNgKSBtYWtlcyB0aGUgc2VydmVyIGVuZCB0aGUgc2Vzc2lvbiBhbmRcbiAqIHJlbGVhc2UgdGhlIGxvY2sgZGV0ZXJtaW5pc3RpY2FsbHkuXG4gKlxuICogVGhlIGJlYWNvbiBkaXNjb25uZWN0IGFuZCB0aGUgZGF0YWJhc2UgY2xvc2UgcnVuIGluZGVwZW5kZW50bHksIGVhY2ggYm91bmRlZCBieVxuICogYGNsb3NlVGltZW91dE1zYDogdGhlIGRhdGFiYXNlIGNsb3NlIHJlbGVhc2VzIHRoZSBsb2NrcyBhbmQgbXVzdCBzdGlsbCBydW4gZXZlbiBpZlxuICogdGhlIGJlYWNvbiBkaXNjb25uZWN0IGhhbmdzIChhIHdlZGdlZCBiZWFjb24gc29ja2V0IGR1cmluZyB0ZWFyZG93biksIGFuZCBuZWl0aGVyXG4gKiBtYXkgYmxvY2sgdGhlIGV4aXQgZm9yZXZlci4gQSBmYWlsZWQgb3IgdGltZWQtb3V0IGNsb3NlIGlzIHRocm93biwgbm90IHN3YWxsb3dlZCDigJRcbiAqIHRoZSBjYWxsZXIgc3VyZmFjZXMgaXQgKGEgbG9jayB0aGF0IGZhaWxlZCB0byByZWxlYXNlIG11c3QgYmUgdmlzaWJsZSkuXG4gKiBAcGFyYW0ge1J1bm5lckNsb3NlYWJsZUNvbmZpZ3VyYXRpb24gfCBudWxsfSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiB3aG9zZSBjb25uZWN0aW9ucyB0byBjbG9zZTsgbnVsbCB3aGVuIG5vbmUgaXMgc2V0IChub3RoaW5nIHRvIGNsb3NlKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbY2xvc2VUaW1lb3V0TXNdIC0gTWF4IHRpbWUgdG8gc3BlbmQgb24gZWFjaCBjbG9zZSBiZWZvcmUgZ2l2aW5nIHVwLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgb25jZSBib3RoIGNsb3NlcyBoYXZlIHNldHRsZWQ7IHJlamVjdHMgaWYgZWl0aGVyIGZhaWxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb3NlUnVubmVyQ29ubmVjdGlvbnMoY29uZmlndXJhdGlvbiwgY2xvc2VUaW1lb3V0TXMgPSBTSFVURE9XTl9DTE9TRV9USU1FT1VUX01TKSB7XG4gIGlmICghY29uZmlndXJhdGlvbikgcmV0dXJuXG5cbiAgY29uc3QgW2JlYWNvblJlc3VsdCwgZGF0YWJhc2VSZXN1bHRdID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICB0aW1lb3V0KHt0aW1lb3V0OiBjbG9zZVRpbWVvdXRNc30sICgpID0+IGNvbmZpZ3VyYXRpb24uZGlzY29ubmVjdEJlYWNvbigpKSxcbiAgICB0aW1lb3V0KHt0aW1lb3V0OiBjbG9zZVRpbWVvdXRNc30sICgpID0+IGNvbmZpZ3VyYXRpb24uY2xvc2VEYXRhYmFzZUNvbm5lY3Rpb25zKCkpXG4gIF0pXG5cbiAgLyoqIEB0eXBlIHt1bmtub3duW119ICovXG4gIGNvbnN0IGVycm9ycyA9IFtdXG5cbiAgaWYgKGJlYWNvblJlc3VsdC5zdGF0dXMgPT0gXCJyZWplY3RlZFwiKSBlcnJvcnMucHVzaChiZWFjb25SZXN1bHQucmVhc29uKVxuICBpZiAoZGF0YWJhc2VSZXN1bHQuc3RhdHVzID09IFwicmVqZWN0ZWRcIikgZXJyb3JzLnB1c2goZGF0YWJhc2VSZXN1bHQucmVhc29uKVxuXG4gIGlmIChlcnJvcnMubGVuZ3RoID09IDEpIHRocm93IGVycm9yc1swXVxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDEpIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFwiRmFpbGVkIHRvIGNsb3NlIGJhY2tncm91bmQtam9iIHJ1bm5lciBjb25uZWN0aW9ucyBvbiBzaHV0ZG93blwiKVxufVxuXG4vKipcbiAqIFRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIG9yIG51bGwgd2hlbiBub25lIGhhcyBiZWVuIHNldCB5ZXQg4oCUIGEgcnVubmVyIHRoYXQgaXNcbiAqIHNpZ25hbGxlZCBiZWZvcmUgaXQgcnVucyBhbnkgam9iIGhvbGRzIG5vIGNvbm5lY3Rpb25zIChhbmQgbm8gbG9ja3MpIHRvIGNsb3NlLlxuICogT25seSB0aGF0IGV4cGVjdGVkIFwibm90IHNldCB5ZXRcIiBjYXNlIGlzIHRyZWF0ZWQgYXMgbnVsbDsgYW55IG90aGVyIGVycm9yIGlzIGEgcmVhbFxuICogZmF1bHQgYW5kIGlzIHJldGhyb3duIHJhdGhlciB0aGFuIG1hc2tlZC5cbiAqIEByZXR1cm5zIHtDb25maWd1cmF0aW9uIHwgbnVsbH0gLSBUaGUgY3VycmVudCBjb25maWd1cmF0aW9uLCBvciBudWxsIHdoZW4gbm9uZSBpcyBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50Q29uZmlndXJhdGlvbk9yTnVsbCgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5jdXJyZW50KClcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDdXJyZW50Q29uZmlndXJhdGlvbk5vdFNldEVycm9yKSByZXR1cm4gbnVsbFxuXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuIl19
@@ -23,8 +23,10 @@ export default class BackgroundJobsWorker {
23
23
  * @param {number} [args.forkedChildSigkillGraceMs] - Override the grace period between SIGTERM and SIGKILL when reaping lingering process runners on stop.
24
24
  * @param {number} [args.heartbeatIntervalMs] - Override the liveness heartbeat interval (default 15000ms).
25
25
  * @param {number} [args.jobTimeoutMs] - Override the wall-clock timeout for forked and pooled jobs from `configuration.getBackgroundJobsConfig()`. `0` disables it.
26
+ * @param {boolean} [args.closeDatabaseConnectionsOnStop] - Whether stop owns closing the configuration's database pools (default true).
27
+ * @param {() => void | Promise<void>} [args.onStopped] - Lifecycle hook invoked after the worker finishes stopping.
26
28
  */
27
- constructor({ configuration, host, port, maxConcurrentForkedJobs, maxConcurrentInlineJobs, pooledRunnerCount, pooledRunnerConcurrency, pooledRunnerMaxJobs, pooledRunnerMaxRssBytes, pooledRunnerMaxLifetimeMs, forkedChildSigkillGraceMs, heartbeatIntervalMs, jobTimeoutMs }?: {
29
+ constructor({ configuration, host, port, maxConcurrentForkedJobs, maxConcurrentInlineJobs, pooledRunnerCount, pooledRunnerConcurrency, pooledRunnerMaxJobs, pooledRunnerMaxRssBytes, pooledRunnerMaxLifetimeMs, forkedChildSigkillGraceMs, heartbeatIntervalMs, jobTimeoutMs, closeDatabaseConnectionsOnStop, onStopped }?: {
28
30
  configuration?: import("../configuration.js").default | undefined;
29
31
  host?: string | undefined;
30
32
  port?: number | undefined;
@@ -38,6 +40,8 @@ export default class BackgroundJobsWorker {
38
40
  forkedChildSigkillGraceMs?: number | undefined;
39
41
  heartbeatIntervalMs?: number | undefined;
40
42
  jobTimeoutMs?: number | undefined;
43
+ closeDatabaseConnectionsOnStop?: boolean | undefined;
44
+ onStopped?: (() => void | Promise<void>) | undefined;
41
45
  });
42
46
  /**
43
47
  * Narrows the runtime value to the documented type.
@@ -49,6 +53,8 @@ export default class BackgroundJobsWorker {
49
53
  configuration: import("../configuration.js").default | undefined;
50
54
  host: string | undefined;
51
55
  port: number | undefined;
56
+ closeDatabaseConnectionsOnStop: boolean;
57
+ onStopped: (() => void | Promise<void>) | undefined;
52
58
  /**
53
59
  * Constructor override for the inline-job concurrency cap. When unset
54
60
  * the cap is read from `configuration.getBackgroundJobsConfig()` in
@@ -94,6 +100,8 @@ export default class BackgroundJobsWorker {
94
100
  */
95
101
  jobTimeoutMsOverride: number | undefined;
96
102
  shouldStop: boolean;
103
+ /** @type {Promise<void> | undefined} */
104
+ stopPromise: Promise<void> | undefined;
97
105
  workerId: `${string}-${string}-${string}-${string}-${string}`;
98
106
  heartbeatIntervalMs: number;
99
107
  /**
@@ -180,6 +188,15 @@ export default class BackgroundJobsWorker {
180
188
  stop({ timeoutMs }?: {
181
189
  timeoutMs?: number | undefined;
182
190
  }): Promise<void>;
191
+ /**
192
+ * Runs the worker shutdown lifecycle once.
193
+ * @param {object} [args] - Options.
194
+ * @param {number} [args.timeoutMs] - Max wait for in-flight jobs (per phase) in ms.
195
+ * @returns {Promise<void>} - Resolves when stopped.
196
+ */
197
+ _stop({ timeoutMs }?: {
198
+ timeoutMs?: number | undefined;
199
+ }): Promise<void>;
183
200
  /**
184
201
  * Waits for a set of in-flight job promises to settle, optionally bounded by
185
202
  * `timeoutMs`.
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/worker.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/worker.js"],"names":[],"mappings":"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"}