solid-objects 0.17.7 → 0.17.8
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.
- package/CHANGELOG.md +37 -0
- package/dist/broadcast-worker.d.ts.map +1 -1
- package/dist/broadcast-worker.js +5 -3
- package/dist/broadcast-worker.js.map +1 -1
- package/dist/effect-worker.d.ts.map +1 -1
- package/dist/effect-worker.js +5 -3
- package/dist/effect-worker.js.map +1 -1
- package/dist/platform/node.js +2 -0
- package/dist/platform/node.js.map +1 -1
- package/dist/reminder-scheduler.d.ts.map +1 -1
- package/dist/reminder-scheduler.js +5 -3
- package/dist/reminder-scheduler.js.map +1 -1
- package/dist/repository.d.ts +1 -0
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +22 -2
- package/dist/repository.js.map +1 -1
- package/dist/runtime.d.ts +4 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +58 -37
- package/dist/runtime.js.map +1 -1
- package/dist/test-helper.d.ts.map +1 -1
- package/dist/test-helper.js +8 -2
- package/dist/test-helper.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +5 -3
- package/dist/worker.js.map +1 -1
- package/dist/yield-to-event-loop.d.ts +3 -0
- package/dist/yield-to-event-loop.d.ts.map +1 -0
- package/dist/yield-to-event-loop.js +10 -0
- package/dist/yield-to-event-loop.js.map +1 -0
- package/docs/agents.md +3 -0
- package/docs/configuration.md +24 -2
- package/docs/observability.md +16 -15
- package/docs/operations.md +2 -1
- package/docs/parity.md +24 -24
- package/docs/virtual-actors.md +4 -0
- package/examples/failure-recovery/demo.ts +6 -5
- package/examples/failure-recovery/process-messages.ts +10 -0
- package/examples/failure-recovery/worker.ts +2 -5
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.17.8 - 2026-10-12
|
|
4
|
+
|
|
5
|
+
- Back off repeated interrupted-message recovery using `retryDelayMilliseconds`.
|
|
6
|
+
The first claimed attempt recovers immediately; after attempts 2, 3, 4,
|
|
7
|
+
and onward, the delay callback receives 1, 2, 3, and onward (defaults:
|
|
8
|
+
1, 2, 4 seconds, capped at 60 seconds). Total persisted claim attempts,
|
|
9
|
+
including earlier handler failures, determine the delay. The ready timestamp
|
|
10
|
+
survives worker replacement and preserves mailbox order while other actors
|
|
11
|
+
can proceed. Lease loss alone still does not dead-letter a message; handler
|
|
12
|
+
failure attempt limits, setting names, defaults, and schema stay unchanged.
|
|
13
|
+
- Yield to timers and input between busy passes in actor, effect, reminder,
|
|
14
|
+
and broadcast workers and drain helpers, including repeated lease loss.
|
|
15
|
+
Timer-driven aborts can stop the runtime between attempts; an instrumentation
|
|
16
|
+
abort stops before another pass. Synchronous handlers remain non-preemptible.
|
|
17
|
+
- Report `activation.lost` when a handler failure or rejection cannot commit
|
|
18
|
+
because its lease expired. These attempts recover with the same fencing and
|
|
19
|
+
backoff as lost completions, and instrumentation can stop the worker.
|
|
20
|
+
|
|
21
|
+
- Give overlapping synchronous caller passes separate, reusable workers so
|
|
22
|
+
cleanup cannot discard another turn's staged effects or other intents.
|
|
23
|
+
Calls to different actors still execute concurrently; workers are reused
|
|
24
|
+
once their pass and activation cleanup finish.
|
|
25
|
+
A caller interrupted by test reset cannot return its stopped worker to
|
|
26
|
+
the pool and stall subsequent calls.
|
|
27
|
+
- Re-establish actor, effect, reminder, and broadcast process registrations
|
|
28
|
+
before each pass, including after stale-process cleanup and retention.
|
|
29
|
+
Explicitly stopped workers stay stopped. No schema or setting changes.
|
|
30
|
+
- Cover caller concurrency and process retention on SQLite, PostgreSQL, and
|
|
31
|
+
MySQL, with `maxAttempts: 1` and both default and single-message pass limits.
|
|
32
|
+
Keep adapter and worker-role selection explicit in the regression fixtures.
|
|
33
|
+
- Drain recovered turns in the failure-recovery demo before checking committed
|
|
34
|
+
state. Verify completion and allow additional fenced retries when a worker
|
|
35
|
+
loses its lease on a delayed runner.
|
|
36
|
+
- Advance the database test clock after acquiring commit locks in PostgreSQL
|
|
37
|
+
and MySQL fencing tests, so runner delays cannot expire the lease before
|
|
38
|
+
the commit barrier is reached.
|
|
39
|
+
|
|
3
40
|
## 0.17.7 - 2026-10-12
|
|
4
41
|
|
|
5
42
|
- Renew retained activations between short turns and across worker passes,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast-worker.d.ts","sourceRoot":"","sources":["../src/broadcast-worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"broadcast-worker.d.ts","sourceRoot":"","sources":["../src/broadcast-worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAKvD,qBAAa,eAAe;IAMd,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,QAAQ,CAAC,SAAS,SAAe;IACjC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;gBAElB,OAAO,EAAE,mBAAmB;IAYzD,IAAI,kCAAkC,IAAI,MAAM,CAE/C;IAEK,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAa1B,YAAY,CAAC,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAYvE,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB7C,eAAe,IAAI,IAAI;IAIvB,OAAO,IAAI,OAAO;IAIZ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YASb,gBAAgB;CAI/B"}
|
package/dist/broadcast-worker.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { randomUUID } from "./platform/uuid.js";
|
|
2
2
|
import { withProcessHeartbeat } from "./worker.js";
|
|
3
3
|
import { PollingBackoff } from "./polling-backoff.js";
|
|
4
|
+
import { yieldToEventLoop } from "./yield-to-event-loop.js";
|
|
4
5
|
export class BroadcastWorker {
|
|
5
6
|
runtime;
|
|
6
7
|
processId = randomUUID();
|
|
@@ -25,7 +26,6 @@ export class BroadcastWorker {
|
|
|
25
26
|
if (this.stopping)
|
|
26
27
|
return 0;
|
|
27
28
|
await this.ensureRegistered();
|
|
28
|
-
await this.runtime.repository.heartbeatProcess(this.processId);
|
|
29
29
|
const broadcast = await this.runtime.repository.claimBroadcast(this.processId);
|
|
30
30
|
if (!broadcast)
|
|
31
31
|
return 0;
|
|
@@ -44,6 +44,7 @@ export class BroadcastWorker {
|
|
|
44
44
|
if (count === 0)
|
|
45
45
|
break;
|
|
46
46
|
processed += count;
|
|
47
|
+
await yieldToEventLoop();
|
|
47
48
|
}
|
|
48
49
|
return processed;
|
|
49
50
|
}
|
|
@@ -53,8 +54,11 @@ export class BroadcastWorker {
|
|
|
53
54
|
while (!signal.aborted && !this.stopping) {
|
|
54
55
|
const wakeUp = await this.runtime.watchWakeUp("broadcasts");
|
|
55
56
|
const processed = await this.runOnce();
|
|
57
|
+
if (signal.aborted || this.stopping)
|
|
58
|
+
break;
|
|
56
59
|
if (processed > 0) {
|
|
57
60
|
this.pollingBackoff.reset("work");
|
|
61
|
+
await yieldToEventLoop();
|
|
58
62
|
continue;
|
|
59
63
|
}
|
|
60
64
|
const notified = await wakeUp.wait({
|
|
@@ -85,8 +89,6 @@ export class BroadcastWorker {
|
|
|
85
89
|
this.registered = false;
|
|
86
90
|
}
|
|
87
91
|
async ensureRegistered() {
|
|
88
|
-
if (this.registered)
|
|
89
|
-
return;
|
|
90
92
|
await this.runtime.repository.registerProcess(this.processId, "broadcast_worker");
|
|
91
93
|
this.registered = true;
|
|
92
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast-worker.js","sourceRoot":"","sources":["../src/broadcast-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"broadcast-worker.js","sourceRoot":"","sources":["../src/broadcast-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect-worker.d.ts","sourceRoot":"","sources":["../src/effect-worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"effect-worker.d.ts","sourceRoot":"","sources":["../src/effect-worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAKvD,qBAAa,YAAY;IAMX,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,QAAQ,CAAC,SAAS,SAAe;IACjC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;gBAElB,OAAO,EAAE,mBAAmB;IAYzD,IAAI,kCAAkC,IAAI,MAAM,CAE/C;IAEK,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAa1B,YAAY,CAAC,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAYpE,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB7C,eAAe,IAAI,IAAI;IAIvB,OAAO,IAAI,OAAO;IAIZ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YASb,gBAAgB;CAI/B"}
|
package/dist/effect-worker.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { randomUUID } from "./platform/uuid.js";
|
|
2
2
|
import { withProcessHeartbeat } from "./worker.js";
|
|
3
3
|
import { PollingBackoff } from "./polling-backoff.js";
|
|
4
|
+
import { yieldToEventLoop } from "./yield-to-event-loop.js";
|
|
4
5
|
export class EffectWorker {
|
|
5
6
|
runtime;
|
|
6
7
|
processId = randomUUID();
|
|
@@ -25,7 +26,6 @@ export class EffectWorker {
|
|
|
25
26
|
if (this.stopping)
|
|
26
27
|
return 0;
|
|
27
28
|
await this.ensureRegistered();
|
|
28
|
-
await this.runtime.repository.heartbeatProcess(this.processId);
|
|
29
29
|
const effect = await this.runtime.repository.claimEffect(this.processId);
|
|
30
30
|
if (!effect)
|
|
31
31
|
return 0;
|
|
@@ -44,6 +44,7 @@ export class EffectWorker {
|
|
|
44
44
|
if (count === 0)
|
|
45
45
|
break;
|
|
46
46
|
processed += count;
|
|
47
|
+
await yieldToEventLoop();
|
|
47
48
|
}
|
|
48
49
|
return processed;
|
|
49
50
|
}
|
|
@@ -53,8 +54,11 @@ export class EffectWorker {
|
|
|
53
54
|
while (!signal.aborted && !this.stopping) {
|
|
54
55
|
const wakeUp = await this.runtime.watchWakeUp("effects");
|
|
55
56
|
const processed = await this.runOnce();
|
|
57
|
+
if (signal.aborted || this.stopping)
|
|
58
|
+
break;
|
|
56
59
|
if (processed > 0) {
|
|
57
60
|
this.pollingBackoff.reset("work");
|
|
61
|
+
await yieldToEventLoop();
|
|
58
62
|
continue;
|
|
59
63
|
}
|
|
60
64
|
const notified = await wakeUp.wait({
|
|
@@ -85,8 +89,6 @@ export class EffectWorker {
|
|
|
85
89
|
this.registered = false;
|
|
86
90
|
}
|
|
87
91
|
async ensureRegistered() {
|
|
88
|
-
if (this.registered)
|
|
89
|
-
return;
|
|
90
92
|
await this.runtime.repository.registerProcess(this.processId, "effect_worker");
|
|
91
93
|
this.registered = true;
|
|
92
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect-worker.js","sourceRoot":"","sources":["../src/effect-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"effect-worker.js","sourceRoot":"","sources":["../src/effect-worker.ts"],"names":[],"mappings":"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"}
|
package/dist/platform/node.js
CHANGED
|
@@ -2,7 +2,9 @@ import { AsyncLocalStorage } from "node:async_hooks";
|
|
|
2
2
|
import { hostname } from "node:os";
|
|
3
3
|
import { registerContextStoreFactory } from "./context-store.js";
|
|
4
4
|
import { registerHostIdentity } from "./host-identity.js";
|
|
5
|
+
import { registerEventLoopYield } from "../yield-to-event-loop.js";
|
|
5
6
|
registerContextStoreFactory(() => new AsyncLocalStorage());
|
|
7
|
+
registerEventLoopYield(() => new Promise((resolve) => setTimeout(() => setImmediate(resolve), 0)));
|
|
6
8
|
registerHostIdentity({
|
|
7
9
|
hostname: hostname(),
|
|
8
10
|
hostProcessId: process.pid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/platform/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/platform/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAElE,2BAA2B,CAAC,GAAU,EAAE,CAAC,IAAI,iBAAiB,EAAS,CAAC,CAAA;AACxE,sBAAsB,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AAClG,oBAAoB,CAAC;IACnB,QAAQ,EAAE,QAAQ,EAAE;IACpB,aAAa,EAAE,OAAO,CAAC,GAAG;IAC1B,cAAc,EAAE,OAAO,CAAC,OAAO;CAChC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reminder-scheduler.d.ts","sourceRoot":"","sources":["../src/reminder-scheduler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"reminder-scheduler.d.ts","sourceRoot":"","sources":["../src/reminder-scheduler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAIvD,qBAAa,iBAAiB;IAMhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,QAAQ,CAAC,SAAS,SAAe;IACjC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;gBAElB,OAAO,EAAE,mBAAmB;IAYzD,IAAI,kCAAkC,IAAI,MAAM,CAE/C;IAEK,OAAO,CAAC,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,IAAI,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCtD,YAAY,CAAC,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAYtE,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB7C,eAAe,IAAI,IAAI;IAIvB,OAAO,IAAI,OAAO;IAIZ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YASb,gBAAgB;CAI/B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { randomUUID } from "./platform/uuid.js";
|
|
2
2
|
import { UnknownOperation } from "./errors.js";
|
|
3
3
|
import { PollingBackoff } from "./polling-backoff.js";
|
|
4
|
+
import { yieldToEventLoop } from "./yield-to-event-loop.js";
|
|
4
5
|
export class ReminderScheduler {
|
|
5
6
|
runtime;
|
|
6
7
|
processId = randomUUID();
|
|
@@ -29,7 +30,6 @@ export class ReminderScheduler {
|
|
|
29
30
|
throw new TypeError("reminder test time must be a valid date");
|
|
30
31
|
}
|
|
31
32
|
await this.ensureRegistered();
|
|
32
|
-
await this.runtime.repository.heartbeatProcess(this.processId);
|
|
33
33
|
const reminder = await this.runtime.repository.claimReminder(this.processId, {
|
|
34
34
|
...(nowMilliseconds === undefined ? {} : { nowMilliseconds }),
|
|
35
35
|
});
|
|
@@ -66,6 +66,7 @@ export class ReminderScheduler {
|
|
|
66
66
|
if (count === 0)
|
|
67
67
|
break;
|
|
68
68
|
processed += count;
|
|
69
|
+
await yieldToEventLoop();
|
|
69
70
|
}
|
|
70
71
|
return processed;
|
|
71
72
|
}
|
|
@@ -75,8 +76,11 @@ export class ReminderScheduler {
|
|
|
75
76
|
while (!signal.aborted && !this.stopping) {
|
|
76
77
|
const wakeUp = await this.runtime.watchWakeUp("reminders");
|
|
77
78
|
const processed = await this.runOnce();
|
|
79
|
+
if (signal.aborted || this.stopping)
|
|
80
|
+
break;
|
|
78
81
|
if (processed > 0) {
|
|
79
82
|
this.pollingBackoff.reset("work");
|
|
83
|
+
await yieldToEventLoop();
|
|
80
84
|
continue;
|
|
81
85
|
}
|
|
82
86
|
const notified = await wakeUp.wait({
|
|
@@ -107,8 +111,6 @@ export class ReminderScheduler {
|
|
|
107
111
|
this.registered = false;
|
|
108
112
|
}
|
|
109
113
|
async ensureRegistered() {
|
|
110
|
-
if (this.registered)
|
|
111
|
-
return;
|
|
112
114
|
await this.runtime.repository.registerProcess(this.processId, "reminder_scheduler");
|
|
113
115
|
this.registered = true;
|
|
114
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reminder-scheduler.js","sourceRoot":"","sources":["../src/reminder-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"reminder-scheduler.js","sourceRoot":"","sources":["../src/reminder-scheduler.ts"],"names":[],"mappings":"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"}
|
package/dist/repository.d.ts
CHANGED
package/dist/repository.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAY,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACvE,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,WAAW,EACX,aAAa,EACb,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACV,UAAU,EACV,WAAW,EACZ,MAAM,cAAc,CAAA;AAErB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAGV,UAAU,EACV,SAAS,EACT,aAAa,EAEd,MAAM,YAAY,CAAA;AAGnB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,UAAU,CAAA;IACnB,QAAQ,EAAE,WAAW,CAAA;IACrB,OAAO,EAAE,UAAU,GAAG,SAAS,CAAA;IAC/B,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAA;IAC3E,4BAA4B,EAAE,MAAM,GAAG,SAAS,CAAA;IAChD,OAAO,EACH,CAAC,UAAU,GAAG;QACZ,iBAAiB,EAAE,OAAO,GAAG,SAAS,CAAA;KACvC,CAAC,GACF,SAAS,CAAA;IACb,eAAe,EAAE,MAAM,CAAA;CACxB;AAiBD,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE;QAAE,aAAa,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;KAAE;IAG3E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/D,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlD,aAAa,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAC;IAa7E,uCAAuC,IAAI,OAAO,CAAC,OAAO,CAAC;IAkB3D,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;YAkBhC,uBAAuB;
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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"}
|
package/dist/repository.js
CHANGED
|
@@ -124,7 +124,12 @@ export class Repository {
|
|
|
124
124
|
continue;
|
|
125
125
|
await connection.run(`INSERT INTO ${this.table("ready_messages")}
|
|
126
126
|
(message_id, instance_id, sequence, available_at_ms)
|
|
127
|
-
VALUES (?, ?, ?, ?) ON CONFLICT(message_id) DO NOTHING`, [
|
|
127
|
+
VALUES (?, ?, ?, ?) ON CONFLICT(message_id) DO NOTHING`, [
|
|
128
|
+
claim.message_id,
|
|
129
|
+
claim.instance_id,
|
|
130
|
+
currentClaim.sequence,
|
|
131
|
+
await this.recoveryAvailableAt({ connection, messageId: claim.message_id, now }),
|
|
132
|
+
]);
|
|
128
133
|
const ownsActivation = instance.activation_owner_id === processId &&
|
|
129
134
|
instance.activation_token === currentClaim.activation_token &&
|
|
130
135
|
BigInt(instance.activation_generation) === BigInt(currentClaim.activation_generation);
|
|
@@ -1532,6 +1537,16 @@ export class Repository {
|
|
|
1532
1537
|
const { connection, actorType, actorId } = options;
|
|
1533
1538
|
return connection.get(`SELECT id FROM ${this.table("instances")} WHERE actor_type = ? AND actor_id = ?${options.lock === "share" ? " FOR SHARE" : ""}`, [actorType, actorId]);
|
|
1534
1539
|
}
|
|
1540
|
+
async recoveryAvailableAt(options) {
|
|
1541
|
+
const { connection, messageId, now } = options;
|
|
1542
|
+
const message = await connection.get(`SELECT attempt_count FROM ${this.table("messages")} WHERE id = ?`, [messageId]);
|
|
1543
|
+
if (!message)
|
|
1544
|
+
throw new Error("claimed message does not exist");
|
|
1545
|
+
const attempt = Number(message.attempt_count);
|
|
1546
|
+
if (attempt <= 1)
|
|
1547
|
+
return now;
|
|
1548
|
+
return now + this.settings.retryDelayMilliseconds(attempt - 1);
|
|
1549
|
+
}
|
|
1535
1550
|
async recoverExpiredClaims(connection, now) {
|
|
1536
1551
|
const expired = await connection.all(`SELECT claimed.message_id, claimed.instance_id, claimed.sequence
|
|
1537
1552
|
FROM ${this.table("claimed_messages")} claimed
|
|
@@ -1564,7 +1579,12 @@ export class Repository {
|
|
|
1564
1579
|
if (removed.changes !== 1)
|
|
1565
1580
|
continue;
|
|
1566
1581
|
await connection.run(`INSERT INTO ${this.table("ready_messages")}(message_id, instance_id, sequence, available_at_ms)
|
|
1567
|
-
VALUES (?, ?, ?, ?) ON CONFLICT(message_id) DO NOTHING`, [
|
|
1582
|
+
VALUES (?, ?, ?, ?) ON CONFLICT(message_id) DO NOTHING`, [
|
|
1583
|
+
claim.message_id,
|
|
1584
|
+
claim.instance_id,
|
|
1585
|
+
currentClaim.sequence,
|
|
1586
|
+
await this.recoveryAvailableAt({ connection, messageId: claim.message_id, now }),
|
|
1587
|
+
]);
|
|
1568
1588
|
const released = await connection.run(`UPDATE ${this.table("instances")}
|
|
1569
1589
|
SET activation_owner_id = NULL, activation_token = NULL, activation_expires_at_ms = NULL,
|
|
1570
1590
|
updated_at_ms = ?
|