anbaric-impl-cloud 1.58.2 → 1.59.0

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.
@@ -2,19 +2,28 @@ import { Consumer } from "anbaric-tsapi";
2
2
  type ProcessJob = (jobId: string) => Promise<void>;
3
3
  declare class PushConsumer implements Consumer {
4
4
  private listenPort;
5
+ private drainOnSignals;
5
6
  private subscribers;
6
7
  private client;
7
8
  private server?;
8
9
  private listening?;
9
10
  private boundPort?;
10
- constructor(baseUrl?: string, listenPort?: number);
11
+ private draining;
12
+ private inFlightSteps;
13
+ constructor(baseUrl?: string, listenPort?: number, drainOnSignals?: Array<NodeJS.Signals>);
11
14
  get port(): number | undefined;
15
+ get inFlight(): number;
16
+ get isDraining(): boolean;
12
17
  private key;
13
18
  subscribe(appId: string | undefined, workflowId: string, processJob: ProcessJob): void;
14
19
  private register;
20
+ drain(): void;
21
+ drained(timeoutMs?: number): Promise<boolean>;
22
+ private drainThenExit;
15
23
  cleanUp(): Promise<void>;
16
24
  private listen;
17
25
  private handle;
26
+ private health;
18
27
  private processAll;
19
28
  private reply;
20
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PushConsumer.d.ts","sourceRoot":"","sources":["../src/PushConsumer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAe,MAAM,eAAe,CAAC;AAGrD,KAAK,UAAU,GAAG,CAAC,KAAK,EAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAiBpD,cAAM,YAAa,YAAW,QAAQ;IAStB,OAAO,CAAC,UAAU;IAP9B,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAC,CAAU;IACzB,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,SAAS,CAAC,CAAU;IAE5B,YAAY,OAAO,GAAG,MAAwC,EAC1C,UAAU,GAAG,MAA0D,EAE1F;IAED,IAAI,IAAI,IAAK,MAAM,GAAG,SAAS,CAE9B;IAID,OAAO,CAAC,GAAG;IAIX,SAAS,CAAC,KAAK,EAAG,MAAM,GAAG,SAAS,EAAE,UAAU,EAAG,MAAM,EAAE,UAAU,EAAG,UAAU,GAAI,IAAI,CAIzF;YAEa,QAAQ;IAShB,OAAO,IAAK,OAAO,CAAC,IAAI,CAAC,CAQ9B;IAED,OAAO,CAAC,MAAM;YAaA,MAAM;YA4BN,UAAU;IAqBxB,OAAO,CAAC,KAAK;CAUhB;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"PushConsumer.d.ts","sourceRoot":"","sources":["../src/PushConsumer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAe,MAAM,eAAe,CAAC;AAGrD,KAAK,UAAU,GAAG,CAAC,KAAK,EAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAgCpD,cAAM,YAAa,YAAW,QAAQ;IAWtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,cAAc;IAVlC,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAC,CAAU;IACzB,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,SAAS,CAAC,CAAU;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAK;IAE1B,YAAY,OAAO,GAAG,MAAwC,EAC1C,UAAU,GAAG,MAA0D,EACvE,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAuD,EAE/G;IAED,IAAI,IAAI,IAAK,MAAM,GAAG,SAAS,CAE9B;IAED,IAAI,QAAQ,IAAK,MAAM,CAEtB;IAED,IAAI,UAAU,IAAK,OAAO,CAEzB;IAID,OAAO,CAAC,GAAG;IAIX,SAAS,CAAC,KAAK,EAAG,MAAM,GAAG,SAAS,EAAE,UAAU,EAAG,MAAM,EAAE,UAAU,EAAG,UAAU,GAAI,IAAI,CAOzF;YAEa,QAAQ;IAUtB,KAAK,IAAK,IAAI,CAEb;IAGK,OAAO,CAAC,SAAS,GAAG,MAA2B,GAAI,OAAO,CAAC,OAAO,CAAC,CAMxE;YAEa,aAAa;IAOrB,OAAO,IAAK,OAAO,CAAC,IAAI,CAAC,CAQ9B;IAED,OAAO,CAAC,MAAM;YAaA,MAAM;IA4BpB,OAAO,CAAC,MAAM;YAYA,UAAU;IAyBxB,OAAO,CAAC,KAAK;CAUhB;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
@@ -1,5 +1,11 @@
1
1
  import { createServer } from "node:http";
2
2
  import { CloudApiClient } from "./CloudApiClient.js";
3
+ /* How long a consumer told to stop by a signal keeps the process alive for
4
+ the work it has in hand. Under the platform's own drain the signal only
5
+ arrives once the work is done; on its own it is bounded by the 120 seconds a
6
+ Fargate task is given to stop, with a little kept back for the exit. */
7
+ const DRAIN_ON_SIGNAL_MS = 110_000;
8
+ const IDLE_POLL_MS = 250;
3
9
  const readBody = (request) => new Promise((resolve, reject) => {
4
10
  const chunks = [];
5
11
  request.on("data", chunk => chunks.push(chunk));
@@ -14,20 +20,38 @@ const readBody = (request) => new Promise((resolve, reject) => {
14
20
  }
15
21
  });
16
22
  });
23
+ /* The app-side end of the platform's queue: the platform pushes batches of
24
+ messages to this consumer's URL, and each is confirmed the moment the
25
+ consumer takes it on - from then on the job is the app's.
26
+
27
+ A consumer can be told to drain, by the platform ahead of replacing the app
28
+ or by a signal: it stops accepting pushes (they are refused unconfirmed, so
29
+ the platform offers them to whatever replaces this app) and finishes the
30
+ steps it already has in hand, which it counts and reports on /health. */
17
31
  class PushConsumer {
18
32
  listenPort;
33
+ drainOnSignals;
19
34
  subscribers = new Map();
20
35
  client;
21
36
  server;
22
37
  listening;
23
38
  boundPort;
24
- constructor(baseUrl = CloudApiClient.defaultBaseUrl(), listenPort = Number(process.env.ANBARIC_CONSUMER_PORT ?? 8788)) {
39
+ draining = false;
40
+ inFlightSteps = 0;
41
+ constructor(baseUrl = CloudApiClient.defaultBaseUrl(), listenPort = Number(process.env.ANBARIC_CONSUMER_PORT ?? 8788), drainOnSignals = process.env.ANBARIC_CONSUMER_URL ? ["SIGTERM"] : []) {
25
42
  this.listenPort = listenPort;
43
+ this.drainOnSignals = drainOnSignals;
26
44
  this.client = new CloudApiClient(baseUrl);
27
45
  }
28
46
  get port() {
29
47
  return this.boundPort;
30
48
  }
49
+ get inFlight() {
50
+ return this.inFlightSteps;
51
+ }
52
+ get isDraining() {
53
+ return this.draining;
54
+ }
31
55
  // Subscribers are keyed by the (appId, workflowId) composite, encoded as a
32
56
  // tuple so an app and a machine id can never collide.
33
57
  key(appId, workflowId) {
@@ -35,8 +59,11 @@ class PushConsumer {
35
59
  }
36
60
  subscribe(appId, workflowId, processJob) {
37
61
  this.subscribers.set(this.key(appId, workflowId), processJob);
38
- if (!this.server)
62
+ if (!this.server) {
39
63
  this.listening = this.listen();
64
+ for (const signal of this.drainOnSignals)
65
+ process.once(signal, () => void this.drainThenExit());
66
+ }
40
67
  void this.register(appId, workflowId);
41
68
  }
42
69
  async register(appId, workflowId) {
@@ -48,6 +75,25 @@ class PushConsumer {
48
75
  catch {
49
76
  }
50
77
  }
78
+ // Stops taking on new messages; what is already in hand runs to the end.
79
+ drain() {
80
+ this.draining = true;
81
+ }
82
+ // Resolves once nothing is in flight, or at the deadline.
83
+ async drained(timeoutMs = DRAIN_ON_SIGNAL_MS) {
84
+ const deadline = Date.now() + timeoutMs;
85
+ while (this.inFlightSteps > 0 && Date.now() < deadline) {
86
+ await new Promise(resolve => setTimeout(resolve, IDLE_POLL_MS));
87
+ }
88
+ return this.inFlightSteps === 0;
89
+ }
90
+ async drainThenExit() {
91
+ this.drain();
92
+ const idle = await this.drained();
93
+ if (!idle)
94
+ console.error(`[anbaric] stopping with ${this.inFlightSteps} step(s) still in flight after ${DRAIN_ON_SIGNAL_MS / 1000}s`);
95
+ process.exit(0);
96
+ }
51
97
  async cleanUp() {
52
98
  this.subscribers.clear();
53
99
  if (!this.server)
@@ -71,7 +117,16 @@ class PushConsumer {
71
117
  }
72
118
  async handle(request, response) {
73
119
  const url = new URL(request.url ?? "/", "http://localhost");
120
+ if (request.method === "GET" && url.pathname === "/health") {
121
+ return this.reply(response, 200, this.health());
122
+ }
123
+ if (request.method === "POST" && url.pathname === "/drain") {
124
+ this.drain();
125
+ return this.reply(response, 200, this.health());
126
+ }
74
127
  if (request.method === "POST" && url.pathname === "/process") {
128
+ if (this.draining)
129
+ return this.reply(response, 503, { error: "Draining: not accepting new messages", ...this.health() });
75
130
  const body = await readBody(request);
76
131
  if (!body || !Array.isArray(body.messages)) {
77
132
  return this.reply(response, 400, { error: "Expected a body of { messages : Array<QueueMessage> }" });
@@ -83,22 +138,24 @@ class PushConsumer {
83
138
  }
84
139
  this.reply(response, 404, { error: "Not found" });
85
140
  }
141
+ health() {
142
+ return { draining: this.draining, inFlight: this.inFlightSteps };
143
+ }
86
144
  /* A message is confirmed as soon as this consumer takes it on, not when the
87
- work finishes. The queue's lease only guards against two dispatchers
145
+ work finishes: from then on the job is the app's, and the platform never
146
+ offers it again. The queue's lease only guards against two dispatchers
88
147
  claiming the same row at once; it says nothing about how long the work
89
- takes. Confirming at the end meant a job whose actions ran longer than
90
- the lease was handed out again while it was still being processed, and
91
- again, each delivery starting another full pass over the same job.
92
-
93
- A process that dies midway through therefore drops that job's message.
94
- That is a separate concern - losing work to a crash - and wants its own
95
- answer rather than being papered over by redelivering to a consumer
96
- that is already busy with it. */
148
+ takes, so confirming at the end would hand a long step out again while
149
+ it was still running. What protects work in hand is draining: the
150
+ platform asks before replacing the app, and a signal asks on the way
151
+ out. */
97
152
  async processAll(messages) {
98
153
  for (const message of messages) {
99
154
  const processJob = this.subscribers.get(this.key(message.appId, message.workflowId));
100
155
  if (!processJob)
101
156
  continue;
157
+ if (this.draining)
158
+ continue;
102
159
  try {
103
160
  await this.client.request("POST", "/queue/confirm", message);
104
161
  }
@@ -107,12 +164,16 @@ class PushConsumer {
107
164
  // work that would then be duplicated by that redelivery.
108
165
  continue;
109
166
  }
167
+ this.inFlightSteps++;
110
168
  try {
111
169
  await processJob(message.jobId);
112
170
  }
113
171
  catch {
114
172
  // The state machine records a failed job; the queue is done here.
115
173
  }
174
+ finally {
175
+ this.inFlightSteps--;
176
+ }
116
177
  }
117
178
  }
118
179
  reply(response, status, body) {
@@ -1 +1 @@
1
- {"version":3,"file":"PushConsumer.js","sourceRoot":"","sources":["../src/PushConsumer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PushConsumer.js","sourceRoot":"","sources":["../src/PushConsumer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "anbaric-impl-cloud",
3
- "version": "1.58.2",
3
+ "version": "1.59.0",
4
4
  "description": "Public client library for the Anbaric Cloud hosting API, providing JobPersistence and Queue implementations backed by the cloud service",
5
5
  "license": "MIT",
6
6
  "author": "chris@anbaric.ai",
@@ -20,7 +20,7 @@
20
20
  "prepublishOnly": "npm run build"
21
21
  },
22
22
  "dependencies": {
23
- "anbaric-tsapi": "^1.58.2"
23
+ "anbaric-tsapi": "^1.59.0"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/node": "^26.2.0",