@rocicorp/zero 1.12.0-canary.5 → 1.12.0-canary.7
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/out/replicache/src/btree/node.js +1 -1
- package/out/replicache/src/deleted-clients.d.ts.map +1 -1
- package/out/replicache/src/deleted-clients.js +2 -1
- package/out/replicache/src/deleted-clients.js.map +1 -1
- package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
- package/out/replicache/src/kv/sqlite-store.js +7 -3
- package/out/replicache/src/kv/sqlite-store.js.map +1 -1
- package/out/replicache/src/replicache-impl.d.ts.map +1 -1
- package/out/replicache/src/replicache-impl.js +17 -14
- package/out/replicache/src/replicache-impl.js.map +1 -1
- package/out/z2s/src/compiler.js +3 -3
- package/out/z2s/src/compiler.js.map +1 -1
- package/out/zero/package.js +11 -11
- package/out/zero/package.js.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.js +9 -2
- package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +2 -2
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +33 -9
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-restore.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source-init.js +49 -24
- package/out/zero-cache/src/services/change-source/pg/change-source-init.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.js +64 -7
- package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/fork-request.js +54 -0
- package/out/zero-cache/src/services/change-source/pg/fork-request.js.map +1 -0
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js +6 -0
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts +3 -0
- package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/status.js +2 -1
- package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js +6 -6
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js +55 -20
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +27 -8
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js +80 -11
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/replica-poller.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/server-start-metrics.js +42 -0
- package/out/zero-cache/src/services/change-streamer/server-start-metrics.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/subscriber.js +5 -4
- package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +1 -2
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +19 -2
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-client/src/client/version.js +1 -1
- package/out/zero-protocol/src/ast.d.ts.map +1 -1
- package/out/zero-protocol/src/ast.js +2 -1
- package/out/zero-protocol/src/ast.js.map +1 -1
- package/out/zero-protocol/src/down.d.ts +27 -27
- package/out/zero-protocol/src/inspect-down.d.ts +81 -81
- package/out/zero-protocol/src/up.d.ts +60 -60
- package/package.json +11 -11
- package/out/shared/src/cache.d.ts +0 -22
- package/out/shared/src/cache.d.ts.map +0 -1
- package/out/shared/src/custom-key-map.d.ts +0 -26
- package/out/shared/src/custom-key-map.d.ts.map +0 -1
- package/out/shared/src/custom-key-set.d.ts +0 -25
- package/out/shared/src/custom-key-set.d.ts.map +0 -1
- package/out/shared/src/logging-test-utils.d.ts +0 -12
- package/out/shared/src/logging-test-utils.d.ts.map +0 -1
- package/out/shared/src/queue.d.ts +0 -53
- package/out/shared/src/queue.d.ts.map +0 -1
- package/out/shared/src/ring-buffer.d.ts +0 -42
- package/out/shared/src/ring-buffer.d.ts.map +0 -1
- package/out/shared/src/sorted-entries.d.ts +0 -2
- package/out/shared/src/sorted-entries.d.ts.map +0 -1
- package/out/zero/src/server/change-streamer.d.ts +0 -2
- package/out/zero/src/server/change-streamer.d.ts.map +0 -1
- package/out/zero/src/server/main.d.ts +0 -2
- package/out/zero/src/server/main.d.ts.map +0 -1
- package/out/zero/src/server/reaper.d.ts +0 -2
- package/out/zero/src/server/reaper.d.ts.map +0 -1
- package/out/zero/src/server/replicator.d.ts +0 -2
- package/out/zero/src/server/replicator.d.ts.map +0 -1
- package/out/zero/src/server/syncer.d.ts +0 -2
- package/out/zero/src/server/syncer.d.ts.map +0 -1
- package/out/zero-cache/src/auth/jwt.d.ts +0 -12
- package/out/zero-cache/src/auth/jwt.d.ts.map +0 -1
- package/out/zero-cache/src/auth/load-permissions.d.ts +0 -17
- package/out/zero-cache/src/auth/load-permissions.d.ts.map +0 -1
- package/out/zero-cache/src/auth/write-authorizer.d.ts +0 -28
- package/out/zero-cache/src/auth/write-authorizer.d.ts.map +0 -1
- package/out/zero-cache/src/config/server-context.d.ts +0 -16
- package/out/zero-cache/src/config/server-context.d.ts.map +0 -1
- package/out/zero-cache/src/custom/fetch.d.ts +0 -38
- package/out/zero-cache/src/custom/fetch.d.ts.map +0 -1
- package/out/zero-cache/src/custom/metrics.d.ts +0 -31
- package/out/zero-cache/src/custom/metrics.d.ts.map +0 -1
- package/out/zero-cache/src/custom-queries/transform-query.d.ts +0 -68
- package/out/zero-cache/src/custom-queries/transform-query.d.ts.map +0 -1
- package/out/zero-cache/src/db/create.d.ts +0 -12
- package/out/zero-cache/src/db/create.d.ts.map +0 -1
- package/out/zero-cache/src/db/delete-lite-db.d.ts +0 -2
- package/out/zero-cache/src/db/delete-lite-db.d.ts.map +0 -1
- package/out/zero-cache/src/db/index-predicate.d.ts +0 -4
- package/out/zero-cache/src/db/index-predicate.d.ts.map +0 -1
- package/out/zero-cache/src/db/migration-lite.d.ts +0 -78
- package/out/zero-cache/src/db/migration-lite.d.ts.map +0 -1
- package/out/zero-cache/src/db/migration.d.ts +0 -80
- package/out/zero-cache/src/db/migration.d.ts.map +0 -1
- package/out/zero-cache/src/db/pg-copy-binary.d.ts +0 -101
- package/out/zero-cache/src/db/pg-copy-binary.d.ts.map +0 -1
- package/out/zero-cache/src/db/pg-copy.d.ts +0 -30
- package/out/zero-cache/src/db/pg-copy.d.ts.map +0 -1
- package/out/zero-cache/src/db/pg-type-parser.d.ts +0 -15
- package/out/zero-cache/src/db/pg-type-parser.d.ts.map +0 -1
- package/out/zero-cache/src/db/transaction-pool.d.ts +0 -205
- package/out/zero-cache/src/db/transaction-pool.d.ts.map +0 -1
- package/out/zero-cache/src/db/warmup.d.ts +0 -4
- package/out/zero-cache/src/db/warmup.d.ts.map +0 -1
- package/out/zero-cache/src/observability/events.d.ts +0 -15
- package/out/zero-cache/src/observability/events.d.ts.map +0 -1
- package/out/zero-cache/src/observability/log-throttle.d.ts +0 -44
- package/out/zero-cache/src/observability/log-throttle.d.ts.map +0 -1
- package/out/zero-cache/src/server/anonymous-otel-start.d.ts +0 -21
- package/out/zero-cache/src/server/anonymous-otel-start.d.ts.map +0 -1
- package/out/zero-cache/src/server/change-streamer.d.ts +0 -3
- package/out/zero-cache/src/server/change-streamer.d.ts.map +0 -1
- package/out/zero-cache/src/server/inspector-delegate.d.ts +0 -71
- package/out/zero-cache/src/server/inspector-delegate.d.ts.map +0 -1
- package/out/zero-cache/src/server/main.d.ts +0 -3
- package/out/zero-cache/src/server/main.d.ts.map +0 -1
- package/out/zero-cache/src/server/otel-diag-logger.d.ts +0 -16
- package/out/zero-cache/src/server/otel-diag-logger.d.ts.map +0 -1
- package/out/zero-cache/src/server/otel-start.d.ts +0 -3
- package/out/zero-cache/src/server/otel-start.d.ts.map +0 -1
- package/out/zero-cache/src/server/priority-op.d.ts +0 -8
- package/out/zero-cache/src/server/priority-op.d.ts.map +0 -1
- package/out/zero-cache/src/server/reaper.d.ts +0 -3
- package/out/zero-cache/src/server/reaper.d.ts.map +0 -1
- package/out/zero-cache/src/server/replicator.d.ts +0 -10
- package/out/zero-cache/src/server/replicator.d.ts.map +0 -1
- package/out/zero-cache/src/server/slot-keeper.d.ts +0 -26
- package/out/zero-cache/src/server/slot-keeper.d.ts.map +0 -1
- package/out/zero-cache/src/server/syncer-assigner.d.ts +0 -14
- package/out/zero-cache/src/server/syncer-assigner.d.ts.map +0 -1
- package/out/zero-cache/src/server/syncer.d.ts +0 -3
- package/out/zero-cache/src/server/syncer.d.ts.map +0 -1
- package/out/zero-cache/src/server/worker-dispatcher.d.ts +0 -17
- package/out/zero-cache/src/server/worker-dispatcher.d.ts.map +0 -1
- package/out/zero-cache/src/services/analyze.d.ts +0 -9
- package/out/zero-cache/src/services/analyze.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/change-source.d.ts +0 -32
- package/out/zero-cache/src/services/change-source/change-source.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.d.ts +0 -57
- package/out/zero-cache/src/services/change-source/common/backfill-manager.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.d.ts +0 -55
- package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/common/init-cleanup.d.ts +0 -24
- package/out/zero-cache/src/services/change-source/common/init-cleanup.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts +0 -115
- package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts +0 -14
- package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.d.ts +0 -25
- package/out/zero-cache/src/services/change-source/custom/change-source.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-metadata.d.ts +0 -14
- package/out/zero-cache/src/services/change-source/pg/backfill-metadata.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.d.ts +0 -36
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/change-source-init.d.ts +0 -65
- package/out/zero-cache/src/services/change-source/pg/change-source-init.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +0 -115
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +0 -155
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts +0 -17
- package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.d.ts +0 -28
- package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.d.ts +0 -76
- package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts +0 -169
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.d.ts +0 -16
- package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slot-health.d.ts +0 -15
- package/out/zero-cache/src/services/change-source/pg/replication-slot-health.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts +0 -127
- package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts +0 -9
- package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/protocol/backfill-progress.d.ts +0 -68
- package/out/zero-cache/src/services/change-source/protocol/backfill-progress.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.d.ts +0 -72
- package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/backfill-state.d.ts +0 -50
- package/out/zero-cache/src/services/change-streamer/backfill-state.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts +0 -14
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts +0 -18
- package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/broadcast.d.ts +0 -98
- package/out/zero-cache/src/services/change-streamer/broadcast.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-log-codec.d.ts +0 -34
- package/out/zero-cache/src/services/change-streamer/change-log-codec.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.d.ts +0 -34
- package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.d.ts +0 -158
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.d.ts +0 -19
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +0 -78
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +0 -143
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +0 -586
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/drain-tracker.d.ts +0 -24
- package/out/zero-cache/src/services/change-streamer/drain-tracker.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/error-type-enum.d.ts +0 -15
- package/out/zero-cache/src/services/change-streamer/error-type-enum.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +0 -49
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.d.ts +0 -53
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.d.ts +0 -88
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/replica-poller.d.ts +0 -15
- package/out/zero-cache/src/services/change-streamer/replica-poller.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/restore-admission.d.ts +0 -243
- package/out/zero-cache/src/services/change-streamer/restore-admission.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.d.ts +0 -6
- package/out/zero-cache/src/services/change-streamer/schema/init.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +0 -152
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/shard-sampling.d.ts +0 -11
- package/out/zero-cache/src/services/change-streamer/shard-sampling.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-message.d.ts +0 -92
- package/out/zero-cache/src/services/change-streamer/snapshot-message.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts +0 -36
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/snapshot.d.ts +0 -22
- package/out/zero-cache/src/services/change-streamer/snapshot.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts +0 -99
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.d.ts +0 -83
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.d.ts +0 -121
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.d.ts +0 -73
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts +0 -62
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.d.ts +0 -114
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/storer.d.ts +0 -276
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/subscribe.d.ts +0 -485
- package/out/zero-cache/src/services/change-streamer/subscribe.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +0 -194
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/upstream-acker.d.ts +0 -52
- package/out/zero-cache/src/services/change-streamer/upstream-acker.d.ts.map +0 -1
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.d.ts +0 -57
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/commands.d.ts +0 -77
- package/out/zero-cache/src/services/litestream/commands.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/litestream-controller.d.ts +0 -78
- package/out/zero-cache/src/services/litestream/litestream-controller.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/metrics.d.ts +0 -31
- package/out/zero-cache/src/services/litestream/metrics.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/restore-progress.d.ts +0 -24
- package/out/zero-cache/src/services/litestream/restore-progress.d.ts.map +0 -1
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts +0 -40
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +0 -1
- package/out/zero-cache/src/services/mutagen/pusher.d.ts +0 -63
- package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/change-log-db.d.ts +0 -368
- package/out/zero-cache/src/services/replicator/change-log-db.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.d.ts +0 -56
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/change-processor.d.ts +0 -37
- package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/drain-handler.d.ts +0 -82
- package/out/zero-cache/src/services/replicator/drain-handler.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +0 -25
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/notifier.d.ts +0 -9
- package/out/zero-cache/src/services/replicator/notifier.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/replication-status.d.ts +0 -71
- package/out/zero-cache/src/services/replicator/replication-status.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/replicator.d.ts +0 -86
- package/out/zero-cache/src/services/replicator/replicator.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts +0 -55
- package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts +0 -132
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.d.ts +0 -120
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/write-worker-client.d.ts +0 -111
- package/out/zero-cache/src/services/replicator/write-worker-client.d.ts.map +0 -1
- package/out/zero-cache/src/services/run-ast.d.ts +0 -39
- package/out/zero-cache/src/services/run-ast.d.ts.map +0 -1
- package/out/zero-cache/src/services/runner.d.ts +0 -19
- package/out/zero-cache/src/services/runner.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts +0 -17
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/advancement-metrics.d.ts +0 -26
- package/out/zero-cache/src/services/view-syncer/advancement-metrics.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/batch-pacer.d.ts +0 -79
- package/out/zero-cache/src/services/view-syncer/batch-pacer.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +0 -97
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/client-schema.d.ts +0 -18
- package/out/zero-cache/src/services/view-syncer/client-schema.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/connection-context-manager.d.ts +0 -184
- package/out/zero-cache/src/services/view-syncer/connection-context-manager.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts +0 -22
- package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +0 -128
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts +0 -294
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.d.ts +0 -81
- package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts +0 -45
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.d.ts +0 -53
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/hydration-budget.d.ts +0 -33
- package/out/zero-cache/src/services/view-syncer/hydration-budget.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.d.ts +0 -51
- package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts +0 -34
- package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +0 -296
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/plan-warnings.d.ts +0 -7
- package/out/zero-cache/src/services/view-syncer/plan-warnings.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/push-cost.d.ts +0 -132
- package/out/zero-cache/src/services/view-syncer/push-cost.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/push-cutoff.d.ts +0 -55
- package/out/zero-cache/src/services/view-syncer/push-cutoff.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/query-covering.d.ts +0 -28
- package/out/zero-cache/src/services/view-syncer/query-covering.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/query-shape.d.ts +0 -25
- package/out/zero-cache/src/services/view-syncer/query-shape.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/query-stats.d.ts +0 -89
- package/out/zero-cache/src/services/view-syncer/query-stats.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts +0 -90
- package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/row-set-signature.d.ts +0 -17
- package/out/zero-cache/src/services/view-syncer/row-set-signature.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts +0 -86
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.d.ts +0 -5
- package/out/zero-cache/src/services/view-syncer/schema/init.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +0 -563
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.d.ts +0 -95
- package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +0 -420
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/tracer.d.ts +0 -2
- package/out/zero-cache/src/services/view-syncer/tracer.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/ttl-clock.d.ts +0 -10
- package/out/zero-cache/src/services/view-syncer/ttl-clock.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +0 -133
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +0 -1
- package/out/zero-cache/src/types/downstream.d.ts +0 -11
- package/out/zero-cache/src/types/downstream.d.ts.map +0 -1
- package/out/zero-cache/src/types/error-with-level.d.ts +0 -9
- package/out/zero-cache/src/types/error-with-level.d.ts.map +0 -1
- package/out/zero-cache/src/types/pg-patch.d.ts +0 -21
- package/out/zero-cache/src/types/pg-patch.d.ts.map +0 -1
- package/out/zero-cache/src/types/pg-versions.d.ts +0 -3
- package/out/zero-cache/src/types/pg-versions.d.ts.map +0 -1
- package/out/zero-cache/src/types/poke-chunk.d.ts +0 -18
- package/out/zero-cache/src/types/poke-chunk.d.ts.map +0 -1
- package/out/zero-cache/src/types/streams.d.ts +0 -115
- package/out/zero-cache/src/types/streams.d.ts.map +0 -1
- package/out/zero-cache/src/types/subscription.d.ts +0 -197
- package/out/zero-cache/src/types/subscription.d.ts.map +0 -1
- package/out/zero-cache/src/workers/connect-params.d.ts +0 -28
- package/out/zero-cache/src/workers/connect-params.d.ts.map +0 -1
- package/out/zero-cache/src/workers/connection.d.ts +0 -77
- package/out/zero-cache/src/workers/connection.d.ts.map +0 -1
- package/out/zero-cache/src/workers/replicator.d.ts +0 -57
- package/out/zero-cache/src/workers/replicator.d.ts.map +0 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts +0 -14
- package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +0 -1
- package/out/zero-cache/src/workers/syncer.d.ts +0 -67
- package/out/zero-cache/src/workers/syncer.d.ts.map +0 -1
- package/out/zero-events/src/index.d.ts +0 -27
- package/out/zero-events/src/index.d.ts.map +0 -1
- package/out/zero-events/src/json.d.ts +0 -20
- package/out/zero-events/src/json.d.ts.map +0 -1
- package/out/zero-events/src/status.d.ts +0 -144
- package/out/zero-events/src/status.d.ts.map +0 -1
- package/out/zqlite/src/database-storage.d.ts +0 -43
- package/out/zqlite/src/database-storage.d.ts.map +0 -1
- package/out/zqlite/src/explain-queries.d.ts +0 -4
- package/out/zqlite/src/explain-queries.d.ts.map +0 -1
- package/out/zqlite/src/internal/sql-inline.d.ts +0 -13
- package/out/zqlite/src/internal/sql-inline.d.ts.map +0 -1
- package/out/zqlite/src/resolve-scalar-subqueries.d.ts +0 -72
- package/out/zqlite/src/resolve-scalar-subqueries.d.ts.map +0 -1
- package/out/zqlite/src/sqlite-cost-model.d.ts +0 -17
- package/out/zqlite/src/sqlite-cost-model.d.ts.map +0 -1
- package/out/zqlite/src/sqlite-stat-fanout.d.ts +0 -121
- package/out/zqlite/src/sqlite-stat-fanout.d.ts.map +0 -1
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { LogContext } from '@rocicorp/logger';
|
|
2
|
-
import type { Status, WatermarkedChange } from './change-streamer.ts';
|
|
3
|
-
import type { Subscriber } from './subscriber.ts';
|
|
4
|
-
export type ProgressMonitorOptions = {
|
|
5
|
-
flowControlConsensusTimeoutProportion: number;
|
|
6
|
-
flowControlSlowSubscriberGracePeriodMs?: number | undefined;
|
|
7
|
-
setTimeoutFn?: typeof setTimeout | undefined;
|
|
8
|
-
clearTimeoutFn?: typeof clearTimeout | undefined;
|
|
9
|
-
};
|
|
10
|
-
export declare class Forwarder {
|
|
11
|
-
#private;
|
|
12
|
-
constructor(lc: LogContext, opts?: ProgressMonitorOptions);
|
|
13
|
-
startProgressMonitor(): void;
|
|
14
|
-
/**
|
|
15
|
-
* Runs one progress-monitor tick: samples each active subscriber's change
|
|
16
|
-
* rate, logs slow broadcasts, and disconnects subscribers that have been
|
|
17
|
-
* continuously lagging for longer than the configured grace period.
|
|
18
|
-
*
|
|
19
|
-
* Invoked on an interval by {@link startProgressMonitor()}; exposed (rather
|
|
20
|
-
* than private) so tests can drive a single tick with an explicit `now`.
|
|
21
|
-
*/
|
|
22
|
-
checkSubscriberProgress(now: number): void;
|
|
23
|
-
stopProgressMonitor(): void;
|
|
24
|
-
/**
|
|
25
|
-
* `add()` is called in lock step with `Storer.catchup()` so that the
|
|
26
|
-
* two components have an equivalent interpretation of whether a Transaction is
|
|
27
|
-
* currently being streamed.
|
|
28
|
-
*/
|
|
29
|
-
add(sub: Subscriber): void;
|
|
30
|
-
remove(sub: Subscriber): void;
|
|
31
|
-
/**
|
|
32
|
-
* `forward()` is called in lockstep with `Storer.store()` so that the
|
|
33
|
-
* two components have an equivalent interpretation of whether a Transaction is
|
|
34
|
-
* currently being streamed.
|
|
35
|
-
*
|
|
36
|
-
* This version of forward buffers changes across the current event loop turn
|
|
37
|
-
* and dispatches them in batches. The change-streamer should call and await
|
|
38
|
-
* {@link forwardWithFlowControl()} occasionally to avoid memory blowup.
|
|
39
|
-
*/
|
|
40
|
-
forward(entry: WatermarkedChange): void;
|
|
41
|
-
sendStatus(status: Status): void;
|
|
42
|
-
/**
|
|
43
|
-
* The flow-control-aware equivalent of {@link forward()}, returning a
|
|
44
|
-
* Promise that resolves when replication should continue.
|
|
45
|
-
*/
|
|
46
|
-
forwardWithFlowControl(entry: WatermarkedChange): Promise<void>;
|
|
47
|
-
getAcks(): Set<string>;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=forwarder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"forwarder.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/change-streamer/forwarder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAQjD,OAAO,KAAK,EAAY,MAAM,EAAE,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAE/E,OAAO,KAAK,EAAC,UAAU,EAAkB,MAAM,iBAAiB,CAAC;AAEjE,MAAM,MAAM,sBAAsB,GAAG;IACnC,qCAAqC,EAAE,MAAM,CAAC;IAC9C,sCAAsC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5D,YAAY,CAAC,EAAE,OAAO,UAAU,GAAG,SAAS,CAAC;IAC7C,cAAc,CAAC,EAAE,OAAO,YAAY,GAAG,SAAS,CAAC;CAClD,CAAC;AAIF,qBAAa,SAAS;;IAmCpB,YACE,EAAE,EAAE,UAAU,EACd,IAAI,GAAE,sBAEL,EA6DF;IAED,oBAAoB,SAMnB;IAED;;;;;;;OAOG;IACH,uBAAuB,CAAC,GAAG,EAAE,MAAM,QA6DlC;IAED,mBAAmB,SAGlB;IAED;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,UAAU,QAOlB;IAED,MAAM,CAAC,GAAG,EAAE,UAAU,QAKrB;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,KAAK,EAAE,iBAAiB,QAmB/B;IAED,UAAU,CAAC,MAAM,EAAE,MAAM,QAKxB;IAED;;;OAGG;IACG,sBAAsB,CAAC,KAAK,EAAE,iBAAiB,iBA4BpD;IAkED,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAOrB;CACF"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import type { LogContext } from '@rocicorp/logger';
|
|
2
|
-
import type { Source } from '../../types/streams.ts';
|
|
3
|
-
import { LitestreamController } from '../litestream/litestream-controller.ts';
|
|
4
|
-
import type { BackedUpWatermark } from './backup-monitor.ts';
|
|
5
|
-
/** The subset of {@link LitestreamController} used by the requester. */
|
|
6
|
-
export type SyncController = Pick<LitestreamController, 'sync' | 'close'>;
|
|
7
|
-
export type SyncRequesterConfig = {
|
|
8
|
-
/**
|
|
9
|
-
* Interval between sync requests. This paces how often litestream seals
|
|
10
|
-
* (and uploads) a new LTX file.
|
|
11
|
-
*/
|
|
12
|
-
intervalMs: number;
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* The LitestreamSyncRequester drives litestream v5 backups and tracks which
|
|
16
|
-
* replica watermark is durably backed up, emitting it as a stream of
|
|
17
|
-
* {@link BackedUpWatermark}s.
|
|
18
|
-
*
|
|
19
|
-
* It periodically reads the replica's current watermark `W` and then asks
|
|
20
|
-
* litestream to sync and wait for the upload (`POST /sync {wait: true}`).
|
|
21
|
-
* litestream satisfies the request with a sync pass that *starts after* the
|
|
22
|
-
* request, and a pass syncs up to the end of the WAL, so a successful response
|
|
23
|
-
* means that every transaction committed before the request, including the
|
|
24
|
-
* one that wrote `W`, has been uploaded to the backup. No part of the backup
|
|
25
|
-
* needs to be read to determine this.
|
|
26
|
-
*
|
|
27
|
-
* Requests continue even when `W` is already backed up, so that changes that
|
|
28
|
-
* don't advance the watermark (e.g. change-log cleanup or `PRAGMA optimize`)
|
|
29
|
-
* are also backed up at this cadence rather than only at litestream's slower
|
|
30
|
-
* backstop interval. A request on an idle replica is a local no-op for
|
|
31
|
-
* litestream: there is nothing to seal or upload, and no backup reads.
|
|
32
|
-
*
|
|
33
|
-
* At most one request is outstanding at a time. Failed or timed-out requests
|
|
34
|
-
* are retried with a backoff that starts short and, once it grows to the
|
|
35
|
-
* interval, defers to the regular ticks. Nothing is published until a request
|
|
36
|
-
* succeeds.
|
|
37
|
-
*/
|
|
38
|
-
export declare class LitestreamSyncRequester {
|
|
39
|
-
#private;
|
|
40
|
-
constructor(lc: LogContext, replicaFile: string, config: SyncRequesterConfig, litestream?: SyncController);
|
|
41
|
-
/**
|
|
42
|
-
* Starts requesting syncs and pushes backed-up watermarks to the returned
|
|
43
|
-
* stream. Must only be called once.
|
|
44
|
-
*/
|
|
45
|
-
start(): Source<BackedUpWatermark>;
|
|
46
|
-
/**
|
|
47
|
-
* Requests a sync unless a request is already outstanding. Resolves when
|
|
48
|
-
* this tick's request (or the outstanding one) completes.
|
|
49
|
-
* Exported for testing.
|
|
50
|
-
*/
|
|
51
|
-
readonly tick: () => Promise<void>;
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=litestream-sync-requester.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"litestream-sync-requester.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/change-streamer/litestream-sync-requester.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAIjD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAE5E,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAoC3D,wEAAwE;AACxE,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;AAE1E,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,uBAAuB;;IAelC,YACE,EAAE,EAAE,UAAU,EACd,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,mBAAmB,EAC3B,UAAU,GAAE,cAA0D,EAmBvE;IAED;;;OAGG;IACH,KAAK,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAQjC;IAED;;;;OAIG;IACH,QAAQ,CAAC,IAAI,QAAO,OAAO,CAAC,IAAI,CAAC,CAe/B;CAqDH"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import type { LogContext } from '@rocicorp/logger';
|
|
2
|
-
import type { Source } from '../../types/streams.ts';
|
|
3
|
-
import type { BackedUpWatermark } from './backup-monitor.ts';
|
|
4
|
-
export declare const CHECK_INTERVAL_MS = 10000;
|
|
5
|
-
/**
|
|
6
|
-
* Allowance for clock skew between the machine reporting litestream metrics
|
|
7
|
-
* and the timestamps reported by the backup destination (e.g. S3).
|
|
8
|
-
*/
|
|
9
|
-
export declare const BACKUP_VERIFICATION_SLACK_MS = 60000;
|
|
10
|
-
/**
|
|
11
|
-
* How long the actual backup state may remain *continuously* behind the
|
|
12
|
-
* backup progress claimed by litestream metrics before the backup is
|
|
13
|
-
* considered genuinely wedged and the process is shut down.
|
|
14
|
-
*
|
|
15
|
-
* A wedged backup is dangerous: litestream believes it is making durable
|
|
16
|
-
* progress when it is not, which can silently corrupt the backup (the WAL
|
|
17
|
-
* format only makes *some* such gaps detectable). Once that is confirmed to
|
|
18
|
-
* be the persistent state, continuing to run is worse than crashing, so the
|
|
19
|
-
* process exits loudly (non-zero, with a logged error) and the wedged backup
|
|
20
|
-
* destination becomes the priority to investigate.
|
|
21
|
-
*
|
|
22
|
-
* The change-log is conservatively *not* purged for the entire time the
|
|
23
|
-
* backup is stale, so the only cost of a generous grace period is unbounded
|
|
24
|
-
* change-log growth. We therefore err well on the side of slack: the backup
|
|
25
|
-
* must stay stuck across many {@link CHECK_INTERVAL_MS} checks before we tear
|
|
26
|
-
* the server down, so that a transient hiccup (a slow or briefly unreachable
|
|
27
|
-
* destination, or litestream restarting) does not trigger a shutdown. The
|
|
28
|
-
* staleness clock is reset the moment a purge is confirmed against a real
|
|
29
|
-
* upload.
|
|
30
|
-
*/
|
|
31
|
-
export declare const WEDGED_SHUTDOWN_GRACE_MS: number;
|
|
32
|
-
/**
|
|
33
|
-
* How long the BackupMonitor waits for the *first* restorable backup to appear
|
|
34
|
-
* before concluding that the backup pipeline is broken and shutting the process
|
|
35
|
-
* down (see {@link BackupMonitor.#shutDownOnMissingInitialBackup}).
|
|
36
|
-
*
|
|
37
|
-
* On a fresh stack the first backup is not restorable until the initial
|
|
38
|
-
* Postgres->replica sync completes and litestream finishes uploading the
|
|
39
|
-
* initial snapshot — a multipart upload that is not listable in the destination
|
|
40
|
-
* until it is committed. The producer cannot observe that sub-snapshot progress,
|
|
41
|
-
* so this is necessarily a generous timeout. It is scaled by replica size to
|
|
42
|
-
* mirror the platform's storage-scaled startup-probe allowance (~1 hour per
|
|
43
|
-
* 50GB) so that it never fires before the platform would restart a view-syncer
|
|
44
|
-
* that is waiting on the backup.
|
|
45
|
-
*/
|
|
46
|
-
export declare const INITIAL_BACKUP_GRACE_MS_PER_UNIT: number;
|
|
47
|
-
/**
|
|
48
|
-
* How often the BackupMonitor re-checks whether the first restorable backup has
|
|
49
|
-
* appeared while a view-syncer holds a snapshot reservation open during a cold
|
|
50
|
-
* start.
|
|
51
|
-
*/
|
|
52
|
-
export declare const RESTORABLE_BACKUP_POLL_INTERVAL_MS = 10000;
|
|
53
|
-
/**
|
|
54
|
-
* Returns the time of the most recent object actually uploaded to the
|
|
55
|
-
* backup replica destination (e.g. as determined by listing the snapshots
|
|
56
|
-
* and WAL segments in S3). Rejects if the backup state cannot be determined.
|
|
57
|
-
*
|
|
58
|
-
* See `getLastBackupTime()` in `../litestream/commands.ts` for the
|
|
59
|
-
* production implementation.
|
|
60
|
-
*/
|
|
61
|
-
export type BackupStateVerifier = () => Promise<Date>;
|
|
62
|
-
/**
|
|
63
|
-
* The Litestream3PrometheusPoller polls the litestream "/metrics" endpoint to
|
|
64
|
-
* track the watermark (label) value of the `litestream_replica_progress` gauge
|
|
65
|
-
* and emits verified watermarks to a stream of {@link BackedUpWatermark}s.
|
|
66
|
-
*
|
|
67
|
-
* See: https://github.com/rocicorp/litestream/pull/3
|
|
68
|
-
*
|
|
69
|
-
* Because the watermarks reported by litestream metrics reflect what
|
|
70
|
-
* litestream *believes* has been backed up (which has been observed to
|
|
71
|
-
* diverge from reality when uploads silently fail), the cleanup watermark is
|
|
72
|
-
* only published after verifying it against the actual backup state in the
|
|
73
|
-
* replica destination via a {@link BackupStateVerifier}. If the
|
|
74
|
-
* actual backup state stays behind the claimed progress for longer than
|
|
75
|
-
* {@link WEDGED_SHUTDOWN_GRACE_MS}, the backup is treated as wedged and the
|
|
76
|
-
* process is shut down rather than risk corrupting the backup.
|
|
77
|
-
*/
|
|
78
|
-
export declare class Litestream3PrometheusPoller {
|
|
79
|
-
#private;
|
|
80
|
-
constructor(lc: LogContext, replicaFile: string, backupURL: string, metricsEndpoint: string, verifyBackupState: BackupStateVerifier);
|
|
81
|
-
/**
|
|
82
|
-
* Starts polling for watermarks and pushes new ones to returned stream.
|
|
83
|
-
* Must only be called once.
|
|
84
|
-
*/
|
|
85
|
-
start(): Source<BackedUpWatermark>;
|
|
86
|
-
readonly checkVerifyAndPublishWatermarks: () => Promise<void>;
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=litestream3-prometheus-poller.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"litestream3-prometheus-poller.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/change-streamer/litestream3-prometheus-poller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAMjD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAOnD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAE3D,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,wBAAwB,QAAc,CAAC;AAIpD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gCAAgC,QAAc,CAAC;AAG5D;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,QAAS,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,2BAA2B;;IAuCtC,YACE,EAAE,EAAE,UAAU,EACd,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,mBAAmB,EAavC;IAED;;;OAGG;IACH,KAAK,IAAI,MAAM,CAAC,iBAAiB,CAAC,CASjC;IAqBD,QAAQ,CAAC,+BAA+B,sBAgBtC;CAmSH"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { LogContext } from '@rocicorp/logger';
|
|
2
|
-
import type { Source } from '../../types/streams.ts';
|
|
3
|
-
import type { BackedUpWatermark } from './backup-monitor.ts';
|
|
4
|
-
/**
|
|
5
|
-
* The single-node equivalent of a backup monitor polls the replica file every
|
|
6
|
-
* 30 seconds and schedules cleanup when the watermark
|
|
7
|
-
* (i.e. stateVersion) moves forward.
|
|
8
|
-
*/
|
|
9
|
-
export declare class ReplicaPoller {
|
|
10
|
-
#private;
|
|
11
|
-
readonly id = "replica-poller";
|
|
12
|
-
constructor(lc: LogContext, replicaFile: string);
|
|
13
|
-
start(): Source<BackedUpWatermark>;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=replica-poller.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replica-poller.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/change-streamer/replica-poller.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAGjD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAGnD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAI3D;;;;GAIG;AACH,qBAAa,aAAa;;IACxB,QAAQ,CAAC,EAAE,oBAAoB;IAQ/B,YAAY,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAM9C;IAED,KAAK,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAQjC;CAiBF"}
|
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
import type { LogContext } from '@rocicorp/logger';
|
|
2
|
-
import type { LocalReplica } from './subscribe.ts';
|
|
3
|
-
/**
|
|
4
|
-
* The default time to wait for a subscriber that was granted permission to
|
|
5
|
-
* restore to reconnect (i.e. to open a replacement reservation) after its
|
|
6
|
-
* held connection closes, or after its replacement reservation closes
|
|
7
|
-
* without subscribing (e.g. to retry a failed restore). This covers the
|
|
8
|
-
* subscriber's process exit and restart (e.g. a container restart, the
|
|
9
|
-
* backoff of which starts at 10 seconds in Kubernetes), but not the restore
|
|
10
|
-
* itself, which is tracked by the liveness of its snapshot reservation.
|
|
11
|
-
*/
|
|
12
|
-
export declare const DEFAULT_PENDING_GRANT_TTL_MS = 90000;
|
|
13
|
-
/**
|
|
14
|
-
* The default time for which a replacement continues to be counted after its
|
|
15
|
-
* subscriber has caught up, which covers the time for the subscriber to start
|
|
16
|
-
* serving (i.e. become ready) after catching up. See
|
|
17
|
-
* {@link RestoreAdmissionOptions.readinessGracePeriodMs}.
|
|
18
|
-
*/
|
|
19
|
-
export declare const DEFAULT_READINESS_GRACE_PERIOD_MS = 5000;
|
|
20
|
-
export type RestoreAdmissionOptions = {
|
|
21
|
-
/** The replica version of the replication-manager. */
|
|
22
|
-
replicaVersion: string;
|
|
23
|
-
/**
|
|
24
|
-
* The maximum number of subscribers that may be restoring (or granted
|
|
25
|
-
* permission to restore) at the same time.
|
|
26
|
-
*/
|
|
27
|
-
maxConcurrentRestores: number;
|
|
28
|
-
pendingGrantTTLMs?: number | undefined;
|
|
29
|
-
/**
|
|
30
|
-
* The time for which a replacement continues to be counted after its
|
|
31
|
-
* subscriber has caught up, so that the next subscriber is not granted
|
|
32
|
-
* permission to restore (and stop serving) before the restored one has
|
|
33
|
-
* started serving. Catching up is followed by the subscriber's readiness
|
|
34
|
-
* checks (e.g. waiting for the next replication lag report), and by the
|
|
35
|
-
* container runner's detection of its readiness.
|
|
36
|
-
*/
|
|
37
|
-
readinessGracePeriodMs?: number | undefined;
|
|
38
|
-
setTimeoutFn?: typeof setTimeout | undefined;
|
|
39
|
-
clearTimeoutFn?: typeof clearTimeout | undefined;
|
|
40
|
-
};
|
|
41
|
-
export type AdmissionRequest = {
|
|
42
|
-
/**
|
|
43
|
-
* Called when the request is queued, and again whenever its (1-based)
|
|
44
|
-
* position in the queue changes.
|
|
45
|
-
*/
|
|
46
|
-
onQueued: (position: number) => void;
|
|
47
|
-
/** Called (once) when the request is granted. */
|
|
48
|
-
onGranted: () => void;
|
|
49
|
-
};
|
|
50
|
-
/** A subscribed replacement, returned by {@link RestoreAdmission.reservationSubscribed}. */
|
|
51
|
-
export type Replacement = {
|
|
52
|
-
/**
|
|
53
|
-
* Called when the subscriber has caught up. The replacement is released
|
|
54
|
-
* after the readiness grace period.
|
|
55
|
-
*/
|
|
56
|
-
caughtUp: () => void;
|
|
57
|
-
/** Called when the subscription closes. The replacement is released. */
|
|
58
|
-
closed: () => void;
|
|
59
|
-
};
|
|
60
|
-
export type AdmissionTicket = {
|
|
61
|
-
/**
|
|
62
|
-
* Must be called when the requesting connection closes. A queued request
|
|
63
|
-
* is removed from the queue. For a granted request, this starts the
|
|
64
|
-
* timer within which the subscriber is expected to reconnect and open a
|
|
65
|
-
* replacement reservation.
|
|
66
|
-
*/
|
|
67
|
-
release(): void;
|
|
68
|
-
};
|
|
69
|
-
/**
|
|
70
|
-
* Limits the number of view-syncers that replace their replica at the same
|
|
71
|
-
* time, so that view-syncers switching over from an incompatible
|
|
72
|
-
* replication-manager (e.g. after a resync) do not all stop serving at once.
|
|
73
|
-
*
|
|
74
|
-
* Capacity is consumed by:
|
|
75
|
-
* * Replacement restores: snapshot reservations of subscribers that are
|
|
76
|
-
* replacing an (incompatible or outdated) local replica, i.e. subscribers
|
|
77
|
-
* that were serving. Restores onto an empty disk (e.g. a new pod) do not
|
|
78
|
-
* take a serving subscriber out of service, and are not counted. The
|
|
79
|
-
* reservation's connection is held open for the duration of the restore,
|
|
80
|
-
* and the subscription that follows it is held open until the restored
|
|
81
|
-
* subscriber has caught up, so their liveness tracks that of the
|
|
82
|
-
* replacement without a timeout.
|
|
83
|
-
* * Outstanding grants: permission to restore that has not yet been
|
|
84
|
-
* followed by a replacement reservation (e.g. while the subscriber drains
|
|
85
|
-
* and restarts). Grants are not matched to reservations by identity:
|
|
86
|
-
* any replacement reservation consumes an outstanding grant, and a grant
|
|
87
|
-
* that is not consumed expires a short time after the granted connection
|
|
88
|
-
* closes (e.g. if the subscriber reconnected to a different
|
|
89
|
-
* replication-manager or was deleted).
|
|
90
|
-
*
|
|
91
|
-
* ## Life cycle of a switchover restore
|
|
92
|
-
*
|
|
93
|
-
* The following traces a view-syncer (VS) with a replica at version `R1`,
|
|
94
|
-
* served by an old replication-manager (RM) at `R1`, while a new RM (e.g.
|
|
95
|
-
* after a resync) is at `R2 > R1`. The RestoreAdmission is that of the new
|
|
96
|
-
* RM. Terms in `code` are those used in the code.
|
|
97
|
-
*
|
|
98
|
-
* 1. **Drain.** The old RM receives a SIGTERM, and its `DrainTracker` sends
|
|
99
|
-
* `status {draining: true}` to its `drainable` (i.e. serving) subscribers.
|
|
100
|
-
* It continues to stream changes to them, and exits once they have all
|
|
101
|
-
* disconnected.
|
|
102
|
-
*
|
|
103
|
-
* 2. **Switchover.** The VS's `DrainHandler` opens a second `/subscribe`
|
|
104
|
-
* with `switchover: true` at the watermark of its last committed
|
|
105
|
-
* transaction, which is routed to some RM. The VS continues to consume
|
|
106
|
-
* the old RM's stream. If the RM is compatible (i.e. another old RM),
|
|
107
|
-
* the subscription is accepted and the VS simply moves to it. If the RM
|
|
108
|
-
* is the new one, the subscriber's replica version is older, and the
|
|
109
|
-
* subscription proceeds to step 3.
|
|
110
|
-
*
|
|
111
|
-
* 3. **Queued.** `ChangeStreamerImpl.subscribe()` holds the subscription
|
|
112
|
-
* (it is not added to the forwarder) and calls {@link request}. The
|
|
113
|
-
* request is `queued` and `onQueued(position)` sends
|
|
114
|
-
* `status {restore: {state: 'queued', position}}`, again whenever the
|
|
115
|
-
* position changes. If the held connection closes while queued (e.g.
|
|
116
|
-
* the VS's old stream ended and it gave up on the switchover), the
|
|
117
|
-
* ticket is `release()`d and the request leaves the queue.
|
|
118
|
-
*
|
|
119
|
-
* 4. **Granted.** When the number in flight (`replacing` + `granted`) is
|
|
120
|
-
* below `maxConcurrentRestores`, the head of the queue is `granted`: a
|
|
121
|
-
* {@link Grant} is added (counting toward capacity), and `onGranted()`
|
|
122
|
-
* sends `status {restore: {state: 'granted'}}`. The VS keeps the granted
|
|
123
|
-
* connection open, and initiates a self-drain (`drainRequested`): it
|
|
124
|
-
* fails its health checks, drains its clients, and keeps replicating
|
|
125
|
-
* from the old RM in the meantime.
|
|
126
|
-
*
|
|
127
|
-
* 5. **Restart.** The VS process exits, closing the granted connection.
|
|
128
|
-
* The ticket is `release()`d, marking the grant as `released` and
|
|
129
|
-
* starting the pending grant TTL ({@link DEFAULT_PENDING_GRANT_TTL_MS}),
|
|
130
|
-
* within which a replacement reservation is expected. The drain itself
|
|
131
|
-
* does not count against the TTL.
|
|
132
|
-
*
|
|
133
|
-
* 6. **Reservation opened.** The restarted VS sends
|
|
134
|
-
* `reserve-snapshot {taskID, localReplica}`, and
|
|
135
|
-
* `ChangeStreamerImpl.startSnapshotReservation()` calls
|
|
136
|
-
* {@link reservationOpened}:
|
|
137
|
-
* * A `localReplica` of a different replica version (e.g. `R1`) is
|
|
138
|
-
* `replacing`: the reservation is counted, and consumes an outstanding
|
|
139
|
-
* grant (preferring a `released` one), so the number in flight is
|
|
140
|
-
* unchanged.
|
|
141
|
-
* * A `localReplica` of the same replica version is `unclassified` until
|
|
142
|
-
* the reservation is confirmed ({@link reservationConfirmed}) with the
|
|
143
|
-
* backup's minimum watermark. It is `replacing` if its watermark is
|
|
144
|
-
* older (i.e. it cannot catch up from the change log).
|
|
145
|
-
* * No `localReplica` (an empty disk) is not counted.
|
|
146
|
-
*
|
|
147
|
-
* If the VS reached a different RM instead, the grant here expires after
|
|
148
|
-
* the TTL and frees its capacity, while the replacement is counted (as
|
|
149
|
-
* an ungranted one) by the RM that it reached.
|
|
150
|
-
*
|
|
151
|
-
* 7. **Restoring.** The VS restores the backup while holding the
|
|
152
|
-
* reservation's connection open. A retried reservation from the same
|
|
153
|
-
* task that arrives while the previous one is still open replaces it
|
|
154
|
-
* (`SnapshotReservations` `onClose`) but does not end it (`onEnd`), so it
|
|
155
|
-
* remains `replacing`. If the reservation instead closes without
|
|
156
|
-
* subscribing (e.g. a failed or disconnected restore, after which the VS
|
|
157
|
-
* retries), {@link reservationClosed} converts its capacity into a
|
|
158
|
-
* `released` grant, which the retry's replacement reservation consumes
|
|
159
|
-
* (step 6), or which expires after the pending grant TTL (e.g. if the VS
|
|
160
|
-
* was deleted).
|
|
161
|
-
*
|
|
162
|
-
* 8. **Subscribed.** Once restored, the VS subscribes on the same
|
|
163
|
-
* connection at `R2`, which is accepted. `ChangeStreamerImpl.subscribe()`
|
|
164
|
-
* calls {@link reservationSubscribed}, which moves the replacement from
|
|
165
|
-
* its reservation (the key leaves `replacing`) to the subscription
|
|
166
|
-
* (`catchingUp`), and then closes the task's reservation. Its `onEnd`
|
|
167
|
-
* calls {@link reservationClosed}, which is a no-op for the moved key.
|
|
168
|
-
*
|
|
169
|
-
* 9. **Caught up.** The VS catches up on the change stream from the
|
|
170
|
-
* backup's watermark. Once it has acked all changes up to the head of
|
|
171
|
-
* the stream (`Subscriber.caughtUp`), the replacement is released after
|
|
172
|
-
* the readiness grace period, which covers the time for the VS to start
|
|
173
|
-
* serving, and the next queued request is granted. If the VS disconnects
|
|
174
|
-
* first, the replacement is released immediately.
|
|
175
|
-
*
|
|
176
|
-
* A VS that restarts outside of a switchover with an incompatible replica
|
|
177
|
-
* (e.g. after a crash) enters at step 6 without a grant, and its restore
|
|
178
|
-
* consumes capacity all the same, delaying queued requests.
|
|
179
|
-
*
|
|
180
|
-
* ## States
|
|
181
|
-
*
|
|
182
|
-
* | Term | Where | Meaning |
|
|
183
|
-
* | ------------- | ------------------------ | -------------------------------- |
|
|
184
|
-
* | queued | `Entry.state` | Held, waiting for capacity |
|
|
185
|
-
* | granted | `Entry.state`, `#grants` | Permitted to restore, pending a |
|
|
186
|
-
* | | | replacement reservation |
|
|
187
|
-
* | released | `Entry.state` | The held connection closed |
|
|
188
|
-
* | released | `Grant.released` | The granted connection, or an |
|
|
189
|
-
* | | | unsubscribed replacement |
|
|
190
|
-
* | | | reservation, closed; the TTL is |
|
|
191
|
-
* | | | running |
|
|
192
|
-
* | unclassified | `#unclassified` | Same-version reservation, not |
|
|
193
|
-
* | | | yet confirmed |
|
|
194
|
-
* | replacing | `#replacing` | Open replacement reservation |
|
|
195
|
-
* | catching up | `#catchingUp` | Subscribed replacement, not yet |
|
|
196
|
-
* | | | caught up (or within the |
|
|
197
|
-
* | | | readiness grace period) |
|
|
198
|
-
* | in flight | `#inFlight` | `replacing` + `catchingUp` + |
|
|
199
|
-
* | | | `granted`, bounded by |
|
|
200
|
-
* | | | `maxConcurrentRestores` |
|
|
201
|
-
*/
|
|
202
|
-
export declare class RestoreAdmission {
|
|
203
|
-
#private;
|
|
204
|
-
constructor(lc: LogContext, opts: RestoreAdmissionOptions);
|
|
205
|
-
/** For testing and logging. */
|
|
206
|
-
get stats(): {
|
|
207
|
-
replacing: number;
|
|
208
|
-
granted: number;
|
|
209
|
-
queued: number;
|
|
210
|
-
};
|
|
211
|
-
/**
|
|
212
|
-
* Called when a snapshot reservation is opened by a subscriber with the
|
|
213
|
-
* given `localReplica` (if any). A subscriber with a local replica of a
|
|
214
|
-
* different replica version is replacing it. One with the same replica
|
|
215
|
-
* version is replacing it if it is outdated, which is determined by
|
|
216
|
-
* {@link reservationConfirmed}. Idempotent for the same `key` (e.g. a
|
|
217
|
-
* retried reservation).
|
|
218
|
-
*/
|
|
219
|
-
reservationOpened(key: string, localReplica: LocalReplica | undefined): void;
|
|
220
|
-
/**
|
|
221
|
-
* Called when a reservation is confirmed with the minimum watermark of the
|
|
222
|
-
* replica to restore.
|
|
223
|
-
*/
|
|
224
|
-
reservationConfirmed(key: string, minWatermark: string): void;
|
|
225
|
-
/**
|
|
226
|
-
* Called when a reservation ends. A replacement reservation normally ends
|
|
227
|
-
* after its task subscribes ({@link reservationSubscribed}), in which case
|
|
228
|
-
* this is a no-op. A replacement reservation that ends without subscribing
|
|
229
|
-
* (e.g. a failed or disconnected restore) is most likely followed by a
|
|
230
|
-
* retry, so its capacity is retained as a released grant (which the retry
|
|
231
|
-
* consumes) rather than released immediately.
|
|
232
|
-
*/
|
|
233
|
-
reservationClosed(key: string): void;
|
|
234
|
-
/**
|
|
235
|
-
* Called when the task of a reservation subscribes (before the reservation
|
|
236
|
-
* is closed). If the reservation is a replacement, it continues to be
|
|
237
|
-
* counted until the readiness grace period after the subscriber has caught
|
|
238
|
-
* up, or until the subscription closes.
|
|
239
|
-
*/
|
|
240
|
-
reservationSubscribed(key: string): Replacement | undefined;
|
|
241
|
-
request(request: AdmissionRequest): AdmissionTicket;
|
|
242
|
-
}
|
|
243
|
-
//# sourceMappingURL=restore-admission.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"restore-admission.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/change-streamer/restore-admission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAEjD;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,OAAQ,CAAC;AAEvD,MAAM,MAAM,uBAAuB,GAAG;IACpC,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5C,YAAY,CAAC,EAAE,OAAO,UAAU,GAAG,SAAS,CAAC;IAC7C,cAAc,CAAC,EAAE,OAAO,YAAY,GAAG,SAAS,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAErC,iDAAiD;IACjD,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,4FAA4F;AAC5F,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAC;IAErB,wEAAwE;IACxE,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;OAKG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAeF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoIG;AACH,qBAAa,gBAAgB;;IAwB3B,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,uBAAuB,EAqBxD;IAMD,+BAA+B;IAC/B,IAAI,KAAK;QAEL,SAAS;QACT,OAAO;QACP,MAAM;MAET;IAED;;;;;;;OAOG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,SAAS,QAUpE;IAED;;;OAGG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,QAMrD;IAED;;;;;;;OAOG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,QAO5B;IAED;;;;;OAKG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAwB1D;IAiBD,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAKlD;CAoDF"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { LogContext } from '@rocicorp/logger';
|
|
2
|
-
import type { PostgresDB } from '../../../types/pg.ts';
|
|
3
|
-
import { type ShardID } from '../../../types/shards.ts';
|
|
4
|
-
export declare function initChangeStreamerSchema(log: LogContext, db: PostgresDB, shard: ShardID): Promise<void>;
|
|
5
|
-
export declare function getLastWatermarkV2(db: PostgresDB, shard: ShardID): Promise<string>;
|
|
6
|
-
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-streamer/schema/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAMjD,OAAO,KAAK,EAAC,UAAU,EAAsB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAY,KAAK,OAAO,EAAC,MAAM,0BAA0B,CAAC;AA+BjE,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,UAAU,EACf,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CA0Ef;AAED,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,MAAM,CAAC,CAajB"}
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import type { LogContext } from '@rocicorp/logger';
|
|
2
|
-
import type postgres from 'postgres';
|
|
3
|
-
import { AbortError } from '../../../../../shared/src/abort-error.ts';
|
|
4
|
-
import { type PostgresDB } from '../../../types/pg.ts';
|
|
5
|
-
import { type ShardID } from '../../../types/shards.ts';
|
|
6
|
-
import type { BackfillID, Change, TableMetadata } from '../../change-source/protocol/current/data.ts';
|
|
7
|
-
import type { SubscriptionState } from '../../replicator/schema/replication-state.ts';
|
|
8
|
-
export declare const PG_SCHEMA = "cdc";
|
|
9
|
-
export type ChangeLogEntry = {
|
|
10
|
-
watermark: string;
|
|
11
|
-
change: Change;
|
|
12
|
-
};
|
|
13
|
-
/**
|
|
14
|
-
* Tracks the watermark from which to resume the change stream and the
|
|
15
|
-
* current owner (task ID) acting as the single writer to the changeLog.
|
|
16
|
-
*/
|
|
17
|
-
export type ReplicationState = {
|
|
18
|
-
lastWatermark: string;
|
|
19
|
-
owner: string | null;
|
|
20
|
-
ownerAddress: string | null;
|
|
21
|
-
};
|
|
22
|
-
export declare function createReplicationStateTable(shard: ShardID): string;
|
|
23
|
-
export declare function discoverChangeStreamerAddress(shard: ShardID, sql: PostgresDB): Promise<string | null>;
|
|
24
|
-
/**
|
|
25
|
-
* This mirrors the analogously named table in the SQLite replica
|
|
26
|
-
* (`services/replicator/schema/replication-state.ts`), and is used
|
|
27
|
-
* to detect when the replica has been reset and is no longer compatible
|
|
28
|
-
* with the current ChangeLog.
|
|
29
|
-
*/
|
|
30
|
-
export type ReplicationConfig = {
|
|
31
|
-
replicaVersion: string;
|
|
32
|
-
publications: readonly string[];
|
|
33
|
-
};
|
|
34
|
-
export declare function createBackfillTables(shard: ShardID): string;
|
|
35
|
-
export type TableMetadataRow = {
|
|
36
|
-
schema: string;
|
|
37
|
-
table: string;
|
|
38
|
-
metadata: TableMetadata;
|
|
39
|
-
};
|
|
40
|
-
export type BackfillingColumn = {
|
|
41
|
-
schema: string;
|
|
42
|
-
table: string;
|
|
43
|
-
column: string;
|
|
44
|
-
backfill: BackfillID;
|
|
45
|
-
};
|
|
46
|
-
interface PurgeLock {
|
|
47
|
-
release(): Promise<void>;
|
|
48
|
-
}
|
|
49
|
-
export declare function setupCDCTables(lc: LogContext, db: postgres.TransactionSql, shard: ShardID): Promise<void>;
|
|
50
|
-
export declare function markResetRequired(sql: PostgresDB, shard: ShardID): Promise<void>;
|
|
51
|
-
export type ReplicaSubscriptionState = Pick<SubscriptionState, 'publications' | 'replicaVersion' | 'watermark'>;
|
|
52
|
-
/**
|
|
53
|
-
* Checks, without modifying the change db, that the replica can be served
|
|
54
|
-
* by the change log once {@link ensureReplicationConfig} is called upon
|
|
55
|
-
* taking over the change log. Throws an {@link AutoResetSignal} otherwise.
|
|
56
|
-
*
|
|
57
|
-
* This allows a replication-manager to detect an incompatible replica at
|
|
58
|
-
* startup while leaving the change log to its current owner until then.
|
|
59
|
-
*/
|
|
60
|
-
export declare function checkReplicationConfig(lc: LogContext, db: PostgresDB, subscriptionState: ReplicaSubscriptionState, shard: ShardID, autoReset: boolean, behindSlot?: boolean): Promise<void>;
|
|
61
|
-
/**
|
|
62
|
-
* Initializes the cdc tables for the replica, resetting them if they were
|
|
63
|
-
* written for a different replica (version or publications). This disrupts
|
|
64
|
-
* a replication-manager that is serving the change log, and is thus only
|
|
65
|
-
* done when taking over the change log (see `Storer.assumeOwnershipAtHead`).
|
|
66
|
-
*
|
|
67
|
-
* @param purgeLock A purge lock held by the caller, if any, which is released
|
|
68
|
-
* before the tables are reset.
|
|
69
|
-
* @param behindSlot See {@link checkReplicationConfig}.
|
|
70
|
-
*/
|
|
71
|
-
export declare function ensureReplicationConfig(lc: LogContext, db: PostgresDB, subscriptionState: ReplicaSubscriptionState, shard: ShardID, autoReset: boolean, purgeLock?: PurgeLock, setTimeoutFn?: typeof setTimeout, behindSlot?: boolean): Promise<void>;
|
|
72
|
-
export type ChangeLogReinitialization = {
|
|
73
|
-
/**
|
|
74
|
-
* The watermark of the replica from which the change log is re-initialized,
|
|
75
|
-
* i.e. the watermark from which the change stream will resume.
|
|
76
|
-
*/
|
|
77
|
-
watermark: string;
|
|
78
|
-
cookies: {
|
|
79
|
-
tableMetadata: readonly {
|
|
80
|
-
schema: string;
|
|
81
|
-
table: string;
|
|
82
|
-
metadata: TableMetadata;
|
|
83
|
-
}[];
|
|
84
|
-
backfilling: readonly {
|
|
85
|
-
schema: string;
|
|
86
|
-
table: string;
|
|
87
|
-
column: string;
|
|
88
|
-
backfill: BackfillID;
|
|
89
|
-
}[];
|
|
90
|
-
};
|
|
91
|
-
owner: string;
|
|
92
|
-
ownerAddress: string;
|
|
93
|
-
};
|
|
94
|
-
/**
|
|
95
|
-
* Re-initializes the change log from the state of the replica if it does not
|
|
96
|
-
* contain all of the replica's changes, i.e. if its `lastWatermark` is before
|
|
97
|
-
* the replica's watermark. This is the case if the change log is no longer
|
|
98
|
-
* maintained (e.g. after running in high-availability mode), or if its last
|
|
99
|
-
* owner stopped before persisting changes that it had already forwarded
|
|
100
|
-
* (and backed up). Ownership of the change log is taken in the same
|
|
101
|
-
* transaction, in which:
|
|
102
|
-
*
|
|
103
|
-
* * The `replicationState`, `changeLog`, `tableMetadata`, and `backfilling`
|
|
104
|
-
* tables are truncated. (The `replicationConfig` is kept;
|
|
105
|
-
* {@link ensureReplicationConfig} handles changes of the replica version
|
|
106
|
-
* or publications.)
|
|
107
|
-
* * The change log is seeded with an empty transaction at the replica's
|
|
108
|
-
* watermark, so that subscribers at that watermark can be caught up, while
|
|
109
|
-
* subscribers at earlier watermarks are rejected as being too old.
|
|
110
|
-
* * The `tableMetadata` and `backfilling` cookies are set from the replica.
|
|
111
|
-
*
|
|
112
|
-
* Returns `'maintained'` without modifying anything if the change log's
|
|
113
|
-
* `lastWatermark` is at or past the replica's watermark, i.e. the change log
|
|
114
|
-
* contains all of the replica's changes. Because a replication slot is only
|
|
115
|
-
* acked past a transaction once it has been backed up, this means that the
|
|
116
|
-
* change log contains every transaction up to the position of the replica's
|
|
117
|
-
* replication slot, and it can be taken over (and resumed from its head).
|
|
118
|
-
*
|
|
119
|
-
* This is called when the change log's head is behind the position of the
|
|
120
|
-
* replication slot (see `PgChangeLogPurgeLocker`). That position cannot be
|
|
121
|
-
* compared with the watermarks of transactions to determine whether the
|
|
122
|
-
* change log is maintained, as it is also advanced past positions of changes
|
|
123
|
-
* outside of the publication.
|
|
124
|
-
*
|
|
125
|
-
* @param purgeLock A purge lock held by the caller, if any, which is released
|
|
126
|
-
* before the tables are truncated.
|
|
127
|
-
*/
|
|
128
|
-
export declare function reinitializeChangeLog(lc: LogContext, db: PostgresDB, shard: ShardID, { watermark, cookies, owner, ownerAddress }: ChangeLogReinitialization, purgeLock?: PurgeLock, setTimeoutFn?: typeof setTimeout): Promise<'reinitialized' | 'maintained'>;
|
|
129
|
-
export declare const CHANGE_STREAMER_APP_NAME = "zero-change-streamer";
|
|
130
|
-
export declare class AutoResetSignal extends AbortError {
|
|
131
|
-
readonly name = "AutoResetSignal";
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Terminates zero-cache backends that are blocking the current backend
|
|
135
|
-
* from acquiring locks on CDC tables (e.g., during TRUNCATE).
|
|
136
|
-
*
|
|
137
|
-
* This is used during change-DB takeover when the new replication-manager's
|
|
138
|
-
* `ensureReplicationConfig` needs to TRUNCATE tables, but the old
|
|
139
|
-
* replication-manager's storer is still reading from them (e.g., large
|
|
140
|
-
* catchup cursors).
|
|
141
|
-
*
|
|
142
|
-
* The function:
|
|
143
|
-
* 1. Finds backends waiting for a lock on a TRUNCATE in {schema}
|
|
144
|
-
* 2. Uses `pg_blocking_pids()` to identify which backends are blocking them
|
|
145
|
-
* 3. Terminates blocking backends that have `application_name = 'zero-change-streamer'`
|
|
146
|
-
*
|
|
147
|
-
* Must be called on a **separate connection** from the one that is blocked,
|
|
148
|
-
* since the blocked connection is inside a pending transaction.
|
|
149
|
-
*/
|
|
150
|
-
export declare function terminateChangeDBLockHolders(lc: LogContext, db: PostgresDB, shard: ShardID): Promise<void>;
|
|
151
|
-
export {};
|
|
152
|
-
//# sourceMappingURL=tables.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-streamer/schema/tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAErC,OAAO,EAAC,UAAU,EAAC,MAAM,0CAA0C,CAAC;AAGpE,OAAO,EAAC,KAAK,UAAU,EAA2B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAY,KAAK,OAAO,EAAC,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EACV,UAAU,EACV,MAAM,EACN,aAAa,EACd,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,8CAA8C,CAAC;AAOpF,eAAO,MAAM,SAAS,QAAQ,CAAC;AAM/B,MAAM,MAAM,cAAc,GAAG;IAG3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAmBF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,UASzD;AAED,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIxB;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,CAAC;AAaF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,UAiBlD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,CAAC;CACtB,CAAC;AAYF,UAAU,SAAS;IACjB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,QAAQ,CAAC,cAAc,EAC3B,KAAK,EAAE,OAAO,iBAIf;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,iBAKtE;AAMD,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,iBAAiB,EACjB,cAAc,GAAG,gBAAgB,GAAG,WAAW,CAChD,CAAC;AAwDF;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,UAAU,EACd,iBAAiB,EAAE,wBAAwB,EAC3C,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,OAAO,EAClB,UAAU,UAAQ,GACjB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,UAAU,EACd,iBAAiB,EAAE,wBAAwB,EAC3C,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,SAAS,EACrB,YAAY,GAAE,OAAO,UAAuB,EAC5C,UAAU,UAAQ,iBAoFnB;AA6CD,MAAM,MAAM,yBAAyB,GAAG;IACtC;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,aAAa,EAAE,SAAS;YACtB,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,EAAE,MAAM,CAAC;YACd,QAAQ,EAAE,aAAa,CAAC;SACzB,EAAE,CAAC;QACJ,WAAW,EAAE,SAAS;YACpB,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,EAAE,UAAU,CAAC;SACtB,EAAE,CAAC;KACL,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,OAAO,EACd,EAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAC,EAAE,yBAAyB,EACpE,SAAS,CAAC,EAAE,SAAS,EACrB,YAAY,GAAE,OAAO,UAAuB,GAC3C,OAAO,CAAC,eAAe,GAAG,YAAY,CAAC,CAuDzC;AAED,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAE/D,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,IAAI,qBAAqB;CACnC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,4BAA4B,CAChD,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,OAAO,iBA4Cf"}
|