solid-objects 0.14.9 → 0.15.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.
- package/CHANGELOG.md +13 -0
- package/dist/actor.d.ts +16 -3
- package/dist/actor.d.ts.map +1 -1
- package/dist/actor.js +31 -1
- package/dist/actor.js.map +1 -1
- package/dist/cloudflare/engine.d.ts.map +1 -1
- package/dist/cloudflare/engine.js +7 -1
- package/dist/cloudflare/engine.js.map +1 -1
- package/dist/core.d.ts +1 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +1 -0
- package/dist/core.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +10 -2
- package/dist/doctor.js.map +1 -1
- package/dist/effect-recovery-coordinator.d.ts +29 -0
- package/dist/effect-recovery-coordinator.d.ts.map +1 -0
- package/dist/effect-recovery-coordinator.js +152 -0
- package/dist/effect-recovery-coordinator.js.map +1 -0
- package/dist/effect-recovery.d.ts +27 -0
- package/dist/effect-recovery.d.ts.map +1 -0
- package/dist/effect-recovery.js +10 -0
- package/dist/effect-recovery.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/platform/uuid.d.ts.map +1 -1
- package/dist/platform/uuid.js +2 -1
- package/dist/platform/uuid.js.map +1 -1
- package/dist/repository.d.ts +1 -0
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +45 -5
- package/dist/repository.js.map +1 -1
- package/dist/runtime.d.ts +0 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +3 -16
- package/dist/runtime.js.map +1 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +26 -1
- package/dist/schema.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/wake-up-notification.d.ts +8 -0
- package/dist/wake-up-notification.d.ts.map +1 -0
- package/dist/wake-up-notification.js +12 -0
- package/dist/wake-up-notification.js.map +1 -0
- package/dist/worker.js +11 -1
- package/dist/worker.js.map +1 -1
- package/docs/api.md +139 -0
- package/docs/effect-recovery.md +59 -0
- package/docs/parity.md +18 -0
- package/examples/failure-recovery/actor.ts +19 -1
- package/examples/failure-recovery/demo.ts +47 -7
- package/examples/failure-recovery/worker.ts +9 -1
- package/package.json +3 -3
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { NonRetryableError } from "./errors.js";
|
|
2
|
+
import { EffectRecoveryOutcome, } from "./effect-recovery.js";
|
|
3
|
+
import { jsonObject, normalizeJson } from "./serialization.js";
|
|
4
|
+
import { notifyWakeUp } from "./wake-up-notification.js";
|
|
5
|
+
export class EffectRecoveryCoordinator {
|
|
6
|
+
options;
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.options = options;
|
|
9
|
+
}
|
|
10
|
+
async recoverAvailable() {
|
|
11
|
+
const candidates = await this.options.settings.database.connection(async (connection) => {
|
|
12
|
+
const now = await connection.nowMilliseconds();
|
|
13
|
+
const threshold = this.options.settings.processAliveThresholdMilliseconds;
|
|
14
|
+
return connection.all(`SELECT recoveries.* FROM ${this.table("effect_recoveries")} recoveries
|
|
15
|
+
JOIN ${this.table("effects")} effects ON effects.id = recoveries.effect_id
|
|
16
|
+
LEFT JOIN ${this.table("processes")} owners ON owners.id = effects.claimed_by
|
|
17
|
+
WHERE recoveries.retired_at_ms IS NULL AND recoveries.recovery_operation IS NOT NULL
|
|
18
|
+
AND effects.status = 'processing'
|
|
19
|
+
AND (owners.id IS NULL OR owners.heartbeat_at_ms <= ? -
|
|
20
|
+
CASE WHEN recoveries.recovery_timeout_ms > ? THEN recoveries.recovery_timeout_ms ELSE ? END)
|
|
21
|
+
ORDER BY recoveries.instance_id, recoveries.effect_id LIMIT ?`, [now, threshold, threshold, this.options.settings.claimScanLimit]);
|
|
22
|
+
});
|
|
23
|
+
for (const candidate of candidates) {
|
|
24
|
+
const retired = await this.options.settings.database.transaction(async (connection) => {
|
|
25
|
+
const origin = await connection.get(`SELECT id, actor_type, actor_id FROM ${this.table("instances")} WHERE id = ?${this.lockClause()}`, [candidate.instance_id]);
|
|
26
|
+
if (!origin)
|
|
27
|
+
return;
|
|
28
|
+
const effect = await connection.get(`SELECT * FROM ${this.table("effects")} WHERE id = ? AND instance_id = ?${this.lockClause()}`, [candidate.effect_id, origin.id]);
|
|
29
|
+
const binding = await connection.get(`SELECT * FROM ${this.table("effect_recoveries")} WHERE effect_id = ? AND instance_id = ?${this.lockClause()}`, [candidate.effect_id, origin.id]);
|
|
30
|
+
if (!effect ||
|
|
31
|
+
!binding ||
|
|
32
|
+
!binding.recovery_operation ||
|
|
33
|
+
binding.retired_at_ms !== null ||
|
|
34
|
+
effect.status !== "processing")
|
|
35
|
+
return;
|
|
36
|
+
const owner = effect.claimed_by === null
|
|
37
|
+
? undefined
|
|
38
|
+
: await connection.get(`SELECT * FROM ${this.table("processes")} WHERE id = ?${this.lockClause()}`, [effect.claimed_by]);
|
|
39
|
+
const now = await connection.nowMilliseconds();
|
|
40
|
+
if (this.ownerFresh({ binding, owner, now }))
|
|
41
|
+
return;
|
|
42
|
+
await this.retire({ connection, origin, binding, effect, now });
|
|
43
|
+
return true;
|
|
44
|
+
});
|
|
45
|
+
if (retired)
|
|
46
|
+
notifyWakeUp({
|
|
47
|
+
adapter: this.options.settings.wakeUp,
|
|
48
|
+
logger: this.options.settings.logger,
|
|
49
|
+
role: "actors",
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async check(options) {
|
|
54
|
+
const { connection, origin, intents } = options;
|
|
55
|
+
const effectIds = [...new Set(intents.map((intent) => intent.effectId))].sort();
|
|
56
|
+
if (effectIds.length === 0)
|
|
57
|
+
return;
|
|
58
|
+
const placeholders = effectIds.map(() => "?").join(", ");
|
|
59
|
+
const effects = new Map((await connection.all(`SELECT * FROM ${this.table("effects")} WHERE instance_id = ? AND id IN (${placeholders}) ORDER BY id${this.lockClause()}`, [origin.id, ...effectIds])).map((effect) => [effect.id, effect]));
|
|
60
|
+
const bindings = new Map((await connection.all(`SELECT * FROM ${this.table("effect_recoveries")} WHERE instance_id = ? AND effect_id IN (${placeholders}) ORDER BY effect_id${this.lockClause()}`, [origin.id, ...effectIds])).map((binding) => [binding.effect_id, binding]));
|
|
61
|
+
for (const id of effectIds) {
|
|
62
|
+
const binding = bindings.get(id);
|
|
63
|
+
if (!binding?.recovery_operation || !binding.status_operation) {
|
|
64
|
+
throw new NonRetryableError("effect recovery requires an owned handle with onRecovery and onStatus");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const ownerIds = [
|
|
68
|
+
...new Set([...effects.values()].flatMap((effect) => effect.claimed_by === null ? [] : [effect.claimed_by])),
|
|
69
|
+
].sort();
|
|
70
|
+
const owners = new Map();
|
|
71
|
+
for (const id of ownerIds) {
|
|
72
|
+
const owner = await connection.get(`SELECT * FROM ${this.table("processes")} WHERE id = ?${this.lockClause()}`, [id]);
|
|
73
|
+
if (owner)
|
|
74
|
+
owners.set(id, owner);
|
|
75
|
+
}
|
|
76
|
+
const now = await connection.nowMilliseconds();
|
|
77
|
+
for (const intent of intents) {
|
|
78
|
+
const binding = bindings.get(intent.effectId);
|
|
79
|
+
const effect = effects.get(intent.effectId);
|
|
80
|
+
const idempotencyKey = `effect:${intent.effectId}:check:${intent.requestId}`;
|
|
81
|
+
const existing = await connection.get(`SELECT id FROM ${this.table("messages")} WHERE instance_id = ? AND idempotency_key = ?`, [origin.id, idempotencyKey]);
|
|
82
|
+
if (existing)
|
|
83
|
+
continue;
|
|
84
|
+
const payload = this.observe({ binding, effect, owners, now });
|
|
85
|
+
if (payload.outcome === EffectRecoveryOutcome.Retired && effect) {
|
|
86
|
+
await this.retire({ connection, origin, binding, effect, now });
|
|
87
|
+
}
|
|
88
|
+
await this.options.enqueue(connection, {
|
|
89
|
+
actorType: origin.actor_type,
|
|
90
|
+
actorId: origin.actor_id,
|
|
91
|
+
operation: binding.status_operation,
|
|
92
|
+
deliveryMode: "internal",
|
|
93
|
+
arguments: jsonObject(payload),
|
|
94
|
+
idempotencyKey,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
observe(options) {
|
|
99
|
+
const { binding, effect, owners, now } = options;
|
|
100
|
+
const effectId = binding.effect_id;
|
|
101
|
+
if (binding.retired_at_ms !== null)
|
|
102
|
+
return { effectId, outcome: EffectRecoveryOutcome.AlreadyRetired };
|
|
103
|
+
if (!effect)
|
|
104
|
+
return { effectId, outcome: EffectRecoveryOutcome.Missing };
|
|
105
|
+
const argumentsValue = jsonObject(JSON.parse(effect.arguments));
|
|
106
|
+
if (effect.status === "completed")
|
|
107
|
+
return {
|
|
108
|
+
effectId,
|
|
109
|
+
arguments: argumentsValue,
|
|
110
|
+
outcome: EffectRecoveryOutcome.Completed,
|
|
111
|
+
result: normalizeJson(JSON.parse(effect.result ?? "null")),
|
|
112
|
+
};
|
|
113
|
+
if (effect.status === "dead")
|
|
114
|
+
return { effectId, arguments: argumentsValue, outcome: EffectRecoveryOutcome.Dead };
|
|
115
|
+
if (effect.status === "pending")
|
|
116
|
+
return { effectId, arguments: argumentsValue, outcome: EffectRecoveryOutcome.Pending };
|
|
117
|
+
const owner = effect.claimed_by === null ? undefined : owners.get(effect.claimed_by);
|
|
118
|
+
if (this.ownerFresh({ binding, owner, now }))
|
|
119
|
+
return { effectId, arguments: argumentsValue, outcome: EffectRecoveryOutcome.Deferred };
|
|
120
|
+
return { effectId, arguments: argumentsValue, outcome: EffectRecoveryOutcome.Retired };
|
|
121
|
+
}
|
|
122
|
+
ownerFresh(options) {
|
|
123
|
+
const timeout = Math.max(this.options.settings.processAliveThresholdMilliseconds, Number(options.binding.recovery_timeout_ms ?? 0));
|
|
124
|
+
return (options.owner !== undefined && Number(options.owner.heartbeat_at_ms) > options.now - timeout);
|
|
125
|
+
}
|
|
126
|
+
async retire(options) {
|
|
127
|
+
const { connection, origin, binding, effect, now } = options;
|
|
128
|
+
await connection.run(`UPDATE ${this.table("effects")} SET status = 'completed', claimed_by = NULL WHERE id = ?`, [effect.id]);
|
|
129
|
+
await connection.run(`UPDATE ${this.table("effect_recoveries")} SET retired_at_ms = ? WHERE effect_id = ?`, [now, effect.id]);
|
|
130
|
+
const payload = {
|
|
131
|
+
effectId: effect.id,
|
|
132
|
+
arguments: jsonObject(JSON.parse(effect.arguments)),
|
|
133
|
+
outcome: EffectRecoveryOutcome.Retired,
|
|
134
|
+
};
|
|
135
|
+
await this.options.enqueue(connection, {
|
|
136
|
+
actorType: origin.actor_type,
|
|
137
|
+
actorId: origin.actor_id,
|
|
138
|
+
operation: binding.recovery_operation,
|
|
139
|
+
deliveryMode: "internal",
|
|
140
|
+
arguments: jsonObject(payload),
|
|
141
|
+
idempotencyKey: `effect:${effect.id}:recovery`,
|
|
142
|
+
});
|
|
143
|
+
binding.retired_at_ms = now;
|
|
144
|
+
}
|
|
145
|
+
table(name) {
|
|
146
|
+
return `${this.options.settings.tableNamePrefix}${name}`;
|
|
147
|
+
}
|
|
148
|
+
lockClause() {
|
|
149
|
+
return this.options.settings.database.family === "sqlite" ? "" : " FOR UPDATE";
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=effect-recovery-coordinator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-recovery-coordinator.js","sourceRoot":"","sources":["../src/effect-recovery-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { JsonObject, JsonValue } from "./types.js";
|
|
2
|
+
export declare const EffectRecoveryOutcome: Readonly<{
|
|
3
|
+
readonly Retired: "retired";
|
|
4
|
+
readonly Deferred: "deferred";
|
|
5
|
+
readonly Pending: "pending";
|
|
6
|
+
readonly Completed: "completed";
|
|
7
|
+
readonly Dead: "dead";
|
|
8
|
+
readonly AlreadyRetired: "alreadyRetired";
|
|
9
|
+
readonly Missing: "missing";
|
|
10
|
+
}>;
|
|
11
|
+
export type EffectRecoveryOutcome = (typeof EffectRecoveryOutcome)[keyof typeof EffectRecoveryOutcome];
|
|
12
|
+
export type EffectRetiredPayload<Arguments extends JsonObject = JsonObject> = {
|
|
13
|
+
effectId: string;
|
|
14
|
+
arguments: Arguments;
|
|
15
|
+
outcome: typeof EffectRecoveryOutcome.Retired;
|
|
16
|
+
};
|
|
17
|
+
export type EffectRecoveryPayload<Arguments extends JsonObject = JsonObject, Result extends JsonValue = JsonValue> = EffectRetiredPayload<Arguments> | {
|
|
18
|
+
effectId: string;
|
|
19
|
+
arguments: Arguments;
|
|
20
|
+
outcome: typeof EffectRecoveryOutcome.Completed;
|
|
21
|
+
result: Result;
|
|
22
|
+
} | {
|
|
23
|
+
effectId: string;
|
|
24
|
+
arguments?: Arguments;
|
|
25
|
+
outcome: typeof EffectRecoveryOutcome.Deferred | typeof EffectRecoveryOutcome.Pending | typeof EffectRecoveryOutcome.Dead | typeof EffectRecoveryOutcome.AlreadyRetired | typeof EffectRecoveryOutcome.Missing;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=effect-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-recovery.d.ts","sourceRoot":"","sources":["../src/effect-recovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEvD,eAAO,MAAM,qBAAqB;;;;;;;;EAQvB,CAAA;AAEX,MAAM,MAAM,qBAAqB,GAC/B,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAA;AAEpE,MAAM,MAAM,oBAAoB,CAAC,SAAS,SAAS,UAAU,GAAG,UAAU,IAAI;IAC5E,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,qBAAqB,CAAC,OAAO,CAAA;CAC9C,CAAA;AAED,MAAM,MAAM,qBAAqB,CAC/B,SAAS,SAAS,UAAU,GAAG,UAAU,EACzC,MAAM,SAAS,SAAS,GAAG,SAAS,IAElC,oBAAoB,CAAC,SAAS,CAAC,GAC/B;IACE,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,qBAAqB,CAAC,SAAS,CAAA;IAC/C,MAAM,EAAE,MAAM,CAAA;CACf,GACD;IACE,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,OAAO,EACH,OAAO,qBAAqB,CAAC,QAAQ,GACrC,OAAO,qBAAqB,CAAC,OAAO,GACpC,OAAO,qBAAqB,CAAC,IAAI,GACjC,OAAO,qBAAqB,CAAC,cAAc,GAC3C,OAAO,qBAAqB,CAAC,OAAO,CAAA;CACzC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const EffectRecoveryOutcome = Object.freeze({
|
|
2
|
+
Retired: "retired",
|
|
3
|
+
Deferred: "deferred",
|
|
4
|
+
Pending: "pending",
|
|
5
|
+
Completed: "completed",
|
|
6
|
+
Dead: "dead",
|
|
7
|
+
AlreadyRetired: "alreadyRetired",
|
|
8
|
+
Missing: "missing",
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=effect-recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-recovery.js","sourceRoot":"","sources":["../src/effect-recovery.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,cAAc,EAAE,gBAAgB;IAChC,OAAO,EAAE,SAAS;CACV,CAAC,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,7 +20,8 @@ export { RetentionManager, type RetentionOptions, type RetentionResult, type Ret
|
|
|
20
20
|
export { SolidObjectsTestHelper, type RunDueRemindersOptions, type TestDrainOptions, type TestHelperRole, } from "./test-helper.js";
|
|
21
21
|
export { MessageReference, type ActorOperationNames, type ActorMessageSender, type ActorQueryNames, type ActorReference, type ActorSnapshot, type ScheduledOperations, type ScheduledOperationsFor, type StagedOperations, } from "./reference.js";
|
|
22
22
|
export type { AdministrationAuthorizationInput, AuthorizationInput, BroadcastEvent, DestroyAuthorizationInput, InstrumentationEvent, SolidObjectsConfiguration, SubscriptionAuthorizationInput, } from "./configuration.js";
|
|
23
|
-
export type { AdministrationOptions, ActorIdentifier, AsyncInvocationOptions, CommitActionContext, DeepReadonly, DestroyOptions, EffectContext, EffectFailurePayload, EffectSuccessPayload, InvocationOptions, JsonObject, JsonPrimitive, JsonValue, Logger, LongRunningComponent, MessageContext, MessageStatus, SerializedError, SnapshotOptions, } from "./types.js";
|
|
23
|
+
export type { AdministrationOptions, ActorIdentifier, AsyncInvocationOptions, CommitActionContext, DeepReadonly, DestroyOptions, EffectContext, EffectFailurePayload, EffectHandle, EffectSuccessPayload, InvocationOptions, JsonObject, JsonPrimitive, JsonValue, Logger, LongRunningComponent, MessageContext, MessageStatus, SerializedError, SnapshotOptions, } from "./types.js";
|
|
24
24
|
export type { Database, DatabaseConnection, DatabaseFamily, DatabaseTransactionOptions, RunResult, } from "./database/types.js";
|
|
25
25
|
export { ApplicationWriteForbidden, ActorCallCycle, ActorDestroyed, DatabaseDeadlineExceeded, IdempotencyConflict, InvalidActor, InvalidRejectionCode, InvalidPayload, InvalidPayloadBroadcast, LostActivation, MailboxFull, MessageFailed, NonRetryableError, PayloadTooLarge, QueryMutatedState, Rejected, ReminderNotPaused, SolidObjectsError, StateMigrationError, SyncTimeout, SyncEnqueueTimeout, SyncInsideTransaction, type SyncTimeoutDetails, type SyncTimeoutWaitingOn, Unauthorized, UnknownActorType, UnknownCommitAction, UnknownDeadLetter, UnknownEffect, UnknownOperation, UnknownPayloadBroadcast, UnknownReminder, UnsupportedDatabase, } from "./errors.js";
|
|
26
|
+
export * from "./effect-recovery.js";
|
|
26
27
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAE3B,OAAO,EACL,KAAK,EACL,qBAAqB,EACrB,cAAc,EACd,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,KAAK,uBAAuB,GAC7B,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EACL,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EACL,sBAAsB,EACtB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,WAAW,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,mBAAmB,GACzB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACtE,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,oBAAoB,GAC1B,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,MAAM,EACN,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,qBAAqB,EACrB,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,GACjC,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,gBAAgB,EAChB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EACV,gCAAgC,EAChC,kBAAkB,EAClB,cAAc,EACd,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,SAAS,EACT,MAAM,EACN,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAC1B,SAAS,GACV,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,GACpB,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -20,4 +20,5 @@ export { RetentionManager, } from "./retention.js";
|
|
|
20
20
|
export { SolidObjectsTestHelper, } from "./test-helper.js";
|
|
21
21
|
export { MessageReference, } from "./reference.js";
|
|
22
22
|
export { ApplicationWriteForbidden, ActorCallCycle, ActorDestroyed, DatabaseDeadlineExceeded, IdempotencyConflict, InvalidActor, InvalidRejectionCode, InvalidPayload, InvalidPayloadBroadcast, LostActivation, MailboxFull, MessageFailed, NonRetryableError, PayloadTooLarge, QueryMutatedState, Rejected, ReminderNotPaused, SolidObjectsError, StateMigrationError, SyncTimeout, SyncEnqueueTimeout, SyncInsideTransaction, Unauthorized, UnknownActorType, UnknownCommitAction, UnknownDeadLetter, UnknownEffect, UnknownOperation, UnknownPayloadBroadcast, UnknownReminder, UnsupportedDatabase, } from "./errors.js";
|
|
23
|
+
export * from "./effect-recovery.js";
|
|
23
24
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAE3B,OAAO,EACL,KAAK,EACL,qBAAqB,EACrB,cAAc,GAaf,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,SAAS,EACT,aAAa,EACb,mBAAmB,GAEpB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,uBAAuB,GAGxB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,MAAM,EAAsB,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EACL,eAAe,GAMhB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EACL,sBAAsB,GAKvB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,wBAAwB,EACxB,eAAe,GAIhB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,iBAAiB,EAAmB,MAAM,mBAAmB,CAAA;AACtE,OAAO,EACL,qBAAqB,EACrB,cAAc,GAKf,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,MAAM,GAKP,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,qBAAqB,GAOtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,gBAAgB,GAIjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,sBAAsB,GAIvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,gBAAgB,GASjB,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAE3B,OAAO,EACL,KAAK,EACL,qBAAqB,EACrB,cAAc,GAaf,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,SAAS,EACT,aAAa,EACb,mBAAmB,GAEpB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,uBAAuB,GAGxB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,MAAM,EAAsB,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EACL,eAAe,GAMhB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EACL,sBAAsB,GAKvB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,wBAAwB,EACxB,eAAe,GAIhB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,iBAAiB,EAAmB,MAAM,mBAAmB,CAAA;AACtE,OAAO,EACL,qBAAqB,EACrB,cAAc,GAKf,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,MAAM,GAKP,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,qBAAqB,GAOtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,gBAAgB,GAIjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,sBAAsB,GAIvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,gBAAgB,GASjB,MAAM,gBAAgB,CAAA;AAuCvB,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EAGrB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,GACpB,MAAM,aAAa,CAAA;AACpB,cAAc,sBAAsB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/platform/uuid.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/platform/uuid.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,IAAI,MAAM,CAGnC"}
|
package/dist/platform/uuid.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../src/platform/uuid.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU;IACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../src/platform/uuid.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU;IACxB,MAAM,QAAQ,GAAG,UAAsE,CAAA;IACvF,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;AACrC,CAAC"}
|
package/dist/repository.d.ts
CHANGED
|
@@ -155,6 +155,7 @@ export declare class Repository {
|
|
|
155
155
|
completeBroadcast(broadcast: BroadcastRow): Promise<void>;
|
|
156
156
|
failBroadcast(broadcast: BroadcastRow, error: unknown): Promise<void>;
|
|
157
157
|
private claimLockClause;
|
|
158
|
+
private effectRecoveryCoordinator;
|
|
158
159
|
private rowLockClause;
|
|
159
160
|
private lockActivationFence;
|
|
160
161
|
private lockMessageClaim;
|
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,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;
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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"}
|
package/dist/repository.js
CHANGED
|
@@ -3,6 +3,7 @@ import { hostIdentity } from "./platform/host-identity.js";
|
|
|
3
3
|
import { ActorDestroyed, IdempotencyConflict, LostActivation, MailboxFull, ReminderNotPaused, UnknownDeadLetter, UnknownReminder, } from "./errors.js";
|
|
4
4
|
import { jsonObject, normalizeJson } from "./serialization.js";
|
|
5
5
|
import { VERSION } from "./version.js";
|
|
6
|
+
import { EffectRecoveryCoordinator } from "./effect-recovery-coordinator.js";
|
|
6
7
|
export class Repository {
|
|
7
8
|
settings;
|
|
8
9
|
constructor(settings) {
|
|
@@ -81,6 +82,7 @@ export class Repository {
|
|
|
81
82
|
});
|
|
82
83
|
}
|
|
83
84
|
async cleanupStaleProcesses() {
|
|
85
|
+
await this.effectRecoveryCoordinator().recoverAvailable();
|
|
84
86
|
return this.settings.database.transaction(async (connection) => {
|
|
85
87
|
const now = await connection.nowMilliseconds();
|
|
86
88
|
const staleAt = now - this.settings.processAliveThresholdMilliseconds;
|
|
@@ -143,14 +145,17 @@ export class Repository {
|
|
|
143
145
|
activation_expires_at_ms = NULL, updated_at_ms = ?
|
|
144
146
|
WHERE activation_owner_id = ?`, [now, processId]);
|
|
145
147
|
await connection.run(`UPDATE ${this.table("effects")} SET status = 'pending', claimed_by = NULL
|
|
146
|
-
WHERE status = 'processing' AND claimed_by =
|
|
148
|
+
WHERE status = 'processing' AND claimed_by = ? AND NOT EXISTS (
|
|
149
|
+
SELECT 1 FROM ${this.table("effect_recoveries")} recoveries
|
|
150
|
+
WHERE recoveries.effect_id = ${this.table("effects")}.id AND recoveries.recovery_operation IS NOT NULL
|
|
151
|
+
)`, [processId]);
|
|
147
152
|
await connection.run(`UPDATE ${this.table("reminders")} SET claimed_by = NULL, claimed_at_ms = NULL
|
|
148
153
|
WHERE claimed_by = ?`, [processId]);
|
|
149
154
|
await connection.run(`UPDATE ${this.table("broadcasts")} SET status = 'pending', claimed_by = NULL
|
|
150
155
|
WHERE status = 'processing' AND claimed_by = ?`, [processId]);
|
|
151
156
|
await connection.run(`UPDATE ${this.table("processes")}
|
|
152
|
-
SET shutdown_state = 'stopped', stopped_at_ms =
|
|
153
|
-
WHERE id = ? AND shutdown_state <> 'stopped'`, [now,
|
|
157
|
+
SET shutdown_state = 'stopped', stopped_at_ms = ?
|
|
158
|
+
WHERE id = ? AND shutdown_state <> 'stopped'`, [now, processId]);
|
|
154
159
|
}
|
|
155
160
|
async enqueue(input) {
|
|
156
161
|
for (let attempt = 1; attempt <= 8; attempt += 1) {
|
|
@@ -466,11 +471,12 @@ export class Repository {
|
|
|
466
471
|
turn.message.id,
|
|
467
472
|
]);
|
|
468
473
|
for (const effect of input.intents.effects) {
|
|
474
|
+
const effectId = effect.id ?? randomUUID();
|
|
469
475
|
await connection.run(`INSERT INTO ${this.table("effects")}
|
|
470
476
|
(id, message_id, instance_id, name, arguments, success_operation, failure_operation,
|
|
471
477
|
status, max_attempts, available_at_ms)
|
|
472
478
|
VALUES (?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?)`, [
|
|
473
|
-
|
|
479
|
+
effectId,
|
|
474
480
|
turn.message.id,
|
|
475
481
|
turn.instance.id,
|
|
476
482
|
effect.name,
|
|
@@ -480,7 +486,23 @@ export class Repository {
|
|
|
480
486
|
this.settings.maxAttempts,
|
|
481
487
|
now,
|
|
482
488
|
]);
|
|
489
|
+
if (effect.recoveryOperation !== undefined || effect.statusOperation !== undefined) {
|
|
490
|
+
await connection.run(`INSERT INTO ${this.table("effect_recoveries")}
|
|
491
|
+
(effect_id, instance_id, recovery_operation, status_operation, recovery_timeout_ms)
|
|
492
|
+
VALUES (?, ?, ?, ?, ?)`, [
|
|
493
|
+
effectId,
|
|
494
|
+
turn.instance.id,
|
|
495
|
+
effect.recoveryOperation ?? null,
|
|
496
|
+
effect.statusOperation ?? null,
|
|
497
|
+
effect.recoveryTimeoutMilliseconds ?? null,
|
|
498
|
+
]);
|
|
499
|
+
}
|
|
483
500
|
}
|
|
501
|
+
await this.effectRecoveryCoordinator().check({
|
|
502
|
+
connection,
|
|
503
|
+
origin: turn.instance,
|
|
504
|
+
intents: input.intents.effectRecoveries ?? [],
|
|
505
|
+
});
|
|
484
506
|
for (const reminder of input.intents.reminders) {
|
|
485
507
|
const existing = await connection.get(`SELECT id, run_at_ms FROM ${this.table("reminders")}
|
|
486
508
|
WHERE instance_id = ? AND operation = ?`, [turn.instance.id, reminder.name]);
|
|
@@ -938,6 +960,9 @@ export class Repository {
|
|
|
938
960
|
const table = this.table("processes");
|
|
939
961
|
return {
|
|
940
962
|
sql: `${table}.shutdown_state = 'stopped'
|
|
963
|
+
AND NOT EXISTS (
|
|
964
|
+
SELECT 1 FROM ${this.table("effects")} effects WHERE effects.claimed_by = ${table}.id
|
|
965
|
+
)
|
|
941
966
|
AND ${table}.stopped_at_ms IS NOT NULL
|
|
942
967
|
AND ${table}.stopped_at_ms < ?
|
|
943
968
|
AND NOT EXISTS (
|
|
@@ -966,6 +991,7 @@ export class Repository {
|
|
|
966
991
|
}
|
|
967
992
|
async resetForTesting() {
|
|
968
993
|
const tables = [
|
|
994
|
+
"effect_recoveries",
|
|
969
995
|
"dead_letters",
|
|
970
996
|
"claimed_messages",
|
|
971
997
|
"ready_messages",
|
|
@@ -982,11 +1008,15 @@ export class Repository {
|
|
|
982
1008
|
});
|
|
983
1009
|
}
|
|
984
1010
|
async claimEffect(processId) {
|
|
1011
|
+
await this.effectRecoveryCoordinator().recoverAvailable();
|
|
985
1012
|
return this.settings.database.transaction(async (connection) => {
|
|
986
1013
|
const now = await connection.nowMilliseconds();
|
|
987
1014
|
const staleAt = now - this.settings.processAliveThresholdMilliseconds;
|
|
988
1015
|
await connection.run(`UPDATE ${this.table("effects")} SET status = 'pending', claimed_by = NULL
|
|
989
|
-
WHERE status = 'processing' AND (
|
|
1016
|
+
WHERE status = 'processing' AND NOT EXISTS (
|
|
1017
|
+
SELECT 1 FROM ${this.table("effect_recoveries")} recoveries
|
|
1018
|
+
WHERE recoveries.effect_id = ${this.table("effects")}.id AND recoveries.recovery_operation IS NOT NULL
|
|
1019
|
+
) AND (
|
|
990
1020
|
claimed_by IS NULL OR NOT EXISTS (
|
|
991
1021
|
SELECT 1 FROM ${this.table("processes")} processes
|
|
992
1022
|
WHERE processes.id = ${this.table("effects")}.claimed_by
|
|
@@ -1017,6 +1047,8 @@ export class Repository {
|
|
|
1017
1047
|
}
|
|
1018
1048
|
async completeEffect(effect, result) {
|
|
1019
1049
|
await this.settings.database.transaction(async (connection) => {
|
|
1050
|
+
if (!(await this.lockActivationFence(connection, effect.instance_id)))
|
|
1051
|
+
throw new LostActivation("effect origin no longer exists");
|
|
1020
1052
|
const now = await connection.nowMilliseconds();
|
|
1021
1053
|
const updated = await connection.run(`UPDATE ${this.table("effects")}
|
|
1022
1054
|
SET status = 'completed', result = ?, error = NULL, claimed_by = NULL
|
|
@@ -1043,6 +1075,8 @@ export class Repository {
|
|
|
1043
1075
|
async failEffect(options) {
|
|
1044
1076
|
const { effect, error, retryable } = options;
|
|
1045
1077
|
await this.settings.database.transaction(async (connection) => {
|
|
1078
|
+
if (!(await this.lockActivationFence(connection, effect.instance_id)))
|
|
1079
|
+
throw new LostActivation("effect origin no longer exists");
|
|
1046
1080
|
const now = await connection.nowMilliseconds();
|
|
1047
1081
|
const errorRecord = safeError(error);
|
|
1048
1082
|
const exhausted = !retryable || Number(effect.attempt_count) >= Number(effect.max_attempts);
|
|
@@ -1397,6 +1431,12 @@ export class Repository {
|
|
|
1397
1431
|
return "";
|
|
1398
1432
|
return " FOR UPDATE SKIP LOCKED";
|
|
1399
1433
|
}
|
|
1434
|
+
effectRecoveryCoordinator() {
|
|
1435
|
+
return new EffectRecoveryCoordinator({
|
|
1436
|
+
settings: this.settings,
|
|
1437
|
+
enqueue: (connection, input) => this.enqueueInTransaction(connection, input),
|
|
1438
|
+
});
|
|
1439
|
+
}
|
|
1400
1440
|
rowLockClause() {
|
|
1401
1441
|
if (this.settings.database.family === "sqlite")
|
|
1402
1442
|
return "";
|