@agentplat/mesh-postgres 0.3.0-beta.1 → 0.3.0-beta.4
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/README.md +31 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +60 -5
- package/dist/migrations.js.map +1 -1
- package/dist/planning-recovery.d.ts +163 -0
- package/dist/planning-recovery.d.ts.map +1 -0
- package/dist/planning-recovery.js +706 -0
- package/dist/planning-recovery.js.map +1 -0
- package/dist/repository.d.ts +3 -2
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +334 -39
- package/dist/repository.js.map +1 -1
- package/migrations/003_planning_recovery_durability.down.sql +2 -0
- package/migrations/003_planning_recovery_durability.up.sql +56 -0
- package/migrations/004_mesh_outbox_dependencies.down.sql +6 -0
- package/migrations/004_mesh_outbox_dependencies.up.sql +32 -0
- package/package.json +5 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planning-recovery.js","sourceRoot":"","sources":["../src/planning-recovery.ts"],"names":[],"mappings":"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"}
|
package/dist/repository.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MeshDurableAbandonInput, MeshDurableClaimOptions, MeshDurableCommitInboxInput, MeshDurableCommitResult, MeshDurableInboxRecord, MeshDurableJournalEntry, MeshDurableJournalQuery, MeshDurableOutboxRecord, MeshDurablePeerSnapshot, MeshDurableReceiveResult,
|
|
1
|
+
import type { MeshDurableAbandonInput, MeshDurableClaimOptions, MeshDurableCommitInboxInput, MeshDurableCommitLocalInput, MeshDurableCommitResult, MeshDurableInboxRecord, MeshDurableJournalEntry, MeshDurableJournalQuery, MeshDurableOutboxRecord, MeshDurablePeerSnapshot, MeshDurableReceiveResult, MeshDurableLocalTransitionRepository, MeshDurableScope, MeshDurableSettleOutboxInput } from "@agentplat/mesh/durability";
|
|
2
2
|
import type { SignedMeshEnvelope } from "@agentplat/mesh-protocol";
|
|
3
3
|
import type { Pool } from "pg";
|
|
4
4
|
export interface PostgresMeshDurableRepositoryOptions {
|
|
@@ -10,7 +10,7 @@ export interface PostgresMeshDurableRepositoryOptions {
|
|
|
10
10
|
*
|
|
11
11
|
* The pool is caller-owned and is never closed by this adapter.
|
|
12
12
|
*/
|
|
13
|
-
export declare class PostgresMeshDurableRepository implements
|
|
13
|
+
export declare class PostgresMeshDurableRepository implements MeshDurableLocalTransitionRepository {
|
|
14
14
|
#private;
|
|
15
15
|
readonly pool: Pool;
|
|
16
16
|
constructor(pool: Pool, options?: PostgresMeshDurableRepositoryOptions);
|
|
@@ -21,6 +21,7 @@ export declare class PostgresMeshDurableRepository implements MeshDurableReposit
|
|
|
21
21
|
loadSnapshot(inputScope: MeshDurableScope): Promise<MeshDurablePeerSnapshot | undefined>;
|
|
22
22
|
claimInbox(input: MeshDurableClaimOptions): Promise<readonly MeshDurableInboxRecord[]>;
|
|
23
23
|
commitInboxTransition(input: MeshDurableCommitInboxInput): Promise<MeshDurableCommitResult>;
|
|
24
|
+
commitLocalTransition(input: MeshDurableCommitLocalInput): Promise<MeshDurableCommitResult>;
|
|
24
25
|
abandonInbox(input: MeshDurableAbandonInput): Promise<boolean>;
|
|
25
26
|
claimOutbox(input: MeshDurableClaimOptions): Promise<readonly MeshDurableOutboxRecord[]>;
|
|
26
27
|
settleOutbox(input: MeshDurableSettleOutboxInput): Promise<boolean>;
|
package/dist/repository.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,uBAAuB,EAEvB,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,uBAAuB,EAEvB,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,EAC3B,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EAEvB,uBAAuB,EACvB,wBAAwB,EACxB,oCAAoC,EACpC,gBAAgB,EAChB,4BAA4B,EAE7B,MAAM,4BAA4B,CAAC;AAMpC,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,KAAK,EAAE,IAAI,EAA2C,MAAM,IAAI,CAAC;AAuBxE,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,+BAA+B,CAAC,EAAE,MAAM,CAAC;CACnD;AAED;;;;GAIG;AACH,qBAAa,6BAA8B,YAAW,oCAAoC;;IAKtF,QAAQ,CAAC,IAAI,EAAE,IAAI;gBAAV,IAAI,EAAE,IAAI,EACnB,OAAO,GAAE,oCAAyC;IAgB9C,OAAO,CAAC,KAAK,EAAE;QACnB,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;QACjC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;KACvC,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAyE/B,YAAY,CAChB,UAAU,EAAE,gBAAgB,GAC3B,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAazC,UAAU,CACd,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC;IAiDvC,qBAAqB,CACzB,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,uBAAuB,CAAC;IAsQ7B,qBAAqB,CACzB,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,uBAAuB,CAAC;IAqN7B,YAAY,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;IAsC9D,WAAW,CACf,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,SAAS,uBAAuB,EAAE,CAAC;IA+DxC,YAAY,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,OAAO,CAAC;IA6FnE,cAAc,CAClB,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,SAAS,uBAAuB,EAAE,CAAC;IAqB9C,KAAK,IAAI,IAAI;CAmBd"}
|
package/dist/repository.js
CHANGED
|
@@ -217,6 +217,7 @@ export class PostgresMeshDurableRepository {
|
|
|
217
217
|
throw new CommitConflictError("outbox_conflict");
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
|
+
await assertPersistedOutboxDependencies(database, scope, input.outbox);
|
|
220
221
|
const lastJournal = await database.query(`SELECT sequence, digest FROM public.mesh_journal
|
|
221
222
|
WHERE tenant_id = $1 AND mesh_id = $2 AND peer_id = $3
|
|
222
223
|
AND instance_id = $4
|
|
@@ -291,16 +292,17 @@ export class PostgresMeshDurableRepository {
|
|
|
291
292
|
const envelopeBytes = canonicalEnvelopeBytes(envelope);
|
|
292
293
|
const inserted = await database.query(`INSERT INTO public.mesh_outbox
|
|
293
294
|
(tenant_id, mesh_id, peer_id, instance_id, effect_id, message_id,
|
|
294
|
-
target_peer_id, envelope, envelope_digest,
|
|
295
|
+
target_peer_id, depends_on_effect_id, envelope, envelope_digest,
|
|
295
296
|
wrapper_schema_version, envelope_format,
|
|
296
297
|
envelope_wire_version, envelope_bytes)
|
|
297
|
-
VALUES ($1, $2, $3, $4, $5, $6, $7, $8
|
|
298
|
-
$12, $13)
|
|
298
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9::jsonb, $10, $11,
|
|
299
|
+
$12, $13, $14)
|
|
299
300
|
RETURNING *`, [
|
|
300
301
|
...scopeValues(scope),
|
|
301
302
|
outbound.effectId,
|
|
302
303
|
envelope.messageId,
|
|
303
304
|
targetPeerId ?? null,
|
|
305
|
+
outbound.dependsOnEffectId ?? null,
|
|
304
306
|
JSON.stringify(envelope),
|
|
305
307
|
envelopeDigest,
|
|
306
308
|
MESH_DURABILITY_SCHEMA_VERSION,
|
|
@@ -337,6 +339,174 @@ export class PostgresMeshDurableRepository {
|
|
|
337
339
|
throw error;
|
|
338
340
|
});
|
|
339
341
|
}
|
|
342
|
+
async commitLocalTransition(input) {
|
|
343
|
+
const scope = normalizeMeshDurableScope(input.scope);
|
|
344
|
+
assertLocalCommitInput(input, scope);
|
|
345
|
+
return this.#transaction(async (database) => {
|
|
346
|
+
// The advisory lock also serializes the revision-zero insert with inbox
|
|
347
|
+
// transitions for the same concrete peer incarnation.
|
|
348
|
+
await database.query("SELECT pg_advisory_xact_lock(hashtextextended($1, 0))", [scopeKey(scope)]);
|
|
349
|
+
const transition = await database.query(`SELECT 1 FROM public.mesh_journal
|
|
350
|
+
WHERE tenant_id = $1 AND mesh_id = $2 AND peer_id = $3
|
|
351
|
+
AND instance_id = $4 AND transition_id = $5
|
|
352
|
+
LIMIT 1`, [...scopeValues(scope), input.transitionId]);
|
|
353
|
+
if (transition.rowCount !== 0) {
|
|
354
|
+
return commitConflict("transition_conflict");
|
|
355
|
+
}
|
|
356
|
+
const currentResult = await database.query(`SELECT * FROM public.mesh_peer_snapshots
|
|
357
|
+
WHERE tenant_id = $1 AND mesh_id = $2 AND peer_id = $3
|
|
358
|
+
AND instance_id = $4
|
|
359
|
+
FOR UPDATE`, scopeValues(scope));
|
|
360
|
+
const current = currentResult.rowCount === 0
|
|
361
|
+
? undefined
|
|
362
|
+
: await mapSnapshot(currentResult.rows[0], scope);
|
|
363
|
+
if ((current?.revision ?? 0) !== input.expectedSnapshotRevision) {
|
|
364
|
+
return commitConflict("revision_conflict");
|
|
365
|
+
}
|
|
366
|
+
for (const outbound of input.outbox) {
|
|
367
|
+
const conflict = await database.query(`SELECT 1 FROM public.mesh_outbox
|
|
368
|
+
WHERE tenant_id = $1 AND mesh_id = $2 AND peer_id = $3
|
|
369
|
+
AND instance_id = $4
|
|
370
|
+
AND (effect_id = $5 OR message_id = $6)
|
|
371
|
+
LIMIT 1`, [
|
|
372
|
+
...scopeValues(scope),
|
|
373
|
+
outbound.effectId,
|
|
374
|
+
outbound.envelope.messageId,
|
|
375
|
+
]);
|
|
376
|
+
if (conflict.rowCount !== 0) {
|
|
377
|
+
throw new CommitConflictError("outbox_conflict");
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
await assertPersistedOutboxDependencies(database, scope, input.outbox);
|
|
381
|
+
const state = cloneStrictJson(input.nextState);
|
|
382
|
+
const stateDigest = await computeMeshDurableValueDigest(state);
|
|
383
|
+
const descriptor = normalizeSnapshotDescriptor(input.nextStateDescriptor);
|
|
384
|
+
const revision = input.expectedSnapshotRevision + 1;
|
|
385
|
+
const snapshotResult = await database.query(`INSERT INTO public.mesh_peer_snapshots
|
|
386
|
+
(tenant_id, mesh_id, peer_id, instance_id, revision, state,
|
|
387
|
+
state_digest, wrapper_schema_version, snapshot_format,
|
|
388
|
+
snapshot_schema_version, committed_at)
|
|
389
|
+
VALUES ($1, $2, $3, $4, $5, $6::jsonb, $7, $8, $9, $10,
|
|
390
|
+
transaction_timestamp())
|
|
391
|
+
ON CONFLICT (tenant_id, mesh_id, peer_id, instance_id)
|
|
392
|
+
DO UPDATE SET revision = EXCLUDED.revision,
|
|
393
|
+
state = EXCLUDED.state,
|
|
394
|
+
state_digest = EXCLUDED.state_digest,
|
|
395
|
+
wrapper_schema_version = EXCLUDED.wrapper_schema_version,
|
|
396
|
+
snapshot_format = EXCLUDED.snapshot_format,
|
|
397
|
+
snapshot_schema_version = EXCLUDED.snapshot_schema_version,
|
|
398
|
+
committed_at = EXCLUDED.committed_at
|
|
399
|
+
RETURNING *`, [
|
|
400
|
+
...scopeValues(scope),
|
|
401
|
+
revision,
|
|
402
|
+
JSON.stringify(state),
|
|
403
|
+
stateDigest,
|
|
404
|
+
MESH_DURABILITY_SCHEMA_VERSION,
|
|
405
|
+
descriptor.format,
|
|
406
|
+
descriptor.schemaVersion,
|
|
407
|
+
]);
|
|
408
|
+
const snapshot = await mapSnapshot(snapshotResult.rows[0], scope);
|
|
409
|
+
const timestamp = iso((await database.query("SELECT transaction_timestamp() AS occurred_at")).rows[0].occurred_at);
|
|
410
|
+
const lastJournal = await database.query(`SELECT sequence, digest FROM public.mesh_journal
|
|
411
|
+
WHERE tenant_id = $1 AND mesh_id = $2 AND peer_id = $3
|
|
412
|
+
AND instance_id = $4
|
|
413
|
+
ORDER BY sequence DESC
|
|
414
|
+
LIMIT 1`, scopeValues(scope));
|
|
415
|
+
let sequence = lastJournal.rowCount === 0
|
|
416
|
+
? 0
|
|
417
|
+
: safeInteger(lastJournal.rows[0].sequence, "journal sequence");
|
|
418
|
+
let previousDigest = lastJournal.rowCount === 0
|
|
419
|
+
? MESH_DURABLE_GENESIS_DIGEST
|
|
420
|
+
: String(lastJournal.rows[0].digest);
|
|
421
|
+
const drafts = input.journal.length === 0
|
|
422
|
+
? [
|
|
423
|
+
{
|
|
424
|
+
entryId: input.transitionId,
|
|
425
|
+
kind: "transition.applied",
|
|
426
|
+
},
|
|
427
|
+
]
|
|
428
|
+
: input.journal;
|
|
429
|
+
const journal = [];
|
|
430
|
+
for (const draft of drafts) {
|
|
431
|
+
sequence += 1;
|
|
432
|
+
const entry = await createMeshDurableJournalEntry({
|
|
433
|
+
scope,
|
|
434
|
+
sequence,
|
|
435
|
+
previousDigest,
|
|
436
|
+
transitionId: input.transitionId,
|
|
437
|
+
snapshotRevision: snapshot.revision,
|
|
438
|
+
snapshotDigest: snapshot.stateDigest,
|
|
439
|
+
draft,
|
|
440
|
+
occurredAt: timestamp,
|
|
441
|
+
});
|
|
442
|
+
await database.query(`INSERT INTO public.mesh_journal
|
|
443
|
+
(tenant_id, mesh_id, peer_id, instance_id, sequence, entry_id,
|
|
444
|
+
previous_digest, digest, transition_id, inbox_message_id,
|
|
445
|
+
snapshot_revision, snapshot_digest, kind, reason_code,
|
|
446
|
+
occurred_at, wrapper_schema_version, journal_version)
|
|
447
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, NULL, $10, $11,
|
|
448
|
+
$12, $13, $14::timestamptz, $15, $16)`, [
|
|
449
|
+
...scopeValues(scope),
|
|
450
|
+
entry.sequence,
|
|
451
|
+
entry.entryId,
|
|
452
|
+
entry.previousDigest,
|
|
453
|
+
entry.digest,
|
|
454
|
+
entry.transitionId,
|
|
455
|
+
entry.snapshotRevision,
|
|
456
|
+
entry.snapshotDigest,
|
|
457
|
+
entry.kind,
|
|
458
|
+
entry.reasonCode ?? null,
|
|
459
|
+
entry.occurredAt,
|
|
460
|
+
MESH_DURABILITY_SCHEMA_VERSION,
|
|
461
|
+
MESH_DURABLE_JOURNAL_VERSION,
|
|
462
|
+
]);
|
|
463
|
+
journal.push(entry);
|
|
464
|
+
previousDigest = entry.digest;
|
|
465
|
+
}
|
|
466
|
+
const outbox = [];
|
|
467
|
+
for (const outbound of input.outbox) {
|
|
468
|
+
const targetPeerId = outbound.targetPeerId ??
|
|
469
|
+
(outbound.envelope.audience.kind === "peer"
|
|
470
|
+
? outbound.envelope.audience.peerId
|
|
471
|
+
: undefined);
|
|
472
|
+
const envelope = validateOutboundEnvelope(outbound.envelope, scope, targetPeerId);
|
|
473
|
+
const envelopeDigest = await digestEnvelope(envelope);
|
|
474
|
+
const envelopeBytes = canonicalEnvelopeBytes(envelope);
|
|
475
|
+
const inserted = await database.query(`INSERT INTO public.mesh_outbox
|
|
476
|
+
(tenant_id, mesh_id, peer_id, instance_id, effect_id, message_id,
|
|
477
|
+
target_peer_id, depends_on_effect_id, envelope, envelope_digest,
|
|
478
|
+
wrapper_schema_version, envelope_format,
|
|
479
|
+
envelope_wire_version, envelope_bytes)
|
|
480
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9::jsonb, $10, $11,
|
|
481
|
+
$12, $13, $14)
|
|
482
|
+
RETURNING *`, [
|
|
483
|
+
...scopeValues(scope),
|
|
484
|
+
outbound.effectId,
|
|
485
|
+
envelope.messageId,
|
|
486
|
+
targetPeerId ?? null,
|
|
487
|
+
outbound.dependsOnEffectId ?? null,
|
|
488
|
+
JSON.stringify(envelope),
|
|
489
|
+
envelopeDigest,
|
|
490
|
+
MESH_DURABILITY_SCHEMA_VERSION,
|
|
491
|
+
MESH_DURABLE_ENVELOPE_FORMAT,
|
|
492
|
+
envelope.wireVersion,
|
|
493
|
+
Buffer.from(envelopeBytes),
|
|
494
|
+
]);
|
|
495
|
+
outbox.push(await mapOutbox(inserted.rows[0], scope));
|
|
496
|
+
}
|
|
497
|
+
return Object.freeze({
|
|
498
|
+
committed: true,
|
|
499
|
+
snapshot,
|
|
500
|
+
journal: Object.freeze(journal),
|
|
501
|
+
outbox: Object.freeze(outbox),
|
|
502
|
+
});
|
|
503
|
+
}).catch((error) => {
|
|
504
|
+
if (error instanceof CommitConflictError) {
|
|
505
|
+
return commitConflict(error.code);
|
|
506
|
+
}
|
|
507
|
+
throw error;
|
|
508
|
+
});
|
|
509
|
+
}
|
|
340
510
|
async abandonInbox(input) {
|
|
341
511
|
const scope = normalizeMeshDurableScope(input.inbox.scope);
|
|
342
512
|
const claim = input.inbox.claim;
|
|
@@ -371,16 +541,30 @@ export class PostgresMeshDurableRepository {
|
|
|
371
541
|
async claimOutbox(input) {
|
|
372
542
|
const options = normalizeClaimOptions(input);
|
|
373
543
|
return this.#transaction(async (database) => {
|
|
374
|
-
const selected = await database.query(`SELECT effect_id
|
|
375
|
-
FROM public.mesh_outbox
|
|
376
|
-
WHERE tenant_id = $1 AND mesh_id = $2
|
|
377
|
-
AND instance_id = $4
|
|
544
|
+
const selected = await database.query(`SELECT candidate.effect_id
|
|
545
|
+
FROM public.mesh_outbox AS candidate
|
|
546
|
+
WHERE candidate.tenant_id = $1 AND candidate.mesh_id = $2
|
|
547
|
+
AND candidate.peer_id = $3 AND candidate.instance_id = $4
|
|
378
548
|
AND (
|
|
379
|
-
(status = 'pending'
|
|
380
|
-
|
|
381
|
-
(status = 'delivering'
|
|
549
|
+
(candidate.status = 'pending'
|
|
550
|
+
AND candidate.available_at <= transaction_timestamp())
|
|
551
|
+
OR (candidate.status = 'delivering'
|
|
552
|
+
AND candidate.claim_expires_at <= transaction_timestamp())
|
|
553
|
+
)
|
|
554
|
+
AND (
|
|
555
|
+
candidate.depends_on_effect_id IS NULL
|
|
556
|
+
OR EXISTS (
|
|
557
|
+
SELECT 1
|
|
558
|
+
FROM public.mesh_outbox AS predecessor
|
|
559
|
+
WHERE predecessor.tenant_id = candidate.tenant_id
|
|
560
|
+
AND predecessor.mesh_id = candidate.mesh_id
|
|
561
|
+
AND predecessor.peer_id = candidate.peer_id
|
|
562
|
+
AND predecessor.instance_id = candidate.instance_id
|
|
563
|
+
AND predecessor.effect_id = candidate.depends_on_effect_id
|
|
564
|
+
AND predecessor.status = 'delivered'
|
|
565
|
+
)
|
|
382
566
|
)
|
|
383
|
-
ORDER BY created_at, effect_id
|
|
567
|
+
ORDER BY candidate.created_at, candidate.effect_id
|
|
384
568
|
FOR UPDATE SKIP LOCKED
|
|
385
569
|
LIMIT $5`, [...scopeValues(options.scope), options.limit]);
|
|
386
570
|
const claimed = [];
|
|
@@ -433,33 +617,61 @@ export class PostgresMeshDurableRepository {
|
|
|
433
617
|
: input.settlement.disposition === "delivered"
|
|
434
618
|
? "delivered"
|
|
435
619
|
: "rejected";
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
AND
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
620
|
+
return this.#transaction(async (database) => {
|
|
621
|
+
const result = await database.query(`UPDATE public.mesh_outbox
|
|
622
|
+
SET status = $9,
|
|
623
|
+
available_at = CASE WHEN $9 = 'pending'
|
|
624
|
+
THEN transaction_timestamp()
|
|
625
|
+
+ ($10::bigint * interval '1 millisecond')
|
|
626
|
+
ELSE available_at END,
|
|
627
|
+
settled_at = CASE WHEN $9 = 'pending'
|
|
628
|
+
THEN NULL ELSE transaction_timestamp() END,
|
|
629
|
+
reason_code = $11,
|
|
630
|
+
claim_worker_id = NULL,
|
|
631
|
+
claim_token = NULL,
|
|
632
|
+
claim_expires_at = NULL
|
|
633
|
+
WHERE tenant_id = $1 AND mesh_id = $2 AND peer_id = $3
|
|
634
|
+
AND instance_id = $4 AND effect_id = $5
|
|
635
|
+
AND status = 'delivering' AND claim_worker_id = $6
|
|
636
|
+
AND claim_token = $7 AND claim_generation = $8
|
|
637
|
+
AND claim_expires_at > transaction_timestamp()`, [
|
|
638
|
+
...scopeValues(scope),
|
|
639
|
+
input.outbox.effectId,
|
|
640
|
+
claim.workerId,
|
|
641
|
+
claim.leaseToken,
|
|
642
|
+
claim.generation,
|
|
643
|
+
status,
|
|
644
|
+
retryAfterMs,
|
|
645
|
+
input.settlement.reasonCode ?? null,
|
|
646
|
+
]);
|
|
647
|
+
if (result.rowCount === 1 &&
|
|
648
|
+
input.settlement.disposition === "permanent_rejection") {
|
|
649
|
+
await database.query(`WITH RECURSIVE blocked(effect_id) AS (
|
|
650
|
+
SELECT effect_id
|
|
651
|
+
FROM public.mesh_outbox
|
|
652
|
+
WHERE tenant_id = $1 AND mesh_id = $2 AND peer_id = $3
|
|
653
|
+
AND instance_id = $4 AND depends_on_effect_id = $5
|
|
654
|
+
UNION
|
|
655
|
+
SELECT child.effect_id
|
|
656
|
+
FROM public.mesh_outbox AS child
|
|
657
|
+
JOIN blocked AS predecessor
|
|
658
|
+
ON child.depends_on_effect_id = predecessor.effect_id
|
|
659
|
+
WHERE child.tenant_id = $1 AND child.mesh_id = $2
|
|
660
|
+
AND child.peer_id = $3 AND child.instance_id = $4
|
|
661
|
+
)
|
|
662
|
+
UPDATE public.mesh_outbox
|
|
663
|
+
SET status = 'rejected',
|
|
664
|
+
settled_at = transaction_timestamp(),
|
|
665
|
+
reason_code = 'dependency_rejected',
|
|
666
|
+
claim_worker_id = NULL,
|
|
667
|
+
claim_token = NULL,
|
|
668
|
+
claim_expires_at = NULL
|
|
669
|
+
WHERE tenant_id = $1 AND mesh_id = $2 AND peer_id = $3
|
|
670
|
+
AND instance_id = $4 AND effect_id IN (SELECT effect_id FROM blocked)
|
|
671
|
+
AND status IN ('pending', 'delivering')`, [...scopeValues(scope), input.outbox.effectId]);
|
|
672
|
+
}
|
|
673
|
+
return result.rowCount === 1;
|
|
674
|
+
});
|
|
463
675
|
}
|
|
464
676
|
async inspectJournal(input) {
|
|
465
677
|
const scope = normalizeMeshDurableScope(input.scope);
|
|
@@ -652,10 +864,18 @@ async function mapOutbox(row, scope) {
|
|
|
652
864
|
const claim = mapClaim(row, status === "delivering");
|
|
653
865
|
const schemaVersion = durabilitySchemaVersion(row.wrapper_schema_version);
|
|
654
866
|
assertEnvelopeMetadata(row, schemaVersion, envelope, restored.bytes);
|
|
867
|
+
const effectId = String(row.effect_id);
|
|
868
|
+
const dependsOnEffectId = row.depends_on_effect_id == null
|
|
869
|
+
? undefined
|
|
870
|
+
: String(row.depends_on_effect_id);
|
|
871
|
+
if (!validIdentifier(effectId) ||
|
|
872
|
+
(dependsOnEffectId !== undefined &&
|
|
873
|
+
(!validIdentifier(dependsOnEffectId) || dependsOnEffectId === effectId)))
|
|
874
|
+
throw new TypeError("Persisted Mesh outbox dependency is invalid");
|
|
655
875
|
return Object.freeze({
|
|
656
876
|
schemaVersion,
|
|
657
877
|
scope,
|
|
658
|
-
effectId
|
|
878
|
+
effectId,
|
|
659
879
|
messageId: envelope.messageId,
|
|
660
880
|
envelope,
|
|
661
881
|
envelopeDigest,
|
|
@@ -669,6 +889,7 @@ async function mapOutbox(row, scope) {
|
|
|
669
889
|
...(row.target_peer_id == null
|
|
670
890
|
? {}
|
|
671
891
|
: { targetPeerId: String(row.target_peer_id) }),
|
|
892
|
+
...(dependsOnEffectId === undefined ? {} : { dependsOnEffectId }),
|
|
672
893
|
status,
|
|
673
894
|
attempts: safeInteger(row.attempts, "outbox attempts"),
|
|
674
895
|
availableAt: iso(row.available_at),
|
|
@@ -821,6 +1042,8 @@ function assertCommitInput(input, scope) {
|
|
|
821
1042
|
for (const outbound of input.outbox) {
|
|
822
1043
|
if (!outbound ||
|
|
823
1044
|
!validIdentifier(outbound.effectId) ||
|
|
1045
|
+
(outbound.dependsOnEffectId !== undefined &&
|
|
1046
|
+
!validIdentifier(outbound.dependsOnEffectId)) ||
|
|
824
1047
|
(outbound.targetPeerId !== undefined &&
|
|
825
1048
|
!validIdentifier(outbound.targetPeerId))) {
|
|
826
1049
|
throw new TypeError("Mesh durable outbound draft is invalid");
|
|
@@ -830,6 +1053,78 @@ function assertCommitInput(input, scope) {
|
|
|
830
1053
|
? outbound.envelope.audience.peerId
|
|
831
1054
|
: undefined));
|
|
832
1055
|
}
|
|
1056
|
+
assertOutboxDependencies(input.outbox);
|
|
1057
|
+
}
|
|
1058
|
+
function assertLocalCommitInput(input, scope) {
|
|
1059
|
+
if (!scopeEquals(scope, input.scope) ||
|
|
1060
|
+
!Number.isSafeInteger(input.expectedSnapshotRevision) ||
|
|
1061
|
+
input.expectedSnapshotRevision < 0 ||
|
|
1062
|
+
!validIdentifier(input.transitionId) ||
|
|
1063
|
+
!Array.isArray(input.journal) ||
|
|
1064
|
+
input.journal.length > 64 ||
|
|
1065
|
+
!Array.isArray(input.outbox) ||
|
|
1066
|
+
input.outbox.length > 256 ||
|
|
1067
|
+
input.nextState === undefined) {
|
|
1068
|
+
throw new TypeError("Mesh durable local commit input is invalid");
|
|
1069
|
+
}
|
|
1070
|
+
normalizeSnapshotDescriptor(input.nextStateDescriptor);
|
|
1071
|
+
cloneStrictJson(input.nextState);
|
|
1072
|
+
for (const draft of input.journal) {
|
|
1073
|
+
if (!draft ||
|
|
1074
|
+
!validIdentifier(draft.entryId) ||
|
|
1075
|
+
!validReason(draft.kind) ||
|
|
1076
|
+
(draft.reasonCode !== undefined && !validReason(draft.reasonCode))) {
|
|
1077
|
+
throw new TypeError("Mesh durable journal draft is invalid");
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
for (const outbound of input.outbox) {
|
|
1081
|
+
if (!outbound ||
|
|
1082
|
+
!validIdentifier(outbound.effectId) ||
|
|
1083
|
+
(outbound.dependsOnEffectId !== undefined &&
|
|
1084
|
+
!validIdentifier(outbound.dependsOnEffectId)) ||
|
|
1085
|
+
(outbound.targetPeerId !== undefined &&
|
|
1086
|
+
!validIdentifier(outbound.targetPeerId))) {
|
|
1087
|
+
throw new TypeError("Mesh durable outbound draft is invalid");
|
|
1088
|
+
}
|
|
1089
|
+
validateOutboundEnvelope(outbound.envelope, scope, outbound.targetPeerId ??
|
|
1090
|
+
(outbound.envelope?.audience?.kind === "peer"
|
|
1091
|
+
? outbound.envelope.audience.peerId
|
|
1092
|
+
: undefined));
|
|
1093
|
+
}
|
|
1094
|
+
assertOutboxDependencies(input.outbox);
|
|
1095
|
+
}
|
|
1096
|
+
function assertOutboxDependencies(outbox) {
|
|
1097
|
+
const batch = new Set(outbox.map(({ effectId }) => effectId));
|
|
1098
|
+
const seen = new Set();
|
|
1099
|
+
for (const outbound of outbox) {
|
|
1100
|
+
if (seen.has(outbound.effectId) ||
|
|
1101
|
+
(outbound.dependsOnEffectId !== undefined &&
|
|
1102
|
+
batch.has(outbound.dependsOnEffectId) &&
|
|
1103
|
+
!seen.has(outbound.dependsOnEffectId)))
|
|
1104
|
+
throw new TypeError("Mesh durable outbox dependency order is invalid");
|
|
1105
|
+
seen.add(outbound.effectId);
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
async function assertPersistedOutboxDependencies(database, scope, outbox) {
|
|
1109
|
+
const batch = new Set(outbox.map(({ effectId }) => effectId));
|
|
1110
|
+
const external = [
|
|
1111
|
+
...new Set(outbox
|
|
1112
|
+
.map(({ dependsOnEffectId }) => dependsOnEffectId)
|
|
1113
|
+
.filter((effectId) => effectId !== undefined && !batch.has(effectId))),
|
|
1114
|
+
];
|
|
1115
|
+
if (external.length === 0)
|
|
1116
|
+
return;
|
|
1117
|
+
const retained = await database.query(`SELECT effect_id, status FROM public.mesh_outbox
|
|
1118
|
+
WHERE tenant_id = $1 AND mesh_id = $2 AND peer_id = $3
|
|
1119
|
+
AND instance_id = $4 AND effect_id = ANY($5::text[])`, [...scopeValues(scope), external]);
|
|
1120
|
+
const retainedStatus = new Map(retained.rows.map(({ effect_id, status }) => [
|
|
1121
|
+
String(effect_id),
|
|
1122
|
+
String(status),
|
|
1123
|
+
]));
|
|
1124
|
+
if (external.some((effectId) => !retainedStatus.has(effectId)))
|
|
1125
|
+
throw new TypeError("Mesh durable outbox dependency does not exist");
|
|
1126
|
+
if (external.some((effectId) => retainedStatus.get(effectId) === "rejected"))
|
|
1127
|
+
throw new TypeError("Mesh durable outbox dependency was rejected");
|
|
833
1128
|
}
|
|
834
1129
|
function normalizeClaimOptions(input) {
|
|
835
1130
|
if (!input || typeof input !== "object") {
|