hikoutei 0.3.2 → 0.3.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 +12 -2
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts +2 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js +5 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts +52 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js +195 -13
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts +24 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js +124 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts +15 -2
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js +27 -3
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.js +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts +2 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/index.js +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/index.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts +3 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js +9 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js +137 -20
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js +82 -34
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.d.ts +31 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.js +567 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts +12 -17
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js +27 -213
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js +81 -8
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts +1 -6
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js +15 -9
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js.map +1 -1
- package/dist/application/orm/mapping/projection.js +1 -1
- package/dist/application/orm/mapping/projection.js.map +1 -1
- package/dist/application/orm/persistence/flush/flushCoordinator.d.ts.map +1 -1
- package/dist/application/orm/persistence/flush/flushCoordinator.js +1 -0
- package/dist/application/orm/persistence/flush/flushCoordinator.js.map +1 -1
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.js +1 -1
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.js.map +1 -1
- package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts +3 -1
- package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts.map +1 -1
- package/dist/application/sync/gateway/SyncGatewayBootstrap.js +3 -1
- package/dist/application/sync/gateway/SyncGatewayBootstrap.js.map +1 -1
- package/dist/application/sync/gateway/conflictProjection.d.ts +13 -0
- package/dist/application/sync/gateway/conflictProjection.d.ts.map +1 -0
- package/dist/application/sync/gateway/conflictProjection.js +58 -0
- package/dist/application/sync/gateway/conflictProjection.js.map +1 -0
- package/dist/application/sync/gateway/conflictProjectionRegistration.d.ts +11 -0
- package/dist/application/sync/gateway/conflictProjectionRegistration.d.ts.map +1 -0
- package/dist/application/sync/gateway/conflictProjectionRegistration.js +70 -0
- package/dist/application/sync/gateway/conflictProjectionRegistration.js.map +1 -0
- package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.d.ts +102 -0
- package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.d.ts.map +1 -0
- package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.js +221 -0
- package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.js.map +1 -0
- package/dist/application/sync/gateway/coordinator/asyncMutex.d.ts +51 -0
- package/dist/application/sync/gateway/coordinator/asyncMutex.d.ts.map +1 -0
- package/dist/application/sync/gateway/coordinator/asyncMutex.js +65 -0
- package/dist/application/sync/gateway/coordinator/asyncMutex.js.map +1 -0
- package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.d.ts +31 -0
- package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.d.ts.map +1 -0
- package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.js +13 -0
- package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.js.map +1 -0
- package/dist/application/sync/gateway/syncGateway.d.ts +26 -6
- package/dist/application/sync/gateway/syncGateway.d.ts.map +1 -1
- package/dist/application/sync/gateway/syncGateway.js +10 -2
- package/dist/application/sync/gateway/syncGateway.js.map +1 -1
- package/dist/application/sync/gateway/transportClassification.d.ts +62 -0
- package/dist/application/sync/gateway/transportClassification.d.ts.map +1 -0
- package/dist/application/sync/gateway/transportClassification.js +133 -0
- package/dist/application/sync/gateway/transportClassification.js.map +1 -0
- package/dist/application/sync/inbound/autoSystemConflictResolution.d.ts +26 -0
- package/dist/application/sync/inbound/autoSystemConflictResolution.d.ts.map +1 -0
- package/dist/application/sync/inbound/autoSystemConflictResolution.js +335 -0
- package/dist/application/sync/inbound/autoSystemConflictResolution.js.map +1 -0
- package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts +50 -0
- package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js +97 -0
- package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts +4 -1
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js +35 -1
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts +14 -2
- package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js +190 -31
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts +25 -2
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js +25 -2
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts +14 -7
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js +118 -14
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts +30 -9
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js +102 -18
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js +49 -14
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js.map +1 -1
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +97 -17
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
- package/dist/application/sync/service/SyncServiceBootstrap.d.ts +17 -0
- package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -1
- package/dist/application/sync/service/SyncServiceBootstrap.js +125 -10
- package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -1
- package/dist/application/sync/service/contracts.d.ts +2 -0
- package/dist/application/sync/service/contracts.d.ts.map +1 -1
- package/dist/application/sync/telemetry/syncTiming.d.ts +6 -0
- package/dist/application/sync/telemetry/syncTiming.d.ts.map +1 -1
- package/dist/application/sync/telemetry/syncTiming.js +2 -0
- package/dist/application/sync/telemetry/syncTiming.js.map +1 -1
- package/dist/domain/conflict/index.d.ts +1 -1
- package/dist/domain/conflict/index.d.ts.map +1 -1
- package/dist/domain/conflict/index.js +1 -1
- package/dist/domain/conflict/index.js.map +1 -1
- package/dist/domain/conflict/transitions.d.ts +3 -0
- package/dist/domain/conflict/transitions.d.ts.map +1 -1
- package/dist/domain/conflict/transitions.js +3 -2
- package/dist/domain/conflict/transitions.js.map +1 -1
- package/dist/domain/model/constants.d.ts +1 -0
- package/dist/domain/model/constants.d.ts.map +1 -1
- package/dist/domain/model/constants.js +1 -0
- package/dist/domain/model/constants.js.map +1 -1
- package/dist/infrastructure/storage/index.d.ts +4 -2
- package/dist/infrastructure/storage/index.d.ts.map +1 -1
- package/dist/infrastructure/storage/index.js +2 -1
- package/dist/infrastructure/storage/index.js.map +1 -1
- package/dist/infrastructure/storage/sqlite/migrateSchema.d.ts.map +1 -1
- package/dist/infrastructure/storage/sqlite/migrateSchema.js +59 -1
- package/dist/infrastructure/storage/sqlite/migrateSchema.js.map +1 -1
- package/dist/infrastructure/storage/sqlite/schema.d.ts +12 -1
- package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -1
- package/dist/infrastructure/storage/sqlite/schema.js +47 -3
- package/dist/infrastructure/storage/sqlite/schema.js.map +1 -1
- package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts +2 -2
- package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.js +1 -1
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.js.map +1 -1
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.d.ts +1 -0
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.js +1 -1
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationAudit.js +5 -1
- package/dist/infrastructure/storage/state/observation/observationAudit.js.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts +10 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.js +106 -20
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.js.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts +9 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js +3 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts +11 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js +35 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts +12 -4
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js +46 -15
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts +24 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts +9 -7
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js +44 -8
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts +3 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js +35 -2
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/reconciliationSql.js +1 -0
- package/dist/infrastructure/storage/sync/outbound/reconciliationSql.js.map +1 -1
- package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.d.ts +31 -0
- package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.d.ts.map +1 -0
- package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.js +92 -0
- package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.js.map +1 -0
- package/dist/infrastructure/storage/sync/shared/writerLease.js +3 -1
- package/dist/infrastructure/storage/sync/shared/writerLease.js.map +1 -1
- package/docs/advanced-sheets-gateway-concurrency-problem.md +434 -0
- package/docs/architecture.md +53 -11
- package/docs/ci.md +31 -14
- package/docs/google-sheets-sync-scaling-strategy.md +459 -0
- package/docs/quick-start.md +15 -1
- package/docs/sync-bulk-write-benchmark.md +520 -0
- package/docs/sync-observability.md +39 -3
- package/docs/write-and-synchronization-flow.md +76 -17
- package/package.json +1 -1
|
@@ -10,12 +10,13 @@ import { applyResolution } from "../../../../domain/index.js";
|
|
|
10
10
|
import { CONFLICT_TRANSITION_KINDS } from "../../../../domain/conflict/transitions.js";
|
|
11
11
|
import { LOOKUP_RESULT_KINDS, PRESENCE_KINDS, } from "../../../../shared/state/constants.js";
|
|
12
12
|
import { STORAGE_ERROR_CODES, StorageError } from "../../errors.js";
|
|
13
|
-
import { appendPendingEffectsWithSql, } from "../../sync/outbound/effectOutbox.js";
|
|
13
|
+
import { appendPendingEffectsWithSql, supersedeAndReplanWithSql, } from "../../sync/outbound/effectOutbox.js";
|
|
14
|
+
import { readMappedLatestProjectionEffectWithSql } from "../mapped/mappedPersistenceSql.js";
|
|
14
15
|
import { fromSqlNullable } from "../../sqlite/sqlState.js";
|
|
15
16
|
import { withSqlSavepoint } from "../../sqlite/sqlTransaction.js";
|
|
16
17
|
import { fenceParameters, isFencingValidWithSql, } from "../../sync/shared/writerLease.js";
|
|
17
18
|
import { PERSIST_RESOLUTION_RESULT_KINDS, RESOLUTION_COMMAND_STATUSES, } from "./resolutionWriterContracts.js";
|
|
18
|
-
import { ADVANCE_ROW_BINDING_CANDIDATE_EPOCH_SQL, CLEAR_ACTIVE_CANDIDATE_POINTER_SQL, FIND_EXISTING_COMMAND_SQL, INSERT_PROCESSING_COMMAND_SQL, MARK_COMMAND_APPLIED_SQL, MARK_COMMAND_REJECTED_SQL, MARK_COMMAND_STALE_SQL, MARK_CONFLICT_RESOLVED_SQL, MARK_CONFLICT_STALE_SQL, READ_ACTIVE_CANDIDATE_POINTER_SQL, READ_CONFLICT_SQL, READ_EFFECT_DEDUPE_SQL, READ_REGISTERED_PROJECTION_SQL, } from "./resolutionWriterSql.js";
|
|
19
|
+
import { ADVANCE_ROW_BINDING_CANDIDATE_EPOCH_SQL, CLEAR_ACTIVE_CANDIDATE_POINTER_SQL, FIND_EXISTING_COMMAND_SQL, INSERT_PROCESSING_COMMAND_SQL, INSERT_PENDING_COMMAND_SQL, MARK_PENDING_COMMAND_PROCESSING_SQL, MARK_COMMAND_APPLIED_SQL, MARK_COMMAND_REJECTED_SQL, MARK_COMMAND_STALE_SQL, MARK_CONFLICT_RESOLVED_SQL, MARK_CONFLICT_STALE_SQL, READ_ACTIVE_CANDIDATE_POINTER_SQL, READ_CONFLICT_SQL, READ_EFFECT_DEDUPE_SQL, READ_REGISTERED_PROJECTION_SQL, READ_PROCESSING_PREDECESSOR_SQL, } from "./resolutionWriterSql.js";
|
|
19
20
|
import { assertCurrentFenceWithSql, FenceLostError, parseNormalizedCell, requireConflictStatus, } from "./resolutionWriterHelpers.js";
|
|
20
21
|
export { PERSIST_RESOLUTION_RESULT_KINDS, RESOLUTION_COMMAND_STATUSES, } from "./resolutionWriterContracts.js";
|
|
21
22
|
/**
|
|
@@ -32,7 +33,9 @@ export async function persistResolutionCommandWithSql(sql, fence, input) {
|
|
|
32
33
|
return await withSqlSavepoint(sql, "persist_resolution_command", async () => {
|
|
33
34
|
await assertCurrentFenceWithSql(sql, fence);
|
|
34
35
|
const duplicate = await findExistingCommandWithSql(sql, input.command);
|
|
35
|
-
|
|
36
|
+
const pendingCommand = duplicate.kind === LOOKUP_RESULT_KINDS.FOUND &&
|
|
37
|
+
duplicate.value.status === RESOLUTION_COMMAND_STATUSES.PENDING;
|
|
38
|
+
if (duplicate.kind === LOOKUP_RESULT_KINDS.FOUND && !pendingCommand) {
|
|
36
39
|
const duplicateResult = duplicate.value;
|
|
37
40
|
// A durable processing receipt already owns the request. Only a terminal
|
|
38
41
|
// replay may consume a still-checked control with a reset projection.
|
|
@@ -50,7 +53,27 @@ export async function persistResolutionCommandWithSql(sql, fence, input) {
|
|
|
50
53
|
};
|
|
51
54
|
}
|
|
52
55
|
const conflict = conflictResult.value;
|
|
53
|
-
await
|
|
56
|
+
const processingPredecessor = await findProcessingPredecessorWithSql(sql, input.effects);
|
|
57
|
+
if (processingPredecessor !== undefined) {
|
|
58
|
+
// Do not resolve the conflict while an older remote write is still in
|
|
59
|
+
// flight. The late response could materialize after the system-wins
|
|
60
|
+
// effect and overwrite the value that the resolution just selected.
|
|
61
|
+
// Keep a pending command receipt so the next polling pass can retry the
|
|
62
|
+
// exact CAS request after the predecessor has settled.
|
|
63
|
+
await insertPendingCommandWithSql(sql, fence, input);
|
|
64
|
+
return {
|
|
65
|
+
kind: PERSIST_RESOLUTION_RESULT_KINDS.DEFERRED,
|
|
66
|
+
commandId: input.command.commandId,
|
|
67
|
+
conflictId: conflict.conflictId,
|
|
68
|
+
reason: "processing_predecessor",
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (pendingCommand) {
|
|
72
|
+
await markPendingCommandProcessingWithSql(sql, fence, input.command.commandId, input.command.requestKey);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
await insertProcessingCommandWithSql(sql, fence, input);
|
|
76
|
+
}
|
|
54
77
|
const pointerResult = await readActiveCandidatePointerWithSql(sql, conflict);
|
|
55
78
|
const transition = pointerResult.kind === LOOKUP_RESULT_KINDS.FOUND &&
|
|
56
79
|
pointerResult.value.candidate_epoch === input.command.expectedCandidateEpoch &&
|
|
@@ -161,8 +184,16 @@ function sameCommandIdentity(existing, command) {
|
|
|
161
184
|
existing.expected_candidate_epoch === command.expectedCandidateEpoch &&
|
|
162
185
|
existing.payload_hash === command.payloadHash;
|
|
163
186
|
}
|
|
187
|
+
/** Reads all conflict IDs for one logical entity sheet. */
|
|
188
|
+
export function readConflictIdsWithSql(sql, logicalSheetId) {
|
|
189
|
+
return sql.all("SELECT conflict_id FROM sync_conflict WHERE logical_sheet_id = ? ORDER BY created_at, conflict_id", [logicalSheetId]).then((rows) => rows.map((row) => row.conflict_id));
|
|
190
|
+
}
|
|
191
|
+
/** Reads unresolved conflict IDs for one logical entity sheet. */
|
|
192
|
+
export function readOpenConflictIdsWithSql(sql, logicalSheetId) {
|
|
193
|
+
return sql.all("SELECT conflict_id FROM sync_conflict WHERE logical_sheet_id = ? AND status IN ('OPEN', 'NEEDS_REBASE') ORDER BY created_at, conflict_id", [logicalSheetId]).then((rows) => rows.map((row) => row.conflict_id));
|
|
194
|
+
}
|
|
164
195
|
/** Reads and validates one conflict record through the active async SQL transaction. */
|
|
165
|
-
async function readConflictWithSql(sql, logicalSheetId, conflictId) {
|
|
196
|
+
export async function readConflictWithSql(sql, logicalSheetId, conflictId) {
|
|
166
197
|
const row = await sql.get(READ_CONFLICT_SQL, [logicalSheetId, conflictId]);
|
|
167
198
|
if (row === undefined)
|
|
168
199
|
return { kind: LOOKUP_RESULT_KINDS.NOT_FOUND };
|
|
@@ -225,6 +256,41 @@ async function insertProcessingCommandWithSql(sql, fence, input) {
|
|
|
225
256
|
if (result.changes !== 1)
|
|
226
257
|
throw new FenceLostError();
|
|
227
258
|
}
|
|
259
|
+
/** Stores a deferred command as durable pending work without changing conflict state. */
|
|
260
|
+
async function insertPendingCommandWithSql(sql, fence, input) {
|
|
261
|
+
const command = input.command;
|
|
262
|
+
const result = await sql.run(INSERT_PENDING_COMMAND_SQL, [
|
|
263
|
+
command.commandId,
|
|
264
|
+
command.requestKey,
|
|
265
|
+
command.action,
|
|
266
|
+
command.actorId,
|
|
267
|
+
command.role,
|
|
268
|
+
command.targetConflictId,
|
|
269
|
+
command.expectedRevision,
|
|
270
|
+
command.activeCandidateHash,
|
|
271
|
+
command.expectedCandidateEpoch,
|
|
272
|
+
command.payloadHash,
|
|
273
|
+
fence.now,
|
|
274
|
+
command.commandId,
|
|
275
|
+
command.requestKey,
|
|
276
|
+
...fenceParameters(fence),
|
|
277
|
+
]);
|
|
278
|
+
if (result.changes === 1)
|
|
279
|
+
return;
|
|
280
|
+
if (result.changes === 0 && await isFencingValidWithSql(sql, fence))
|
|
281
|
+
return;
|
|
282
|
+
throw new FenceLostError();
|
|
283
|
+
}
|
|
284
|
+
/** Claims a pending deferred command after its processing predecessor settles. */
|
|
285
|
+
async function markPendingCommandProcessingWithSql(sql, fence, commandId, requestKey) {
|
|
286
|
+
const result = await sql.run(MARK_PENDING_COMMAND_PROCESSING_SQL, [
|
|
287
|
+
commandId,
|
|
288
|
+
requestKey,
|
|
289
|
+
...fenceParameters(fence),
|
|
290
|
+
]);
|
|
291
|
+
if (result.changes !== 1)
|
|
292
|
+
throw new FenceLostError();
|
|
293
|
+
}
|
|
228
294
|
/** Applies a resolved transition, pointer clear, effects, and receipt through active async SQL. */
|
|
229
295
|
async function applyResolvedCommandWithSql(sql, fence, input, conflict, pointer) {
|
|
230
296
|
const command = input.command;
|
|
@@ -294,33 +360,53 @@ async function markRejectedCommandWithSql(sql, fence, input) {
|
|
|
294
360
|
await appendResolutionEffectsWithSql(sql, fence, input.rejectedEffects ?? []);
|
|
295
361
|
}
|
|
296
362
|
/** Registers unseen resolution effects through the active async SQL transaction. */
|
|
297
|
-
async function appendResolutionEffectsWithSql(sql, fence, effects) {
|
|
363
|
+
export async function appendResolutionEffectsWithSql(sql, fence, effects) {
|
|
298
364
|
if (effects.length === 0)
|
|
299
365
|
return;
|
|
300
366
|
await ensureResolutionEffectsRegisteredWithSql(sql, effects);
|
|
301
|
-
const unseen = [];
|
|
302
367
|
for (const effect of effects) {
|
|
303
368
|
const existing = await sql.get(READ_EFFECT_DEDUPE_SQL, [
|
|
304
369
|
effect.effectDedupeKey,
|
|
305
370
|
]);
|
|
306
|
-
if (existing
|
|
307
|
-
|
|
371
|
+
if (existing !== undefined) {
|
|
372
|
+
if (existing.effect_kind !== effect.effectKind ||
|
|
373
|
+
existing.commit_id !== effect.commitId ||
|
|
374
|
+
existing.logical_sheet_id !== effect.logicalSheetId ||
|
|
375
|
+
existing.physical_sheet_id !== effect.physicalSheetId ||
|
|
376
|
+
existing.projection !== effect.projection ||
|
|
377
|
+
existing.target_kind !== effect.targetKind ||
|
|
378
|
+
existing.target_id !== effect.targetId ||
|
|
379
|
+
existing.payload_hash !== effect.payloadHash) {
|
|
380
|
+
throw new StorageError(STORAGE_ERROR_CODES.RESOLUTION_EFFECT_CONFLICT, "resolution effect dedupe key was reused with a different payload");
|
|
381
|
+
}
|
|
382
|
+
continue;
|
|
383
|
+
}
|
|
384
|
+
const processingPredecessor = await findProcessingPredecessorWithSql(sql, [effect]);
|
|
385
|
+
if (processingPredecessor !== undefined) {
|
|
386
|
+
throw new StorageError(STORAGE_ERROR_CODES.EFFECT_REPLAN_CONFLICT, `effect ${effect.effectId} cannot replace processing predecessor ${processingPredecessor}`);
|
|
387
|
+
}
|
|
388
|
+
const predecessor = await readMappedLatestProjectionEffectWithSql(sql, effect.logicalSheetId, effect.targetKind, effect.targetId);
|
|
389
|
+
if (predecessor !== undefined &&
|
|
390
|
+
(predecessor.status === "pending" ||
|
|
391
|
+
predecessor.status === "blocked_candidate" ||
|
|
392
|
+
predecessor.status === "conflict" ||
|
|
393
|
+
predecessor.status === "failed")) {
|
|
394
|
+
await supersedeAndReplanWithSql(sql, fence, predecessor.effect_id, effect);
|
|
308
395
|
continue;
|
|
309
396
|
}
|
|
310
|
-
if (
|
|
311
|
-
|
|
312
|
-
existing.logical_sheet_id !== effect.logicalSheetId ||
|
|
313
|
-
existing.physical_sheet_id !== effect.physicalSheetId ||
|
|
314
|
-
existing.projection !== effect.projection ||
|
|
315
|
-
existing.target_kind !== effect.targetKind ||
|
|
316
|
-
existing.target_id !== effect.targetId ||
|
|
317
|
-
existing.payload_hash !== effect.payloadHash) {
|
|
318
|
-
throw new StorageError(STORAGE_ERROR_CODES.RESOLUTION_EFFECT_CONFLICT, "resolution effect dedupe key was reused with a different payload");
|
|
397
|
+
if (!(await appendPendingEffectsWithSql(sql, fence, [effect]))) {
|
|
398
|
+
throw new FenceLostError();
|
|
319
399
|
}
|
|
320
400
|
}
|
|
321
|
-
|
|
322
|
-
|
|
401
|
+
}
|
|
402
|
+
/** Finds processing predecessors that must finish before a replacement is planned. */
|
|
403
|
+
async function findProcessingPredecessorWithSql(sql, effects) {
|
|
404
|
+
for (const effect of effects) {
|
|
405
|
+
const row = await sql.get(READ_PROCESSING_PREDECESSOR_SQL, [effect.logicalSheetId, effect.targetKind, effect.targetId, effect.streamSequence]);
|
|
406
|
+
if (row !== undefined)
|
|
407
|
+
return row.effect_id;
|
|
323
408
|
}
|
|
409
|
+
return undefined;
|
|
324
410
|
}
|
|
325
411
|
/** Validates every resolution effect target through the active async SQL transaction. */
|
|
326
412
|
async function ensureResolutionEffectsRegisteredWithSql(sql, effects) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolutionWriter.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resolutionWriter.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EACL,mBAAmB,EACnB,cAAc,GACf,MAAM,uCAAuC,CAAC;AAO/C,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAE1B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,uCAAuC,EAAE,MAAM,mCAAmC,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EACL,eAAe,EACf,qBAAqB,GAEtB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,gCAAgC,CAAC;AAUxC,OAAO,EACL,uCAAuC,EACvC,kCAAkC,EAClC,yBAAyB,EACzB,6BAA6B,EAC7B,0BAA0B,EAC1B,mCAAmC,EACnC,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,iCAAiC,EACjC,iBAAiB,EACjB,sBAAsB,EACtB,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,gCAAgC,CAAC;AAMxC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,GAAgB,EAChB,KAAqB,EACrB,KAAoC;IAEpC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrB,IAAI,CAAC,CAAC,MAAM,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QAC/C,OAAO,EAAE,IAAI,EAAE,+BAA+B,CAAC,UAAU,EAAE,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,gBAAgB,CAAC,GAAG,EAAE,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1E,MAAM,yBAAyB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACvE,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,KAAK,mBAAmB,CAAC,KAAK;gBACjE,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK,2BAA2B,CAAC,OAAO,CAAC;YACjE,IAAI,SAAS,CAAC,IAAI,KAAK,mBAAmB,CAAC,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpE,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC;gBACxC,yEAAyE;gBACzE,sEAAsE;gBACtE,IAAI,eAAe,CAAC,MAAM,KAAK,2BAA2B,CAAC,UAAU,EAAE,CAAC;oBACtE,MAAM,8BAA8B,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;gBACjF,CAAC;gBACD,OAAO,eAAe,CAAC;YACzB,CAAC;YAED,MAAM,cAAc,GAAG,MAAM,mBAAmB,CAC9C,GAAG,EACH,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAC/B,CAAC;YACF,IAAI,cAAc,CAAC,IAAI,KAAK,mBAAmB,CAAC,SAAS,EAAE,CAAC;gBAC1D,OAAO;oBACL,IAAI,EAAE,+BAA+B,CAAC,QAAQ;oBAC9C,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;oBAClC,MAAM,EAAE,qDAAqD;iBAC9D,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC;YACtC,MAAM,qBAAqB,GAAG,MAAM,gCAAgC,CAClE,GAAG,EACH,KAAK,CAAC,OAAO,CACd,CAAC;YACF,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;gBACxC,sEAAsE;gBACtE,oEAAoE;gBACpE,oEAAoE;gBACpE,wEAAwE;gBACxE,uDAAuD;gBACvD,MAAM,2BAA2B,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACrD,OAAO;oBACL,IAAI,EAAE,+BAA+B,CAAC,QAAQ;oBAC9C,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;oBAClC,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,MAAM,EAAE,wBAAwB;iBACjC,CAAC;YACJ,CAAC;YAED,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,mCAAmC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3G,CAAC;iBAAM,CAAC;gBACN,MAAM,8BAA8B,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,aAAa,GAAG,MAAM,iCAAiC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC7E,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,KAAK,mBAAmB,CAAC,KAAK;gBACjE,aAAa,CAAC,KAAK,CAAC,eAAe,KAAK,KAAK,CAAC,OAAO,CAAC,sBAAsB;gBAC5E,aAAa,CAAC,KAAK,CAAC,qBAAqB,KAAK,KAAK,CAAC,OAAO,CAAC,mBAAmB;gBAC/E,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;gBAC1C,CAAC,CAAC,EAAE,IAAI,EAAE,yBAAyB,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;YAExD,IAAI,UAAU,CAAC,IAAI,KAAK,yBAAyB,CAAC,QAAQ,EAAE,CAAC;gBAC3D,IAAI,aAAa,CAAC,IAAI,KAAK,mBAAmB,CAAC,SAAS,EAAE,CAAC;oBACzD,MAAM,IAAI,YAAY,CACpB,mBAAmB,CAAC,+BAA+B,EACnD,oDAAoD,CACrD,CAAC;gBACJ,CAAC;gBACD,MAAM,2BAA2B,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;gBACpF,OAAO;oBACL,IAAI,EAAE,+BAA+B,CAAC,OAAO;oBAC7C,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;oBAClC,UAAU,EAAE,QAAQ,CAAC,UAAU;iBAChC,CAAC;YACJ,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,KAAK,yBAAyB,CAAC,KAAK,EAAE,CAAC;gBACxD,MAAM,uBAAuB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC7E,OAAO;oBACL,IAAI,EAAE,+BAA+B,CAAC,KAAK;oBAC3C,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;oBAClC,UAAU,EAAE,QAAQ,CAAC,UAAU;iBAChC,CAAC;YACJ,CAAC;YAED,MAAM,0BAA0B,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO;gBACL,IAAI,EAAE,+BAA+B,CAAC,QAAQ;gBAC9C,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;gBAClC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI;aAC9B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;YACpC,OAAO,EAAE,IAAI,EAAE,+BAA+B,CAAC,UAAU,EAAE,CAAC;QAC9D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,OAA0B,EAC1B,KAAqB,EACrB,KAAoC;IAEpC,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,+BAA+B,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,aAAa,CAAC,KAAoC;IACzD,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,YAAY,CACpB,mBAAmB,CAAC,0BAA0B,EAC9C,wDAAwD,CACzD,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IACE,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAC9B,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAC/B,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAC5B,OAAO,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;QACrC,OAAO,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC;QACxC,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC/C,OAAO,CAAC,gBAAgB,GAAG,CAAC;QAC5B,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,sBAAsB,CAAC;QACrD,OAAO,CAAC,sBAAsB,GAAG,CAAC,EAClC,CAAC;QACD,MAAM,IAAI,YAAY,CACpB,mBAAmB,CAAC,0BAA0B,EAC9C,iEAAiE,CAClE,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,2BAA2B,GAC/B,MAAM,CAAC,UAAU,KAAK,gBAAgB;YACtC,MAAM,CAAC,UAAU,KAAK,UAAU;YAChC,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO;YACjD,MAAM,CAAC,UAAU,CAAC,KAAK,KAAK,OAAO,CAAC,gBAAgB,CAAC;QACvD,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACnF,MAAM,IAAI,YAAY,CACpB,mBAAmB,CAAC,0BAA0B,EAC9C,wDAAwD,CACzD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,KAAK,UAAU,0BAA0B,CACvC,GAAgB,EAChB,OAA0B;IAK1B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAa,yBAAyB,EAAE;QAChE,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,UAAU;KACnB,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,CAAC,SAAS,EAAE,CAAC;IACtE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,YAAY,CACpB,mBAAmB,CAAC,oCAAoC,EACxD,wDAAwD,CACzD,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,YAAY,CACpB,mBAAmB,CAAC,+BAA+B,EACnD,qDAAqD,CACtD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,YAAY,CACpB,mBAAmB,CAAC,oCAAoC,EACxD,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,mBAAmB,CAAC,KAAK;QAC/B,KAAK,EAAE;YACL,IAAI,EAAE,+BAA+B,CAAC,SAAS;YAC/C,SAAS,EAAE,QAAQ,CAAC,UAAU;YAC9B,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAoB,EAAE,OAA0B;IAC3E,OAAO,QAAQ,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS;QAC9C,QAAQ,CAAC,WAAW,KAAK,OAAO,CAAC,UAAU;QAC3C,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;QAClC,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,OAAO;QACrC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;QAC9B,QAAQ,CAAC,kBAAkB,KAAK,OAAO,CAAC,gBAAgB;QACxD,QAAQ,CAAC,iBAAiB,KAAK,OAAO,CAAC,gBAAgB;QACvD,QAAQ,CAAC,qBAAqB,KAAK,OAAO,CAAC,mBAAmB;QAC9D,QAAQ,CAAC,wBAAwB,KAAK,OAAO,CAAC,sBAAsB;QACpE,QAAQ,CAAC,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC;AAClD,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,sBAAsB,CACpC,GAAgB,EAChB,cAAsB;IAEtB,OAAO,GAAG,CAAC,GAAG,CACZ,mGAAmG,EACnG,CAAC,cAAc,CAAC,CACjB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,0BAA0B,CACxC,GAAgB,EAChB,cAAsB;IAEtB,OAAO,GAAG,CAAC,GAAG,CACZ,0IAA0I,EAC1I,CAAC,cAAc,CAAC,CACjB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAgB,EAChB,cAAsB,EACtB,UAAkB;IAElB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAc,iBAAiB,EAAE,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;IACxF,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,CAAC,SAAS,EAAE,CAAC;IACtE,OAAO;QACL,IAAI,EAAE,mBAAmB,CAAC,KAAK;QAC/B,KAAK,EAAE;YACL,UAAU,EAAE,GAAG,CAAC,WAAW;YAC3B,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACvD,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,YAAY,EAAE,GAAG,CAAC,cAAc;YAChC,QAAQ,EAAE,GAAG,CAAC,SAAS;YACvB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC;YAC5D,gBAAgB,EAAE,GAAG,CAAC,kBAAkB;YACxC,yBAAyB,EAAE,mBAAmB,CAC5C,GAAG,CAAC,4BAA4B,EAChC,8BAA8B,CAC/B;YACD,4BAA4B,EAAE,GAAG,CAAC,+BAA+B;YACjE,qBAAqB,EAAE,mBAAmB,CAAC,GAAG,CAAC,uBAAuB,EAAE,yBAAyB,CAAC;YAClG,wBAAwB,EAAE,GAAG,CAAC,0BAA0B;YACxD,cAAc,EAAE,GAAG,CAAC,eAAe;YACnC,MAAM,EAAE,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC;YACzC,mBAAmB,EAAE,eAAe,CAAC,GAAG,CAAC,qBAAqB,CAAC;SAChE;KACF,CAAC;AACJ,CAAC;AAED,0FAA0F;AAC1F,KAAK,UAAU,iCAAiC,CAC9C,GAAgB,EAChB,QAAsB;IAEtB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAyB,iCAAiC,EAAE;QACpF,QAAQ,CAAC,YAAY;QACrB,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,UAAU;KACpB,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,CAAC,SAAS,EAAE,CAAC;IACtE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,YAAY,CACpB,mBAAmB,CAAC,+BAA+B,EACnD,kEAAkE,CACnE,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,YAAY,CACpB,mBAAmB,CAAC,+BAA+B,EACnD,wEAAwE,CACzE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC7D,CAAC;AAED,qFAAqF;AACrF,KAAK,UAAU,8BAA8B,CAC3C,GAAgB,EAChB,KAAqB,EACrB,KAAoC;IAEpC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE;QAC1D,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,UAAU;QAClB,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,IAAI;QACZ,OAAO,CAAC,gBAAgB;QACxB,OAAO,CAAC,gBAAgB;QACxB,OAAO,CAAC,mBAAmB;QAC3B,OAAO,CAAC,sBAAsB;QAC9B,OAAO,CAAC,WAAW;QACnB,KAAK,CAAC,GAAG;QACT,GAAG,eAAe,CAAC,KAAK,CAAC;KAC1B,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;QAAE,MAAM,IAAI,cAAc,EAAE,CAAC;AACvD,CAAC;AAED,yFAAyF;AACzF,KAAK,UAAU,2BAA2B,CACxC,GAAgB,EAChB,KAAqB,EACrB,KAAoC;IAEpC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,0BAA0B,EAAE;QACvD,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,UAAU;QAClB,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,IAAI;QACZ,OAAO,CAAC,gBAAgB;QACxB,OAAO,CAAC,gBAAgB;QACxB,OAAO,CAAC,mBAAmB;QAC3B,OAAO,CAAC,sBAAsB;QAC9B,OAAO,CAAC,WAAW;QACnB,KAAK,CAAC,GAAG;QACT,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,UAAU;QAClB,GAAG,eAAe,CAAC,KAAK,CAAC;KAC1B,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;QAAE,OAAO;IACjC,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,MAAM,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC;QAAE,OAAO;IAC5E,MAAM,IAAI,cAAc,EAAE,CAAC;AAC7B,CAAC;AAED,kFAAkF;AAClF,KAAK,UAAU,mCAAmC,CAChD,GAAgB,EAChB,KAAqB,EACrB,SAAiB,EACjB,UAAkB;IAElB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,mCAAmC,EAAE;QAChE,SAAS;QACT,UAAU;QACV,GAAG,eAAe,CAAC,KAAK,CAAC;KAC1B,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;QAAE,MAAM,IAAI,cAAc,EAAE,CAAC;AACvD,CAAC;AAED,mGAAmG;AACnG,KAAK,UAAU,2BAA2B,CACxC,GAAgB,EAChB,KAAqB,EACrB,KAAoC,EACpC,QAAsB,EACtB,OAA+B;IAE/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,0BAA0B,EAAE;QAC/D,OAAO,CAAC,SAAS;QACjB,KAAK,CAAC,GAAG;QACT,QAAQ,CAAC,UAAU;QACnB,OAAO,CAAC,gBAAgB;QACxB,OAAO,CAAC,sBAAsB;QAC9B,GAAG,eAAe,CAAC,KAAK,CAAC;KAC1B,CAAC,CAAC;IACH,IAAI,cAAc,CAAC,OAAO,KAAK,CAAC;QAAE,MAAM,IAAI,cAAc,EAAE,CAAC;IAE7D,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,kCAAkC,EAAE;QACvE,OAAO,CAAC,iBAAiB;QACzB,OAAO,CAAC,UAAU;QAClB,QAAQ,CAAC,YAAY;QACrB,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,UAAU;QACnB,OAAO,CAAC,sBAAsB;QAC9B,GAAG,eAAe,CAAC,KAAK,CAAC;KAC1B,CAAC,CAAC;IACH,IAAI,cAAc,CAAC,OAAO,KAAK,CAAC;QAAE,MAAM,IAAI,cAAc,EAAE,CAAC;IAE7D,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,uCAAuC,EAAE;QACrE,OAAO,CAAC,sBAAsB;QAC9B,OAAO,CAAC,sBAAsB,GAAG,CAAC;QAClC,QAAQ,CAAC,YAAY;QACrB,KAAK,CAAC,cAAc;QACpB,GAAG,eAAe,CAAC,KAAK,CAAC;KAC1B,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC;QAAE,MAAM,IAAI,cAAc,EAAE,CAAC;IAEtD,MAAM,8BAA8B,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,wBAAwB,EAAE;QAC5D,KAAK,CAAC,QAAQ;QACd,OAAO,CAAC,SAAS;QACjB,GAAG,eAAe,CAAC,KAAK,CAAC;KAC1B,CAAC,CAAC;IACH,IAAI,aAAa,CAAC,OAAO,KAAK,CAAC;QAAE,MAAM,IAAI,cAAc,EAAE,CAAC;AAC9D,CAAC;AAED,2FAA2F;AAC3F,KAAK,UAAU,uBAAuB,CACpC,GAAgB,EAChB,KAAqB,EACrB,KAAoC,EACpC,kBAAkC;IAElC,MAAM,GAAG,CAAC,GAAG,CAAC,uBAAuB,EAAE;QACrC,kBAAkB;QAClB,KAAK,CAAC,GAAG;QACT,KAAK,CAAC,OAAO,CAAC,gBAAgB;QAC9B,GAAG,eAAe,CAAC,KAAK,CAAC;KAC1B,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE;QACpD,KAAK,CAAC,OAAO,CAAC,SAAS;QACvB,GAAG,eAAe,CAAC,KAAK,CAAC;KAC1B,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC;QAAE,MAAM,IAAI,cAAc,EAAE,CAAC;IACtD,MAAM,8BAA8B,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,2FAA2F;AAC3F,KAAK,UAAU,0BAA0B,CACvC,GAAgB,EAChB,KAAqB,EACrB,KAAoC;IAEpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,yBAAyB,EAAE;QACtD,KAAK,CAAC,OAAO,CAAC,SAAS;QACvB,GAAG,eAAe,CAAC,KAAK,CAAC;KAC1B,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;QAAE,MAAM,IAAI,cAAc,EAAE,CAAC;IACrD,MAAM,8BAA8B,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,GAAgB,EAChB,KAAqB,EACrB,OAA6B;IAE7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,wCAAwC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAAkB,sBAAsB,EAAE;YACtE,MAAM,CAAC,eAAe;SACvB,CAAC,CAAC;QACH,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IACE,QAAQ,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU;gBAC1C,QAAQ,CAAC,SAAS,KAAK,MAAM,CAAC,QAAQ;gBACtC,QAAQ,CAAC,gBAAgB,KAAK,MAAM,CAAC,cAAc;gBACnD,QAAQ,CAAC,iBAAiB,KAAK,MAAM,CAAC,eAAe;gBACrD,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU;gBACzC,QAAQ,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU;gBAC1C,QAAQ,CAAC,SAAS,KAAK,MAAM,CAAC,QAAQ;gBACtC,QAAQ,CAAC,YAAY,KAAK,MAAM,CAAC,WAAW,EAC5C,CAAC;gBACD,MAAM,IAAI,YAAY,CACpB,mBAAmB,CAAC,0BAA0B,EAC9C,kEAAkE,CACnE,CAAC;YACJ,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,qBAAqB,GAAG,MAAM,gCAAgC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACpF,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,YAAY,CACpB,mBAAmB,CAAC,sBAAsB,EAC1C,UAAU,MAAM,CAAC,QAAQ,0CAA0C,qBAAqB,EAAE,CAC3F,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,uCAAuC,CAC/D,GAAG,EACH,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,QAAQ,CAChB,CAAC;QACF,IACE,WAAW,KAAK,SAAS;YACzB,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS;gBAC/B,WAAW,CAAC,MAAM,KAAK,mBAAmB;gBAC1C,WAAW,CAAC,MAAM,KAAK,UAAU;gBACjC,WAAW,CAAC,MAAM,KAAK,QAAQ,CAAC,EAClC,CAAC;YACD,MAAM,yBAAyB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC3E,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,2BAA2B,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,cAAc,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED,sFAAsF;AACtF,KAAK,UAAU,gCAAgC,CAC7C,GAAgB,EAChB,OAA6B;IAE7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CACvB,+BAA+B,EAC/B,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,CACnF,CAAC;QACF,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,SAAS,CAAC;IAC9C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,yFAAyF;AACzF,KAAK,UAAU,wCAAwC,CACrD,GAAgB,EAChB,OAA6B;IAE7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAA0B,8BAA8B,EAAE;YACpF,MAAM,CAAC,eAAe;SACvB,CAAC,CAAC;QACH,IACE,MAAM,KAAK,SAAS;YACpB,MAAM,CAAC,gBAAgB,KAAK,MAAM,CAAC,cAAc;YACjD,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU;YACvC,MAAM,CAAC,OAAO,KAAK,CAAC,EACpB,CAAC;YACD,MAAM,IAAI,YAAY,CACpB,mBAAmB,CAAC,6BAA6B,EACjD,+DAA+D,CAChE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,SAAS,oBAAoB,CAAC,KAAoC;IAChE,OAAO;QACL,GAAG,KAAK,CAAC,OAAO;QAChB,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;QAC7B,GAAG,CAAC,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;QAChC,GAAG,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC"}
|
|
@@ -3,6 +3,8 @@ import type { ResolutionCommand } from "../../../../domain/index.js";
|
|
|
3
3
|
import type { NewEffect } from "../../sync/outbound/effectOutbox.js";
|
|
4
4
|
/** Runtime values for the durable resolution-command lifecycle. */
|
|
5
5
|
export declare const RESOLUTION_COMMAND_STATUSES: {
|
|
6
|
+
/** A durable command waiting for an in-flight predecessor to settle. */
|
|
7
|
+
readonly PENDING: "pending";
|
|
6
8
|
readonly PROCESSING: "processing";
|
|
7
9
|
readonly APPLIED: "applied";
|
|
8
10
|
readonly STALE: "stale";
|
|
@@ -14,6 +16,7 @@ export type ResolutionCommandStatus = (typeof RESOLUTION_COMMAND_STATUSES)[keyof
|
|
|
14
16
|
/** Runtime values for results returned by the resolution writer. */
|
|
15
17
|
export declare const PERSIST_RESOLUTION_RESULT_KINDS: {
|
|
16
18
|
readonly FENCED_OUT: "fenced_out";
|
|
19
|
+
readonly DEFERRED: "deferred";
|
|
17
20
|
readonly APPLIED: "applied";
|
|
18
21
|
readonly STALE: "stale";
|
|
19
22
|
readonly REJECTED: "rejected";
|
|
@@ -42,9 +45,14 @@ export interface PersistResolutionCommandInput {
|
|
|
42
45
|
*/
|
|
43
46
|
readonly duplicateEffects?: readonly NewEffect[];
|
|
44
47
|
}
|
|
45
|
-
/**
|
|
48
|
+
/** Result of a resolution command transaction, including safe in-flight deferral. */
|
|
46
49
|
export type PersistResolutionCommandResult = {
|
|
47
50
|
readonly kind: typeof PERSIST_RESOLUTION_RESULT_KINDS.FENCED_OUT;
|
|
51
|
+
} | {
|
|
52
|
+
readonly kind: typeof PERSIST_RESOLUTION_RESULT_KINDS.DEFERRED;
|
|
53
|
+
readonly commandId: string;
|
|
54
|
+
readonly conflictId: string;
|
|
55
|
+
readonly reason: "processing_predecessor";
|
|
48
56
|
} | {
|
|
49
57
|
readonly kind: typeof PERSIST_RESOLUTION_RESULT_KINDS.APPLIED;
|
|
50
58
|
readonly commandId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolutionWriterContracts.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterContracts.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE,mEAAmE;AACnE,eAAO,MAAM,2BAA2B
|
|
1
|
+
{"version":3,"file":"resolutionWriterContracts.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterContracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/** Status, command, row, and SQL-result contracts for resolution persistence. */
|
|
2
2
|
/** Runtime values for the durable resolution-command lifecycle. */
|
|
3
3
|
export const RESOLUTION_COMMAND_STATUSES = {
|
|
4
|
+
/** A durable command waiting for an in-flight predecessor to settle. */
|
|
5
|
+
PENDING: "pending",
|
|
4
6
|
PROCESSING: "processing",
|
|
5
7
|
APPLIED: "applied",
|
|
6
8
|
STALE: "stale",
|
|
@@ -10,6 +12,7 @@ export const RESOLUTION_COMMAND_STATUSES = {
|
|
|
10
12
|
/** Runtime values for results returned by the resolution writer. */
|
|
11
13
|
export const PERSIST_RESOLUTION_RESULT_KINDS = {
|
|
12
14
|
FENCED_OUT: "fenced_out",
|
|
15
|
+
DEFERRED: "deferred",
|
|
13
16
|
APPLIED: "applied",
|
|
14
17
|
STALE: "stale",
|
|
15
18
|
REJECTED: "rejected",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolutionWriterContracts.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterContracts.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAKjF,mEAAmE;AACnE,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;CACR,CAAC;AAMX,oEAAoE;AACpE,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;CACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"resolutionWriterContracts.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterContracts.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAKjF,mEAAmE;AACnE,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,wEAAwE;IACxE,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;CACR,CAAC;AAMX,oEAAoE;AACpE,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;CACd,CAAC"}
|
|
@@ -4,6 +4,10 @@ export declare const FIND_EXISTING_COMMAND_SQL = "\n SELECT command_id, request
|
|
|
4
4
|
export declare const READ_CONFLICT_SQL = "\n SELECT conflict_id, conflict_group_id, event_id, row_binding_id, entity_id, field_name,\n user_value, user_base_revision, canonical_value_at_detection,\n canonical_revision_at_detection, current_canonical_value,\n current_canonical_revision, candidate_epoch, status, resolution_command_id\n FROM sync_conflict\n WHERE logical_sheet_id = ? AND conflict_id = ?\n";
|
|
5
5
|
export declare const READ_ACTIVE_CANDIDATE_POINTER_SQL = "\n SELECT physical_sheet_id, projection, candidate_epoch, active_candidate_hash\n FROM sheet_visible_field_state\n WHERE row_binding_id = ? AND field_name = ?\n AND active_candidate_conflict_id = ?\n AND active_candidate_hash IS NOT NULL\n";
|
|
6
6
|
export declare const INSERT_PROCESSING_COMMAND_SQL = "\n INSERT INTO resolution_command (\n command_id, request_key, action, actor_id, role, target_conflict_id,\n expected_revision, active_candidate_hash, expected_candidate_epoch,\n payload_hash, status, issued_at\n )\n SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'processing', ?\n WHERE EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
|
|
7
|
+
/** Records a deferred automatic resolution without claiming it for execution. */
|
|
8
|
+
export declare const INSERT_PENDING_COMMAND_SQL = "\n INSERT INTO resolution_command (\n command_id, request_key, action, actor_id, role, target_conflict_id,\n expected_revision, active_candidate_hash, expected_candidate_epoch,\n payload_hash, status, issued_at\n )\n SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?\n WHERE NOT EXISTS (\n SELECT 1 FROM resolution_command\n WHERE command_id = ? OR request_key = ?\n )\n AND EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
|
|
9
|
+
/** Promotes a durable deferred command only after its predecessor is gone. */
|
|
10
|
+
export declare const MARK_PENDING_COMMAND_PROCESSING_SQL = "\n UPDATE resolution_command\n SET status = 'processing'\n WHERE command_id = ? AND request_key = ? AND status = 'pending'\n AND EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
|
|
7
11
|
export declare const MARK_CONFLICT_RESOLVED_SQL = "\n UPDATE sync_conflict\n SET status = 'RESOLVED', resolution_command_id = ?, updated_at = ?\n WHERE conflict_id = ? AND status IN ('OPEN', 'NEEDS_REBASE')\n AND current_canonical_revision = ? AND candidate_epoch = ?\n AND EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
|
|
8
12
|
export declare const CLEAR_ACTIVE_CANDIDATE_POINTER_SQL = "\n UPDATE sheet_visible_field_state\n SET active_candidate_conflict_id = NULL, active_candidate_hash = NULL,\n candidate_epoch = candidate_epoch + 1\n WHERE physical_sheet_id = ? AND projection = ?\n AND row_binding_id = ? AND field_name = ?\n AND active_candidate_conflict_id = ? AND candidate_epoch = ?\n AND EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
|
|
9
13
|
export declare const ADVANCE_ROW_BINDING_CANDIDATE_EPOCH_SQL = "\n UPDATE row_binding\n SET candidate_epoch = CASE\n WHEN candidate_epoch <= ? THEN ?\n ELSE candidate_epoch\n END\n WHERE row_binding_id = ? AND logical_sheet_id = ?\n AND EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
|
|
@@ -13,4 +17,11 @@ export declare const MARK_COMMAND_STALE_SQL = "\n UPDATE resolution_command\n
|
|
|
13
17
|
export declare const MARK_COMMAND_REJECTED_SQL = "\n UPDATE resolution_command\n SET status = 'rejected'\n WHERE command_id = ? AND status = 'processing'\n AND EXISTS (\n SELECT 1 FROM writer_lease\n WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?\n)\n";
|
|
14
18
|
export declare const READ_EFFECT_DEDUPE_SQL = "\n SELECT effect_kind, commit_id, logical_sheet_id, physical_sheet_id,\n projection, target_kind, target_id, payload_hash\n FROM sheet_effect_outbox\n WHERE effect_dedupe_key = ?\n";
|
|
15
19
|
export declare const READ_REGISTERED_PROJECTION_SQL = "\n SELECT logical_sheet_id, projection, enabled\n FROM physical_sheet_registry\n WHERE physical_sheet_id = ?\n";
|
|
20
|
+
/**
|
|
21
|
+
* Finds an in-flight predecessor that could still materialize after a
|
|
22
|
+
* replacement. `delivery_uncertain` counts as in-flight because the remote
|
|
23
|
+
* write may still commit after a lost response; resolution successors must
|
|
24
|
+
* wait until that predecessor is probe-settled.
|
|
25
|
+
*/
|
|
26
|
+
export declare const READ_PROCESSING_PREDECESSOR_SQL = "\n SELECT effect_id\n FROM sheet_effect_outbox\n WHERE logical_sheet_id = ? AND target_kind = ? AND target_id = ?\n AND stream_sequence < ? AND status IN ('processing', 'delivery_uncertain')\n ORDER BY stream_sequence\n LIMIT 1\n";
|
|
16
27
|
//# sourceMappingURL=resolutionWriterSql.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolutionWriterSql.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterSql.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAItE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,eAAO,MAAM,yBAAyB,yQAMrC,CAAC;AAEF,eAAO,MAAM,iBAAiB,2YAO7B,CAAC;AAEF,eAAO,MAAM,iCAAiC,6PAM7C,CAAC;AAEF,eAAO,MAAM,6BAA6B,oaAQzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,yWAMtC,CAAC;AAEF,eAAO,MAAM,kCAAkC,ycAQ9C,CAAC;AAEF,eAAO,MAAM,uCAAuC,2TAQnD,CAAC;AAEF,eAAO,MAAM,wBAAwB,2QAKpC,CAAC;AAEF,eAAO,MAAM,uBAAuB,qQAKnC,CAAC;AAEF,eAAO,MAAM,sBAAsB,kPAKlC,CAAC;AAEF,eAAO,MAAM,yBAAyB,qPAKrC,CAAC;AAEF,eAAO,MAAM,sBAAsB,oMAKlC,CAAC;AAEF,eAAO,MAAM,8BAA8B,sHAI1C,CAAC"}
|
|
1
|
+
{"version":3,"file":"resolutionWriterSql.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterSql.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAItE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,eAAO,MAAM,yBAAyB,yQAMrC,CAAC;AAEF,eAAO,MAAM,iBAAiB,2YAO7B,CAAC;AAEF,eAAO,MAAM,iCAAiC,6PAM7C,CAAC;AAEF,eAAO,MAAM,6BAA6B,oaAQzC,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,+gBAYtC,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,mCAAmC,wQAK/C,CAAC;AAEF,eAAO,MAAM,0BAA0B,yWAMtC,CAAC;AAEF,eAAO,MAAM,kCAAkC,ycAQ9C,CAAC;AAEF,eAAO,MAAM,uCAAuC,2TAQnD,CAAC;AAEF,eAAO,MAAM,wBAAwB,2QAKpC,CAAC;AAEF,eAAO,MAAM,uBAAuB,qQAKnC,CAAC;AAEF,eAAO,MAAM,sBAAsB,kPAKlC,CAAC;AAEF,eAAO,MAAM,yBAAyB,qPAKrC,CAAC;AAEF,eAAO,MAAM,sBAAsB,oMAKlC,CAAC;AAEF,eAAO,MAAM,8BAA8B,sHAI1C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,kPAO3C,CAAC"}
|
|
@@ -32,6 +32,27 @@ export const INSERT_PROCESSING_COMMAND_SQL = `
|
|
|
32
32
|
SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'processing', ?
|
|
33
33
|
WHERE EXISTS (${FENCE_EXISTS_SQL})
|
|
34
34
|
`;
|
|
35
|
+
/** Records a deferred automatic resolution without claiming it for execution. */
|
|
36
|
+
export const INSERT_PENDING_COMMAND_SQL = `
|
|
37
|
+
INSERT INTO resolution_command (
|
|
38
|
+
command_id, request_key, action, actor_id, role, target_conflict_id,
|
|
39
|
+
expected_revision, active_candidate_hash, expected_candidate_epoch,
|
|
40
|
+
payload_hash, status, issued_at
|
|
41
|
+
)
|
|
42
|
+
SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?
|
|
43
|
+
WHERE NOT EXISTS (
|
|
44
|
+
SELECT 1 FROM resolution_command
|
|
45
|
+
WHERE command_id = ? OR request_key = ?
|
|
46
|
+
)
|
|
47
|
+
AND EXISTS (${FENCE_EXISTS_SQL})
|
|
48
|
+
`;
|
|
49
|
+
/** Promotes a durable deferred command only after its predecessor is gone. */
|
|
50
|
+
export const MARK_PENDING_COMMAND_PROCESSING_SQL = `
|
|
51
|
+
UPDATE resolution_command
|
|
52
|
+
SET status = 'processing'
|
|
53
|
+
WHERE command_id = ? AND request_key = ? AND status = 'pending'
|
|
54
|
+
AND EXISTS (${FENCE_EXISTS_SQL})
|
|
55
|
+
`;
|
|
35
56
|
export const MARK_CONFLICT_RESOLVED_SQL = `
|
|
36
57
|
UPDATE sync_conflict
|
|
37
58
|
SET status = 'RESOLVED', resolution_command_id = ?, updated_at = ?
|
|
@@ -92,4 +113,18 @@ export const READ_REGISTERED_PROJECTION_SQL = `
|
|
|
92
113
|
FROM physical_sheet_registry
|
|
93
114
|
WHERE physical_sheet_id = ?
|
|
94
115
|
`;
|
|
116
|
+
/**
|
|
117
|
+
* Finds an in-flight predecessor that could still materialize after a
|
|
118
|
+
* replacement. `delivery_uncertain` counts as in-flight because the remote
|
|
119
|
+
* write may still commit after a lost response; resolution successors must
|
|
120
|
+
* wait until that predecessor is probe-settled.
|
|
121
|
+
*/
|
|
122
|
+
export const READ_PROCESSING_PREDECESSOR_SQL = `
|
|
123
|
+
SELECT effect_id
|
|
124
|
+
FROM sheet_effect_outbox
|
|
125
|
+
WHERE logical_sheet_id = ? AND target_kind = ? AND target_id = ?
|
|
126
|
+
AND stream_sequence < ? AND status IN ('processing', 'delivery_uncertain')
|
|
127
|
+
ORDER BY stream_sequence
|
|
128
|
+
LIMIT 1
|
|
129
|
+
`;
|
|
95
130
|
//# sourceMappingURL=resolutionWriterSql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolutionWriterSql.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterSql.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;CAMxC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;CAOhC,CAAC;AAEF,MAAM,CAAC,MAAM,iCAAiC,GAAG;;;;;;CAMhD,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;kBAO3B,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;kBAKxB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAAG;;;;;;;kBAOhC,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,uCAAuC,GAAG;;;;;;;kBAOrC,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;kBAItB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;kBAIrB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;kBAIpB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;kBAIvB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;CAKrC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;;;;CAI7C,CAAC"}
|
|
1
|
+
{"version":3,"file":"resolutionWriterSql.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriterSql.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;CAMxC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;CAOhC,CAAC;AAEF,MAAM,CAAC,MAAM,iCAAiC,GAAG;;;;;;CAMhD,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;kBAO3B,gBAAgB;CACjC,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;kBAWxB,gBAAgB;CACjC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,mCAAmC,GAAG;;;;kBAIjC,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;kBAKxB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAAG;;;;;;;kBAOhC,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,uCAAuC,GAAG;;;;;;;kBAOrC,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;kBAItB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;kBAIrB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;kBAIpB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;kBAIvB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;CAKrC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;;;;CAI7C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;;;;CAO9C,CAAC"}
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { FencingContext } from "../shared/writerLease.js";
|
|
11
11
|
import { type SqlExecutor, type SqlStorageAdapter } from "../../../../adapter/persistence/contracts/sql.js";
|
|
12
|
-
import type { ApplyResultOptions, ClaimEffectOptions, ClaimResult, NewEffect, PendingEffect, RetryClaimedEffectOptions } from "./effectOutboxContracts.js";
|
|
12
|
+
import type { ApplyResultOptions, ClaimEffectOptions, ClaimResult, MarkDeliveryUncertainOptions, NewEffect, RenewEffectLeaseOptions, PendingEffect, RetryClaimedEffectOptions } from "./effectOutboxContracts.js";
|
|
13
13
|
export { SYNC_EFFECT_RECOVERY_ERROR_CODES } from "./effectOutboxContracts.js";
|
|
14
|
-
export type { AppliedEffectResultOptions, ApplyResultOptions, ClaimEffectOptions, ClaimResult, NonAppliedEffectResultOptions, EffectProjectionConfirmation, NewEffect, PendingEffect, RetryClaimedEffectOptions, } from "./effectOutboxContracts.js";
|
|
14
|
+
export type { AppliedEffectResultOptions, ApplyResultOptions, ClaimEffectOptions, ClaimResult, NonAppliedEffectResultOptions, RenewEffectLeaseOptions, EffectProjectionConfirmation, MarkDeliveryUncertainOptions, NewEffect, PendingEffect, RetryClaimedEffectOptions, } from "./effectOutboxContracts.js";
|
|
15
15
|
/**
|
|
16
16
|
* Claims a pending effect through an already-active async SQL context.
|
|
17
17
|
*
|
|
@@ -21,6 +21,10 @@ export type { AppliedEffectResultOptions, ApplyResultOptions, ClaimEffectOptions
|
|
|
21
21
|
export declare function claimEffectWithSql(sql: SqlExecutor, options: ClaimEffectOptions): Promise<ClaimResult>;
|
|
22
22
|
/** Claims one effect inside an adapter-owned transaction. */
|
|
23
23
|
export declare function claimEffectWithAdapter(storage: SqlStorageAdapter, options: ClaimEffectOptions): Promise<ClaimResult>;
|
|
24
|
+
/** Renews a processing effect only while the current writer fence and claim still match. */
|
|
25
|
+
export declare function renewEffectLeaseWithSql(sql: SqlExecutor, options: RenewEffectLeaseOptions): Promise<boolean>;
|
|
26
|
+
/** Renews one claimed effect through an adapter-owned transaction. */
|
|
27
|
+
export declare function renewEffectLeaseWithAdapter(storage: SqlStorageAdapter, options: RenewEffectLeaseOptions): Promise<boolean>;
|
|
24
28
|
/**
|
|
25
29
|
* Appends pending effects under the supplied writer fence.
|
|
26
30
|
*
|
|
@@ -73,6 +77,10 @@ export declare function supersedeAndReplanWithAdapter(storage: SqlStorageAdapter
|
|
|
73
77
|
export declare function recoverExpiredLeasesWithSql(sql: SqlExecutor, fence: FencingContext): Promise<number>;
|
|
74
78
|
/** Marks expired effect leases inside an adapter-owned transaction. */
|
|
75
79
|
export declare function recoverExpiredLeasesWithAdapter(storage: SqlStorageAdapter, fence: FencingContext): Promise<number>;
|
|
80
|
+
/** Moves a claimed effect into durable ambiguous-delivery recovery. */
|
|
81
|
+
export declare function markDeliveryUncertainWithSql(sql: SqlExecutor, options: MarkDeliveryUncertainOptions): Promise<boolean>;
|
|
82
|
+
/** Moves one claimed effect into durable ambiguous-delivery recovery. */
|
|
83
|
+
export declare function markDeliveryUncertainWithAdapter(storage: SqlStorageAdapter, options: MarkDeliveryUncertainOptions): Promise<boolean>;
|
|
76
84
|
/**
|
|
77
85
|
* Returns an acknowledged-but-unprocessed batch suffix to pending.
|
|
78
86
|
*
|
|
@@ -110,9 +118,9 @@ export declare function findPendingEffectsByTargetWithAdapter(storage: SqlStorag
|
|
|
110
118
|
* safely race this advisory selection without processing a later stream item.
|
|
111
119
|
*/
|
|
112
120
|
/** Reads bounded head-of-line effects through an already-active async SQL context. */
|
|
113
|
-
export declare function listReadyEffectsWithSql(sql: SqlExecutor, limit: number): Promise<readonly PendingEffect[]>;
|
|
121
|
+
export declare function listReadyEffectsWithSql(sql: SqlExecutor, limit: number, now?: number): Promise<readonly PendingEffect[]>;
|
|
114
122
|
/** Reads bounded head-of-line effects through a fresh adapter read context. */
|
|
115
|
-
export declare function listReadyEffectsWithAdapter(storage: SqlStorageAdapter, limit: number): Promise<readonly PendingEffect[]>;
|
|
123
|
+
export declare function listReadyEffectsWithAdapter(storage: SqlStorageAdapter, limit: number, now?: number): Promise<readonly PendingEffect[]>;
|
|
116
124
|
/** Returns whether normal outbox work is still pending or actively processing. */
|
|
117
125
|
/** Checks whether the durable outbox still has pending or processing work. */
|
|
118
126
|
export declare function hasPendingOrProcessingEffectsWithSql(sql: SqlExecutor): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effectOutbox.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/sync/outbound/effectOutbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAEL,KAAK,WAAW,EAEhB,KAAK,iBAAiB,EACvB,MAAM,kDAAkD,CAAC;AAC1D,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,aAAa,EACb,yBAAyB,EAC1B,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"effectOutbox.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/sync/outbound/effectOutbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,8 +11,8 @@ import { STORAGE_ERROR_CODES, StorageError } from "../../errors.js";
|
|
|
11
11
|
import { withSqlSavepoint } from "../../sqlite/sqlTransaction.js";
|
|
12
12
|
import { fenceParameters, isFencingValidWithSql, } from "../shared/writerLease.js";
|
|
13
13
|
import { decodeSqlRows, } from "../../../../adapter/persistence/contracts/sql.js";
|
|
14
|
-
import { APPLY_EFFECT_RESULT_SQL, CLAIM_EFFECT_SQL, COUNT_PENDING_OR_PROCESSING_EFFECTS_SQL, INSERT_PENDING_EFFECT_SQL, INSERT_REPLANNED_EFFECT_SQL, RECOVER_EXPIRED_LEASES_SQL, REQUEUE_CLAIMED_EFFECT_SQL, RELEASE_UNPROCESSED_EFFECT_SQL, SELECT_PENDING_EFFECTS_BY_TARGET_SQL, SELECT_READY_EFFECTS_SQL, SUPERSEDE_EFFECT_SQL, } from "./effectOutboxSql.js";
|
|
15
|
-
import { applyEffectResultParameters, assertProjectionConfirmationTargetWithSql, AsyncFenceLostError, claimEffectParameters, decodePendingEffectRow, pendingEffectParameters, replannedEffectParameters, requireCurrentFenceWithSql, validateApplyResultOptions, validateEffectLeaseDuration, validateReadyEffectLimit, writeProjectionConfirmationWithSql, } from "./effectOutboxSupport.js";
|
|
14
|
+
import { APPLY_EFFECT_RESULT_SQL, CLAIM_EFFECT_SQL, COUNT_PENDING_OR_PROCESSING_EFFECTS_SQL, INSERT_PENDING_EFFECT_SQL, INSERT_REPLANNED_EFFECT_SQL, MARK_DELIVERY_UNCERTAIN_SQL, RECOVER_EXPIRED_LEASES_SQL, RENEW_EFFECT_LEASE_SQL, REQUEUE_CLAIMED_EFFECT_SQL, RELEASE_UNPROCESSED_EFFECT_SQL, SELECT_PENDING_EFFECTS_BY_TARGET_SQL, SELECT_READY_EFFECTS_SQL, SUPERSEDE_EFFECT_SQL, } from "./effectOutboxSql.js";
|
|
15
|
+
import { applyEffectResultParameters, assertProjectionConfirmationTargetWithSql, AsyncFenceLostError, claimEffectParameters, decodePendingEffectRow, pendingEffectParameters, markDeliveryUncertainParameters, replannedEffectParameters, requireCurrentFenceWithSql, retryClaimedEffectParameters, validateApplyResultOptions, validateEffectLeaseDuration, validateReadyEffectLimit, writeProjectionConfirmationWithSql, } from "./effectOutboxSupport.js";
|
|
16
16
|
export { SYNC_EFFECT_RECOVERY_ERROR_CODES } from "./effectOutboxContracts.js";
|
|
17
17
|
/**
|
|
18
18
|
* Claims a pending effect through an already-active async SQL context.
|
|
@@ -49,6 +49,25 @@ export async function claimEffectWithSql(sql, options) {
|
|
|
49
49
|
export async function claimEffectWithAdapter(storage, options) {
|
|
50
50
|
return storage.transaction(({ sql }) => claimEffectWithSql(sql, options));
|
|
51
51
|
}
|
|
52
|
+
/** Renews a processing effect only while the current writer fence and claim still match. */
|
|
53
|
+
export async function renewEffectLeaseWithSql(sql, options) {
|
|
54
|
+
if (!(await isFencingValidWithSql(sql, options)))
|
|
55
|
+
return false;
|
|
56
|
+
validateEffectLeaseDuration(options.leaseDurationMs);
|
|
57
|
+
const result = await sql.run(RENEW_EFFECT_LEASE_SQL, [
|
|
58
|
+
options.now + options.leaseDurationMs,
|
|
59
|
+
options.effectId,
|
|
60
|
+
options.claimToken,
|
|
61
|
+
options.writerEpoch,
|
|
62
|
+
options.now,
|
|
63
|
+
...fenceParameters(options),
|
|
64
|
+
]);
|
|
65
|
+
return result.changes === 1;
|
|
66
|
+
}
|
|
67
|
+
/** Renews one claimed effect through an adapter-owned transaction. */
|
|
68
|
+
export async function renewEffectLeaseWithAdapter(storage, options) {
|
|
69
|
+
return storage.transaction(({ sql }) => renewEffectLeaseWithSql(sql, options));
|
|
70
|
+
}
|
|
52
71
|
/**
|
|
53
72
|
* Appends pending effects under the supplied writer fence.
|
|
54
73
|
*
|
|
@@ -165,6 +184,8 @@ export async function supersedeAndReplanWithAdapter(storage, fence, oldEffectId,
|
|
|
165
184
|
export async function recoverExpiredLeasesWithSql(sql, fence) {
|
|
166
185
|
await requireCurrentFenceWithSql(sql, fence);
|
|
167
186
|
const result = await sql.run(RECOVER_EXPIRED_LEASES_SQL, [
|
|
187
|
+
fence.now,
|
|
188
|
+
fence.now,
|
|
168
189
|
fence.now,
|
|
169
190
|
...fenceParameters(fence),
|
|
170
191
|
]);
|
|
@@ -174,6 +195,20 @@ export async function recoverExpiredLeasesWithSql(sql, fence) {
|
|
|
174
195
|
export async function recoverExpiredLeasesWithAdapter(storage, fence) {
|
|
175
196
|
return storage.transaction(({ sql }) => recoverExpiredLeasesWithSql(sql, fence));
|
|
176
197
|
}
|
|
198
|
+
/** Moves a claimed effect into durable ambiguous-delivery recovery. */
|
|
199
|
+
export async function markDeliveryUncertainWithSql(sql, options) {
|
|
200
|
+
if (!(await isFencingValidWithSql(sql, options)))
|
|
201
|
+
return false;
|
|
202
|
+
if (options.nextProbeAt < options.uncertainSince || options.uncertainSince < 0) {
|
|
203
|
+
throw new StorageError(STORAGE_ERROR_CODES.INVALID_EFFECT_OPTIONS, "uncertain delivery timestamps must be ordered non-negative values");
|
|
204
|
+
}
|
|
205
|
+
const result = await sql.run(MARK_DELIVERY_UNCERTAIN_SQL, markDeliveryUncertainParameters(options));
|
|
206
|
+
return result.changes === 1;
|
|
207
|
+
}
|
|
208
|
+
/** Moves one claimed effect into durable ambiguous-delivery recovery. */
|
|
209
|
+
export async function markDeliveryUncertainWithAdapter(storage, options) {
|
|
210
|
+
return storage.transaction(({ sql }) => markDeliveryUncertainWithSql(sql, options));
|
|
211
|
+
}
|
|
177
212
|
/**
|
|
178
213
|
* Returns an acknowledged-but-unprocessed batch suffix to pending.
|
|
179
214
|
*
|
|
@@ -186,6 +221,7 @@ export async function releaseUnprocessedEffectWithSql(sql, options) {
|
|
|
186
221
|
if (!(await isFencingValidWithSql(sql, options)))
|
|
187
222
|
return false;
|
|
188
223
|
const result = await sql.run(RELEASE_UNPROCESSED_EFFECT_SQL, [
|
|
224
|
+
options.now + 1_000,
|
|
189
225
|
options.effectId,
|
|
190
226
|
options.claimToken,
|
|
191
227
|
options.writerEpoch,
|
|
@@ -203,15 +239,7 @@ export async function releaseUnprocessedEffectWithAdapter(storage, options) {
|
|
|
203
239
|
export async function retryClaimedEffectWithSql(sql, options) {
|
|
204
240
|
if (!(await isFencingValidWithSql(sql, options)))
|
|
205
241
|
return false;
|
|
206
|
-
const result = await sql.run(REQUEUE_CLAIMED_EFFECT_SQL,
|
|
207
|
-
options.lastErrorCode,
|
|
208
|
-
options.lastErrorMessage,
|
|
209
|
-
options.effectId,
|
|
210
|
-
options.claimToken,
|
|
211
|
-
options.writerEpoch,
|
|
212
|
-
options.now,
|
|
213
|
-
...fenceParameters(options),
|
|
214
|
-
]);
|
|
242
|
+
const result = await sql.run(REQUEUE_CLAIMED_EFFECT_SQL, retryClaimedEffectParameters(options));
|
|
215
243
|
return result.changes === 1;
|
|
216
244
|
}
|
|
217
245
|
/** Requeues a claimed effect inside an adapter-owned transaction. */
|
|
@@ -244,14 +272,17 @@ export async function findPendingEffectsByTargetWithAdapter(storage, logicalShee
|
|
|
244
272
|
* safely race this advisory selection without processing a later stream item.
|
|
245
273
|
*/
|
|
246
274
|
/** Reads bounded head-of-line effects through an already-active async SQL context. */
|
|
247
|
-
export async function listReadyEffectsWithSql(sql, limit) {
|
|
275
|
+
export async function listReadyEffectsWithSql(sql, limit, now = Date.now()) {
|
|
248
276
|
validateReadyEffectLimit(limit);
|
|
249
|
-
|
|
277
|
+
if (!Number.isSafeInteger(now) || now < 0) {
|
|
278
|
+
throw new StorageError(STORAGE_ERROR_CODES.INVALID_EFFECT_OPTIONS, "ready effect time must be a non-negative safe integer");
|
|
279
|
+
}
|
|
280
|
+
const rows = await sql.all(SELECT_READY_EFFECTS_SQL, [now, now, now, limit]);
|
|
250
281
|
return decodeSqlRows(rows, decodePendingEffectRow, "ready effects");
|
|
251
282
|
}
|
|
252
283
|
/** Reads bounded head-of-line effects through a fresh adapter read context. */
|
|
253
|
-
export async function listReadyEffectsWithAdapter(storage, limit) {
|
|
254
|
-
return storage.read(({ sql }) => listReadyEffectsWithSql(sql, limit));
|
|
284
|
+
export async function listReadyEffectsWithAdapter(storage, limit, now = Date.now()) {
|
|
285
|
+
return storage.read(({ sql }) => listReadyEffectsWithSql(sql, limit, now));
|
|
255
286
|
}
|
|
256
287
|
/** Returns whether normal outbox work is still pending or actively processing. */
|
|
257
288
|
/** Checks whether the durable outbox still has pending or processing work. */
|