@rocicorp/zero 0.20.2025050400 → 0.20.2025050600
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/analyze-query/src/bin-analyze.js +10 -3
- package/out/analyze-query/src/bin-analyze.js.map +1 -1
- package/out/{chunk-KOXC55U7.js → chunk-EBZYAQDK.js} +14 -5
- package/out/chunk-EBZYAQDK.js.map +7 -0
- package/out/{chunk-54ZZCBOP.js → chunk-N44AEZOH.js} +2 -2
- package/out/{chunk-IFAC3PDK.js → chunk-VA2YVVTK.js} +58 -9
- package/out/{chunk-IFAC3PDK.js.map → chunk-VA2YVVTK.js.map} +2 -2
- package/out/{inspector-Z55GQ5JV.js → inspector-GCX7QH7K.js} +3 -3
- package/out/react.js +1 -1
- package/out/solid.js +3 -3
- package/out/z2s/src/compiler.d.ts.map +1 -1
- package/out/z2s/src/compiler.js +5 -1
- package/out/z2s/src/compiler.js.map +1 -1
- package/out/zero-cache/src/config/network.d.ts +5 -0
- package/out/zero-cache/src/config/network.d.ts.map +1 -0
- package/out/zero-cache/src/config/network.js +47 -0
- package/out/zero-cache/src/config/network.js.map +1 -0
- package/out/zero-cache/src/config/normalize.d.ts +29 -0
- package/out/zero-cache/src/config/normalize.d.ts.map +1 -0
- package/out/zero-cache/src/config/normalize.js +73 -0
- package/out/zero-cache/src/config/normalize.js.map +1 -0
- package/out/zero-cache/src/config/zero-config.d.ts +262 -99
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +64 -32
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +19 -4
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/main.d.ts +1 -1
- package/out/zero-cache/src/server/main.d.ts.map +1 -1
- package/out/zero-cache/src/server/main.js +14 -26
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/server/replicator.js +15 -4
- package/out/zero-cache/src/server/replicator.js.map +1 -1
- package/out/zero-cache/src/server/runner/run-worker.d.ts +7 -0
- package/out/zero-cache/src/server/runner/run-worker.d.ts.map +1 -1
- package/out/zero-cache/src/server/runner/run-worker.js +34 -73
- package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
- package/out/zero-cache/src/server/runner/runtime.d.ts.map +1 -1
- package/out/zero-cache/src/server/runner/runtime.js +12 -1
- package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
- package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts +2 -9
- package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts.map +1 -1
- package/out/zero-cache/src/server/runner/zero-dispatcher.js +9 -46
- package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/server/syncer.js +4 -2
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/server/worker-dispatcher.d.ts +16 -0
- package/out/zero-cache/src/server/worker-dispatcher.d.ts.map +1 -0
- package/out/zero-cache/src/server/worker-dispatcher.js +99 -0
- package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -0
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.js +12 -6
- package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +6 -3
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +31 -16
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +4 -15
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.js +8 -0
- package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +2 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js +19 -13
- package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.d.ts +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +6 -2
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/http-service.d.ts +5 -2
- package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
- package/out/zero-cache/src/services/http-service.js +27 -11
- package/out/zero-cache/src/services/http-service.js.map +1 -1
- package/out/zero-cache/src/services/statz.d.ts +1 -1
- package/out/zero-cache/src/services/statz.d.ts.map +1 -1
- package/out/zero-cache/src/services/statz.js +6 -7
- package/out/zero-cache/src/services/statz.js.map +1 -1
- package/out/zero-cache/src/types/error-for-client.d.ts +1 -1
- package/out/zero-cache/src/types/pg.d.ts.map +1 -1
- package/out/zero-cache/src/types/pg.js +23 -21
- package/out/zero-cache/src/types/pg.js.map +1 -1
- package/out/zero-cache/src/{services/dispatcher → types}/websocket-handoff.d.ts +18 -2
- package/out/zero-cache/src/types/websocket-handoff.d.ts.map +1 -0
- package/out/zero-cache/src/{services/dispatcher → types}/websocket-handoff.js +14 -6
- package/out/zero-cache/src/types/websocket-handoff.js.map +1 -0
- package/out/zero-cache/src/{services/dispatcher → workers}/connect-params.d.ts +1 -1
- package/out/zero-cache/src/workers/connect-params.d.ts.map +1 -0
- package/out/zero-cache/src/{services/dispatcher → workers}/connect-params.js +3 -3
- package/out/zero-cache/src/workers/connect-params.js.map +1 -0
- package/out/zero-cache/src/workers/connection.d.ts +1 -1
- package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
- package/out/zero-cache/src/workers/connection.js +8 -3
- package/out/zero-cache/src/workers/connection.js.map +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +1 -1
- package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/workers/syncer.js +1 -1
- package/out/zero-cache/src/workers/syncer.js.map +1 -1
- package/out/zero-protocol/src/ast.d.ts +2 -2
- package/out/zero-protocol/src/ast.d.ts.map +1 -1
- package/out/zero-protocol/src/ast.js +3 -1
- package/out/zero-protocol/src/ast.js.map +1 -1
- package/out/zero.js +3 -3
- package/out/zql/src/ivm/constraint.d.ts +24 -0
- package/out/zql/src/ivm/constraint.d.ts.map +1 -1
- package/out/zql/src/ivm/constraint.js +65 -0
- package/out/zql/src/ivm/constraint.js.map +1 -1
- package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
- package/out/zql/src/ivm/memory-source.js +10 -5
- package/out/zql/src/ivm/memory-source.js.map +1 -1
- package/out/zql/src/query/query-impl.d.ts +1 -1
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js +5 -3
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/package.json +1 -1
- package/out/chunk-KOXC55U7.js.map +0 -7
- package/out/zero-cache/src/server/runner/config.d.ts +0 -368
- package/out/zero-cache/src/server/runner/config.d.ts.map +0 -1
- package/out/zero-cache/src/server/runner/config.js +0 -103
- package/out/zero-cache/src/server/runner/config.js.map +0 -1
- package/out/zero-cache/src/services/dispatcher/connect-params.d.ts.map +0 -1
- package/out/zero-cache/src/services/dispatcher/connect-params.js.map +0 -1
- package/out/zero-cache/src/services/dispatcher/dispatcher.d.ts +0 -15
- package/out/zero-cache/src/services/dispatcher/dispatcher.d.ts.map +0 -1
- package/out/zero-cache/src/services/dispatcher/dispatcher.js +0 -64
- package/out/zero-cache/src/services/dispatcher/dispatcher.js.map +0 -1
- package/out/zero-cache/src/services/dispatcher/websocket-handoff.d.ts.map +0 -1
- package/out/zero-cache/src/services/dispatcher/websocket-handoff.js.map +0 -1
- package/out/zero-cache/src/types/timeout.d.ts +0 -11
- package/out/zero-cache/src/types/timeout.d.ts.map +0 -1
- package/out/zero-cache/src/types/timeout.js +0 -23
- package/out/zero-cache/src/types/timeout.js.map +0 -1
- /package/out/{chunk-54ZZCBOP.js.map → chunk-N44AEZOH.js.map} +0 -0
- /package/out/{inspector-Z55GQ5JV.js.map → inspector-GCX7QH7K.js.map} +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type Worker } from '../types/processes.ts';
|
|
2
|
-
export default function runWorker(parent: Worker
|
|
2
|
+
export default function runWorker(parent: Worker, env: NodeJS.ProcessEnv): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=main.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/server/main.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/server/main.ts"],"names":[],"mappings":"AAkBA,OAAO,EAIL,KAAK,MAAM,EACZ,MAAM,uBAAuB,CAAC;AAY/B,wBAA8B,SAAS,CACrC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC,CAwLf"}
|
|
@@ -2,10 +2,8 @@ import { resolver } from '@rocicorp/resolver';
|
|
|
2
2
|
import { availableParallelism } from 'node:os';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { must } from "../../../shared/src/must.js";
|
|
5
|
+
import { assertNormalized } from "../config/normalize.js";
|
|
5
6
|
import { getZeroConfig } from "../config/zero-config.js";
|
|
6
|
-
import { getSubscriberContext } from "../services/change-streamer/change-streamer-http.js";
|
|
7
|
-
import { Dispatcher } from "../services/dispatcher/dispatcher.js";
|
|
8
|
-
import { installWebSocketHandoff } from "../services/dispatcher/websocket-handoff.js";
|
|
9
7
|
import { exitAfter, ProcessManager, runUntilKilled, } from "../services/life-cycle.js";
|
|
10
8
|
import { restoreReplica, startReplicaBackupProcess, } from "../services/litestream/commands.js";
|
|
11
9
|
import { initViewSyncerSchema } from "../services/view-syncer/schema/init.js";
|
|
@@ -14,14 +12,14 @@ import { childWorker, parentWorker, singleProcessMode, } from "../types/processe
|
|
|
14
12
|
import { getShardID } from "../types/shards.js";
|
|
15
13
|
import { createNotifierFrom, handleSubscriptionsFrom, subscribeTo, } from "../workers/replicator.js";
|
|
16
14
|
import { createLogContext } from "./logging.js";
|
|
15
|
+
import { WorkerDispatcher } from "./worker-dispatcher.js";
|
|
17
16
|
const clientConnectionBifurcated = false;
|
|
18
17
|
export default async function runWorker(parent, env) {
|
|
19
18
|
const startMs = Date.now();
|
|
20
19
|
const config = getZeroConfig(env);
|
|
20
|
+
assertNormalized(config);
|
|
21
21
|
const lc = createLogContext(config, { worker: 'dispatcher' });
|
|
22
|
-
const
|
|
23
|
-
const shard = getShardID(config);
|
|
24
|
-
const processes = new ProcessManager(lc, parent ?? process);
|
|
22
|
+
const processes = new ProcessManager(lc, parent);
|
|
25
23
|
const numSyncers = config.numSyncWorkers !== undefined
|
|
26
24
|
? config.numSyncWorkers
|
|
27
25
|
: // Reserve 1 core for the replicator. The change-streamer is not CPU heavy.
|
|
@@ -47,16 +45,17 @@ export default async function runWorker(parent, env) {
|
|
|
47
45
|
const name = path.basename(modulePath) + (id ? ` (${id})` : '');
|
|
48
46
|
return processes.addWorker(worker, type, name);
|
|
49
47
|
}
|
|
50
|
-
const
|
|
48
|
+
const shard = getShardID(config);
|
|
49
|
+
const { taskID, changeStreamer: { mode: changeStreamerMode }, litestream: { backupURL, restoreDurationMsEstimate }, } = config;
|
|
51
50
|
const litestream = backupURL?.length;
|
|
52
|
-
const runChangeStreamer =
|
|
51
|
+
const runChangeStreamer = changeStreamerMode !== 'discover';
|
|
53
52
|
if (litestream) {
|
|
54
53
|
// For the replication-manager (i.e. authoritative replica), only attempt
|
|
55
54
|
// a restore once, allowing the backup to be absent.
|
|
56
55
|
// For view-syncers, attempt a restore for up to 10 times over 30 seconds.
|
|
57
56
|
try {
|
|
58
57
|
const restoreElapsedMs = await restoreReplica(lc, config, runChangeStreamer ? 1 : 10, 3000);
|
|
59
|
-
if (!
|
|
58
|
+
if (!restoreDurationMsEstimate && restoreElapsedMs) {
|
|
60
59
|
internalFlags.push('--litestream-restore-duration-ms-estimate', String(restoreElapsedMs));
|
|
61
60
|
}
|
|
62
61
|
}
|
|
@@ -78,13 +77,13 @@ export default async function runWorker(parent, env) {
|
|
|
78
77
|
const { promise: changeStreamerReady, resolve } = resolver();
|
|
79
78
|
const changeStreamer = runChangeStreamer
|
|
80
79
|
? loadWorker('./server/change-streamer.ts', 'supporting').once('message', resolve)
|
|
81
|
-
: resolve();
|
|
80
|
+
: (resolve() ?? undefined);
|
|
82
81
|
if (numSyncers) {
|
|
83
82
|
// Technically, setting up the CVR DB schema is the responsibility of the Syncer,
|
|
84
83
|
// but it is done here in the main thread because it is wasteful to have all of
|
|
85
84
|
// the Syncers attempt the migration in parallel.
|
|
86
|
-
const { cvr
|
|
87
|
-
const cvrDB = pgClient(lc, cvr.db
|
|
85
|
+
const { cvr } = config;
|
|
86
|
+
const cvrDB = pgClient(lc, cvr.db);
|
|
88
87
|
await initViewSyncerSchema(lc, cvrDB, shard);
|
|
89
88
|
void cvrDB.end();
|
|
90
89
|
}
|
|
@@ -124,20 +123,9 @@ export default async function runWorker(parent, env) {
|
|
|
124
123
|
await processes.allWorkersReady();
|
|
125
124
|
clearInterval(logWaiting);
|
|
126
125
|
lc.info?.(`all workers ready (${Date.now() - startMs} ms)`);
|
|
127
|
-
|
|
128
|
-
const { port } = config;
|
|
129
|
-
if (numSyncers) {
|
|
130
|
-
mainServices.push(new Dispatcher(config, lc, taskID, parent, syncers, mutator, { port }));
|
|
131
|
-
}
|
|
132
|
-
else if (changeStreamer && parent) {
|
|
133
|
-
// When running as the replication-manager, the dispatcher process
|
|
134
|
-
// hands off websockets from the main (tenant) dispatcher to the
|
|
135
|
-
// change-streamer process.
|
|
136
|
-
installWebSocketHandoff(lc, req => ({ payload: getSubscriberContext(req), receiver: changeStreamer }), parent);
|
|
137
|
-
}
|
|
138
|
-
parent?.send(['ready', { ready: true }]);
|
|
126
|
+
parent.send(['ready', { ready: true }]);
|
|
139
127
|
try {
|
|
140
|
-
await runUntilKilled(lc, parent
|
|
128
|
+
await runUntilKilled(lc, parent, new WorkerDispatcher(lc, taskID, parent, syncers, mutator, changeStreamer));
|
|
141
129
|
}
|
|
142
130
|
catch (err) {
|
|
143
131
|
processes.logErrorAndExit(err, 'dispatcher');
|
|
@@ -145,6 +133,6 @@ export default async function runWorker(parent, env) {
|
|
|
145
133
|
await processes.done();
|
|
146
134
|
}
|
|
147
135
|
if (!singleProcessMode()) {
|
|
148
|
-
void exitAfter(() => runWorker(parentWorker, process.env));
|
|
136
|
+
void exitAfter(() => runWorker(must(parentWorker), process.env));
|
|
149
137
|
}
|
|
150
138
|
//# sourceMappingURL=main.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../../zero-cache/src/server/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAC,oBAAoB,EAAC,MAAM,SAAS,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,IAAI,EAAC,MAAM,6BAA6B,CAAC;AACjD,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../../zero-cache/src/server/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replicator.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/server/replicator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"replicator.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/server/replicator.ts"],"names":[],"mappings":"AAaA,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,uBAAuB,CAAC;AAS/B,wBAA8B,SAAS,CACrC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,GAAG,IAAI,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC,CA2Cf"}
|
|
@@ -2,25 +2,36 @@ import { pid } from 'node:process';
|
|
|
2
2
|
import { assert } from "../../../shared/src/asserts.js";
|
|
3
3
|
import { must } from "../../../shared/src/must.js";
|
|
4
4
|
import * as v from "../../../shared/src/valita.js";
|
|
5
|
+
import { assertNormalized } from "../config/normalize.js";
|
|
5
6
|
import { getZeroConfig } from "../config/zero-config.js";
|
|
6
7
|
import { ChangeStreamerHttpClient } from "../services/change-streamer/change-streamer-http.js";
|
|
7
8
|
import { exitAfter, runUntilKilled } from "../services/life-cycle.js";
|
|
8
9
|
import { ReplicatorService, } from "../services/replicator/replicator.js";
|
|
10
|
+
import { pgClient } from "../types/pg.js";
|
|
9
11
|
import { parentWorker, singleProcessMode, } from "../types/processes.js";
|
|
12
|
+
import { getShardConfig } from "../types/shards.js";
|
|
10
13
|
import { replicaFileModeSchema, setUpMessageHandlers, setupReplica, } from "../workers/replicator.js";
|
|
11
14
|
import { createLogContext } from "./logging.js";
|
|
12
15
|
export default async function runWorker(parent, env, ...args) {
|
|
13
16
|
assert(args.length > 0, `replicator mode not specified`);
|
|
14
17
|
const fileMode = v.parse(args[0], replicaFileModeSchema);
|
|
15
18
|
const config = getZeroConfig(env, args.slice(1));
|
|
19
|
+
assertNormalized(config);
|
|
16
20
|
const mode = fileMode === 'backup' ? 'backup' : 'serving';
|
|
17
21
|
const workerName = `${mode}-replicator`;
|
|
18
22
|
const lc = createLogContext(config, { worker: workerName });
|
|
19
23
|
const replica = await setupReplica(lc, fileMode, config.replica);
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
const shard = getShardConfig(config);
|
|
25
|
+
const { taskID, change } = config;
|
|
26
|
+
// Create a pg client with a single short-lived connection for the purpose
|
|
27
|
+
// of change-streamer discovery (i.e. ChangeDB as DNS).
|
|
28
|
+
const changeDB = pgClient(lc, change.db, {
|
|
29
|
+
max: 1,
|
|
30
|
+
['idle_timeout']: 15,
|
|
31
|
+
connection: { ['application_name']: 'change-streamer-discovery' },
|
|
32
|
+
});
|
|
33
|
+
const changeStreamer = new ChangeStreamerHttpClient(lc, shard, changeDB);
|
|
34
|
+
const replicator = new ReplicatorService(lc, taskID, `${workerName}-${pid}`, mode, changeStreamer, replica);
|
|
24
35
|
setUpMessageHandlers(lc, replicator, parent);
|
|
25
36
|
const running = runUntilKilled(lc, parent, replicator);
|
|
26
37
|
// Signal readiness once the first ReplicaVersionReady notification is received.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replicator.js","sourceRoot":"","sources":["../../../../../zero-cache/src/server/replicator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,cAAc,CAAC;AACjC,OAAO,EAAC,MAAM,EAAC,MAAM,gCAAgC,CAAC;AACtD,OAAO,EAAC,IAAI,EAAC,MAAM,6BAA6B,CAAC;AACjD,OAAO,KAAK,CAAC,MAAM,+BAA+B,CAAC;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAC,wBAAwB,EAAC,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACL,iBAAiB,GAElB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,iBAAiB,GAElB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAC,gBAAgB,EAAC,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,SAAS,CACrC,MAAc,EACd,GAAsB,EACtB,GAAG,IAAc;IAEjB,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,+BAA+B,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,IAAI,GAAmB,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,MAAM,UAAU,GAAG,GAAG,IAAI,aAAa,CAAC;IACxC,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,UAAU,EAAC,CAAC,CAAC;IAE1D,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAEjE,MAAM,
|
|
1
|
+
{"version":3,"file":"replicator.js","sourceRoot":"","sources":["../../../../../zero-cache/src/server/replicator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import '@dotenvx/dotenvx/config';
|
|
2
2
|
import { type Worker } from '../../types/processes.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Top-level `runner` entry point to the zero-cache. This layer is responsible for:
|
|
5
|
+
* * runtime-based config normalization
|
|
6
|
+
* * lazy startup
|
|
7
|
+
* * serving /statsz
|
|
8
|
+
* * auto-reset restarts (TODO)
|
|
9
|
+
*/
|
|
3
10
|
export declare function runWorker(parent: Worker | null, env: NodeJS.ProcessEnv): Promise<void>;
|
|
4
11
|
//# sourceMappingURL=run-worker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-worker.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/server/runner/run-worker.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AAMjC,OAAO,EAAc,KAAK,MAAM,EAAC,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"run-worker.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/server/runner/run-worker.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AAMjC,OAAO,EAAc,KAAK,MAAM,EAAC,MAAM,0BAA0B,CAAC;AAKlE;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC,CAoDf"}
|
|
@@ -1,92 +1,53 @@
|
|
|
1
1
|
import '@dotenvx/dotenvx/config'; // Imports ENV variables from .env
|
|
2
2
|
import { resolver } from '@rocicorp/resolver';
|
|
3
|
-
import { assert } from "../../../../shared/src/asserts.js";
|
|
4
|
-
import { parseBoolean } from "../../../../shared/src/options.js";
|
|
5
3
|
import { PROTOCOL_VERSION } from "../../../../zero-protocol/src/protocol-version.js";
|
|
4
|
+
import { normalizeZeroConfig } from "../../config/normalize.js";
|
|
5
|
+
import { getZeroConfig } from "../../config/zero-config.js";
|
|
6
6
|
import { ProcessManager, runUntilKilled } from "../../services/life-cycle.js";
|
|
7
7
|
import { childWorker } from "../../types/processes.js";
|
|
8
8
|
import { createLogContext } from "../logging.js";
|
|
9
|
-
import { getMultiZeroConfig } from "./config.js";
|
|
10
9
|
import { getTaskID } from "./runtime.js";
|
|
11
10
|
import { ZeroDispatcher } from "./zero-dispatcher.js";
|
|
11
|
+
/**
|
|
12
|
+
* Top-level `runner` entry point to the zero-cache. This layer is responsible for:
|
|
13
|
+
* * runtime-based config normalization
|
|
14
|
+
* * lazy startup
|
|
15
|
+
* * serving /statsz
|
|
16
|
+
* * auto-reset restarts (TODO)
|
|
17
|
+
*/
|
|
12
18
|
export async function runWorker(parent, env) {
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
19
|
+
const cfg = getZeroConfig(env);
|
|
20
|
+
const lc = createLogContext(cfg, { worker: 'runner' });
|
|
21
|
+
const defaultTaskID = await getTaskID(lc);
|
|
22
|
+
const config = normalizeZeroConfig(lc, cfg, env, defaultTaskID);
|
|
16
23
|
const processes = new ProcessManager(lc, parent ?? process);
|
|
17
|
-
const { serverVersion, port,
|
|
18
|
-
let { taskID } = config;
|
|
19
|
-
if (!taskID) {
|
|
20
|
-
taskID = await getTaskID(lc);
|
|
21
|
-
baseEnv['ZERO_TASK_ID'] = taskID;
|
|
22
|
-
}
|
|
24
|
+
const { serverVersion, port, lazyStartup } = config;
|
|
23
25
|
lc.info?.(`starting server${!serverVersion ? '' : `@${serverVersion}`} ` +
|
|
24
|
-
`protocolVersion=${PROTOCOL_VERSION}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
let tenantPort = port;
|
|
39
|
-
const tenants = config.tenants.map(tenant => {
|
|
40
|
-
const mergedEnv = {
|
|
41
|
-
...process.env, // propagate all ENV variables from this process
|
|
42
|
-
...baseEnv, // defaults
|
|
43
|
-
['ZERO_TENANT_ID']: tenant.id,
|
|
44
|
-
['ZERO_PORT']: String((tenantPort += 3)), // and bump the port by 3 thereafter.
|
|
45
|
-
...tenant.env, // overrides
|
|
46
|
-
};
|
|
47
|
-
if (runAsReplicationManager) {
|
|
48
|
-
// Sanity-check. It doesn't make sense to run sync workers in the
|
|
49
|
-
// replication-manager.
|
|
50
|
-
assert(mergedEnv['ZERO_NUM_SYNC_WORKERS'] === '0', `Tenant ${tenant.id} cannot run sync workers in the replication-manager`);
|
|
51
|
-
}
|
|
52
|
-
const changeStreamerURI = mergedEnv['ZERO_CHANGE_STREAMER_URI'];
|
|
53
|
-
if (changeStreamerURI && multiMode) {
|
|
54
|
-
// Requests from the view-syncer to the replication-manager are
|
|
55
|
-
// delineated/dispatched by the tenant ID as the first path component.
|
|
56
|
-
mergedEnv['ZERO_CHANGE_STREAMER_URI'] += changeStreamerURI.endsWith('/')
|
|
57
|
-
? tenant.id
|
|
58
|
-
: `/${tenant.id}`;
|
|
59
|
-
}
|
|
60
|
-
let worker;
|
|
61
|
-
function getWorker() {
|
|
62
|
-
if (worker === undefined) {
|
|
63
|
-
lc.info?.('starting zero-cache' + (tenant.id ? ` for ${tenant.id}` : ''));
|
|
64
|
-
const r = (worker = resolver());
|
|
65
|
-
const w = childWorker('./server/main.ts', mergedEnv)
|
|
66
|
-
.once('message', () => r.resolve(w))
|
|
67
|
-
.once('error', r.reject);
|
|
68
|
-
processes.addWorker(w, 'user-facing', tenant.id);
|
|
69
|
-
}
|
|
70
|
-
return worker.promise;
|
|
71
|
-
}
|
|
72
|
-
return { ...tenant, env: mergedEnv, getWorker };
|
|
73
|
-
});
|
|
74
|
-
// Eagerly start zero-caches that are not configured to --lazy-startup.
|
|
75
|
-
for (const tenant of tenants) {
|
|
76
|
-
const lazy = parseBoolean('ZERO_LAZY_STARTUP', tenant.env['ZERO_LAZY_STARTUP'] ?? 'false');
|
|
77
|
-
if (!lazy) {
|
|
78
|
-
void tenant.getWorker();
|
|
26
|
+
`protocolVersion=${PROTOCOL_VERSION}`);
|
|
27
|
+
let zeroCache;
|
|
28
|
+
function startZeroCache() {
|
|
29
|
+
if (zeroCache === undefined) {
|
|
30
|
+
const startMs = performance.now();
|
|
31
|
+
lc.info?.('starting zero-cache');
|
|
32
|
+
const r = (zeroCache = resolver());
|
|
33
|
+
const w = childWorker('./server/main.ts', env)
|
|
34
|
+
.once('message', () => {
|
|
35
|
+
r.resolve(w);
|
|
36
|
+
lc.info?.(`zero-cache ready (${performance.now() - startMs} ms)`);
|
|
37
|
+
})
|
|
38
|
+
.once('error', r.reject);
|
|
39
|
+
processes.addWorker(w, 'user-facing', 'zero-cache');
|
|
79
40
|
}
|
|
41
|
+
return zeroCache.promise;
|
|
42
|
+
}
|
|
43
|
+
// Eagerly start the zero-cache if it was not configured with --lazy-startup.
|
|
44
|
+
if (!lazyStartup) {
|
|
45
|
+
void startZeroCache();
|
|
80
46
|
}
|
|
81
|
-
const s = tenants.length > 1 ? 's' : '';
|
|
82
|
-
lc.info?.(`waiting for zero-cache${s} to be ready ...`);
|
|
83
47
|
await processes.allWorkersReady();
|
|
84
|
-
lc.info?.(`zero-cache${s} ready (${Date.now() - startMs} ms)`);
|
|
85
48
|
parent?.send(['ready', { ready: true }]);
|
|
86
49
|
try {
|
|
87
|
-
await runUntilKilled(lc, parent ?? process, new ZeroDispatcher(config, lc,
|
|
88
|
-
port: runAsReplicationManager ? changeStreamerPort : port,
|
|
89
|
-
}));
|
|
50
|
+
await runUntilKilled(lc, parent ?? process, new ZeroDispatcher(config, lc, { port }, startZeroCache));
|
|
90
51
|
}
|
|
91
52
|
catch (err) {
|
|
92
53
|
processes.logErrorAndExit(err, 'main');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-worker.js","sourceRoot":"","sources":["../../../../../../zero-cache/src/server/runner/run-worker.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC,CAAC,kCAAkC;AACpE,OAAO,EAAC,QAAQ,EAAgB,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"run-worker.js","sourceRoot":"","sources":["../../../../../../zero-cache/src/server/runner/run-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/server/runner/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAOjD,wBAAsB,SAAS,CAAC,EAAE,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/server/runner/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAOjD,wBAAsB,SAAS,CAAC,EAAE,EAAE,UAAU,mBA+B7C"}
|
|
@@ -5,9 +5,20 @@ const containerMetadataSchema = v.object({ ['TaskARN']: v.string() });
|
|
|
5
5
|
export async function getTaskID(lc) {
|
|
6
6
|
const containerURI = process.env['ECS_CONTAINER_METADATA_URI_V4'];
|
|
7
7
|
if (containerURI) {
|
|
8
|
+
try {
|
|
9
|
+
const resp = await fetch(`${containerURI}`);
|
|
10
|
+
const metadata = await resp.json();
|
|
11
|
+
// Logged purely for debugging.
|
|
12
|
+
lc.info?.(`Container metadata`, { metadata });
|
|
13
|
+
}
|
|
14
|
+
catch (e) {
|
|
15
|
+
lc.warn?.('unable to lookup container metadata', e);
|
|
16
|
+
}
|
|
8
17
|
try {
|
|
9
18
|
const resp = await fetch(`${containerURI}/task`);
|
|
10
|
-
const
|
|
19
|
+
const metadata = v.parse(await resp.json(), containerMetadataSchema, 'passthrough');
|
|
20
|
+
lc.info?.(`Task metadata`, { metadata });
|
|
21
|
+
const { TaskARN: taskID } = metadata;
|
|
11
22
|
// Task ARN's are long, e.g.
|
|
12
23
|
// "arn:aws:ecs:us-east-1:712907626835:task/zbugs-prod-Cluster-vvNFcPUVpGHr/0042ea25bf534dc19975e26f61441737"
|
|
13
24
|
// We only care about the unique ID, i.e. the last path component.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../../../zero-cache/src/server/runner/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAC9B,OAAO,KAAK,CAAC,MAAM,kCAAkC,CAAC;AAEtD,sGAAsG;AACtG,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,CAAC,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAc;IAC5C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAClE,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../../../zero-cache/src/server/runner/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAC9B,OAAO,KAAK,CAAC,MAAM,kCAAkC,CAAC;AAEtD,sGAAsG;AACtG,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,CAAC,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAc;IAC5C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAClE,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,YAAY,EAAE,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACnC,+BAA+B;YAC/B,EAAE,CAAC,IAAI,EAAE,CAAC,oBAAoB,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,EAAE,CAAC,IAAI,EAAE,CAAC,qCAAqC,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,YAAY,OAAO,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CACtB,MAAM,IAAI,CAAC,IAAI,EAAE,EACjB,uBAAuB,EACvB,aAAa,CACd,CAAC;YACF,EAAE,CAAC,IAAI,EAAE,CAAC,eAAe,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAC;YACvC,MAAM,EAAC,OAAO,EAAE,MAAM,EAAC,GAAG,QAAQ,CAAC;YACnC,4BAA4B;YAC5B,6GAA6G;YAC7G,kEAAkE;YAClE,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC1C,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,iCAAiC;QAC3E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,EAAE,CAAC,IAAI,EAAE,CAAC,wDAAwD,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,EAAE,CAAC;AAClB,CAAC"}
|
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
import type { LogContext } from '@rocicorp/logger';
|
|
2
|
+
import type { NormalizedZeroConfig } from '../../config/normalize.ts';
|
|
2
3
|
import { HttpService, type Options } from '../../services/http-service.ts';
|
|
3
4
|
import type { Worker } from '../../types/processes.ts';
|
|
4
|
-
import type { ZeroConfig } from '../../config/zero-config.ts';
|
|
5
|
-
type Tenant = {
|
|
6
|
-
id: string;
|
|
7
|
-
host?: string | undefined;
|
|
8
|
-
path?: string | undefined;
|
|
9
|
-
getWorker: () => Promise<Worker>;
|
|
10
|
-
};
|
|
11
5
|
export declare class ZeroDispatcher extends HttpService {
|
|
12
6
|
#private;
|
|
13
7
|
readonly id = "zero-dispatcher";
|
|
14
|
-
constructor(config:
|
|
8
|
+
constructor(config: NormalizedZeroConfig, lc: LogContext, opts: Options, getWorker: () => Promise<Worker>);
|
|
15
9
|
}
|
|
16
|
-
export {};
|
|
17
10
|
//# sourceMappingURL=zero-dispatcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zero-dispatcher.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/server/runner/zero-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"zero-dispatcher.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/server/runner/zero-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAC,WAAW,EAAE,KAAK,OAAO,EAAC,MAAM,gCAAgC,CAAC;AAGzE,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAC;AAMrD,qBAAa,cAAe,SAAQ,WAAW;;IAC7C,QAAQ,CAAC,EAAE,qBAAqB;gBAI9B,MAAM,EAAE,oBAAoB,EAC5B,EAAE,EAAE,UAAU,EACd,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC;CAmBnC"}
|
|
@@ -1,55 +1,18 @@
|
|
|
1
|
-
import { assert } from "../../../../shared/src/asserts.js";
|
|
2
|
-
import { installWebSocketHandoff, } from "../../services/dispatcher/websocket-handoff.js";
|
|
3
1
|
import { HttpService } from "../../services/http-service.js";
|
|
2
|
+
import { handleStatzRequest } from "../../services/statz.js";
|
|
3
|
+
import { installWebSocketHandoff, } from "../../types/websocket-handoff.js";
|
|
4
4
|
export class ZeroDispatcher extends HttpService {
|
|
5
5
|
id = 'zero-dispatcher';
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
#getWorker;
|
|
7
|
+
constructor(config, lc, opts, getWorker) {
|
|
8
|
+
super(`zero-dispatcher`, lc, opts, fastify => {
|
|
9
|
+
fastify.get('/statz', (req, res) => handleStatzRequest(config, req, res));
|
|
10
10
|
installWebSocketHandoff(lc, this.#handoff, fastify.server);
|
|
11
11
|
});
|
|
12
|
-
this.#
|
|
13
|
-
this.#tenants = tenants.filter(
|
|
14
|
-
// Only tenants with a host or path can be dispatched to
|
|
15
|
-
// in the view-syncer (with the exception of the single tenant
|
|
16
|
-
// case, signified by the empty id).
|
|
17
|
-
t => runAsReplicationManager || t.host || t.path || t.id.length === 0);
|
|
12
|
+
this.#getWorker = getWorker;
|
|
18
13
|
}
|
|
19
|
-
#handoff = (
|
|
20
|
-
|
|
21
|
-
void t
|
|
22
|
-
.getWorker()
|
|
23
|
-
.then(receiver => dispatch({ payload: t.id, receiver }), onError);
|
|
14
|
+
#handoff = (_req, dispatch, onError) => {
|
|
15
|
+
void this.#getWorker().then(receiver => dispatch({ payload: 'unused', receiver }), onError);
|
|
24
16
|
};
|
|
25
|
-
#getTenant(req) {
|
|
26
|
-
const { headers, url: u } = req;
|
|
27
|
-
const host = headers.host?.toLowerCase();
|
|
28
|
-
const { pathname } = new URL(u ?? '', `http://${host}/`);
|
|
29
|
-
for (const t of this.#tenants) {
|
|
30
|
-
if (t.id.length === 0) {
|
|
31
|
-
// sole tenant
|
|
32
|
-
assert(this.#tenants.length === 1);
|
|
33
|
-
return t;
|
|
34
|
-
}
|
|
35
|
-
if (this.#runAsReplicationManager) {
|
|
36
|
-
// The replication-manager dispatches internally using the
|
|
37
|
-
// tenant ID as the first path component
|
|
38
|
-
if (pathname.startsWith('/' + t.id + '/')) {
|
|
39
|
-
return t;
|
|
40
|
-
}
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
if (t.host && t.host !== host) {
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
if (t.path && !pathname.startsWith(t.path)) {
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
this._lc.debug?.(`connecting ${host}${pathname} to ${t.id}`);
|
|
50
|
-
return t;
|
|
51
|
-
}
|
|
52
|
-
throw new Error(`no matching tenant for: ${host}${pathname}`);
|
|
53
|
-
}
|
|
54
17
|
}
|
|
55
18
|
//# sourceMappingURL=zero-dispatcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zero-dispatcher.js","sourceRoot":"","sources":["../../../../../../zero-cache/src/server/runner/zero-dispatcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zero-dispatcher.js","sourceRoot":"","sources":["../../../../../../zero-cache/src/server/runner/zero-dispatcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAe,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAG3D,OAAO,EACL,uBAAuB,GAExB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,OAAO,cAAe,SAAQ,WAAW;IACpC,EAAE,GAAG,iBAAiB,CAAC;IACvB,UAAU,CAAwB;IAE3C,YACE,MAA4B,EAC5B,EAAc,EACd,IAAa,EACb,SAAgC;QAEhC,KAAK,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;YAC3C,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1E,uBAAuB,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAEQ,QAAQ,GAAG,CAClB,IAA2B,EAC3B,QAA0C,EAC1C,OAAiC,EACjC,EAAE;QACF,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CACzB,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAC,EACnD,OAAO,CACR,CAAC;IACJ,CAAC,CAAC;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/server/syncer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/server/syncer.ts"],"names":[],"mappings":"AAoBA,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,uBAAuB,CAAC;AAY/B,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,GAAG,IAAI,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC,CAwGf"}
|
|
@@ -5,6 +5,7 @@ import { assert } from "../../../shared/src/asserts.js";
|
|
|
5
5
|
import { must } from "../../../shared/src/must.js";
|
|
6
6
|
import { randInt } from "../../../shared/src/rand.js";
|
|
7
7
|
import * as v from "../../../shared/src/valita.js";
|
|
8
|
+
import { assertNormalized } from "../config/normalize.js";
|
|
8
9
|
import { getZeroConfig } from "../config/zero-config.js";
|
|
9
10
|
import { warmupConnections } from "../db/warmup.js";
|
|
10
11
|
import { exitAfter, runUntilKilled } from "../services/life-cycle.js";
|
|
@@ -28,6 +29,7 @@ function randomID() {
|
|
|
28
29
|
}
|
|
29
30
|
export default function runWorker(parent, env, ...args) {
|
|
30
31
|
const config = getZeroConfig(env, args.slice(1));
|
|
32
|
+
assertNormalized(config);
|
|
31
33
|
startOtel(config.log);
|
|
32
34
|
const lc = createLogContext(config, { worker: 'syncer' });
|
|
33
35
|
assert(args.length > 0, `replicator mode not specified`);
|
|
@@ -37,7 +39,7 @@ export default function runWorker(parent, env, ...args) {
|
|
|
37
39
|
assert(upstream.maxConnsPerWorker);
|
|
38
40
|
const replicaFile = replicaFileName(config.replica.file, fileMode);
|
|
39
41
|
lc.debug?.(`running view-syncer on ${replicaFile}`);
|
|
40
|
-
const cvrDB = pgClient(lc, cvr.db
|
|
42
|
+
const cvrDB = pgClient(lc, cvr.db, {
|
|
41
43
|
max: cvr.maxConnsPerWorker,
|
|
42
44
|
connection: { ['application_name']: `zero-sync-worker-${pid}-cvr` },
|
|
43
45
|
});
|
|
@@ -58,7 +60,7 @@ export default function runWorker(parent, env, ...args) {
|
|
|
58
60
|
.withContext('clientGroupID', id)
|
|
59
61
|
.withContext('instance', randomID());
|
|
60
62
|
lc.debug?.(`creating view syncer`);
|
|
61
|
-
return new ViewSyncerService(logger, shard,
|
|
63
|
+
return new ViewSyncerService(logger, shard, config.taskID, id, cvrDB, new PipelineDriver(logger, config.log, new Snapshotter(logger, replicaFile, shard), shard, operatorStorage.createClientGroupStorage(id), id), sub, drainCoordinator, config.log.slowHydrateThreshold, undefined, config.targetClientRowCount);
|
|
62
64
|
};
|
|
63
65
|
const mutagenFactory = (id) => new MutagenService(lc.withContext('component', 'mutagen').withContext('clientGroupID', id), shard, id, upstreamDB, config);
|
|
64
66
|
const pusherFactory = config.push.url === undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncer.js","sourceRoot":"","sources":["../../../../../zero-cache/src/server/syncer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,SAAS,CAAC;AAC/B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,GAAG,EAAC,MAAM,cAAc,CAAC;AACjC,OAAO,EAAC,MAAM,EAAC,MAAM,gCAAgC,CAAC;AACtD,OAAO,EAAC,IAAI,EAAC,MAAM,6BAA6B,CAAC;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,6BAA6B,CAAC;AACpD,OAAO,KAAK,CAAC,MAAM,+BAA+B,CAAC;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAC,aAAa,EAAC,MAAM,+BAA+B,CAAC;AAE5D,OAAO,EAAC,eAAe,EAAC,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAC,gBAAgB,EAAC,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAC,cAAc,EAAC,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAC,WAAW,EAAC,MAAM,wCAAwC,CAAC;AACnE,OAAO,EAAC,iBAAiB,EAAC,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACxC,OAAO,EACL,YAAY,EACZ,iBAAiB,GAElB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAC,qBAAqB,EAAE,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAC,gBAAgB,EAAC,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE1C,SAAS,QAAQ;IACf,OAAO,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,MAAc,EACd,GAAsB,EACtB,GAAG,IAAc;IAEjB,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEtB,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,+BAA+B,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAEzD,MAAM,EAAC,GAAG,EAAE,QAAQ,EAAC,GAAG,MAAM,CAAC;IAC/B,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC9B,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAEnC,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnE,EAAE,CAAC,KAAK,EAAE,CAAC,0BAA0B,WAAW,EAAE,CAAC,CAAC;IAEpD,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"syncer.js","sourceRoot":"","sources":["../../../../../zero-cache/src/server/syncer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LogContext } from '@rocicorp/logger';
|
|
2
|
+
import type { Service } from '../services/service.ts';
|
|
3
|
+
import type { Worker } from '../types/processes.ts';
|
|
4
|
+
export declare class WorkerDispatcher implements Service {
|
|
5
|
+
#private;
|
|
6
|
+
readonly id = "worker-dispatcher";
|
|
7
|
+
constructor(lc: LogContext, taskID: string, parent: Worker, syncers: Worker[], mutator: Worker | undefined, changeStreamer: Worker | undefined);
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
stop(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare function parsePath(url: URL): {
|
|
12
|
+
base?: string;
|
|
13
|
+
worker: 'sync' | 'mutate' | 'replication';
|
|
14
|
+
version: string;
|
|
15
|
+
} | undefined;
|
|
16
|
+
//# sourceMappingURL=worker-dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-dispatcher.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/server/worker-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAO5C,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,wBAAwB,CAAC;AAEpD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAQlD,qBAAa,gBAAiB,YAAW,OAAO;;IAC9C,QAAQ,CAAC,EAAE,uBAAuB;gBAMhC,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,cAAc,EAAE,MAAM,GAAG,SAAS;IA2FpC,GAAG;IAIH,IAAI;CAIL;AAID,wBAAgB,SAAS,CACvB,GAAG,EAAE,GAAG,GAEN;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GAC3E,SAAS,CAGZ"}
|