@adonis-agora/durable 0.49.0 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +261 -0
- package/README.md +53 -22
- package/dist/assets/spa/assets/index-DupjrK7N.js +16 -0
- package/dist/assets/spa/assets/index-DupjrK7N.js.map +1 -0
- package/dist/assets/spa/index.html +1 -1
- package/dist/commands/durable_worker.d.ts.map +1 -1
- package/dist/commands/durable_worker.js +9 -8
- package/dist/commands/durable_worker.js.map +1 -1
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +1 -0
- package/dist/configure.js.map +1 -1
- package/dist/providers/dashboard_provider.d.ts +2 -0
- package/dist/providers/dashboard_provider.d.ts.map +1 -1
- package/dist/providers/dashboard_provider.js +50 -6
- package/dist/providers/dashboard_provider.js.map +1 -1
- package/dist/providers/durable_provider.d.ts.map +1 -1
- package/dist/providers/durable_provider.js +143 -34
- package/dist/providers/durable_provider.js.map +1 -1
- package/dist/src/admission-redis/redis-admission-backend.d.ts.map +1 -1
- package/dist/src/admission-redis/redis-admission-backend.js +3 -1
- package/dist/src/admission-redis/redis-admission-backend.js.map +1 -1
- package/dist/src/ambient-step.d.ts +24 -0
- package/dist/src/ambient-step.d.ts.map +1 -0
- package/dist/src/ambient-step.js +42 -0
- package/dist/src/ambient-step.js.map +1 -0
- package/dist/src/base-workflow.d.ts +10 -1
- package/dist/src/base-workflow.d.ts.map +1 -1
- package/dist/src/base-workflow.js.map +1 -1
- package/dist/src/codec-state-store.d.ts +28 -2
- package/dist/src/codec-state-store.d.ts.map +1 -1
- package/dist/src/codec-state-store.js +61 -3
- package/dist/src/codec-state-store.js.map +1 -1
- package/dist/src/commands/worker.d.ts +4 -1
- package/dist/src/commands/worker.d.ts.map +1 -1
- package/dist/src/commands/worker.js +27 -3
- package/dist/src/commands/worker.js.map +1 -1
- package/dist/src/config_types.d.ts +6 -0
- package/dist/src/config_types.d.ts.map +1 -1
- package/dist/src/control-plane-redis/redis-control-plane.d.ts.map +1 -1
- package/dist/src/control-plane-redis/redis-control-plane.js +22 -6
- package/dist/src/control-plane-redis/redis-control-plane.js.map +1 -1
- package/dist/src/control-planes/factory.d.ts +6 -0
- package/dist/src/control-planes/factory.d.ts.map +1 -1
- package/dist/src/control-planes/factory.js +1 -0
- package/dist/src/control-planes/factory.js.map +1 -1
- package/dist/src/dashboard/gateway-adapter.d.ts +15 -5
- package/dist/src/dashboard/gateway-adapter.d.ts.map +1 -1
- package/dist/src/dashboard/gateway-adapter.js +71 -7
- package/dist/src/dashboard/gateway-adapter.js.map +1 -1
- package/dist/src/dashboard/handlers.d.ts +53 -1
- package/dist/src/dashboard/handlers.d.ts.map +1 -1
- package/dist/src/dashboard/handlers.js +200 -20
- package/dist/src/dashboard/handlers.js.map +1 -1
- package/dist/src/dashboard/index.d.ts +2 -2
- package/dist/src/dashboard/index.d.ts.map +1 -1
- package/dist/src/dashboard/index.js +2 -2
- package/dist/src/dashboard/index.js.map +1 -1
- package/dist/src/dashboard/openapi.d.ts.map +1 -1
- package/dist/src/dashboard/openapi.js +71 -1
- package/dist/src/dashboard/openapi.js.map +1 -1
- package/dist/src/define_config.d.ts +122 -8
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/diagnostics-bridge.d.ts +16 -3
- package/dist/src/diagnostics-bridge.d.ts.map +1 -1
- package/dist/src/diagnostics-bridge.js +9 -3
- package/dist/src/diagnostics-bridge.js.map +1 -1
- package/dist/src/discovery-roots.d.ts +92 -0
- package/dist/src/discovery-roots.d.ts.map +1 -0
- package/dist/src/discovery-roots.js +150 -0
- package/dist/src/discovery-roots.js.map +1 -0
- package/dist/src/engine.d.ts +418 -20
- package/dist/src/engine.d.ts.map +1 -1
- package/dist/src/engine.js +1523 -159
- package/dist/src/engine.js.map +1 -1
- package/dist/src/entities.d.ts +36 -1
- package/dist/src/entities.d.ts.map +1 -1
- package/dist/src/entities.js +65 -4
- package/dist/src/entities.js.map +1 -1
- package/dist/src/errors.d.ts +36 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +44 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/event-trigger-bridge.d.ts +8 -0
- package/dist/src/event-trigger-bridge.d.ts.map +1 -1
- package/dist/src/event-trigger-bridge.js +24 -3
- package/dist/src/event-trigger-bridge.js.map +1 -1
- package/dist/src/handshake/announced.d.ts +27 -0
- package/dist/src/handshake/announced.d.ts.map +1 -1
- package/dist/src/handshake/announced.js +62 -0
- package/dist/src/handshake/announced.js.map +1 -1
- package/dist/src/handshake/directory.d.ts +92 -0
- package/dist/src/handshake/directory.d.ts.map +1 -0
- package/dist/src/handshake/directory.js +139 -0
- package/dist/src/handshake/directory.js.map +1 -0
- package/dist/src/hooks/barrel-sources.d.ts +28 -0
- package/dist/src/hooks/barrel-sources.d.ts.map +1 -0
- package/dist/src/hooks/barrel-sources.js +92 -0
- package/dist/src/hooks/barrel-sources.js.map +1 -0
- package/dist/src/hooks/steps.d.ts +12 -3
- package/dist/src/hooks/steps.d.ts.map +1 -1
- package/dist/src/hooks/steps.js +7 -11
- package/dist/src/hooks/steps.js.map +1 -1
- package/dist/src/hooks/workflows.d.ts +12 -3
- package/dist/src/hooks/workflows.d.ts.map +1 -1
- package/dist/src/hooks/workflows.js +7 -13
- package/dist/src/hooks/workflows.js.map +1 -1
- package/dist/src/index.d.ts +12 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/interfaces.d.ts +309 -21
- package/dist/src/interfaces.d.ts.map +1 -1
- package/dist/src/interfaces.js +10 -0
- package/dist/src/interfaces.js.map +1 -1
- package/dist/src/metrics.d.ts.map +1 -1
- package/dist/src/metrics.js +5 -0
- package/dist/src/metrics.js.map +1 -1
- package/dist/src/namespaces.d.ts +17 -0
- package/dist/src/namespaces.d.ts.map +1 -0
- package/dist/src/namespaces.js +24 -0
- package/dist/src/namespaces.js.map +1 -0
- package/dist/src/otel/durable-metrics.d.ts.map +1 -1
- package/dist/src/otel/durable-metrics.js +5 -0
- package/dist/src/otel/durable-metrics.js.map +1 -1
- package/dist/src/otel/durable-otel.d.ts.map +1 -1
- package/dist/src/otel/durable-otel.js +5 -0
- package/dist/src/otel/durable-otel.js.map +1 -1
- package/dist/src/pollers.d.ts +10 -1
- package/dist/src/pollers.d.ts.map +1 -1
- package/dist/src/pollers.js +15 -5
- package/dist/src/pollers.js.map +1 -1
- package/dist/src/protocol.d.ts +12 -0
- package/dist/src/protocol.d.ts.map +1 -1
- package/dist/src/protocol.js +27 -1
- package/dist/src/protocol.js.map +1 -1
- package/dist/src/remote-event.d.ts +6 -0
- package/dist/src/remote-event.d.ts.map +1 -0
- package/dist/src/remote-event.js +19 -0
- package/dist/src/remote-event.js.map +1 -0
- package/dist/src/remote-workflow-executor.d.ts +34 -12
- package/dist/src/remote-workflow-executor.d.ts.map +1 -1
- package/dist/src/remote-workflow-executor.js +42 -40
- package/dist/src/remote-workflow-executor.js.map +1 -1
- package/dist/src/run-detail-summary.d.ts +90 -3
- package/dist/src/run-detail-summary.d.ts.map +1 -1
- package/dist/src/run-detail-summary.js +360 -2
- package/dist/src/run-detail-summary.js.map +1 -1
- package/dist/src/run-facets.d.ts +48 -0
- package/dist/src/run-facets.d.ts.map +1 -0
- package/dist/src/run-facets.js +100 -0
- package/dist/src/run-facets.js.map +1 -0
- package/dist/src/run-gateway/interface.d.ts +27 -1
- package/dist/src/run-gateway/interface.d.ts.map +1 -1
- package/dist/src/run-gateway/proxy-run-gateway.d.ts +32 -4
- package/dist/src/run-gateway/proxy-run-gateway.d.ts.map +1 -1
- package/dist/src/run-gateway/proxy-run-gateway.js +101 -5
- package/dist/src/run-gateway/proxy-run-gateway.js.map +1 -1
- package/dist/src/run-gateway/run-request-responder.d.ts +18 -5
- package/dist/src/run-gateway/run-request-responder.d.ts.map +1 -1
- package/dist/src/run-gateway/run-request-responder.js +155 -32
- package/dist/src/run-gateway/run-request-responder.js.map +1 -1
- package/dist/src/run-gateway/store-run-gateway.d.ts +23 -1
- package/dist/src/run-gateway/store-run-gateway.d.ts.map +1 -1
- package/dist/src/run-gateway/store-run-gateway.js +38 -0
- package/dist/src/run-gateway/store-run-gateway.js.map +1 -1
- package/dist/src/search-attributes-schema.d.ts +44 -0
- package/dist/src/search-attributes-schema.d.ts.map +1 -0
- package/dist/src/search-attributes-schema.js +51 -0
- package/dist/src/search-attributes-schema.js.map +1 -0
- package/dist/src/singleton-admission.d.ts +75 -0
- package/dist/src/singleton-admission.d.ts.map +1 -0
- package/dist/src/singleton-admission.js +156 -0
- package/dist/src/singleton-admission.js.map +1 -0
- package/dist/src/singleton-gate.d.ts +23 -8
- package/dist/src/singleton-gate.d.ts.map +1 -1
- package/dist/src/singleton-gate.js +59 -12
- package/dist/src/singleton-gate.js.map +1 -1
- package/dist/src/standard-schema.d.ts +83 -0
- package/dist/src/standard-schema.d.ts.map +1 -0
- package/dist/src/standard-schema.js +31 -0
- package/dist/src/standard-schema.js.map +1 -0
- package/dist/src/step-discovery.d.ts +21 -11
- package/dist/src/step-discovery.d.ts.map +1 -1
- package/dist/src/step-discovery.js +86 -45
- package/dist/src/step-discovery.js.map +1 -1
- package/dist/src/step-ref.d.ts +38 -12
- package/dist/src/step-ref.d.ts.map +1 -1
- package/dist/src/step-ref.js +5 -13
- package/dist/src/step-ref.js.map +1 -1
- package/dist/src/stores/factory.d.ts +6 -0
- package/dist/src/stores/factory.d.ts.map +1 -1
- package/dist/src/stores/factory.js +4 -1
- package/dist/src/stores/factory.js.map +1 -1
- package/dist/src/stores/lucid-helpers.d.ts +2 -0
- package/dist/src/stores/lucid-helpers.d.ts.map +1 -1
- package/dist/src/stores/lucid-helpers.js +7 -0
- package/dist/src/stores/lucid-helpers.js.map +1 -1
- package/dist/src/stores/lucid-mappers.d.ts +25 -0
- package/dist/src/stores/lucid-mappers.d.ts.map +1 -1
- package/dist/src/stores/lucid-mappers.js +81 -18
- package/dist/src/stores/lucid-mappers.js.map +1 -1
- package/dist/src/stores/lucid-schema.d.ts +59 -1
- package/dist/src/stores/lucid-schema.d.ts.map +1 -1
- package/dist/src/stores/lucid-schema.js +271 -25
- package/dist/src/stores/lucid-schema.js.map +1 -1
- package/dist/src/stores/lucid.d.ts +61 -2
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +346 -41
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/telescope/dashboard.d.ts.map +1 -1
- package/dist/src/telescope/dashboard.js +30 -1
- package/dist/src/telescope/dashboard.js.map +1 -1
- package/dist/src/telescope/data-providers.d.ts +19 -1
- package/dist/src/telescope/data-providers.d.ts.map +1 -1
- package/dist/src/telescope/data-providers.js +119 -3
- package/dist/src/telescope/data-providers.js.map +1 -1
- package/dist/src/telescope/extension.d.ts.map +1 -1
- package/dist/src/telescope/extension.js +2 -1
- package/dist/src/telescope/extension.js.map +1 -1
- package/dist/src/telescope/index.d.ts +1 -1
- package/dist/src/telescope/index.d.ts.map +1 -1
- package/dist/src/telescope/index.js +1 -1
- package/dist/src/telescope/index.js.map +1 -1
- package/dist/src/testing/in-memory-state-store.d.ts +44 -15
- package/dist/src/testing/in-memory-state-store.d.ts.map +1 -1
- package/dist/src/testing/in-memory-state-store.js +204 -41
- package/dist/src/testing/in-memory-state-store.js.map +1 -1
- package/dist/src/testing-kit/checkpoint-aggregation-contract.d.ts +16 -0
- package/dist/src/testing-kit/checkpoint-aggregation-contract.d.ts.map +1 -0
- package/dist/src/testing-kit/checkpoint-aggregation-contract.js +228 -0
- package/dist/src/testing-kit/checkpoint-aggregation-contract.js.map +1 -0
- package/dist/src/testing-kit/state-store-conformance.d.ts.map +1 -1
- package/dist/src/testing-kit/state-store-conformance.js +355 -3
- package/dist/src/testing-kit/state-store-conformance.js.map +1 -1
- package/dist/src/transport-pool.d.ts +15 -1
- package/dist/src/transport-pool.d.ts.map +1 -1
- package/dist/src/transport-pool.js +50 -4
- package/dist/src/transport-pool.js.map +1 -1
- package/dist/src/transports/adaptive-concurrency.d.ts +168 -0
- package/dist/src/transports/adaptive-concurrency.d.ts.map +1 -0
- package/dist/src/transports/adaptive-concurrency.js +353 -0
- package/dist/src/transports/adaptive-concurrency.js.map +1 -0
- package/dist/src/transports/bullmq/adaptive-concurrency.d.ts +1 -143
- package/dist/src/transports/bullmq/adaptive-concurrency.d.ts.map +1 -1
- package/dist/src/transports/bullmq/adaptive-concurrency.js +3 -311
- package/dist/src/transports/bullmq/adaptive-concurrency.js.map +1 -1
- package/dist/src/transports/bullmq/bullmq-transport.d.ts +49 -1
- package/dist/src/transports/bullmq/bullmq-transport.d.ts.map +1 -1
- package/dist/src/transports/bullmq/bullmq-transport.js +330 -38
- package/dist/src/transports/bullmq/bullmq-transport.js.map +1 -1
- package/dist/src/transports/bullmq/deps.d.ts +18 -2
- package/dist/src/transports/bullmq/deps.d.ts.map +1 -1
- package/dist/src/transports/bullmq/deps.js +44 -2
- package/dist/src/transports/bullmq/deps.js.map +1 -1
- package/dist/src/transports/db-helpers.d.ts +39 -0
- package/dist/src/transports/db-helpers.d.ts.map +1 -1
- package/dist/src/transports/db-helpers.js +73 -0
- package/dist/src/transports/db-helpers.js.map +1 -1
- package/dist/src/transports/db-remote.d.ts +53 -0
- package/dist/src/transports/db-remote.d.ts.map +1 -0
- package/dist/src/transports/db-remote.js +147 -0
- package/dist/src/transports/db-remote.js.map +1 -0
- package/dist/src/transports/db-schema.d.ts +44 -1
- package/dist/src/transports/db-schema.d.ts.map +1 -1
- package/dist/src/transports/db-schema.js +227 -88
- package/dist/src/transports/db-schema.js.map +1 -1
- package/dist/src/transports/db.d.ts +189 -6
- package/dist/src/transports/db.d.ts.map +1 -1
- package/dist/src/transports/db.js +1291 -137
- package/dist/src/transports/db.js.map +1 -1
- package/dist/src/transports/event-emitter.d.ts +8 -0
- package/dist/src/transports/event-emitter.d.ts.map +1 -1
- package/dist/src/transports/event-emitter.js +36 -3
- package/dist/src/transports/event-emitter.js.map +1 -1
- package/dist/src/transports/factory.d.ts +110 -5
- package/dist/src/transports/factory.d.ts.map +1 -1
- package/dist/src/transports/factory.js +56 -9
- package/dist/src/transports/factory.js.map +1 -1
- package/dist/src/transports/queue-mock-adapter.d.ts +7 -2
- package/dist/src/transports/queue-mock-adapter.d.ts.map +1 -1
- package/dist/src/transports/queue-mock-adapter.js +18 -2
- package/dist/src/transports/queue-mock-adapter.js.map +1 -1
- package/dist/src/transports/queue-remote.d.ts +146 -0
- package/dist/src/transports/queue-remote.d.ts.map +1 -0
- package/dist/src/transports/queue-remote.js +398 -0
- package/dist/src/transports/queue-remote.js.map +1 -0
- package/dist/src/transports/queue.d.ts +159 -6
- package/dist/src/transports/queue.d.ts.map +1 -1
- package/dist/src/transports/queue.js +747 -37
- package/dist/src/transports/queue.js.map +1 -1
- package/dist/src/transports/task-failure.d.ts +31 -0
- package/dist/src/transports/task-failure.d.ts.map +1 -0
- package/dist/src/transports/task-failure.js +50 -0
- package/dist/src/transports/task-failure.js.map +1 -0
- package/dist/src/workflow-als.d.ts +1 -1
- package/dist/src/workflow-als.d.ts.map +1 -1
- package/dist/src/workflow-ctx.d.ts +10 -0
- package/dist/src/workflow-ctx.d.ts.map +1 -1
- package/dist/src/workflow-ctx.js +97 -15
- package/dist/src/workflow-ctx.js.map +1 -1
- package/dist/src/workflow-discovery.d.ts +32 -41
- package/dist/src/workflow-discovery.d.ts.map +1 -1
- package/dist/src/workflow-discovery.js +65 -88
- package/dist/src/workflow-discovery.js.map +1 -1
- package/dist/src/workflow-ref.d.ts +24 -0
- package/dist/src/workflow-ref.d.ts.map +1 -1
- package/dist/src/workflow-ref.js.map +1 -1
- package/dist/stubs/config/durable.stub +6 -0
- package/dist/stubs/config/durable_dashboard.stub +7 -3
- package/dist/stubs/database/migrations/create_durable_tables.stub +2 -1
- package/dist/stubs/database/migrations/create_durable_transport_messages.stub +43 -0
- package/dist/stubs/database/migrations/create_durable_transport_tables.stub +12 -9
- package/dist/stubs/database/migrations/create_durable_transport_worker_keys.stub +1 -1
- package/dist/stubs/make/workflow/main.stub +1 -1
- package/package.json +6 -4
- package/skills/durable-cluster/SKILL.md +80 -11
- package/skills/durable-determinism/SKILL.md +11 -5
- package/skills/durable-reliability/SKILL.md +77 -37
- package/skills/durable-setup/SKILL.md +51 -22
- package/skills/durable-transports-stores/SKILL.md +130 -19
- package/skills/durable-workflows/SKILL.md +71 -18
- package/dist/assets/spa/assets/index-DdB9zxuX.js +0 -16
- package/dist/assets/spa/assets/index-DdB9zxuX.js.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
1
2
|
/**
|
|
2
3
|
* The canonical durable table names. They match the cross-adapter snake_case contract the other
|
|
3
4
|
* Agora/aviary stores use (Drizzle is the reference), so a dashboard or migration can be pointed at
|
|
@@ -12,6 +13,126 @@ export const DURABLE_TABLES = {
|
|
|
12
13
|
bufferedEvents: 'durable_buffered_events',
|
|
13
14
|
schedules: 'durable_schedules',
|
|
14
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* The table where {@link createDurableTables} records which schema it last applied: one row
|
|
18
|
+
* (`id = 'durable'`) holding a fingerprint of {@link DURABLE_SCHEMA_REVISION} and the options that
|
|
19
|
+
* shape the DDL. When the row matches, a boot reads that row and returns without probing a single
|
|
20
|
+
* table, column or index. A missing or different row runs the full, additive check under a
|
|
21
|
+
* cross-process lock, then rewrites the row. Dropped by {@link dropDurableTables}.
|
|
22
|
+
*/
|
|
23
|
+
export const DURABLE_SCHEMA_META_TABLE = 'durable_schema_meta';
|
|
24
|
+
/**
|
|
25
|
+
* The revision of the DDL in this file. Bump it with every change to what {@link createDurableTables}
|
|
26
|
+
* creates or repairs: the new value changes the fingerprint, so every database runs the full check
|
|
27
|
+
* once on its next boot and then goes back to the one-row read. A test pins the SQLite DDL to this
|
|
28
|
+
* number, so a schema change without a bump fails CI.
|
|
29
|
+
*/
|
|
30
|
+
export const DURABLE_SCHEMA_REVISION = 3;
|
|
31
|
+
const SCHEMA_META_ROW = 'durable';
|
|
32
|
+
/** Advisory-lock key for the Postgres heal (`pg_advisory_xact_lock`): "dura" "ble" as a bigint. */
|
|
33
|
+
const PG_SCHEMA_LOCK_KEY = 7_310_315_633_779_045;
|
|
34
|
+
/** Seconds a MySQL boot waits for a sibling's heal (`GET_LOCK`) before checking without the lock. */
|
|
35
|
+
const MYSQL_SCHEMA_LOCK_TIMEOUT_S = 60;
|
|
36
|
+
/**
|
|
37
|
+
* The columns that hold free-form JSON payloads. They are `longtext` on MySQL, where `text` stops at
|
|
38
|
+
* 64KB and a longer value is cut off (strict mode rejects the write; non-strict silently truncates
|
|
39
|
+
* it, and the row then fails to parse on read). Postgres and SQLite `text` has no such limit.
|
|
40
|
+
* `notNull` lists the ones declared `NOT NULL`, which a MySQL `MODIFY` must restate.
|
|
41
|
+
*/
|
|
42
|
+
export const DURABLE_JSON_COLUMNS = {
|
|
43
|
+
[DURABLE_TABLES.runs]: { columns: ['input', 'output', 'error', 'tags', 'search_attributes'] },
|
|
44
|
+
[DURABLE_TABLES.checkpoints]: {
|
|
45
|
+
columns: ['input', 'output', 'error', 'events', 'heartbeat_progress'],
|
|
46
|
+
},
|
|
47
|
+
[DURABLE_TABLES.bufferedSignals]: { columns: ['payload'] },
|
|
48
|
+
[DURABLE_TABLES.bufferedEvents]: { columns: ['payload'] },
|
|
49
|
+
[DURABLE_TABLES.schedules]: { columns: ['tags', 'spec', 'state'], notNull: ['spec', 'state'] },
|
|
50
|
+
};
|
|
51
|
+
/** A collation name we are willing to put in DDL. */
|
|
52
|
+
function safeCollation(value) {
|
|
53
|
+
return value !== undefined && /^[A-Za-z0-9_]+$/.test(value) ? value : undefined;
|
|
54
|
+
}
|
|
55
|
+
/** The collation to align MySQL tables to: the explicit option, else the Knex connection's `collate`. */
|
|
56
|
+
function configuredCollation(client, options) {
|
|
57
|
+
if (options.collation !== undefined)
|
|
58
|
+
return safeCollation(options.collation);
|
|
59
|
+
const settings = client.getWriteClient().client?.connectionSettings;
|
|
60
|
+
return typeof settings?.collate === 'string' ? safeCollation(settings.collate) : undefined;
|
|
61
|
+
}
|
|
62
|
+
/** What the stored marker must equal for a boot to skip the check. */
|
|
63
|
+
function schemaFingerprint(collation) {
|
|
64
|
+
return createHash('sha256')
|
|
65
|
+
.update(`rev=${DURABLE_SCHEMA_REVISION}|collation=${collation ?? ''}`)
|
|
66
|
+
.digest('hex');
|
|
67
|
+
}
|
|
68
|
+
async function readSchemaFingerprint(client) {
|
|
69
|
+
if (!(await client.schema.hasTable(DURABLE_SCHEMA_META_TABLE)))
|
|
70
|
+
return undefined;
|
|
71
|
+
const q = client
|
|
72
|
+
.query()
|
|
73
|
+
.from(DURABLE_SCHEMA_META_TABLE)
|
|
74
|
+
.select('fingerprint')
|
|
75
|
+
.where('id', SCHEMA_META_ROW);
|
|
76
|
+
// A locking read on MySQL: under REPEATABLE READ a plain read could answer from a snapshot older
|
|
77
|
+
// than the sibling heal that just released the lock.
|
|
78
|
+
if (client.dialect.name === 'mysql')
|
|
79
|
+
q.forUpdate();
|
|
80
|
+
const row = (await q.first());
|
|
81
|
+
return row?.fingerprint ?? undefined;
|
|
82
|
+
}
|
|
83
|
+
async function writeSchemaFingerprint(client, fingerprint) {
|
|
84
|
+
if (!(await client.schema.hasTable(DURABLE_SCHEMA_META_TABLE))) {
|
|
85
|
+
await client.schema.createTable(DURABLE_SCHEMA_META_TABLE, (table) => {
|
|
86
|
+
table.string('id', 32).primary();
|
|
87
|
+
table.string('fingerprint', 64).notNullable();
|
|
88
|
+
table.bigInteger('applied_at').notNullable();
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
await client
|
|
92
|
+
.insertQuery()
|
|
93
|
+
.table(DURABLE_SCHEMA_META_TABLE)
|
|
94
|
+
.knexQuery.insert({ id: SCHEMA_META_ROW, fingerprint, applied_at: Date.now() })
|
|
95
|
+
.onConflict('id')
|
|
96
|
+
.merge();
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Run `work` holding the cross-process schema lock, so pods booting together don't race the same
|
|
100
|
+
* `CREATE TABLE`: Postgres takes `pg_advisory_xact_lock` in a transaction (the DDL runs in it and the
|
|
101
|
+
* lock is released by the commit); MySQL takes `GET_LOCK` on a connection pinned by a transaction
|
|
102
|
+
* (its DDL commits implicitly, the lock is the session's) and releases it after. SQLite, and any
|
|
103
|
+
* other dialect, runs `work` without a lock.
|
|
104
|
+
*/
|
|
105
|
+
async function withSchemaLock(connection, logger, work) {
|
|
106
|
+
switch (connection.dialect.name) {
|
|
107
|
+
case 'postgres':
|
|
108
|
+
await connection.transaction(async (trx) => {
|
|
109
|
+
await trx.rawQuery('select pg_advisory_xact_lock(?)', [PG_SCHEMA_LOCK_KEY]);
|
|
110
|
+
await work(trx);
|
|
111
|
+
});
|
|
112
|
+
return;
|
|
113
|
+
case 'mysql':
|
|
114
|
+
await connection.transaction(async (trx) => {
|
|
115
|
+
const result = (await trx.rawQuery("select get_lock(concat('durable_schema:', database()), ?) as got", [MYSQL_SCHEMA_LOCK_TIMEOUT_S]));
|
|
116
|
+
const got = Number(result[0]?.[0]?.got) === 1;
|
|
117
|
+
if (!got) {
|
|
118
|
+
logger.warn(`@adonis-agora/durable: waited ${MYSQL_SCHEMA_LOCK_TIMEOUT_S}s for the durable schema lock; checking the schema without it.`);
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
await work(trx);
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
if (got) {
|
|
125
|
+
await trx
|
|
126
|
+
.rawQuery("select release_lock(concat('durable_schema:', database()))")
|
|
127
|
+
.catch(() => undefined);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
return;
|
|
132
|
+
default:
|
|
133
|
+
await work(connection);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
15
136
|
/**
|
|
16
137
|
* The warning {@link createDurableTables} emits when it actually `ALTER`ed something.
|
|
17
138
|
*
|
|
@@ -24,7 +145,7 @@ export const DURABLE_TABLES = {
|
|
|
24
145
|
*/
|
|
25
146
|
function repairWarning(repairs) {
|
|
26
147
|
return [
|
|
27
|
-
`@adonis-agora/durable: repaired the durable schema in place — added ${repairs.join(', ')}.`,
|
|
148
|
+
`@adonis-agora/durable: repaired the durable schema in place — added or changed ${repairs.join(', ')}.`,
|
|
28
149
|
'The database was behind the installed library version, so these were added at runtime',
|
|
29
150
|
'and nothing recorded it in your migration history. To record it (and to stop depending on the',
|
|
30
151
|
'runtime repair), add a migration that calls `createDurableTables(db, this.db.connectionName)`',
|
|
@@ -46,8 +167,7 @@ function repairWarning(repairs) {
|
|
|
46
167
|
* catalog `SELECT` can never fail that way, so the repair never touches the database unless the
|
|
47
168
|
* index is genuinely missing.
|
|
48
169
|
*/
|
|
49
|
-
async function indexExists(
|
|
50
|
-
const connection = db.connection(connectionName);
|
|
170
|
+
async function indexExists(connection, indexName) {
|
|
51
171
|
switch (connection.dialect.name) {
|
|
52
172
|
case 'postgres': {
|
|
53
173
|
const rows = await connection
|
|
@@ -86,8 +206,17 @@ async function indexExists(db, connectionName, indexName) {
|
|
|
86
206
|
* Idempotent DDL for the durable tables, expressed via Lucid's schema builder (Knex). Works across
|
|
87
207
|
* SQLite / Postgres / MySQL. Timestamps and `wake_at` are stored as epoch-ms `bigInteger` columns so
|
|
88
208
|
* the store never depends on a native date type and replay is exact across engines. JSON payloads
|
|
89
|
-
* (`input`/`output`/`error`/`events`/`tags`/`search_attributes`) are stored as
|
|
209
|
+
* (`input`/`output`/`error`/`events`/`tags`/`search_attributes`) are stored as text and (de)serialized
|
|
90
210
|
* by the store, so the schema is portable (SQLite has no JSON column type; Postgres/MySQL accept text).
|
|
211
|
+
* On MySQL those columns are `longtext` (see {@link DURABLE_JSON_COLUMNS}); an existing `text` one is
|
|
212
|
+
* widened in place.
|
|
213
|
+
*
|
|
214
|
+
* Boots are cheap once the schema is current: the call reads one row of
|
|
215
|
+
* {@link DURABLE_SCHEMA_META_TABLE} and returns when its fingerprint matches. Otherwise it checks
|
|
216
|
+
* every table, column and index under a cross-process lock (Postgres advisory lock, MySQL
|
|
217
|
+
* `GET_LOCK`), so pods booting together against a fresh database don't race the same `CREATE TABLE`,
|
|
218
|
+
* and records the fingerprint. A schema changed by hand behind the marker is not re-checked; pass
|
|
219
|
+
* `{ force: true }` for that.
|
|
91
220
|
*
|
|
92
221
|
* Call this on boot (e.g. from a `StateStore.ensureSchema`) or once at deploy time. For an AdonisJS app
|
|
93
222
|
* prefer the published migration (`node ace configure @adonis-agora/durable`); this helper is for standalone
|
|
@@ -103,10 +232,36 @@ async function indexExists(db, connectionName, indexName) {
|
|
|
103
232
|
* repair. Pass `options.logger` to route it; it defaults to `console`.
|
|
104
233
|
*/
|
|
105
234
|
export async function createDurableTables(db, connectionName, options = {}) {
|
|
235
|
+
const connection = db.connection(connectionName);
|
|
236
|
+
const logger = options.logger ?? console;
|
|
237
|
+
const collation = connection.dialect.name === 'mysql' ? configuredCollation(connection, options) : undefined;
|
|
238
|
+
const expected = schemaFingerprint(collation);
|
|
239
|
+
// The steady-state boot: one catalog probe and one PK read, no per-table checks.
|
|
240
|
+
if (!options.force && (await readSchemaFingerprint(connection)) === expected)
|
|
241
|
+
return;
|
|
242
|
+
await withSchemaLock(connection, logger, async (client) => {
|
|
243
|
+
// A sibling may have healed while this process waited for the lock.
|
|
244
|
+
if (!options.force && (await readSchemaFingerprint(client)) === expected)
|
|
245
|
+
return;
|
|
246
|
+
await healDurableTables(client, collation, logger);
|
|
247
|
+
await writeSchemaFingerprint(client, expected);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
/** The additive check-and-repair behind {@link createDurableTables}, on one client (or transaction). */
|
|
251
|
+
async function healDurableTables(client, collation, logger) {
|
|
106
252
|
// Knex's schema builder is stateful — operations chained on one instance run together. Take a FRESH
|
|
107
|
-
// `
|
|
108
|
-
//
|
|
109
|
-
const conn = () =>
|
|
253
|
+
// `client.schema` for every hasTable/createTable so each DDL statement executes exactly once, all on
|
|
254
|
+
// the store's own connection (or the lock-holding transaction).
|
|
255
|
+
const conn = () => client.schema;
|
|
256
|
+
const isMysql = client.dialect.name === 'mysql';
|
|
257
|
+
// MySQL: create new tables with the configured collation (CONVERT below aligns existing ones).
|
|
258
|
+
const charset = collation?.split('_')[0];
|
|
259
|
+
const tableCollation = (table) => {
|
|
260
|
+
if (!isMysql || !collation || !charset)
|
|
261
|
+
return;
|
|
262
|
+
table.charset(charset);
|
|
263
|
+
table.collate(collation);
|
|
264
|
+
};
|
|
110
265
|
// `<table>.<column-or-index>` for every ALTER actually issued below. Stays empty on the
|
|
111
266
|
// fresh-install path (a missing table is CREATEd whole and never reaches a `hasColumn` branch),
|
|
112
267
|
// which is what makes the warning at the end mean "your schema was wrong" instead of "boot happened".
|
|
@@ -116,7 +271,7 @@ export async function createDurableTables(db, connectionName, options = {}) {
|
|
|
116
271
|
// best-effort path stays — still transaction-unsafe, but only outside the store's declared
|
|
117
272
|
// targets.
|
|
118
273
|
const ensureIndex = async (table, columns, indexName) => {
|
|
119
|
-
const known = await indexExists(
|
|
274
|
+
const known = await indexExists(client, indexName);
|
|
120
275
|
if (known === true)
|
|
121
276
|
return;
|
|
122
277
|
if (known === null) {
|
|
@@ -133,22 +288,24 @@ export async function createDurableTables(db, connectionName, options = {}) {
|
|
|
133
288
|
};
|
|
134
289
|
if (!(await conn().hasTable(DURABLE_TABLES.runs))) {
|
|
135
290
|
await conn().createTable(DURABLE_TABLES.runs, (table) => {
|
|
291
|
+
tableCollation(table);
|
|
136
292
|
table.string('id').primary();
|
|
137
293
|
table.string('workflow').notNullable();
|
|
138
294
|
table.string('workflow_version').notNullable();
|
|
139
295
|
table.string('status').notNullable();
|
|
140
296
|
table.string('namespace').notNullable().defaultTo('default');
|
|
141
297
|
table.string('origin');
|
|
142
|
-
table.text('input');
|
|
143
|
-
table.text('output');
|
|
144
|
-
table.text('error');
|
|
298
|
+
table.text('input', 'longtext');
|
|
299
|
+
table.text('output', 'longtext');
|
|
300
|
+
table.text('error', 'longtext');
|
|
145
301
|
table.bigInteger('wake_at');
|
|
146
302
|
table.string('locked_by');
|
|
147
303
|
table.bigInteger('locked_until');
|
|
148
304
|
table.integer('recovery_attempts');
|
|
149
|
-
table.text('tags');
|
|
150
|
-
table.text('search_attributes');
|
|
305
|
+
table.text('tags', 'longtext');
|
|
306
|
+
table.text('search_attributes', 'longtext');
|
|
151
307
|
table.integer('priority');
|
|
308
|
+
table.text('awaiting_decision_task_id');
|
|
152
309
|
table.bigInteger('created_at').notNullable();
|
|
153
310
|
table.bigInteger('updated_at').notNullable();
|
|
154
311
|
table.index(['status'], 'durable_runs_status_idx');
|
|
@@ -187,22 +344,31 @@ export async function createDurableTables(db, connectionName, options = {}) {
|
|
|
187
344
|
});
|
|
188
345
|
repairs.push(`${DURABLE_TABLES.runs}.origin`);
|
|
189
346
|
}
|
|
347
|
+
if (!(await conn().hasColumn(DURABLE_TABLES.runs, 'awaiting_decision_task_id'))) {
|
|
348
|
+
// Remote-turn decision marker (multi-instance decisions): nullable, so an existing run reads back
|
|
349
|
+
// as "not awaiting a dispatched turn". TEXT: it embeds the run id plus a UUID.
|
|
350
|
+
await conn().alterTable(DURABLE_TABLES.runs, (table) => {
|
|
351
|
+
table.text('awaiting_decision_task_id');
|
|
352
|
+
});
|
|
353
|
+
repairs.push(`${DURABLE_TABLES.runs}.awaiting_decision_task_id`);
|
|
354
|
+
}
|
|
190
355
|
// Index-only repair: the dashboard's default (unfiltered) listing orders by created_at DESC —
|
|
191
356
|
// without this a page load over a large table is a full sort.
|
|
192
357
|
await ensureIndex(DURABLE_TABLES.runs, ['created_at'], 'durable_runs_created_idx');
|
|
193
358
|
}
|
|
194
359
|
if (!(await conn().hasTable(DURABLE_TABLES.checkpoints))) {
|
|
195
360
|
await conn().createTable(DURABLE_TABLES.checkpoints, (table) => {
|
|
361
|
+
tableCollation(table);
|
|
196
362
|
table.string('run_id').notNullable();
|
|
197
363
|
table.integer('seq').notNullable();
|
|
198
364
|
table.string('name').notNullable();
|
|
199
365
|
table.string('kind').notNullable();
|
|
200
366
|
table.string('step_id').notNullable();
|
|
201
367
|
table.string('status').notNullable();
|
|
202
|
-
table.text('input');
|
|
203
|
-
table.text('output');
|
|
204
|
-
table.text('error');
|
|
205
|
-
table.text('events');
|
|
368
|
+
table.text('input', 'longtext');
|
|
369
|
+
table.text('output', 'longtext');
|
|
370
|
+
table.text('error', 'longtext');
|
|
371
|
+
table.text('events', 'longtext');
|
|
206
372
|
table.integer('attempts').notNullable();
|
|
207
373
|
table.string('worker_group');
|
|
208
374
|
table.string('queue');
|
|
@@ -212,9 +378,11 @@ export async function createDurableTables(db, connectionName, options = {}) {
|
|
|
212
378
|
table.bigInteger('started_at').notNullable();
|
|
213
379
|
table.bigInteger('finished_at').notNullable();
|
|
214
380
|
table.bigInteger('last_heartbeat_at');
|
|
215
|
-
table.text('heartbeat_progress');
|
|
381
|
+
table.text('heartbeat_progress', 'longtext');
|
|
216
382
|
table.primary(['run_id', 'seq']);
|
|
217
383
|
table.index(['run_id', 'name'], 'durable_checkpoints_name_idx');
|
|
384
|
+
// The run detail's per-fan reads (`checkpointStats({ group })`, a fan page in seq order).
|
|
385
|
+
table.index(['run_id', 'parallel_group', 'seq'], 'durable_step_checkpoints_group_idx');
|
|
218
386
|
});
|
|
219
387
|
}
|
|
220
388
|
else {
|
|
@@ -231,7 +399,7 @@ export async function createDurableTables(db, connectionName, options = {}) {
|
|
|
231
399
|
// no liveness claim (absent ≠ silent-since-epoch).
|
|
232
400
|
await conn().alterTable(DURABLE_TABLES.checkpoints, (table) => {
|
|
233
401
|
table.bigInteger('last_heartbeat_at');
|
|
234
|
-
table.text('heartbeat_progress');
|
|
402
|
+
table.text('heartbeat_progress', 'longtext');
|
|
235
403
|
});
|
|
236
404
|
// Both columns land in one ALTER, so both are reported — the operator needs the column list,
|
|
237
405
|
// not the statement count.
|
|
@@ -246,9 +414,11 @@ export async function createDurableTables(db, connectionName, options = {}) {
|
|
|
246
414
|
});
|
|
247
415
|
repairs.push(`${DURABLE_TABLES.checkpoints}.queue`);
|
|
248
416
|
}
|
|
417
|
+
await ensureIndex(DURABLE_TABLES.checkpoints, ['run_id', 'parallel_group', 'seq'], 'durable_step_checkpoints_group_idx');
|
|
249
418
|
}
|
|
250
419
|
if (!(await conn().hasTable(DURABLE_TABLES.attributes))) {
|
|
251
420
|
await conn().createTable(DURABLE_TABLES.attributes, (table) => {
|
|
421
|
+
tableCollation(table);
|
|
252
422
|
table.string('run_id').notNullable();
|
|
253
423
|
table.string('key').notNullable();
|
|
254
424
|
table.string('str_value');
|
|
@@ -260,6 +430,7 @@ export async function createDurableTables(db, connectionName, options = {}) {
|
|
|
260
430
|
}
|
|
261
431
|
if (!(await conn().hasTable(DURABLE_TABLES.signalWaiters))) {
|
|
262
432
|
await conn().createTable(DURABLE_TABLES.signalWaiters, (table) => {
|
|
433
|
+
tableCollation(table);
|
|
263
434
|
table.string('token').primary();
|
|
264
435
|
table.string('run_id').notNullable();
|
|
265
436
|
table.integer('seq').notNullable();
|
|
@@ -283,9 +454,10 @@ export async function createDurableTables(db, connectionName, options = {}) {
|
|
|
283
454
|
}
|
|
284
455
|
if (!(await conn().hasTable(DURABLE_TABLES.bufferedSignals))) {
|
|
285
456
|
await conn().createTable(DURABLE_TABLES.bufferedSignals, (table) => {
|
|
457
|
+
tableCollation(table);
|
|
286
458
|
table.increments('id').primary();
|
|
287
459
|
table.string('token').notNullable();
|
|
288
|
-
table.text('payload');
|
|
460
|
+
table.text('payload', 'longtext');
|
|
289
461
|
table.index(['token'], 'durable_buffered_signals_token_idx');
|
|
290
462
|
});
|
|
291
463
|
}
|
|
@@ -295,9 +467,10 @@ export async function createDurableTables(db, connectionName, options = {}) {
|
|
|
295
467
|
// an exact row. `published_at` is epoch-ms (for oldest-first scan + optional TTL pruning).
|
|
296
468
|
if (!(await conn().hasTable(DURABLE_TABLES.bufferedEvents))) {
|
|
297
469
|
await conn().createTable(DURABLE_TABLES.bufferedEvents, (table) => {
|
|
470
|
+
tableCollation(table);
|
|
298
471
|
table.string('id').primary();
|
|
299
472
|
table.string('name').notNullable();
|
|
300
|
-
table.text('payload');
|
|
473
|
+
table.text('payload', 'longtext');
|
|
301
474
|
table.bigInteger('published_at').notNullable();
|
|
302
475
|
table.index(['name', 'published_at'], 'durable_buffered_events_name_idx');
|
|
303
476
|
});
|
|
@@ -307,14 +480,15 @@ export async function createDurableTables(db, connectionName, options = {}) {
|
|
|
307
480
|
// again), exact, so `updateSchedule`'s compare-and-set on it is reliable on every dialect.
|
|
308
481
|
if (!(await conn().hasTable(DURABLE_TABLES.schedules))) {
|
|
309
482
|
await conn().createTable(DURABLE_TABLES.schedules, (table) => {
|
|
483
|
+
tableCollation(table);
|
|
310
484
|
table.string('id').primary();
|
|
311
485
|
table.string('namespace').notNullable().defaultTo('default');
|
|
312
486
|
table.string('workflow').notNullable();
|
|
313
487
|
table.boolean('paused').notNullable().defaultTo(false);
|
|
314
488
|
table.bigInteger('next_fire_at');
|
|
315
|
-
table.text('tags');
|
|
316
|
-
table.text('spec').notNullable();
|
|
317
|
-
table.text('state').notNullable();
|
|
489
|
+
table.text('tags', 'longtext');
|
|
490
|
+
table.text('spec', 'longtext').notNullable();
|
|
491
|
+
table.text('state', 'longtext').notNullable();
|
|
318
492
|
table.bigInteger('created_at').notNullable();
|
|
319
493
|
table.bigInteger('updated_at').notNullable();
|
|
320
494
|
// The worker tick's "due by T" scan: `paused = false AND next_fire_at <= T`.
|
|
@@ -324,13 +498,85 @@ export async function createDurableTables(db, connectionName, options = {}) {
|
|
|
324
498
|
// ONE warning for the whole call, listing every column added, or none at all. Not one per ALTER:
|
|
325
499
|
// an operator needs to know their schema was behind and by what, and a burst of lines is easier to
|
|
326
500
|
// lose than a single one.
|
|
501
|
+
if (isMysql) {
|
|
502
|
+
repairs.push(...(await widenMysqlJsonColumns(client)));
|
|
503
|
+
if (collation && charset) {
|
|
504
|
+
repairs.push(...(await alignMysqlCollation(client, charset, collation, logger)));
|
|
505
|
+
}
|
|
506
|
+
}
|
|
327
507
|
if (repairs.length > 0) {
|
|
328
|
-
|
|
508
|
+
logger.warn(repairWarning(repairs));
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* MySQL: `MODIFY` every JSON column that is not `longtext` yet (a table created before they were
|
|
513
|
+
* `longtext` holds them as `text`, capped at 64KB). One `ALTER` per table with every column it needs,
|
|
514
|
+
* since MySQL rebuilds the table for each; a table already widened is not touched. Returns the
|
|
515
|
+
* columns it changed.
|
|
516
|
+
*/
|
|
517
|
+
async function widenMysqlJsonColumns(client) {
|
|
518
|
+
return widenMysqlLongtextColumns(client, DURABLE_JSON_COLUMNS);
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* MySQL: `MODIFY` to `longtext` every column of `spec` that exists and isn't `longtext` yet, one
|
|
522
|
+
* `ALTER` per table. Shared by the store schema and the db transport's (`createDurableTransportTables`).
|
|
523
|
+
* Returns the columns it changed.
|
|
524
|
+
*/
|
|
525
|
+
export async function widenMysqlLongtextColumns(client, spec) {
|
|
526
|
+
const tables = Object.keys(spec);
|
|
527
|
+
const rows = (await client
|
|
528
|
+
.query()
|
|
529
|
+
.from('information_schema.columns')
|
|
530
|
+
.select('table_name as t', 'column_name as c', 'data_type as d')
|
|
531
|
+
.whereRaw('table_schema = database()')
|
|
532
|
+
.whereIn('table_name', tables));
|
|
533
|
+
const widened = [];
|
|
534
|
+
for (const [table, columns] of Object.entries(spec)) {
|
|
535
|
+
const narrow = columns.columns.filter((column) => {
|
|
536
|
+
const row = rows.find((r) => r.t === table && r.c === column);
|
|
537
|
+
return row !== undefined && row.d.toLowerCase() !== 'longtext';
|
|
538
|
+
});
|
|
539
|
+
if (narrow.length === 0)
|
|
540
|
+
continue;
|
|
541
|
+
const modify = narrow
|
|
542
|
+
.map((column) => `modify \`${column}\` longtext ${columns.notNull?.includes(column) ? 'not null' : 'null'}`)
|
|
543
|
+
.join(', ');
|
|
544
|
+
await client.rawQuery(`alter table \`${table}\` ${modify}`);
|
|
545
|
+
widened.push(...narrow.map((column) => `${table}.${column} (longtext)`));
|
|
546
|
+
}
|
|
547
|
+
return widened;
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* MySQL: `CONVERT` each durable table whose collation is not `collation` (tables created by an older
|
|
551
|
+
* version, or before the option was set, carry the server default). A failed `CONVERT` is warned and
|
|
552
|
+
* left for the next forced check rather than failing the boot. Returns the tables it converted.
|
|
553
|
+
*/
|
|
554
|
+
async function alignMysqlCollation(client, charset, collation, logger) {
|
|
555
|
+
const tables = [...Object.values(DURABLE_TABLES), DURABLE_SCHEMA_META_TABLE];
|
|
556
|
+
const rows = (await client
|
|
557
|
+
.query()
|
|
558
|
+
.from('information_schema.tables')
|
|
559
|
+
.select('table_name as t', 'table_collation as c')
|
|
560
|
+
.whereRaw('table_schema = database()')
|
|
561
|
+
.whereIn('table_name', tables));
|
|
562
|
+
const converted = [];
|
|
563
|
+
for (const row of rows) {
|
|
564
|
+
if (row.c == null || row.c === collation)
|
|
565
|
+
continue;
|
|
566
|
+
try {
|
|
567
|
+
await client.rawQuery(`alter table \`${row.t}\` convert to character set ${charset} collate ${collation}`);
|
|
568
|
+
converted.push(`${row.t} (collation ${collation})`);
|
|
569
|
+
}
|
|
570
|
+
catch (err) {
|
|
571
|
+
logger.warn(`@adonis-agora/durable: could not convert \`${row.t}\` to collation ${collation} (left as-is): ${err instanceof Error ? err.message : String(err)}`);
|
|
572
|
+
}
|
|
329
573
|
}
|
|
574
|
+
return converted;
|
|
330
575
|
}
|
|
331
576
|
/** Drop every durable table (reverse FK order). Used by tests and migration `down`. */
|
|
332
577
|
export async function dropDurableTables(db, connectionName) {
|
|
333
578
|
const conn = () => db.connection(connectionName).schema;
|
|
579
|
+
await conn().dropTableIfExists(DURABLE_SCHEMA_META_TABLE);
|
|
334
580
|
await conn().dropTableIfExists(DURABLE_TABLES.schedules);
|
|
335
581
|
await conn().dropTableIfExists(DURABLE_TABLES.bufferedEvents);
|
|
336
582
|
await conn().dropTableIfExists(DURABLE_TABLES.bufferedSignals);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lucid-schema.js","sourceRoot":"","sources":["../../../src/stores/lucid-schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lucid-schema.js","sourceRoot":"","sources":["../../../src/stores/lucid-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,25 @@
|
|
|
1
1
|
import type { Database } from '@adonisjs/lucid/database';
|
|
2
|
-
import type { ChildWait, RunFacetQuery, RunQuery, RunStatus, RunValueAxis, RunValueFacetOptions, RunValueFacetRow, ScheduleQuery, ScheduleRecord, SignalWaiter, StateStore, StepCheckpoint, WorkflowRun } from '../interfaces.js';
|
|
2
|
+
import type { CheckpointQuery, CheckpointStat, ChildWait, RunFacetQuery, RunFacetRow, RunQuery, RunStatus, RunValueAxis, RunValueFacetOptions, RunValueFacetRow, ScheduleQuery, ScheduleRecord, SignalWaiter, StateStore, StepCheckpoint, WorkflowRun } from '../interfaces.js';
|
|
3
3
|
export interface LucidStateStoreOptions {
|
|
4
4
|
/**
|
|
5
5
|
* The Lucid connection name to use. Defaults to the connection's primary (the `Database` default).
|
|
6
6
|
* Pass this if the durable tables live on a dedicated connection.
|
|
7
7
|
*/
|
|
8
8
|
connectionName?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Confine the store's RUN reads to one namespace (`getRun`, `listRuns`, `countRuns`, the facet
|
|
11
|
+
* queries and the recovery/dispatch/timer scans): a tenant-boundary view. Writes stay unscoped.
|
|
12
|
+
* Omit (or `{ namespace: undefined }`) for the operator view that sees every namespace. The
|
|
13
|
+
* `scopeReads` config option builds this from `namespace` via {@link LucidStateStore.withScope}.
|
|
14
|
+
*/
|
|
15
|
+
scope?: {
|
|
16
|
+
namespace?: string | undefined;
|
|
17
|
+
} | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* MySQL/MariaDB: the collation `ensureSchema` creates and aligns the durable tables to (see
|
|
20
|
+
* `CreateDurableTablesOptions.collation`). Ignored on other dialects.
|
|
21
|
+
*/
|
|
22
|
+
collation?: string | undefined;
|
|
9
23
|
}
|
|
10
24
|
/**
|
|
11
25
|
* A production-grade, persistent `StateStore` backed by AdonisJS **Lucid** (Knex). Runs, checkpoints,
|
|
@@ -21,7 +35,19 @@ export interface LucidStateStoreOptions {
|
|
|
21
35
|
export declare class LucidStateStore implements StateStore {
|
|
22
36
|
private readonly db;
|
|
23
37
|
private readonly connectionName;
|
|
38
|
+
private readonly options;
|
|
39
|
+
/** The namespace run reads are fenced to, or undefined for the operator view. */
|
|
40
|
+
private readonly scopeNamespace;
|
|
24
41
|
constructor(db: Database, options?: LucidStateStoreOptions);
|
|
42
|
+
/**
|
|
43
|
+
* A store over the same `Database` whose run reads are confined to `scope.namespace` (see
|
|
44
|
+
* {@link LucidStateStoreOptions.scope}). `{ namespace: undefined }` is the unscoped operator view.
|
|
45
|
+
*/
|
|
46
|
+
withScope(scope: {
|
|
47
|
+
namespace?: string | undefined;
|
|
48
|
+
}): LucidStateStore;
|
|
49
|
+
/** Fence a runs-table read to the store's scope (no-op for the operator view). */
|
|
50
|
+
private fenced;
|
|
25
51
|
/** The base query client (or a named connection's), used unless an explicit tx client is passed. */
|
|
26
52
|
private client;
|
|
27
53
|
/** Idempotently provision the durable tables (called on boot when `autoSchema` is on). */
|
|
@@ -29,11 +55,24 @@ export declare class LucidStateStore implements StateStore {
|
|
|
29
55
|
createRun(run: WorkflowRun): Promise<void>;
|
|
30
56
|
updateRun(runId: string, patch: Partial<WorkflowRun>): Promise<void>;
|
|
31
57
|
updateRunIf(runId: string, expectedStatuses: RunStatus[], patch: Partial<WorkflowRun>): Promise<boolean>;
|
|
58
|
+
/** Whether the runs table has `awaiting_decision_task_id`, probed once per store and cached. */
|
|
59
|
+
private decisionMarkerColumn;
|
|
60
|
+
private hasDecisionMarkerColumn;
|
|
61
|
+
/**
|
|
62
|
+
* The row patch for `patch`, plus — when it settles the run terminally — the run's tags without the
|
|
63
|
+
* singleton admission marker, so a terminal settle releases the slot. The current tags are read
|
|
64
|
+
* under a row lock (Postgres/MySQL) so an admission committing concurrently can't be overwritten
|
|
65
|
+
* with a stale tag list.
|
|
66
|
+
*/
|
|
67
|
+
private releaseSlot;
|
|
68
|
+
tryAdmitSingleton(runId: string, tag: string, workflow: string, limit: number, retryWakeAt?: number): Promise<boolean>;
|
|
32
69
|
getRun(runId: string): Promise<WorkflowRun | null>;
|
|
33
70
|
deleteRun(runId: string): Promise<void>;
|
|
71
|
+
deleteRuns(runIds: string[]): Promise<void>;
|
|
34
72
|
getCheckpoint(runId: string, seq: number): Promise<StepCheckpoint | null>;
|
|
35
73
|
saveCheckpoint(checkpoint: StepCheckpoint): Promise<void>;
|
|
36
74
|
saveCheckpointIfPending(checkpoint: StepCheckpoint): Promise<boolean>;
|
|
75
|
+
saveCheckpointsIfPending(checkpoints: StepCheckpoint[]): Promise<boolean[]>;
|
|
37
76
|
/** Persist the latest worker heartbeat on the step's checkpoint row (see the interface doc).
|
|
38
77
|
* A targeted two-column UPDATE — never an upsert: a beat racing the checkpoint's own insert (or
|
|
39
78
|
* outliving a deleted run) matches zero rows and is a silent no-op, by design. */
|
|
@@ -46,7 +85,7 @@ export declare class LucidStateStore implements StateStore {
|
|
|
46
85
|
*/
|
|
47
86
|
private upsertCheckpoint;
|
|
48
87
|
listIncompleteRuns(namespace?: string): Promise<WorkflowRun[]>;
|
|
49
|
-
listOrphanedRuns(nowMs: number, limit: number, namespace?: string): Promise<WorkflowRun[]>;
|
|
88
|
+
listOrphanedRuns(nowMs: number, limit: number, namespace?: string, owner?: string): Promise<WorkflowRun[]>;
|
|
50
89
|
listPendingRuns(limit: number, namespace?: string): Promise<WorkflowRun[]>;
|
|
51
90
|
listDueTimers(nowMs: number, namespace?: string, limit?: number): Promise<WorkflowRun[]>;
|
|
52
91
|
tryLockRun(runId: string, owner: string, leaseUntilMs: number, nowMs: number): Promise<boolean>;
|
|
@@ -61,6 +100,7 @@ export declare class LucidStateStore implements StateStore {
|
|
|
61
100
|
compactCheckpoints(runId: string, fromSeq: number, toSeq: number, into: StepCheckpoint): Promise<void>;
|
|
62
101
|
removeSignalWaiter(waiter: SignalWaiter): Promise<void>;
|
|
63
102
|
bufferSignal(token: string, payload: unknown): Promise<void>;
|
|
103
|
+
listBufferedSignalTokens(prefix: string, limit: number): Promise<string[]>;
|
|
64
104
|
takeBufferedSignal(token: string): Promise<{
|
|
65
105
|
payload: unknown;
|
|
66
106
|
} | null>;
|
|
@@ -75,11 +115,14 @@ export declare class LucidStateStore implements StateStore {
|
|
|
75
115
|
payload: unknown;
|
|
76
116
|
publishedAt: number;
|
|
77
117
|
}>>;
|
|
118
|
+
pruneBufferedEvents(publishedBefore: number, limit: number): Promise<number>;
|
|
78
119
|
removeBufferedEvent(id: string): Promise<boolean>;
|
|
79
120
|
transaction<T>(work: (tx: {
|
|
80
121
|
raw: unknown;
|
|
81
122
|
saveCheckpoint: (cp: StepCheckpoint) => Promise<void>;
|
|
82
123
|
}) => Promise<T>): Promise<T>;
|
|
124
|
+
/** One `GROUP BY status, origin` over the same predicates {@link listRuns} applies. */
|
|
125
|
+
runFacets(query: RunFacetQuery): Promise<RunFacetRow[]>;
|
|
83
126
|
/** One `COUNT(*)` over the same predicates {@link listRuns} applies. */
|
|
84
127
|
countRuns(query: Omit<RunQuery, 'page' | 'size'>): Promise<number>;
|
|
85
128
|
saveSchedule(record: ScheduleRecord): Promise<void>;
|
|
@@ -117,6 +160,22 @@ export declare class LucidStateStore implements StateStore {
|
|
|
117
160
|
getLatestCheckpointByName(runId: string, name: string): Promise<StepCheckpoint | undefined>;
|
|
118
161
|
listCheckpointsByNamePrefix(runId: string, prefixes: string[]): Promise<StepCheckpoint[]>;
|
|
119
162
|
countCheckpoints(runId: string, fromSeq: number, toSeq: number, statuses: StepCheckpoint['status'][]): Promise<number>;
|
|
163
|
+
/**
|
|
164
|
+
* One `GROUP BY parallel_group, status, <name kind>` over the run's checkpoints — the buckets a run
|
|
165
|
+
* detail summarizes a fan from, without loading its rows. The name-kind `CASE` is the SQL of
|
|
166
|
+
* `checkpointNameKind` (case-sensitive prefix tests, like `startsWith`), and
|
|
167
|
+
* `min(coalesce(enqueued_at, started_at))` reads `enqueuedAt` the way {@link listCheckpoints} does.
|
|
168
|
+
*/
|
|
169
|
+
checkpointStats(runId: string, opts?: {
|
|
170
|
+
group?: string | undefined;
|
|
171
|
+
}): Promise<CheckpointStat[]>;
|
|
172
|
+
/**
|
|
173
|
+
* The run's checkpoints matching `query`, in `seq` order and paged in the database — a fan's
|
|
174
|
+
* failures or one page of its members without the rest of the run. An excluded group keeps the
|
|
175
|
+
* ungrouped rows (`parallel_group is null or not in (...)`); an empty `statuses`/`namePrefixes`
|
|
176
|
+
* matches nothing, so it returns before querying.
|
|
177
|
+
*/
|
|
178
|
+
queryCheckpoints(runId: string, query: CheckpointQuery): Promise<StepCheckpoint[]>;
|
|
120
179
|
/** Rewrite a run's normalized attribute rows: delete the old set, insert the current one. Mirrors
|
|
121
180
|
* the in-memory store's reindex so the side-table always reflects the run's live searchAttributes. */
|
|
122
181
|
private reindexAttributes;
|