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
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-spreadsheet Gateway coordinator that serializes remote mutations.
|
|
3
|
+
*
|
|
4
|
+
* The deployed Apps Script Gateway guards every data-plane operation with one
|
|
5
|
+
* global `LockService.getScriptLock()`. Before this coordinator, the outbound
|
|
6
|
+
* effect worker, the User_Input polling supervisor, provisioning, and test
|
|
7
|
+
* controls each called the Gateway directly, so several in-flight requests
|
|
8
|
+
* competed for the same script lock and the same Sheet context at once. Under
|
|
9
|
+
* load that produced lock-acquisition failures, duplicate-row races, and tail
|
|
10
|
+
* latency dominated by lock waits.
|
|
11
|
+
*
|
|
12
|
+
* The coordinator is a transparent decorator: it implements the same gateway
|
|
13
|
+
* boundary the worker and polling already use, so no caller changes are
|
|
14
|
+
* required. It routes every mutation and recovery barrier through one
|
|
15
|
+
* per-spreadsheet FIFO lane (default total concurrency 1) while leaving
|
|
16
|
+
* lock-free value reads untouched. SQLite outbox, leases, receipts, CAS, and
|
|
17
|
+
* fencing remain the durable authority; the coordinator only prevents the Node
|
|
18
|
+
* side from issuing competing mutations.
|
|
19
|
+
*
|
|
20
|
+
* Invariants preserved:
|
|
21
|
+
* - Total mutation concurrency is 1 per lane by default, matching the global
|
|
22
|
+
* Apps Script script lock for single-spreadsheet deployments.
|
|
23
|
+
* - Lock-free reads (`readSnapshot`, `readRows`, `readRowsBatch`) never wait on
|
|
24
|
+
* the mutation lane.
|
|
25
|
+
* - Recovery barriers (`readEffectPostcondition(s)`) use the mutation lane so a
|
|
26
|
+
* postcondition probe proves an earlier timed-out critical section ended.
|
|
27
|
+
* - Batch mutation (`observeSnapshots`) acquires every involved lane in a
|
|
28
|
+
* stable sorted order, so it cannot deadlock with single-sheet mutations.
|
|
29
|
+
* - Provisioning uses a dedicated lane so setup never races an append/write.
|
|
30
|
+
* - A failing or throwing mutation releases the lane, so it never deadlocks.
|
|
31
|
+
*/
|
|
32
|
+
import { isSyncSheetObservationBatchGateway, } from "../syncGateway.js";
|
|
33
|
+
import { AsyncMutex } from "./asyncMutex.js";
|
|
34
|
+
import { TRANSPORT_OUTCOME_KINDS, } from "./coordinatorTelemetry.js";
|
|
35
|
+
import { classifyTransportOutcome } from "../transportClassification.js";
|
|
36
|
+
/**
|
|
37
|
+
* Serializes Gateway mutations per lane while keeping value reads lock-free.
|
|
38
|
+
*
|
|
39
|
+
* Implements the full gateway, table-reader, observation-batch, and provisioner
|
|
40
|
+
* boundary, so it can wrap both the real Apps Script gateway and fakes. When
|
|
41
|
+
* the inner gateway lacks the one-request observation path, observation is
|
|
42
|
+
* routed through `ensureRowAnchors` + `readSnapshot` inside the same held lane.
|
|
43
|
+
*/
|
|
44
|
+
export class CoordinatedSyncGateway {
|
|
45
|
+
inner;
|
|
46
|
+
resolveKey;
|
|
47
|
+
onLaneEvent;
|
|
48
|
+
now;
|
|
49
|
+
lanes = new Map();
|
|
50
|
+
constructor(options) {
|
|
51
|
+
this.inner = options.inner;
|
|
52
|
+
this.resolveKey = options.mutationKeyForPhysicalSheet ?? (() => DEFAULT_LANE_KEY);
|
|
53
|
+
this.onLaneEvent = options.onLaneEvent;
|
|
54
|
+
this.now = options.clock ?? Date.now;
|
|
55
|
+
}
|
|
56
|
+
/** Returns a snapshot of all known lane metrics; diagnostic only. */
|
|
57
|
+
laneMetrics() {
|
|
58
|
+
const snapshot = new Map();
|
|
59
|
+
for (const [key, mutex] of this.lanes)
|
|
60
|
+
snapshot.set(key, mutex.metrics());
|
|
61
|
+
return snapshot;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Runs an internal control-plane operation on the same mutation lane as
|
|
65
|
+
* effects and anchor writes. Test/admin controls use this to avoid issuing a
|
|
66
|
+
* competing Apps Script request outside the coordinator.
|
|
67
|
+
*/
|
|
68
|
+
runSerializedControl(physicalSheetId, operation, task) {
|
|
69
|
+
return this.runMutation(physicalSheetId, operation, task);
|
|
70
|
+
}
|
|
71
|
+
async fastAppendRows(request) {
|
|
72
|
+
return this.runMutation(request.physicalSheetId, "fastAppendRows", () => this.inner.fastAppendRows(request));
|
|
73
|
+
}
|
|
74
|
+
async applyEffects(request) {
|
|
75
|
+
return this.runMutation(request.physicalSheetId, "applyEffects", () => this.inner.applyEffects(request));
|
|
76
|
+
}
|
|
77
|
+
async readEffectPostcondition(effect) {
|
|
78
|
+
return this.runMutation(effect.physicalSheetId, "readEffectPostcondition", () => this.inner.readEffectPostcondition(effect));
|
|
79
|
+
}
|
|
80
|
+
async readEffectPostconditions(request) {
|
|
81
|
+
return this.runMutation(request.physicalSheetId, "readEffectPostconditions", () => this.inner.readEffectPostconditions(request));
|
|
82
|
+
}
|
|
83
|
+
async ensureRowAnchors(request) {
|
|
84
|
+
return this.runMutation(request.physicalSheetId, "ensureRowAnchors", () => this.inner.ensureRowAnchors(request));
|
|
85
|
+
}
|
|
86
|
+
async observeSnapshot(request) {
|
|
87
|
+
return this.runMutation(request.physicalSheetId, "observeSnapshot", () => this.observeOneInner(request));
|
|
88
|
+
}
|
|
89
|
+
async observeSnapshots(requests) {
|
|
90
|
+
if (requests.length === 0)
|
|
91
|
+
return [];
|
|
92
|
+
const keys = distinctLaneKeys(requests.map((request) => this.resolveKey(request.physicalSheetId)));
|
|
93
|
+
return this.runInLanes(keys, "observeSnapshots", async () => {
|
|
94
|
+
if (isSyncSheetObservationBatchGateway(this.inner)) {
|
|
95
|
+
// Delegate the whole batch to the inner gateway so one remote request
|
|
96
|
+
// covers every requested projection; serializing one request at a time
|
|
97
|
+
// here would defeat that shared round trip.
|
|
98
|
+
return this.inner.observeSnapshots(requests);
|
|
99
|
+
}
|
|
100
|
+
const results = [];
|
|
101
|
+
for (const request of requests) {
|
|
102
|
+
// Sequential fallback for inner gateways without the batch capability;
|
|
103
|
+
// each request still runs under the already-held lanes.
|
|
104
|
+
// eslint-disable-next-line no-await-in-loop
|
|
105
|
+
results.push(await this.observeOneInner(request));
|
|
106
|
+
}
|
|
107
|
+
return results;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/** Lock-free snapshot read; never waits on the mutation lane. */
|
|
111
|
+
async readSnapshot(request) {
|
|
112
|
+
return this.inner.readSnapshot(request);
|
|
113
|
+
}
|
|
114
|
+
/** Lock-free values-only read; never waits on the mutation lane. */
|
|
115
|
+
async readRows(request) {
|
|
116
|
+
return this.inner.readRows(request);
|
|
117
|
+
}
|
|
118
|
+
/** Lock-free batched values-only read; never waits on the mutation lane. */
|
|
119
|
+
async readRowsBatch(requests) {
|
|
120
|
+
return this.inner.readRowsBatch(requests);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Observes one snapshot through the inner gateway, using its single-request
|
|
124
|
+
* capability when present and falling back to ensure+read otherwise. Both
|
|
125
|
+
* calls run inside the caller's already-held lane, so observation stays
|
|
126
|
+
* serialized against competing mutations.
|
|
127
|
+
*/
|
|
128
|
+
async observeOneInner(request) {
|
|
129
|
+
if (isSyncSheetObservationBatchGateway(this.inner)) {
|
|
130
|
+
return this.inner.observeSnapshot(request);
|
|
131
|
+
}
|
|
132
|
+
const anchors = await this.inner.ensureRowAnchors(request);
|
|
133
|
+
const snapshot = await this.inner.readSnapshot(request);
|
|
134
|
+
return { anchors, snapshot };
|
|
135
|
+
}
|
|
136
|
+
laneFor(key) {
|
|
137
|
+
let lane = this.lanes.get(key);
|
|
138
|
+
if (lane === undefined) {
|
|
139
|
+
lane = new AsyncMutex();
|
|
140
|
+
this.lanes.set(key, lane);
|
|
141
|
+
}
|
|
142
|
+
return lane;
|
|
143
|
+
}
|
|
144
|
+
async runMutation(physicalSheetId, operation, task) {
|
|
145
|
+
const key = this.resolveKey(physicalSheetId);
|
|
146
|
+
return this.runInLanes([key], operation, task);
|
|
147
|
+
}
|
|
148
|
+
async runInLanes(keys, operation, task) {
|
|
149
|
+
// Acquire lanes in stable sorted order so concurrent batch mutations cannot
|
|
150
|
+
// deadlock with each other regardless of input order. Each release token is
|
|
151
|
+
// held until the task settles so the lane stays locked for the whole call.
|
|
152
|
+
const ordered = [...keys].sort();
|
|
153
|
+
const queueStartedAt = this.now();
|
|
154
|
+
const releases = [];
|
|
155
|
+
try {
|
|
156
|
+
for (const key of ordered) {
|
|
157
|
+
const lane = this.laneFor(key);
|
|
158
|
+
// Acquire sequentially so the FIFO ordering holds across lanes.
|
|
159
|
+
// eslint-disable-next-line no-await-in-loop
|
|
160
|
+
releases.push(await lane.acquire());
|
|
161
|
+
}
|
|
162
|
+
const queueWaitMs = this.now() - queueStartedAt;
|
|
163
|
+
const remoteStartedAt = this.now();
|
|
164
|
+
try {
|
|
165
|
+
const result = await task();
|
|
166
|
+
this.emitSuccess(operation, ordered.join(","), queueWaitMs, remoteStartedAt);
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
this.emitFailure(operation, ordered.join(","), queueWaitMs, remoteStartedAt, error);
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
finally {
|
|
175
|
+
// Release in reverse acquisition order. Each token is idempotent, so an
|
|
176
|
+
// early return after a partial acquisition still frees what it holds.
|
|
177
|
+
for (let index = releases.length - 1; index >= 0; index -= 1) {
|
|
178
|
+
const release = releases[index];
|
|
179
|
+
if (release !== undefined)
|
|
180
|
+
release();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
emitSuccess(operation, laneKey, queueWaitMs, remoteStartedAt) {
|
|
185
|
+
this.emit({
|
|
186
|
+
operation,
|
|
187
|
+
laneKey,
|
|
188
|
+
queueWaitMs,
|
|
189
|
+
remoteDurationMs: Math.max(0, this.now() - remoteStartedAt),
|
|
190
|
+
outcome: TRANSPORT_OUTCOME_KINDS.SUCCESS,
|
|
191
|
+
httpStatus: "absent",
|
|
192
|
+
code: "absent",
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
emitFailure(operation, laneKey, queueWaitMs, remoteStartedAt, error) {
|
|
196
|
+
const outcome = classifyTransportOutcome(error);
|
|
197
|
+
this.emit({
|
|
198
|
+
operation,
|
|
199
|
+
laneKey,
|
|
200
|
+
queueWaitMs,
|
|
201
|
+
remoteDurationMs: Math.max(0, this.now() - remoteStartedAt),
|
|
202
|
+
outcome: outcome.kind,
|
|
203
|
+
httpStatus: outcome.httpStatus.kind === "present" ? "present" : "absent",
|
|
204
|
+
code: outcome.code.kind === "present" ? "present" : "absent",
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
emit(event) {
|
|
208
|
+
try {
|
|
209
|
+
this.onLaneEvent?.(event);
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
// Diagnostics must never change a remote result.
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const DEFAULT_LANE_KEY = "default";
|
|
217
|
+
/** Returns the distinct, sorted lane keys for one batch mutation. */
|
|
218
|
+
function distinctLaneKeys(keys) {
|
|
219
|
+
return [...new Set(keys)].sort();
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=CoordinatedSyncGateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CoordinatedSyncGateway.js","sourceRoot":"","sources":["../../../../../src/application/sync/gateway/coordinator/CoordinatedSyncGateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal FIFO async mutex used to serialize Gateway mutations.
|
|
3
|
+
*
|
|
4
|
+
* The coordinator owns one mutex per mutation lane. It is intentionally
|
|
5
|
+
* in-process only: SQLite outbox, leases, and receipts remain the durable
|
|
6
|
+
* authority. The mutex exists solely so the Node side never issues competing
|
|
7
|
+
* mutations (and competing Apps Script `ScriptLock` acquisitions) for the same
|
|
8
|
+
* spreadsheet within one process.
|
|
9
|
+
*
|
|
10
|
+
* Fairness is FIFO so an uncertain-recovery barrier cannot be starved by a
|
|
11
|
+
* steady stream of new mutations.
|
|
12
|
+
*/
|
|
13
|
+
export interface AsyncMutexMetrics {
|
|
14
|
+
/** Currently held by a mutation. */
|
|
15
|
+
readonly locked: boolean;
|
|
16
|
+
/** Mutations waiting for the lane. */
|
|
17
|
+
readonly queued: number;
|
|
18
|
+
/** Mutations completed (success or failure) since construction. */
|
|
19
|
+
readonly completed: number;
|
|
20
|
+
}
|
|
21
|
+
/** Releases one acquired lane. Safe to call at most once. */
|
|
22
|
+
export type AsyncMutexRelease = () => void;
|
|
23
|
+
/**
|
|
24
|
+
* A lockable, FIFO queue of deferred mutations.
|
|
25
|
+
*
|
|
26
|
+
* Serialization relies on a promise gate: the queue's tail resolves only when
|
|
27
|
+
* the current holder releases, so every subsequent acquirer waits for the
|
|
28
|
+
* previous holder rather than for the previous acquirer's microtask.
|
|
29
|
+
*/
|
|
30
|
+
export declare class AsyncMutex {
|
|
31
|
+
private tail;
|
|
32
|
+
private active;
|
|
33
|
+
private queueDepth;
|
|
34
|
+
private completedCount;
|
|
35
|
+
/**
|
|
36
|
+
* Runs `task` once the lane is acquired. The lane is released even when the
|
|
37
|
+
* task rejects, so a failing mutation never deadlocks the coordinator.
|
|
38
|
+
*/
|
|
39
|
+
run<T>(task: () => Promise<T>): Promise<T>;
|
|
40
|
+
/**
|
|
41
|
+
* Acquires the lane and resolves with a release token. The caller must call
|
|
42
|
+
* the returned release function exactly once, even on error, so the lane is
|
|
43
|
+
* never left locked. This is the path used for multi-lane batch mutations
|
|
44
|
+
* that must hold several lanes at once.
|
|
45
|
+
*/
|
|
46
|
+
acquire(): Promise<AsyncMutexRelease>;
|
|
47
|
+
/** Snapshot of queue depth and occupancy; diagnostic only. */
|
|
48
|
+
metrics(): AsyncMutexMetrics;
|
|
49
|
+
private release;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=asyncMutex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asyncMutex.d.ts","sourceRoot":"","sources":["../../../../../src/application/sync/gateway/coordinator/asyncMutex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,6DAA6D;AAC7D,MAAM,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC;AAE3C;;;;;;GAMG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,cAAc,CAAK;IAE3B;;;OAGG;IACU,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IASvD;;;;;OAKG;IACI,OAAO,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAgB5C,8DAA8D;IACvD,OAAO,IAAI,iBAAiB;IAQnC,OAAO,CAAC,OAAO;CAQhB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A lockable, FIFO queue of deferred mutations.
|
|
3
|
+
*
|
|
4
|
+
* Serialization relies on a promise gate: the queue's tail resolves only when
|
|
5
|
+
* the current holder releases, so every subsequent acquirer waits for the
|
|
6
|
+
* previous holder rather than for the previous acquirer's microtask.
|
|
7
|
+
*/
|
|
8
|
+
export class AsyncMutex {
|
|
9
|
+
tail = Promise.resolve();
|
|
10
|
+
active = false;
|
|
11
|
+
queueDepth = 0;
|
|
12
|
+
completedCount = 0;
|
|
13
|
+
/**
|
|
14
|
+
* Runs `task` once the lane is acquired. The lane is released even when the
|
|
15
|
+
* task rejects, so a failing mutation never deadlocks the coordinator.
|
|
16
|
+
*/
|
|
17
|
+
async run(task) {
|
|
18
|
+
const release = await this.acquire();
|
|
19
|
+
try {
|
|
20
|
+
return await task();
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
release();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Acquires the lane and resolves with a release token. The caller must call
|
|
28
|
+
* the returned release function exactly once, even on error, so the lane is
|
|
29
|
+
* never left locked. This is the path used for multi-lane batch mutations
|
|
30
|
+
* that must hold several lanes at once.
|
|
31
|
+
*/
|
|
32
|
+
acquire() {
|
|
33
|
+
this.queueDepth += 1;
|
|
34
|
+
const previous = this.tail;
|
|
35
|
+
let gate;
|
|
36
|
+
const next = new Promise((resolve) => {
|
|
37
|
+
gate = resolve;
|
|
38
|
+
});
|
|
39
|
+
this.tail = next;
|
|
40
|
+
// The previous tail resolves when the prior holder releases; only then is
|
|
41
|
+
// this acquirer allowed to mark the lane active and run.
|
|
42
|
+
return previous.then(() => {
|
|
43
|
+
this.active = true;
|
|
44
|
+
return () => this.release(gate);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/** Snapshot of queue depth and occupancy; diagnostic only. */
|
|
48
|
+
metrics() {
|
|
49
|
+
return {
|
|
50
|
+
locked: this.active,
|
|
51
|
+
queued: Math.max(0, this.queueDepth - (this.active ? 1 : 0)),
|
|
52
|
+
completed: this.completedCount,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
release(gate) {
|
|
56
|
+
if (!this.active)
|
|
57
|
+
return;
|
|
58
|
+
this.active = false;
|
|
59
|
+
this.queueDepth = Math.max(0, this.queueDepth - 1);
|
|
60
|
+
this.completedCount += 1;
|
|
61
|
+
// Resolve the gate so the next FIFO waiter proceeds.
|
|
62
|
+
gate();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=asyncMutex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asyncMutex.js","sourceRoot":"","sources":["../../../../../src/application/sync/gateway/coordinator/asyncMutex.ts"],"names":[],"mappings":"AAwBA;;;;;;GAMG;AACH,MAAM,OAAO,UAAU;IACb,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACxC,MAAM,GAAG,KAAK,CAAC;IACf,UAAU,GAAG,CAAC,CAAC;IACf,cAAc,GAAG,CAAC,CAAC;IAE3B;;;OAGG;IACI,KAAK,CAAC,GAAG,CAAI,IAAsB;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,EAAE,CAAC;QACtB,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,OAAO;QACZ,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,IAAgB,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACzC,IAAI,GAAG,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,0EAA0E;QAC1E,yDAAyD;QACzD,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8DAA8D;IACvD,OAAO;QACZ,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,SAAS,EAAE,IAAI,CAAC,cAAc;SAC/B,CAAC;IACJ,CAAC;IAEO,OAAO,CAAC,IAAgB;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;QACzB,qDAAqD;QACrD,IAAI,EAAE,CAAC;IACT,CAAC;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry contract for the per-spreadsheet Gateway coordinator.
|
|
3
|
+
*
|
|
4
|
+
* Lane events are diagnostic only: a sink failure must never change gateway
|
|
5
|
+
* behavior. The fields are deliberately redacted — no signed payload, secret,
|
|
6
|
+
* or operation arguments are recorded.
|
|
7
|
+
*/
|
|
8
|
+
import { TRANSPORT_OUTCOME_KINDS, type TransportOutcomeKind } from "../transportClassification.js";
|
|
9
|
+
export { TRANSPORT_OUTCOME_KINDS };
|
|
10
|
+
export type { TransportOutcomeKind };
|
|
11
|
+
/** One observed mutation lane event emitted by the coordinator. */
|
|
12
|
+
export interface CoordinatorLaneEvent {
|
|
13
|
+
/** Operation name (no arguments). */
|
|
14
|
+
readonly operation: string;
|
|
15
|
+
/** Lane key(s) involved; multiple keys are comma-joined in sorted order. */
|
|
16
|
+
readonly laneKey: string;
|
|
17
|
+
/** Time spent waiting for the lane before dispatch. */
|
|
18
|
+
readonly queueWaitMs: number;
|
|
19
|
+
/** Wall-clock duration of the remote call once the lane was held. */
|
|
20
|
+
readonly remoteDurationMs: number;
|
|
21
|
+
/** Classified transport outcome for the dispatch. */
|
|
22
|
+
readonly outcome: TransportOutcomeKind;
|
|
23
|
+
/** Whether an HTTP status was observed. */
|
|
24
|
+
readonly httpStatus: "present" | "absent";
|
|
25
|
+
/** Whether a stable client/remote code was observed. */
|
|
26
|
+
readonly code: "present" | "absent";
|
|
27
|
+
}
|
|
28
|
+
/** Convenience type alias used by call sites that only need the event shape. */
|
|
29
|
+
export type CoordinatorLaneSink = (event: CoordinatorLaneEvent) => void;
|
|
30
|
+
/** Marker used so callers can type an absent presence without importing state. */
|
|
31
|
+
//# sourceMappingURL=coordinatorTelemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinatorTelemetry.d.ts","sourceRoot":"","sources":["../../../../../src/application/sync/gateway/coordinator/coordinatorTelemetry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAEnG,OAAO,EAAE,uBAAuB,EAAE,CAAC;AACnC,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,2CAA2C;IAC3C,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC1C,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;CACrC;AAED,gFAAgF;AAChF,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;AAExE,kFAAkF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry contract for the per-spreadsheet Gateway coordinator.
|
|
3
|
+
*
|
|
4
|
+
* Lane events are diagnostic only: a sink failure must never change gateway
|
|
5
|
+
* behavior. The fields are deliberately redacted — no signed payload, secret,
|
|
6
|
+
* or operation arguments are recorded.
|
|
7
|
+
*/
|
|
8
|
+
import { TRANSPORT_OUTCOME_KINDS } from "../transportClassification.js";
|
|
9
|
+
export { TRANSPORT_OUTCOME_KINDS };
|
|
10
|
+
/** Marker used so callers can type an absent presence without importing state. */
|
|
11
|
+
// Presence is re-exported through transportClassification's redacted fields,
|
|
12
|
+
// so this file does not need to import the shared state types directly.
|
|
13
|
+
//# sourceMappingURL=coordinatorTelemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinatorTelemetry.js","sourceRoot":"","sources":["../../../../../src/application/sync/gateway/coordinator/coordinatorTelemetry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,uBAAuB,EAA6B,MAAM,+BAA+B,CAAC;AAEnG,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAwBnC,kFAAkF;AAClF,6EAA6E;AAC7E,wEAAwE"}
|
|
@@ -13,6 +13,11 @@ import { type SyncGatewayEffectResultStatus, type SyncGatewayFastAppendStatus, t
|
|
|
13
13
|
import type { SyncGatewayTiming } from "../telemetry/syncTiming.js";
|
|
14
14
|
/** Projections supported by the v1 sync gateway. */
|
|
15
15
|
export type SyncProjection = RegisteredProjection;
|
|
16
|
+
/** Remote epoch/token evidence carried by internal mutating gateway calls. */
|
|
17
|
+
export interface SyncGatewayAuthority {
|
|
18
|
+
readonly epoch: number;
|
|
19
|
+
readonly token: string;
|
|
20
|
+
}
|
|
16
21
|
/** Effect classes whose compare-and-set behavior differs at the gateway. */
|
|
17
22
|
export type SyncEffectKind = EffectKind;
|
|
18
23
|
/** Literal/formula metadata retained by a normalized Sheet snapshot. */
|
|
@@ -47,6 +52,7 @@ export interface SyncGatewaySnapshot {
|
|
|
47
52
|
/** Request used to assign missing Developer Metadata anchors before a snapshot. */
|
|
48
53
|
export interface EnsureSyncRowAnchorsRequest {
|
|
49
54
|
readonly physicalSheetId: string;
|
|
55
|
+
readonly authority?: SyncGatewayAuthority;
|
|
50
56
|
readonly sheetName: string;
|
|
51
57
|
readonly registeredRange: string;
|
|
52
58
|
readonly projection: SyncProjection;
|
|
@@ -132,6 +138,7 @@ export interface SyncGatewayEffectResult {
|
|
|
132
138
|
/** Gateway batch request. All effects must target the same physical sheet. */
|
|
133
139
|
export interface ApplySyncEffectsRequest {
|
|
134
140
|
readonly physicalSheetId: string;
|
|
141
|
+
readonly authority?: SyncGatewayAuthority;
|
|
135
142
|
readonly sheetName: string;
|
|
136
143
|
readonly registeredRange: string;
|
|
137
144
|
readonly projection: SyncProjection;
|
|
@@ -158,6 +165,8 @@ export interface SyncEffectPostcondition {
|
|
|
158
165
|
readonly visibleRevision: Presence<number>;
|
|
159
166
|
readonly visibleHash: Presence<string>;
|
|
160
167
|
readonly snapshotHash: Presence<string>;
|
|
168
|
+
/** Stable diagnostic reason for terminal or manual-repair classifications. */
|
|
169
|
+
readonly reason?: string;
|
|
161
170
|
}
|
|
162
171
|
/** One effect identity paired with its read-back result in a recovery batch. */
|
|
163
172
|
export interface SyncGatewayEffectPostconditionResult {
|
|
@@ -165,15 +174,18 @@ export interface SyncGatewayEffectPostconditionResult {
|
|
|
165
174
|
readonly payloadHash: string;
|
|
166
175
|
readonly postcondition: SyncEffectPostcondition;
|
|
167
176
|
}
|
|
168
|
-
/** One row written through the
|
|
177
|
+
/** One row written through the append-only bulk path.
|
|
169
178
|
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
179
|
+
* The payload hash lets the Gateway receipt sheet recognize a response-loss
|
|
180
|
+
* replay without appending the same durable effect twice. The optional shape
|
|
181
|
+
* keeps older direct adapter fixtures source-compatible; worker-produced rows
|
|
182
|
+
* always carry the SQLite outbox payload hash.
|
|
174
183
|
*/
|
|
175
184
|
export interface FastAppendRow {
|
|
176
185
|
readonly effectId: string;
|
|
186
|
+
readonly payloadHash?: string;
|
|
187
|
+
/** Developer-metadata row anchor written in the same Sheets batch. */
|
|
188
|
+
readonly anchor?: string;
|
|
177
189
|
readonly fields: Readonly<Record<string, NormalizedCell>>;
|
|
178
190
|
}
|
|
179
191
|
/** Per-effect result for one fast-append row. */
|
|
@@ -181,10 +193,14 @@ export interface FastAppendRowResult {
|
|
|
181
193
|
readonly effectId: string;
|
|
182
194
|
/** The row was included in the gateway's bulk write. */
|
|
183
195
|
readonly status: SyncGatewayFastAppendStatus;
|
|
196
|
+
/** Receipt-backed evidence returned by the gateway append operation. */
|
|
197
|
+
readonly visibleHash?: string;
|
|
198
|
+
readonly visibleRevision?: number;
|
|
184
199
|
}
|
|
185
|
-
/** Bounded
|
|
200
|
+
/** Bounded idempotent append request for one registered projection sheet. */
|
|
186
201
|
export interface FastAppendRowsRequest {
|
|
187
202
|
readonly physicalSheetId: string;
|
|
203
|
+
readonly authority?: SyncGatewayAuthority;
|
|
188
204
|
readonly sheetName: string;
|
|
189
205
|
readonly registeredRange: string;
|
|
190
206
|
readonly projection: SyncProjection;
|
|
@@ -202,6 +218,7 @@ export interface FastAppendRowsResult {
|
|
|
202
218
|
/** Request used to classify several response-loss effects with one Sheet read. */
|
|
203
219
|
export interface ReadSyncEffectPostconditionsRequest {
|
|
204
220
|
readonly physicalSheetId: string;
|
|
221
|
+
readonly authority?: SyncGatewayAuthority;
|
|
205
222
|
readonly sheetName: string;
|
|
206
223
|
readonly registeredRange: string;
|
|
207
224
|
readonly projection: SyncProjection;
|
|
@@ -231,6 +248,7 @@ export interface SyncSheetObservationGateway {
|
|
|
231
248
|
/** Request for a lightweight table read used by simple polling. */
|
|
232
249
|
export interface ReadSyncTableRowsRequest {
|
|
233
250
|
readonly physicalSheetId: string;
|
|
251
|
+
readonly authority?: SyncGatewayAuthority;
|
|
234
252
|
readonly sheetName: string;
|
|
235
253
|
readonly registeredRange: string;
|
|
236
254
|
readonly projection: SyncProjection;
|
|
@@ -255,6 +273,8 @@ export interface SyncSheetTableReaderGateway {
|
|
|
255
273
|
readRows(request: ReadSyncTableRowsRequest): Promise<SyncTableRowsResult>;
|
|
256
274
|
readRowsBatch(requests: readonly ReadSyncTableRowsRequest[]): Promise<readonly SyncTableRowsResult[]>;
|
|
257
275
|
}
|
|
276
|
+
/** Returns whether a full observation gateway also exposes the values-only reader. */
|
|
277
|
+
export declare function isSyncSheetTableReaderGateway(gateway: SyncSheetObservationGateway): gateway is SyncSheetObservationGateway & SyncSheetTableReaderGateway;
|
|
258
278
|
/**
|
|
259
279
|
* Full gateway boundary used by observation and reconciliation.
|
|
260
280
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncGateway.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/gateway/syncGateway.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"syncGateway.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/gateway/syncGateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,13 @@ export async function observeSyncSnapshots(gateway, requests) {
|
|
|
41
41
|
}
|
|
42
42
|
return results;
|
|
43
43
|
}
|
|
44
|
+
/** Returns whether a full observation gateway also exposes the values-only reader. */
|
|
45
|
+
export function isSyncSheetTableReaderGateway(gateway) {
|
|
46
|
+
return "readRows" in gateway &&
|
|
47
|
+
typeof gateway.readRows === "function" &&
|
|
48
|
+
"readRowsBatch" in gateway &&
|
|
49
|
+
typeof gateway.readRowsBatch === "function";
|
|
50
|
+
}
|
|
44
51
|
/**
|
|
45
52
|
* Combines the low-latency append path with the full observation path.
|
|
46
53
|
*
|
|
@@ -91,7 +98,8 @@ export class SplitSyncGateway {
|
|
|
91
98
|
/** Computes the stable visible-state hash shared by fake and real gateways. */
|
|
92
99
|
export function computeSyncVisibleHash(fields) {
|
|
93
100
|
const entries = Object.entries(fields)
|
|
94
|
-
|
|
101
|
+
// Apps Script's operation sources use the same UTF-16 code-unit order.
|
|
102
|
+
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
|
|
95
103
|
.map(([fieldName, value]) => ({ fieldName, value }));
|
|
96
104
|
return stableHash({ fields: entries });
|
|
97
105
|
}
|
|
@@ -153,7 +161,7 @@ export function serializeSyncProjectionEffectPayload(payload) {
|
|
|
153
161
|
registeredRange: checked.registeredRange,
|
|
154
162
|
schemaVersion: checked.schemaVersion,
|
|
155
163
|
targetAnchor: checked.targetAnchor,
|
|
156
|
-
fields: Object.fromEntries(Object.entries(checked.fields).sort(([a], [b]) => a
|
|
164
|
+
fields: Object.fromEntries(Object.entries(checked.fields).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))),
|
|
157
165
|
targetVisibleHash: checked.targetVisibleHash,
|
|
158
166
|
createIfMissing: checked.createIfMissing,
|
|
159
167
|
expectedCandidateHash: toNullableCandidateHash(checked.expectedCandidateHash),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncGateway.js","sourceRoot":"","sources":["../../../../src/application/sync/gateway/syncGateway.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,UAAU,GAKX,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,GACT,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EACL,eAAe,EACf,kBAAkB,GACnB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,8BAA8B,CAAC;AAUtC,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qCAAqC,EACrC,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"syncGateway.js","sourceRoot":"","sources":["../../../../src/application/sync/gateway/syncGateway.ts"],"names":[],"mappings":"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"}
|