@cadenza.io/service 2.18.1 → 2.18.3
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/dist/browser/index.js +1689 -747
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/index.mjs +1689 -747
- package/dist/browser/index.mjs.map +1 -1
- package/dist/index.d.mts +15 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +1878 -765
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1878 -765
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -3
package/dist/index.mjs
CHANGED
|
@@ -2,8 +2,46 @@
|
|
|
2
2
|
import Cadenza from "@cadenza.io/core";
|
|
3
3
|
|
|
4
4
|
// src/graph/definition/DeputyTask.ts
|
|
5
|
-
import { v4 as
|
|
5
|
+
import { v4 as uuid2 } from "uuid";
|
|
6
6
|
import { Task } from "@cadenza.io/core";
|
|
7
|
+
|
|
8
|
+
// src/utils/delegation.ts
|
|
9
|
+
import { v4 as uuid } from "uuid";
|
|
10
|
+
var ROOT_METADATA_PASSTHROUGH_KEYS = [
|
|
11
|
+
"__executionTraceId",
|
|
12
|
+
"__inquiryId",
|
|
13
|
+
"__inquirySourceTaskName",
|
|
14
|
+
"__inquirySourceTaskVersion",
|
|
15
|
+
"__inquirySourceTaskExecutionId",
|
|
16
|
+
"__inquirySourceRoutineExecutionId"
|
|
17
|
+
];
|
|
18
|
+
function hoistDelegationMetadataFields(input, metadataInput) {
|
|
19
|
+
const context = input && typeof input === "object" ? { ...input } : {};
|
|
20
|
+
const mutableContext = context;
|
|
21
|
+
const metadata = metadataInput && typeof metadataInput === "object" ? metadataInput : context.__metadata && typeof context.__metadata === "object" ? context.__metadata : {};
|
|
22
|
+
for (const key of ROOT_METADATA_PASSTHROUGH_KEYS) {
|
|
23
|
+
if ((mutableContext[key] === void 0 || mutableContext[key] === null) && metadata[key] !== void 0 && metadata[key] !== null) {
|
|
24
|
+
mutableContext[key] = metadata[key];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return context;
|
|
28
|
+
}
|
|
29
|
+
function ensureDelegationContextMetadata(input) {
|
|
30
|
+
const rawContext = input && typeof input === "object" ? { ...input } : {};
|
|
31
|
+
const metadata = rawContext.__metadata && typeof rawContext.__metadata === "object" ? { ...rawContext.__metadata } : {};
|
|
32
|
+
const context = hoistDelegationMetadataFields(rawContext, metadata);
|
|
33
|
+
const deputyExecId = typeof metadata.__deputyExecId === "string" && metadata.__deputyExecId.length > 0 ? metadata.__deputyExecId : typeof rawContext.__deputyExecId === "string" && rawContext.__deputyExecId.length > 0 ? context.__deputyExecId : uuid();
|
|
34
|
+
return {
|
|
35
|
+
...context,
|
|
36
|
+
__deputyExecId: deputyExecId,
|
|
37
|
+
__metadata: {
|
|
38
|
+
...metadata,
|
|
39
|
+
__deputyExecId: deputyExecId
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// src/graph/definition/DeputyTask.ts
|
|
7
45
|
var DeputyTask = class extends Task {
|
|
8
46
|
/**
|
|
9
47
|
* Constructs a new instance of the class with the specified parameters.
|
|
@@ -41,7 +79,7 @@ var DeputyTask = class extends Task {
|
|
|
41
79
|
resolve(context);
|
|
42
80
|
return;
|
|
43
81
|
}
|
|
44
|
-
const processId =
|
|
82
|
+
const processId = uuid2();
|
|
45
83
|
context.__metadata.__deputyExecId = processId;
|
|
46
84
|
emit("meta.deputy.delegation_requested", {
|
|
47
85
|
...context
|
|
@@ -129,7 +167,7 @@ var DeputyTask = class extends Task {
|
|
|
129
167
|
execute(context, emit, inquire, progressCallback, nodeData) {
|
|
130
168
|
const ctx = context.getContext();
|
|
131
169
|
const metadata = context.getMetadata();
|
|
132
|
-
const deputyContext = {
|
|
170
|
+
const deputyContext = hoistDelegationMetadataFields({
|
|
133
171
|
__timeout: this.timeout,
|
|
134
172
|
__localTaskName: this.name,
|
|
135
173
|
__localTaskVersion: this.version,
|
|
@@ -146,7 +184,7 @@ var DeputyTask = class extends Task {
|
|
|
146
184
|
__deputyTaskName: this.name
|
|
147
185
|
},
|
|
148
186
|
...ctx
|
|
149
|
-
};
|
|
187
|
+
});
|
|
150
188
|
return this.taskFunction(deputyContext, emit, inquire, progressCallback);
|
|
151
189
|
}
|
|
152
190
|
};
|
|
@@ -227,7 +265,7 @@ var DatabaseTask = class extends DeputyTask {
|
|
|
227
265
|
},
|
|
228
266
|
...dynamicQueryData
|
|
229
267
|
};
|
|
230
|
-
const deputyContext = {
|
|
268
|
+
const deputyContext = hoistDelegationMetadataFields({
|
|
231
269
|
...ctx,
|
|
232
270
|
__localTaskName: this.name,
|
|
233
271
|
__localTaskVersion: this.version,
|
|
@@ -250,7 +288,7 @@ var DatabaseTask = class extends DeputyTask {
|
|
|
250
288
|
filter: nextQueryData.filter ?? ctx.filter,
|
|
251
289
|
fields: nextQueryData.fields ?? ctx.fields,
|
|
252
290
|
queryData: nextQueryData
|
|
253
|
-
};
|
|
291
|
+
});
|
|
254
292
|
return this.taskFunction(deputyContext, emit, inquire, progressCallback);
|
|
255
293
|
}
|
|
256
294
|
};
|
|
@@ -501,22 +539,6 @@ function getRouteableTransport(instance, role, protocol) {
|
|
|
501
539
|
return selectTransportForRole(instance.transports ?? [], role, protocol);
|
|
502
540
|
}
|
|
503
541
|
|
|
504
|
-
// src/utils/delegation.ts
|
|
505
|
-
import { v4 as uuid2 } from "uuid";
|
|
506
|
-
function ensureDelegationContextMetadata(input) {
|
|
507
|
-
const context = input && typeof input === "object" ? { ...input } : {};
|
|
508
|
-
const metadata = context.__metadata && typeof context.__metadata === "object" ? { ...context.__metadata } : {};
|
|
509
|
-
const deputyExecId = typeof metadata.__deputyExecId === "string" && metadata.__deputyExecId.length > 0 ? metadata.__deputyExecId : typeof context.__deputyExecId === "string" && context.__deputyExecId.length > 0 ? context.__deputyExecId : uuid2();
|
|
510
|
-
return {
|
|
511
|
-
...context,
|
|
512
|
-
__deputyExecId: deputyExecId,
|
|
513
|
-
__metadata: {
|
|
514
|
-
...metadata,
|
|
515
|
-
__deputyExecId: deputyExecId
|
|
516
|
-
}
|
|
517
|
-
};
|
|
518
|
-
}
|
|
519
|
-
|
|
520
542
|
// src/utils/readiness.ts
|
|
521
543
|
function evaluateDependencyReadiness(input) {
|
|
522
544
|
const missedHeartbeats = Math.max(
|
|
@@ -686,6 +708,21 @@ var CADENZA_DB_GATHERED_SYNC_SIGNAL = "global.meta.cadenza_db.gathered_sync_data
|
|
|
686
708
|
var META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL = "meta.service_registry.gathered_sync_transmission_reconcile_requested";
|
|
687
709
|
var META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL = "meta.service_registry.runtime_status.heartbeat_tick";
|
|
688
710
|
var META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL = "meta.service_registry.runtime_status.monitor_tick";
|
|
711
|
+
var EARLY_FULL_SYNC_DELAYS_MS = [
|
|
712
|
+
100,
|
|
713
|
+
1500,
|
|
714
|
+
5e3,
|
|
715
|
+
12e3,
|
|
716
|
+
25e3,
|
|
717
|
+
45e3,
|
|
718
|
+
7e4
|
|
719
|
+
];
|
|
720
|
+
var BOOTSTRAP_FULL_SYNC_RESPONDER_TASKS = [
|
|
721
|
+
"Query service_instance",
|
|
722
|
+
"Query service_instance_transport",
|
|
723
|
+
"Query signal_to_task_map",
|
|
724
|
+
"Query intent_to_task_map"
|
|
725
|
+
];
|
|
689
726
|
var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
|
|
690
727
|
"Track local routine start",
|
|
691
728
|
"Track local routine end",
|
|
@@ -698,6 +735,10 @@ var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
|
|
|
698
735
|
"Collect distributed readiness",
|
|
699
736
|
"Get status"
|
|
700
737
|
]);
|
|
738
|
+
var SERVICE_REGISTRY_TRACE_SERVICE = (process.env.CADENZA_SERVICE_REGISTRY_TRACE_SERVICE ?? "").trim();
|
|
739
|
+
function shouldTraceServiceRegistry(serviceName) {
|
|
740
|
+
return SERVICE_REGISTRY_TRACE_SERVICE.length > 0 && serviceName === SERVICE_REGISTRY_TRACE_SERVICE;
|
|
741
|
+
}
|
|
701
742
|
function buildServiceRegistryInsertQueryData(ctx, queryData) {
|
|
702
743
|
const joinedContexts = Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : [];
|
|
703
744
|
const getJoinedValue = (key) => {
|
|
@@ -771,6 +812,45 @@ function normalizeServiceRegistryInsertResult(tableName, ctx, queryData, rawResu
|
|
|
771
812
|
}
|
|
772
813
|
return result;
|
|
773
814
|
}
|
|
815
|
+
function resolveServiceInstanceRegistrationPayload(ctx, fallbackServiceName, fallbackServiceInstanceId) {
|
|
816
|
+
const candidateSources = [
|
|
817
|
+
ctx.__registrationData,
|
|
818
|
+
ctx.queryData?.data,
|
|
819
|
+
ctx.__resolverQueryData?.data,
|
|
820
|
+
ctx.__resolverOriginalContext?.__registrationData,
|
|
821
|
+
ctx.__resolverOriginalContext?.queryData?.data,
|
|
822
|
+
ctx.data,
|
|
823
|
+
ctx.__resolverOriginalContext?.data
|
|
824
|
+
];
|
|
825
|
+
let resolvedData = null;
|
|
826
|
+
for (const candidate of candidateSources) {
|
|
827
|
+
if (candidate && typeof candidate === "object" && !Array.isArray(candidate)) {
|
|
828
|
+
resolvedData = {
|
|
829
|
+
...candidate
|
|
830
|
+
};
|
|
831
|
+
break;
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
if (!resolvedData) {
|
|
835
|
+
return null;
|
|
836
|
+
}
|
|
837
|
+
const resolvedUuid = String(
|
|
838
|
+
resolvedData.uuid ?? ctx.__serviceInstanceId ?? ctx.__resolverOriginalContext?.__serviceInstanceId ?? fallbackServiceInstanceId ?? ""
|
|
839
|
+
).trim();
|
|
840
|
+
const resolvedServiceName = String(
|
|
841
|
+
resolvedData.service_name ?? ctx.__serviceName ?? ctx.__resolverOriginalContext?.__serviceName ?? fallbackServiceName ?? ""
|
|
842
|
+
).trim();
|
|
843
|
+
const resolvedProcessPid = typeof resolvedData.process_pid === "number" ? resolvedData.process_pid : typeof ctx.__resolverOriginalContext?.data?.process_pid === "number" ? ctx.__resolverOriginalContext.data.process_pid : typeof ctx.__resolverOriginalContext?.__registrationData?.process_pid === "number" ? ctx.__resolverOriginalContext.__registrationData.process_pid : typeof ctx.queryData?.data?.process_pid === "number" ? ctx.queryData.data.process_pid : typeof ctx.__registrationData?.process_pid === "number" ? ctx.__registrationData.process_pid : null;
|
|
844
|
+
if (!resolvedUuid || !resolvedServiceName || resolvedProcessPid === null) {
|
|
845
|
+
return null;
|
|
846
|
+
}
|
|
847
|
+
return {
|
|
848
|
+
...resolvedData,
|
|
849
|
+
uuid: resolvedUuid,
|
|
850
|
+
service_name: resolvedServiceName,
|
|
851
|
+
process_pid: resolvedProcessPid
|
|
852
|
+
};
|
|
853
|
+
}
|
|
774
854
|
function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {}) {
|
|
775
855
|
const remoteInsertTask = CadenzaService.createCadenzaDBInsertTask(
|
|
776
856
|
tableName,
|
|
@@ -795,13 +875,24 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
795
875
|
});
|
|
796
876
|
delegationContext.__metadata.__skipRemoteExecution = delegationContext.__metadata.__skipRemoteExecution ?? delegationContext.__skipRemoteExecution ?? false;
|
|
797
877
|
delegationContext.__metadata.__blockRemoteExecution = delegationContext.__metadata.__blockRemoteExecution ?? delegationContext.__blockRemoteExecution ?? false;
|
|
798
|
-
|
|
878
|
+
const nextContext = {
|
|
799
879
|
...delegationContext,
|
|
800
880
|
__resolverOriginalContext: {
|
|
801
881
|
...ctx
|
|
802
882
|
},
|
|
803
883
|
__resolverQueryData: nextQueryData
|
|
804
884
|
};
|
|
885
|
+
if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
|
|
886
|
+
console.log("[CADENZA_INSTANCE_DEBUG] prepare_service_registry_insert_execution", {
|
|
887
|
+
tableName,
|
|
888
|
+
signalName,
|
|
889
|
+
resolverRequestId: ctx.__resolverRequestId ?? null,
|
|
890
|
+
hasData: nextQueryData.data !== void 0,
|
|
891
|
+
queryDataKeys: Object.keys(nextQueryData),
|
|
892
|
+
dataKeys: nextQueryData.data && typeof nextQueryData.data === "object" ? Object.keys(nextQueryData.data) : []
|
|
893
|
+
});
|
|
894
|
+
}
|
|
895
|
+
return nextContext;
|
|
805
896
|
},
|
|
806
897
|
`Prepares ${tableName} service-registry insert payloads for runner execution.`,
|
|
807
898
|
{
|
|
@@ -827,6 +918,18 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
827
918
|
ctx.__resolverQueryData ?? ctx.queryData ?? {},
|
|
828
919
|
ctx
|
|
829
920
|
);
|
|
921
|
+
if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
|
|
922
|
+
console.log("[CADENZA_INSTANCE_DEBUG] finalize_service_registry_insert", {
|
|
923
|
+
tableName,
|
|
924
|
+
hasNormalized: !!normalized,
|
|
925
|
+
normalizedKeys: normalized && typeof normalized === "object" ? Object.keys(normalized) : [],
|
|
926
|
+
uuid: normalized && typeof normalized === "object" ? normalized.uuid ?? normalized.data?.uuid ?? normalized.queryData?.data?.uuid ?? null : null,
|
|
927
|
+
serviceName: normalized && typeof normalized === "object" ? normalized.__serviceName ?? normalized.data?.service_name ?? normalized.queryData?.data?.service_name ?? null : null,
|
|
928
|
+
errored: normalized && typeof normalized === "object" ? normalized.errored === true : false,
|
|
929
|
+
error: normalized && typeof normalized === "object" ? normalized.__error ?? null : null,
|
|
930
|
+
inquiryMeta: normalized && typeof normalized === "object" ? normalized.__inquiryMeta ?? null : null
|
|
931
|
+
});
|
|
932
|
+
}
|
|
830
933
|
if (!normalized || typeof normalized !== "object") {
|
|
831
934
|
return normalized;
|
|
832
935
|
}
|
|
@@ -852,6 +955,16 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
852
955
|
CadenzaService.createEphemeralMetaTask(
|
|
853
956
|
`Resolve service registry insert execution for ${tableName} (${resolverRequestId})`,
|
|
854
957
|
(resultCtx) => {
|
|
958
|
+
if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
|
|
959
|
+
console.log("[CADENZA_INSTANCE_DEBUG] resolve_service_registry_insert_signal", {
|
|
960
|
+
tableName,
|
|
961
|
+
resolverRequestId,
|
|
962
|
+
incomingResolverRequestId: resultCtx.__resolverRequestId ?? null,
|
|
963
|
+
errored: resultCtx.errored === true,
|
|
964
|
+
error: resultCtx.__error ?? null,
|
|
965
|
+
keys: resultCtx && typeof resultCtx === "object" ? Object.keys(resultCtx) : []
|
|
966
|
+
});
|
|
967
|
+
}
|
|
855
968
|
if (resultCtx.__resolverRequestId !== resolverRequestId) {
|
|
856
969
|
return false;
|
|
857
970
|
}
|
|
@@ -871,6 +984,18 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
871
984
|
).doOn(executionResolvedSignal, executionFailedSignal);
|
|
872
985
|
const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
|
|
873
986
|
const executionSignal = localInsertTask ? localExecutionRequestedSignal : remoteExecutionRequestedSignal;
|
|
987
|
+
if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
|
|
988
|
+
console.log("[CADENZA_INSTANCE_DEBUG] resolve_service_registry_insert", {
|
|
989
|
+
tableName,
|
|
990
|
+
executionSignal,
|
|
991
|
+
hasLocalInsertTask: !!localInsertTask,
|
|
992
|
+
serviceName: ctx.__serviceName ?? ctx.data?.service_name ?? null,
|
|
993
|
+
serviceInstanceId: ctx.__serviceInstanceId ?? ctx.data?.uuid ?? null,
|
|
994
|
+
hasData: !!ctx.data,
|
|
995
|
+
dataKeys: ctx.data && typeof ctx.data === "object" ? Object.keys(ctx.data) : [],
|
|
996
|
+
registrationKeys: ctx.__registrationData && typeof ctx.__registrationData === "object" ? Object.keys(ctx.__registrationData) : []
|
|
997
|
+
});
|
|
998
|
+
}
|
|
874
999
|
if (localInsertTask && !wiredLocalTaskNames.has(localInsertTask.name)) {
|
|
875
1000
|
wireExecutionTarget(localInsertTask, prepareLocalExecutionTask);
|
|
876
1001
|
wiredLocalTaskNames.add(localInsertTask.name);
|
|
@@ -953,6 +1078,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
953
1078
|
this.useSocket = false;
|
|
954
1079
|
this.retryCount = 3;
|
|
955
1080
|
this.isFrontend = false;
|
|
1081
|
+
this.connectsToCadenzaDB = false;
|
|
956
1082
|
CadenzaService.defineIntent({
|
|
957
1083
|
name: META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT,
|
|
958
1084
|
description: "Gather transport diagnostics across all services and communication clients.",
|
|
@@ -1311,6 +1437,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1311
1437
|
)?.destroy();
|
|
1312
1438
|
continue;
|
|
1313
1439
|
}
|
|
1440
|
+
if (map.serviceName === this.serviceName) {
|
|
1441
|
+
continue;
|
|
1442
|
+
}
|
|
1314
1443
|
if (locallyEmittedSignals.includes(map.signalName)) {
|
|
1315
1444
|
if (!this.remoteSignals.get(map.serviceName)) {
|
|
1316
1445
|
this.remoteSignals.set(map.serviceName, /* @__PURE__ */ new Set());
|
|
@@ -1327,7 +1456,10 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1327
1456
|
return true;
|
|
1328
1457
|
},
|
|
1329
1458
|
"Handles registration of remote signals"
|
|
1330
|
-
).emits("meta.service_registry.registered_global_signals").doOn(
|
|
1459
|
+
).emits("meta.service_registry.registered_global_signals").doOn(
|
|
1460
|
+
"global.meta.cadenza_db.gathered_sync_data",
|
|
1461
|
+
"global.meta.graph_metadata.task_signal_observed"
|
|
1462
|
+
);
|
|
1331
1463
|
this.reconcileGatheredSyncTransmissionsTask = CadenzaService.createMetaTask(
|
|
1332
1464
|
"Reconcile gathered sync signal transmissions",
|
|
1333
1465
|
(ctx, emit) => this.reconcileGatheredSyncTransmissions(ctx, emit),
|
|
@@ -1341,6 +1473,13 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1341
1473
|
"Handle global intent registration",
|
|
1342
1474
|
(ctx, emit) => {
|
|
1343
1475
|
const intentToTaskMaps = this.normalizeIntentMaps(ctx);
|
|
1476
|
+
if (shouldTraceServiceRegistry(this.serviceName)) {
|
|
1477
|
+
console.log("[CADENZA_SERVICE_REGISTRY_TRACE] handle_global_intents", {
|
|
1478
|
+
localServiceName: this.serviceName,
|
|
1479
|
+
intentCount: intentToTaskMaps.length,
|
|
1480
|
+
sample: intentToTaskMaps.slice(0, 5)
|
|
1481
|
+
});
|
|
1482
|
+
}
|
|
1344
1483
|
const sorted = intentToTaskMaps.sort((a, b) => {
|
|
1345
1484
|
if (a.deleted && !b.deleted) return -1;
|
|
1346
1485
|
if (!a.deleted && b.deleted) return 1;
|
|
@@ -1352,6 +1491,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1352
1491
|
this.unregisterRemoteIntentDeputy(map);
|
|
1353
1492
|
continue;
|
|
1354
1493
|
}
|
|
1494
|
+
if (map.serviceName === this.serviceName) {
|
|
1495
|
+
continue;
|
|
1496
|
+
}
|
|
1355
1497
|
CadenzaService.inquiryBroker.addIntent({
|
|
1356
1498
|
name: map.intentName
|
|
1357
1499
|
});
|
|
@@ -1481,7 +1623,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1481
1623
|
);
|
|
1482
1624
|
this.handleSocketStatusUpdateTask = CadenzaService.createMetaTask(
|
|
1483
1625
|
"Handle Socket Status Update",
|
|
1484
|
-
(ctx) => {
|
|
1626
|
+
(ctx, emit) => {
|
|
1485
1627
|
const report = this.normalizeRuntimeStatusReport(ctx);
|
|
1486
1628
|
if (!report) {
|
|
1487
1629
|
return false;
|
|
@@ -1524,6 +1666,13 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1524
1666
|
if (!applied) {
|
|
1525
1667
|
return false;
|
|
1526
1668
|
}
|
|
1669
|
+
const updatedInstance = this.getInstance(
|
|
1670
|
+
report.serviceName,
|
|
1671
|
+
report.serviceInstanceId
|
|
1672
|
+
);
|
|
1673
|
+
if (updatedInstance && !updatedInstance.isFrontend && (this.deputies.has(report.serviceName) || this.remoteIntents.has(report.serviceName) || this.remoteSignals.has(report.serviceName))) {
|
|
1674
|
+
this.ensureDependeeClientForInstance(updatedInstance, emit, ctx);
|
|
1675
|
+
}
|
|
1527
1676
|
this.registerDependee(report.serviceName, report.serviceInstanceId);
|
|
1528
1677
|
this.lastHeartbeatAtByInstance.set(report.serviceInstanceId, Date.now());
|
|
1529
1678
|
this.missedHeartbeatsByInstance.set(report.serviceInstanceId, 0);
|
|
@@ -1534,9 +1683,28 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1534
1683
|
},
|
|
1535
1684
|
"Handles status update from socket broadcast"
|
|
1536
1685
|
).doOn("meta.socket_client.status_received");
|
|
1686
|
+
CadenzaService.createMetaTask(
|
|
1687
|
+
"Request full sync after CadenzaDB fetch handshake",
|
|
1688
|
+
(ctx) => {
|
|
1689
|
+
const serviceName = typeof ctx.serviceName === "string" ? ctx.serviceName.trim() : typeof ctx.__serviceName === "string" ? ctx.__serviceName.trim() : "";
|
|
1690
|
+
if (serviceName !== "CadenzaDB") {
|
|
1691
|
+
return false;
|
|
1692
|
+
}
|
|
1693
|
+
return this.scheduleEarlyFullSyncRequests("cadenza_db_fetch_handshake");
|
|
1694
|
+
},
|
|
1695
|
+
"Schedules a few early service-registry full-sync retries after the authority fetch transport comes up."
|
|
1696
|
+
).doOn("meta.fetch.handshake_complete");
|
|
1537
1697
|
this.fullSyncTask = CadenzaService.createMetaTask(
|
|
1538
1698
|
"Full sync",
|
|
1539
1699
|
async (ctx) => {
|
|
1700
|
+
if (this.connectsToCadenzaDB && this.serviceName !== "CadenzaDB" && !this.hasBootstrapFullSyncDeputies()) {
|
|
1701
|
+
if (shouldTraceServiceRegistry(this.serviceName)) {
|
|
1702
|
+
console.log("[CADENZA_SERVICE_REGISTRY_TRACE] full_sync_skipped_missing_bootstrap_deputies", {
|
|
1703
|
+
localServiceName: this.serviceName
|
|
1704
|
+
});
|
|
1705
|
+
}
|
|
1706
|
+
return false;
|
|
1707
|
+
}
|
|
1540
1708
|
const inquiryResult = await CadenzaService.inquire(
|
|
1541
1709
|
META_SERVICE_REGISTRY_FULL_SYNC_INTENT,
|
|
1542
1710
|
{
|
|
@@ -1553,6 +1721,15 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1553
1721
|
const serviceInstances = this.normalizeServiceInstancesFromSync(
|
|
1554
1722
|
inquiryResult
|
|
1555
1723
|
);
|
|
1724
|
+
if (shouldTraceServiceRegistry(this.serviceName)) {
|
|
1725
|
+
console.log("[CADENZA_SERVICE_REGISTRY_TRACE] full_sync_result", {
|
|
1726
|
+
localServiceName: this.serviceName,
|
|
1727
|
+
inquiryMeta: inquiryResult.__inquiryMeta,
|
|
1728
|
+
signalToTaskMaps: signalToTaskMaps.length,
|
|
1729
|
+
intentToTaskMaps: intentToTaskMaps.length,
|
|
1730
|
+
serviceInstances: serviceInstances.length
|
|
1731
|
+
});
|
|
1732
|
+
}
|
|
1556
1733
|
return {
|
|
1557
1734
|
...ctx,
|
|
1558
1735
|
signalToTaskMaps,
|
|
@@ -1593,8 +1770,11 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1593
1770
|
);
|
|
1594
1771
|
this.handleDeputyRegistrationTask = CadenzaService.createMetaTask(
|
|
1595
1772
|
"Handle Deputy Registration",
|
|
1596
|
-
(ctx) => {
|
|
1773
|
+
(ctx, emit) => {
|
|
1597
1774
|
const { serviceName } = ctx;
|
|
1775
|
+
if (!serviceName || serviceName === this.serviceName) {
|
|
1776
|
+
return false;
|
|
1777
|
+
}
|
|
1598
1778
|
if (!this.deputies.has(serviceName)) this.deputies.set(serviceName, []);
|
|
1599
1779
|
this.deputies.get(serviceName).push({
|
|
1600
1780
|
serviceName,
|
|
@@ -1603,6 +1783,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1603
1783
|
localTaskName: ctx.localTaskName,
|
|
1604
1784
|
communicationType: ctx.communicationType
|
|
1605
1785
|
});
|
|
1786
|
+
this.ensureDependeeClientsForService(serviceName, emit, ctx);
|
|
1606
1787
|
}
|
|
1607
1788
|
).doOn("meta.deputy.created");
|
|
1608
1789
|
this.getAllInstances = CadenzaService.createMetaTask(
|
|
@@ -2155,9 +2336,29 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2155
2336
|
retryDelayFactor: 1.3
|
|
2156
2337
|
}
|
|
2157
2338
|
).emits("meta.service_registry.service_inserted").emitsOnFail("meta.service_registry.service_insertion_failed");
|
|
2158
|
-
|
|
2339
|
+
const insertServiceInstanceResolverTask = resolveServiceRegistryInsertTask(
|
|
2159
2340
|
"service_instance",
|
|
2160
|
-
{
|
|
2341
|
+
{
|
|
2342
|
+
onConflict: {
|
|
2343
|
+
target: ["uuid"],
|
|
2344
|
+
action: {
|
|
2345
|
+
do: "update",
|
|
2346
|
+
set: {
|
|
2347
|
+
process_pid: "excluded",
|
|
2348
|
+
is_primary: "excluded",
|
|
2349
|
+
service_name: "excluded",
|
|
2350
|
+
is_database: "excluded",
|
|
2351
|
+
is_frontend: "excluded",
|
|
2352
|
+
is_blocked: "excluded",
|
|
2353
|
+
is_non_responsive: "excluded",
|
|
2354
|
+
is_active: "excluded",
|
|
2355
|
+
last_active: "excluded",
|
|
2356
|
+
health: "excluded",
|
|
2357
|
+
deleted: "false"
|
|
2358
|
+
}
|
|
2359
|
+
}
|
|
2360
|
+
}
|
|
2361
|
+
},
|
|
2161
2362
|
{
|
|
2162
2363
|
inputSchema: {
|
|
2163
2364
|
type: "object",
|
|
@@ -2213,7 +2414,8 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2213
2414
|
retryCount: 5,
|
|
2214
2415
|
retryDelay: 1e3
|
|
2215
2416
|
}
|
|
2216
|
-
).
|
|
2417
|
+
).emitsOnFail("meta.service_registry.instance_insertion_failed");
|
|
2418
|
+
this.insertServiceInstanceTask = insertServiceInstanceResolverTask.then(
|
|
2217
2419
|
CadenzaService.createMetaTask(
|
|
2218
2420
|
"Setup service",
|
|
2219
2421
|
(ctx) => {
|
|
@@ -2230,6 +2432,21 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2230
2432
|
transports: ctx.__transportData ?? ctx.transportData ?? []
|
|
2231
2433
|
});
|
|
2232
2434
|
if (!normalizedLocalInstance?.uuid || !normalizedLocalInstance.serviceName) {
|
|
2435
|
+
if (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true") {
|
|
2436
|
+
console.log("[CADENZA_INSTANCE_DEBUG] setup_service_rejected_instance", {
|
|
2437
|
+
hasServiceInstance: !!serviceInstance,
|
|
2438
|
+
hasData: !!data,
|
|
2439
|
+
hasQueryDataData: !!queryData?.data,
|
|
2440
|
+
serviceInstanceKeys: serviceInstance && typeof serviceInstance === "object" ? Object.keys(serviceInstance) : [],
|
|
2441
|
+
dataKeys: data && typeof data === "object" ? Object.keys(data) : [],
|
|
2442
|
+
queryDataDataKeys: queryData?.data && typeof queryData.data === "object" ? Object.keys(queryData.data) : [],
|
|
2443
|
+
normalizedLocalInstance,
|
|
2444
|
+
transportCount: Array.isArray(ctx.__transportData) ? ctx.__transportData.length : Array.isArray(ctx.transportData) ? ctx.transportData.length : 0,
|
|
2445
|
+
errored: ctx.errored === true,
|
|
2446
|
+
error: ctx.__error ?? null,
|
|
2447
|
+
inquiryMeta: ctx.__inquiryMeta ?? null
|
|
2448
|
+
});
|
|
2449
|
+
}
|
|
2233
2450
|
return false;
|
|
2234
2451
|
}
|
|
2235
2452
|
this.serviceInstanceId = normalizedLocalInstance.uuid;
|
|
@@ -2281,11 +2498,65 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2281
2498
|
).attachSignal("meta.service_registry.transport_registration_requested")
|
|
2282
2499
|
)
|
|
2283
2500
|
);
|
|
2501
|
+
CadenzaService.createMetaTask(
|
|
2502
|
+
"Retry local service instance registration after failed insert",
|
|
2503
|
+
(ctx) => {
|
|
2504
|
+
const registrationPayload = resolveServiceInstanceRegistrationPayload(
|
|
2505
|
+
ctx,
|
|
2506
|
+
this.serviceName,
|
|
2507
|
+
this.serviceInstanceId
|
|
2508
|
+
);
|
|
2509
|
+
if (!registrationPayload) {
|
|
2510
|
+
return false;
|
|
2511
|
+
}
|
|
2512
|
+
const serviceName = String(
|
|
2513
|
+
registrationPayload.service_name ?? this.serviceName ?? ""
|
|
2514
|
+
).trim();
|
|
2515
|
+
if (!serviceName || serviceName !== this.serviceName) {
|
|
2516
|
+
return false;
|
|
2517
|
+
}
|
|
2518
|
+
CadenzaService.schedule(
|
|
2519
|
+
"meta.service_registry.instance_registration_requested",
|
|
2520
|
+
{
|
|
2521
|
+
...ctx,
|
|
2522
|
+
data: registrationPayload,
|
|
2523
|
+
__registrationData: registrationPayload,
|
|
2524
|
+
__serviceName: serviceName,
|
|
2525
|
+
__serviceInstanceId: registrationPayload.uuid
|
|
2526
|
+
},
|
|
2527
|
+
5e3
|
|
2528
|
+
);
|
|
2529
|
+
return true;
|
|
2530
|
+
},
|
|
2531
|
+
"Retries local service instance registration only after the previous insert attempt has failed.",
|
|
2532
|
+
{
|
|
2533
|
+
register: false,
|
|
2534
|
+
isHidden: true
|
|
2535
|
+
}
|
|
2536
|
+
).doOn("meta.service_registry.instance_insertion_failed");
|
|
2284
2537
|
CadenzaService.createMetaTask(
|
|
2285
2538
|
"Prepare service instance registration",
|
|
2286
2539
|
(ctx) => {
|
|
2540
|
+
const registrationPayload = resolveServiceInstanceRegistrationPayload(
|
|
2541
|
+
ctx,
|
|
2542
|
+
this.serviceName,
|
|
2543
|
+
this.serviceInstanceId
|
|
2544
|
+
);
|
|
2545
|
+
if (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true") {
|
|
2546
|
+
console.log("[CADENZA_INSTANCE_DEBUG] prepare_service_instance_registration", {
|
|
2547
|
+
serviceName: registrationPayload?.service_name ?? ctx.data?.service_name ?? ctx.__serviceName ?? this.serviceName ?? null,
|
|
2548
|
+
serviceInstanceId: registrationPayload?.uuid ?? ctx.data?.uuid ?? ctx.__serviceInstanceId ?? this.serviceInstanceId ?? null,
|
|
2549
|
+
hasData: !!registrationPayload,
|
|
2550
|
+
dataKeys: registrationPayload && typeof registrationPayload === "object" ? Object.keys(registrationPayload) : [],
|
|
2551
|
+
transportCount: Array.isArray(ctx.__transportData) ? ctx.__transportData.length : Array.isArray(ctx.transportData) ? ctx.transportData.length : 0,
|
|
2552
|
+
skipRemoteExecution: ctx.__skipRemoteExecution === true
|
|
2553
|
+
});
|
|
2554
|
+
}
|
|
2555
|
+
if (!registrationPayload) {
|
|
2556
|
+
return false;
|
|
2557
|
+
}
|
|
2287
2558
|
const serviceName = String(
|
|
2288
|
-
|
|
2559
|
+
registrationPayload.service_name ?? ctx.__serviceName ?? this.serviceName ?? ""
|
|
2289
2560
|
).trim();
|
|
2290
2561
|
if (serviceName === "CadenzaDB" && !CadenzaService.getLocalCadenzaDBInsertTask("service_instance")) {
|
|
2291
2562
|
CadenzaService.schedule(
|
|
@@ -2295,7 +2566,16 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2295
2566
|
);
|
|
2296
2567
|
return false;
|
|
2297
2568
|
}
|
|
2298
|
-
return
|
|
2569
|
+
return {
|
|
2570
|
+
...ctx,
|
|
2571
|
+
data: registrationPayload,
|
|
2572
|
+
__registrationData: {
|
|
2573
|
+
...ctx.__registrationData ?? {},
|
|
2574
|
+
...registrationPayload
|
|
2575
|
+
},
|
|
2576
|
+
__serviceName: serviceName,
|
|
2577
|
+
__serviceInstanceId: registrationPayload.uuid
|
|
2578
|
+
};
|
|
2299
2579
|
},
|
|
2300
2580
|
"Waits for the exact local CadenzaDB service instance insert task during self-bootstrap."
|
|
2301
2581
|
).doOn("meta.service_registry.instance_registration_requested").then(this.insertServiceInstanceTask);
|
|
@@ -2476,21 +2756,40 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2476
2756
|
return [];
|
|
2477
2757
|
}
|
|
2478
2758
|
normalizeSignalMaps(ctx) {
|
|
2479
|
-
|
|
2759
|
+
const arrayPayload = this.readArrayPayload(ctx, [
|
|
2480
2760
|
"signalToTaskMaps",
|
|
2481
2761
|
"signal_to_task_maps",
|
|
2482
2762
|
"signalToTaskMap",
|
|
2483
2763
|
"signal_to_task_map"
|
|
2484
|
-
])
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2764
|
+
]);
|
|
2765
|
+
if (arrayPayload.length > 0) {
|
|
2766
|
+
return arrayPayload.map((map) => ({
|
|
2767
|
+
signalName: String(
|
|
2768
|
+
map.signalName ?? map.signal_name ?? ""
|
|
2769
|
+
).trim(),
|
|
2770
|
+
serviceName: String(
|
|
2771
|
+
map.serviceName ?? map.service_name ?? ""
|
|
2772
|
+
).trim(),
|
|
2773
|
+
isGlobal: Boolean(map.isGlobal ?? map.is_global ?? false),
|
|
2774
|
+
deleted: Boolean(map.deleted)
|
|
2775
|
+
})).filter((map) => map.signalName && map.serviceName);
|
|
2776
|
+
}
|
|
2777
|
+
const single = ctx.signalToTaskMap ?? ctx.signal_to_task_map ?? ctx.data ?? (ctx.signalName ?? ctx.signal_name ? ctx : void 0);
|
|
2778
|
+
if (!single || typeof single !== "object") {
|
|
2779
|
+
return [];
|
|
2780
|
+
}
|
|
2781
|
+
return [
|
|
2782
|
+
{
|
|
2783
|
+
signalName: String(
|
|
2784
|
+
single.signalName ?? single.signal_name ?? ""
|
|
2785
|
+
).trim(),
|
|
2786
|
+
serviceName: String(
|
|
2787
|
+
single.serviceName ?? single.service_name ?? ""
|
|
2788
|
+
).trim(),
|
|
2789
|
+
isGlobal: Boolean(single.isGlobal ?? single.is_global ?? false),
|
|
2790
|
+
deleted: Boolean(single.deleted)
|
|
2791
|
+
}
|
|
2792
|
+
].filter((map) => map.signalName && map.serviceName);
|
|
2494
2793
|
}
|
|
2495
2794
|
normalizeIntentMaps(ctx) {
|
|
2496
2795
|
const arrayPayload = this.readArrayPayload(ctx, [
|
|
@@ -2605,7 +2904,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2605
2904
|
)?.destroy();
|
|
2606
2905
|
this.gatheredSyncTransmissionServices.delete(serviceName);
|
|
2607
2906
|
}
|
|
2608
|
-
if (createdRecipients.length > 0
|
|
2907
|
+
if (createdRecipients.length > 0) {
|
|
2609
2908
|
emit("meta.cadenza_db.sync_tick", {
|
|
2610
2909
|
__syncing: true,
|
|
2611
2910
|
__reason: "gathered_sync_transmissions_reconciled"
|
|
@@ -2651,6 +2950,15 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2651
2950
|
};
|
|
2652
2951
|
this.remoteIntentDeputiesByKey.set(key, descriptor);
|
|
2653
2952
|
this.remoteIntentDeputiesByTask.set(deputyTask, descriptor);
|
|
2953
|
+
if (shouldTraceServiceRegistry(this.serviceName)) {
|
|
2954
|
+
console.log("[CADENZA_SERVICE_REGISTRY_TRACE] register_remote_intent_deputy", {
|
|
2955
|
+
localServiceName: this.serviceName,
|
|
2956
|
+
intentName: map.intentName,
|
|
2957
|
+
remoteServiceName: map.serviceName,
|
|
2958
|
+
remoteTaskName: map.taskName,
|
|
2959
|
+
remoteTaskVersion: map.taskVersion
|
|
2960
|
+
});
|
|
2961
|
+
}
|
|
2654
2962
|
}
|
|
2655
2963
|
unregisterRemoteIntentDeputy(map) {
|
|
2656
2964
|
const key = this.buildRemoteIntentDeputyKey(map);
|
|
@@ -2680,6 +2988,56 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2680
2988
|
}
|
|
2681
2989
|
}
|
|
2682
2990
|
}
|
|
2991
|
+
registerBootstrapFullSyncDeputies(emit, ctx) {
|
|
2992
|
+
if (!this.serviceName || this.serviceName === "CadenzaDB") {
|
|
2993
|
+
return false;
|
|
2994
|
+
}
|
|
2995
|
+
CadenzaService.inquiryBroker.addIntent({
|
|
2996
|
+
name: META_SERVICE_REGISTRY_FULL_SYNC_INTENT
|
|
2997
|
+
});
|
|
2998
|
+
for (const taskName of BOOTSTRAP_FULL_SYNC_RESPONDER_TASKS) {
|
|
2999
|
+
this.registerRemoteIntentDeputy({
|
|
3000
|
+
intentName: META_SERVICE_REGISTRY_FULL_SYNC_INTENT,
|
|
3001
|
+
serviceName: "CadenzaDB",
|
|
3002
|
+
taskName,
|
|
3003
|
+
taskVersion: 1
|
|
3004
|
+
});
|
|
3005
|
+
}
|
|
3006
|
+
this.ensureDependeeClientsForService("CadenzaDB", emit, ctx);
|
|
3007
|
+
return true;
|
|
3008
|
+
}
|
|
3009
|
+
hasBootstrapFullSyncDeputies() {
|
|
3010
|
+
if (!this.serviceName || this.serviceName === "CadenzaDB") {
|
|
3011
|
+
return true;
|
|
3012
|
+
}
|
|
3013
|
+
return BOOTSTRAP_FULL_SYNC_RESPONDER_TASKS.every(
|
|
3014
|
+
(taskName) => this.remoteIntentDeputiesByKey.has(
|
|
3015
|
+
this.buildRemoteIntentDeputyKey({
|
|
3016
|
+
intentName: META_SERVICE_REGISTRY_FULL_SYNC_INTENT,
|
|
3017
|
+
serviceName: "CadenzaDB",
|
|
3018
|
+
taskName,
|
|
3019
|
+
taskVersion: 1
|
|
3020
|
+
})
|
|
3021
|
+
)
|
|
3022
|
+
);
|
|
3023
|
+
}
|
|
3024
|
+
scheduleEarlyFullSyncRequests(reason) {
|
|
3025
|
+
for (const delayMs of EARLY_FULL_SYNC_DELAYS_MS) {
|
|
3026
|
+
CadenzaService.schedule(
|
|
3027
|
+
"meta.sync_requested",
|
|
3028
|
+
{
|
|
3029
|
+
__syncing: false,
|
|
3030
|
+
__reason: reason
|
|
3031
|
+
},
|
|
3032
|
+
delayMs
|
|
3033
|
+
);
|
|
3034
|
+
}
|
|
3035
|
+
return true;
|
|
3036
|
+
}
|
|
3037
|
+
bootstrapFullSync(emit, ctx, reason = "local_instance_inserted") {
|
|
3038
|
+
this.registerBootstrapFullSyncDeputies(emit, ctx);
|
|
3039
|
+
return this.scheduleEarlyFullSyncRequests(reason);
|
|
3040
|
+
}
|
|
2683
3041
|
getInquiryResponderDescriptor(task) {
|
|
2684
3042
|
const remote = this.remoteIntentDeputiesByTask.get(task);
|
|
2685
3043
|
if (remote) {
|
|
@@ -2708,6 +3066,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2708
3066
|
}
|
|
2709
3067
|
return this.getInstance(this.serviceName, this.serviceInstanceId);
|
|
2710
3068
|
}
|
|
3069
|
+
hasLocalInstanceRegistered() {
|
|
3070
|
+
return Boolean(this.getLocalInstance());
|
|
3071
|
+
}
|
|
2711
3072
|
summarizeTransportForDebug(transport) {
|
|
2712
3073
|
if (!transport) {
|
|
2713
3074
|
return void 0;
|
|
@@ -2856,7 +3217,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2856
3217
|
return communicationTypes;
|
|
2857
3218
|
}
|
|
2858
3219
|
ensureDependeeClientForInstance(instance, emit, ctx) {
|
|
2859
|
-
if (!instance || instance.uuid === this.serviceInstanceId || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
|
|
3220
|
+
if (!instance || instance.uuid === this.serviceInstanceId || instance.serviceName === this.serviceName || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
|
|
2860
3221
|
return false;
|
|
2861
3222
|
}
|
|
2862
3223
|
if (!this.deputies.has(instance.serviceName) && !this.remoteIntents.has(instance.serviceName) && !this.remoteSignals.has(instance.serviceName)) {
|
|
@@ -2884,6 +3245,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2884
3245
|
return true;
|
|
2885
3246
|
}
|
|
2886
3247
|
ensureDependeeClientsForService(serviceName, emit, ctx) {
|
|
3248
|
+
if (!serviceName || serviceName === this.serviceName) {
|
|
3249
|
+
return;
|
|
3250
|
+
}
|
|
2887
3251
|
for (const instance of this.instances.get(serviceName) ?? []) {
|
|
2888
3252
|
this.ensureDependeeClientForInstance(instance, emit, ctx);
|
|
2889
3253
|
}
|
|
@@ -3676,7 +4040,7 @@ var SignalTransmissionTask = class extends Task2 {
|
|
|
3676
4040
|
execute(context, emit, inquire, progressCallback) {
|
|
3677
4041
|
const ctx = context.getContext();
|
|
3678
4042
|
const metadata = context.getMetadata();
|
|
3679
|
-
const deputyContext = {
|
|
4043
|
+
const deputyContext = hoistDelegationMetadataFields({
|
|
3680
4044
|
__localTaskName: this.name,
|
|
3681
4045
|
__localServiceName: CadenzaService.serviceRegistry.serviceName,
|
|
3682
4046
|
__serviceName: this.serviceName,
|
|
@@ -3689,7 +4053,7 @@ var SignalTransmissionTask = class extends Task2 {
|
|
|
3689
4053
|
__signalName: this.signalName,
|
|
3690
4054
|
__signalEmissionId: metadata.__signalEmission?.uuid,
|
|
3691
4055
|
...ctx
|
|
3692
|
-
};
|
|
4056
|
+
});
|
|
3693
4057
|
return this.taskFunction(deputyContext, emit, inquire, progressCallback);
|
|
3694
4058
|
}
|
|
3695
4059
|
};
|
|
@@ -3705,6 +4069,7 @@ import fs from "fs";
|
|
|
3705
4069
|
import https from "https";
|
|
3706
4070
|
import fetch from "node-fetch";
|
|
3707
4071
|
import { v4 as uuid5 } from "uuid";
|
|
4072
|
+
var FETCH_HANDSHAKE_TIMEOUT_MS = 5e3;
|
|
3708
4073
|
var RestController = class _RestController {
|
|
3709
4074
|
/**
|
|
3710
4075
|
* Constructor for initializing the REST server and related configurations.
|
|
@@ -3796,7 +4161,15 @@ var RestController = class _RestController {
|
|
|
3796
4161
|
is_blocked: false,
|
|
3797
4162
|
health: {}
|
|
3798
4163
|
},
|
|
3799
|
-
__transportData:
|
|
4164
|
+
__transportData: Array.isArray(ctx.__declaredTransports) ? ctx.__declaredTransports.map((transport) => ({
|
|
4165
|
+
uuid: transport.uuid,
|
|
4166
|
+
service_instance_id: ctx.__serviceInstanceId,
|
|
4167
|
+
role: transport.role,
|
|
4168
|
+
origin: transport.origin,
|
|
4169
|
+
protocols: transport.protocols ?? ["rest", "socket"],
|
|
4170
|
+
...transport.securityProfile ? { security_profile: transport.securityProfile } : {},
|
|
4171
|
+
...transport.authStrategy ? { auth_strategy: transport.authStrategy } : {}
|
|
4172
|
+
})) : []
|
|
3800
4173
|
});
|
|
3801
4174
|
return;
|
|
3802
4175
|
}
|
|
@@ -3879,8 +4252,11 @@ var RestController = class _RestController {
|
|
|
3879
4252
|
const app = ctx.__app;
|
|
3880
4253
|
app.post("/handshake", (req, res) => {
|
|
3881
4254
|
try {
|
|
3882
|
-
|
|
3883
|
-
|
|
4255
|
+
const handshakePayload = req.body && typeof req.body === "object" ? req.body : {};
|
|
4256
|
+
if (Object.keys(handshakePayload).length > 0) {
|
|
4257
|
+
CadenzaService.log("New fetch connection.", handshakePayload);
|
|
4258
|
+
}
|
|
4259
|
+
CadenzaService.emit("meta.rest.handshake", handshakePayload);
|
|
3884
4260
|
res.send({
|
|
3885
4261
|
__status: "success",
|
|
3886
4262
|
__serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId
|
|
@@ -4128,6 +4504,19 @@ var RestController = class _RestController {
|
|
|
4128
4504
|
...ctx.data
|
|
4129
4505
|
};
|
|
4130
4506
|
ctx.__transportData = transportData;
|
|
4507
|
+
if (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true") {
|
|
4508
|
+
console.log("[CADENZA_INSTANCE_DEBUG] configure_network_emit", {
|
|
4509
|
+
serviceName: ctx.__serviceName,
|
|
4510
|
+
serviceInstanceId: ctx.__serviceInstanceId,
|
|
4511
|
+
isDatabase: ctx.__isDatabase === true,
|
|
4512
|
+
transportCount: transportData.length,
|
|
4513
|
+
transports: transportData.map((transport) => ({
|
|
4514
|
+
role: transport.role,
|
|
4515
|
+
origin: transport.origin,
|
|
4516
|
+
protocols: transport.protocols
|
|
4517
|
+
}))
|
|
4518
|
+
});
|
|
4519
|
+
}
|
|
4131
4520
|
delete ctx.__app;
|
|
4132
4521
|
CadenzaService.emit(
|
|
4133
4522
|
"meta.service_registry.instance_registration_requested",
|
|
@@ -4188,6 +4577,7 @@ var RestController = class _RestController {
|
|
|
4188
4577
|
if (!serviceName || !URL2 || !fetchId) {
|
|
4189
4578
|
return false;
|
|
4190
4579
|
}
|
|
4580
|
+
const clientTaskSuffix = `${URL2} (${fetchId})`;
|
|
4191
4581
|
const fetchDiagnostics = this.ensureFetchClientDiagnostics(
|
|
4192
4582
|
fetchId,
|
|
4193
4583
|
serviceName,
|
|
@@ -4195,12 +4585,12 @@ var RestController = class _RestController {
|
|
|
4195
4585
|
);
|
|
4196
4586
|
fetchDiagnostics.destroyed = false;
|
|
4197
4587
|
fetchDiagnostics.updatedAt = Date.now();
|
|
4198
|
-
if (CadenzaService.get(`Send Handshake to ${
|
|
4199
|
-
console.error("Fetch client already exists", URL2);
|
|
4588
|
+
if (CadenzaService.get(`Send Handshake to ${clientTaskSuffix}`)) {
|
|
4589
|
+
console.error("Fetch client already exists", { URL: URL2, fetchId });
|
|
4200
4590
|
return;
|
|
4201
4591
|
}
|
|
4202
4592
|
const handshakeTask = CadenzaService.createMetaTask(
|
|
4203
|
-
`Send Handshake to ${
|
|
4593
|
+
`Send Handshake to ${clientTaskSuffix}`,
|
|
4204
4594
|
async (ctx2, emit) => {
|
|
4205
4595
|
try {
|
|
4206
4596
|
const response = await this.fetchDataWithTimeout(
|
|
@@ -4212,7 +4602,7 @@ var RestController = class _RestController {
|
|
|
4212
4602
|
method: "POST",
|
|
4213
4603
|
body: JSON.stringify(ctx2.handshakeData)
|
|
4214
4604
|
},
|
|
4215
|
-
|
|
4605
|
+
FETCH_HANDSHAKE_TIMEOUT_MS
|
|
4216
4606
|
);
|
|
4217
4607
|
if (response.__status !== "success") {
|
|
4218
4608
|
const error = response.__error ?? `Failed to connect to service ${serviceName} ${ctx2.serviceInstanceId}`;
|
|
@@ -4263,13 +4653,19 @@ var RestController = class _RestController {
|
|
|
4263
4653
|
return ctx2;
|
|
4264
4654
|
},
|
|
4265
4655
|
"Sends handshake request",
|
|
4266
|
-
{
|
|
4656
|
+
{
|
|
4657
|
+
retryCount: 5,
|
|
4658
|
+
retryDelay: 1e3,
|
|
4659
|
+
retryDelayFactor: 1.5,
|
|
4660
|
+
register: false,
|
|
4661
|
+
isHidden: true
|
|
4662
|
+
}
|
|
4267
4663
|
).doOn(`meta.fetch.handshake_requested:${fetchId}`).emits("meta.fetch.handshake_complete").attachSignal(
|
|
4268
4664
|
"meta.fetch.handshake_failed",
|
|
4269
4665
|
"global.meta.fetch.service_communication_established"
|
|
4270
4666
|
);
|
|
4271
4667
|
const delegateTask = CadenzaService.createMetaTask(
|
|
4272
|
-
`Delegate flow to REST server ${
|
|
4668
|
+
`Delegate flow to REST server ${clientTaskSuffix}`,
|
|
4273
4669
|
async (ctx2, emit) => {
|
|
4274
4670
|
if (ctx2.__remoteRoutineName === void 0) {
|
|
4275
4671
|
return;
|
|
@@ -4317,13 +4713,17 @@ var RestController = class _RestController {
|
|
|
4317
4713
|
}
|
|
4318
4714
|
return resultContext;
|
|
4319
4715
|
},
|
|
4320
|
-
"Sends delegation request"
|
|
4716
|
+
"Sends delegation request",
|
|
4717
|
+
{
|
|
4718
|
+
register: false,
|
|
4719
|
+
isHidden: true
|
|
4720
|
+
}
|
|
4321
4721
|
).doOn(
|
|
4322
4722
|
`meta.service_registry.selected_instance_for_fetch:${fetchId}`,
|
|
4323
4723
|
`meta.service_registry.socket_failed:${fetchId}`
|
|
4324
4724
|
).emitsOnFail("meta.fetch.delegate_failed").attachSignal("meta.fetch.delegated");
|
|
4325
4725
|
const transmitTask = CadenzaService.createMetaTask(
|
|
4326
|
-
`Transmit signal to server ${
|
|
4726
|
+
`Transmit signal to server ${clientTaskSuffix}`,
|
|
4327
4727
|
async (ctx2, emit) => {
|
|
4328
4728
|
if (ctx2.__signalName === void 0) {
|
|
4329
4729
|
return;
|
|
@@ -4369,14 +4769,18 @@ var RestController = class _RestController {
|
|
|
4369
4769
|
}
|
|
4370
4770
|
return response;
|
|
4371
4771
|
},
|
|
4372
|
-
"Sends signal request"
|
|
4772
|
+
"Sends signal request",
|
|
4773
|
+
{
|
|
4774
|
+
register: false,
|
|
4775
|
+
isHidden: true
|
|
4776
|
+
}
|
|
4373
4777
|
).doOn(
|
|
4374
4778
|
`meta.service_registry.selected_instance_for_fetch:${fetchId}`,
|
|
4375
4779
|
`meta.signal_controller.remote_signal_registered:${serviceName}`,
|
|
4376
4780
|
"meta.signal_controller.wildcard_signal_registered"
|
|
4377
4781
|
).emitsOnFail("meta.fetch.signal_transmission_failed").attachSignal("meta.fetch.transmitted");
|
|
4378
4782
|
const statusTask = CadenzaService.createMetaTask(
|
|
4379
|
-
`Request status from ${
|
|
4783
|
+
`Request status from ${clientTaskSuffix}`,
|
|
4380
4784
|
async (ctx2) => {
|
|
4381
4785
|
fetchDiagnostics.statusChecks++;
|
|
4382
4786
|
fetchDiagnostics.updatedAt = Date.now();
|
|
@@ -4411,18 +4815,30 @@ var RestController = class _RestController {
|
|
|
4411
4815
|
}
|
|
4412
4816
|
return status;
|
|
4413
4817
|
},
|
|
4414
|
-
"Requests status"
|
|
4818
|
+
"Requests status",
|
|
4819
|
+
{
|
|
4820
|
+
register: false,
|
|
4821
|
+
isHidden: true
|
|
4822
|
+
}
|
|
4415
4823
|
).doOn("meta.fetch.status_check_requested").emits("meta.fetch.status_checked").emitsOnFail("meta.fetch.status_check_failed");
|
|
4416
|
-
CadenzaService.createEphemeralMetaTask(
|
|
4417
|
-
|
|
4418
|
-
|
|
4419
|
-
|
|
4420
|
-
|
|
4421
|
-
|
|
4422
|
-
|
|
4423
|
-
|
|
4424
|
-
|
|
4425
|
-
|
|
4824
|
+
CadenzaService.createEphemeralMetaTask(
|
|
4825
|
+
`Destroy fetch client ${fetchId}`,
|
|
4826
|
+
() => {
|
|
4827
|
+
fetchDiagnostics.connected = false;
|
|
4828
|
+
fetchDiagnostics.destroyed = true;
|
|
4829
|
+
fetchDiagnostics.updatedAt = Date.now();
|
|
4830
|
+
CadenzaService.log("Destroying fetch client", { URL: URL2, serviceName });
|
|
4831
|
+
handshakeTask.destroy();
|
|
4832
|
+
delegateTask.destroy();
|
|
4833
|
+
transmitTask.destroy();
|
|
4834
|
+
statusTask.destroy();
|
|
4835
|
+
},
|
|
4836
|
+
"",
|
|
4837
|
+
{
|
|
4838
|
+
register: false,
|
|
4839
|
+
isHidden: true
|
|
4840
|
+
}
|
|
4841
|
+
).doOn(
|
|
4426
4842
|
`meta.fetch.destroy_requested:${fetchId}`,
|
|
4427
4843
|
`meta.socket_client.disconnected:${fetchId}`,
|
|
4428
4844
|
`meta.fetch.handshake_failed:${fetchId}`
|
|
@@ -5841,7 +6257,11 @@ var SocketController = class _SocketController {
|
|
|
5841
6257
|
}
|
|
5842
6258
|
);
|
|
5843
6259
|
},
|
|
5844
|
-
"Handshakes with socket server"
|
|
6260
|
+
"Handshakes with socket server",
|
|
6261
|
+
{
|
|
6262
|
+
register: false,
|
|
6263
|
+
isHidden: true
|
|
6264
|
+
}
|
|
5845
6265
|
).doOn(`meta.socket_client.connected:${fetchId}`);
|
|
5846
6266
|
runtimeHandle.delegateTask = CadenzaService.createMetaTask(
|
|
5847
6267
|
`Delegate flow to Socket service ${url}`,
|
|
@@ -5919,7 +6339,11 @@ var SocketController = class _SocketController {
|
|
|
5919
6339
|
}
|
|
5920
6340
|
}
|
|
5921
6341
|
},
|
|
5922
|
-
`Delegate flow to service ${serviceName} with address ${url}
|
|
6342
|
+
`Delegate flow to service ${serviceName} with address ${url}`,
|
|
6343
|
+
{
|
|
6344
|
+
register: false,
|
|
6345
|
+
isHidden: true
|
|
6346
|
+
}
|
|
5923
6347
|
).doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`).attachSignal(
|
|
5924
6348
|
"meta.socket_client.delegated",
|
|
5925
6349
|
"meta.socket_shutdown_requested"
|
|
@@ -5943,7 +6367,11 @@ var SocketController = class _SocketController {
|
|
|
5943
6367
|
}
|
|
5944
6368
|
return response;
|
|
5945
6369
|
},
|
|
5946
|
-
`Transmits signal to service ${serviceName} with address ${url}
|
|
6370
|
+
`Transmits signal to service ${serviceName} with address ${url}`,
|
|
6371
|
+
{
|
|
6372
|
+
register: false,
|
|
6373
|
+
isHidden: true
|
|
6374
|
+
}
|
|
5947
6375
|
).doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`).attachSignal("meta.socket_client.transmitted");
|
|
5948
6376
|
CadenzaService.createEphemeralMetaTask(
|
|
5949
6377
|
`Shutdown SocketClient ${url}`,
|
|
@@ -5987,7 +6415,11 @@ var SocketController = class _SocketController {
|
|
|
5987
6415
|
fetchId
|
|
5988
6416
|
});
|
|
5989
6417
|
},
|
|
5990
|
-
"Shuts down the socket client"
|
|
6418
|
+
"Shuts down the socket client",
|
|
6419
|
+
{
|
|
6420
|
+
register: false,
|
|
6421
|
+
isHidden: true
|
|
6422
|
+
}
|
|
5991
6423
|
).doOn(
|
|
5992
6424
|
`meta.socket_shutdown_requested:${fetchId}`,
|
|
5993
6425
|
`meta.socket_client.disconnected:${fetchId}`,
|
|
@@ -6251,10 +6683,18 @@ function decomposeSignalName(signalName) {
|
|
|
6251
6683
|
|
|
6252
6684
|
// src/signals/SignalController.ts
|
|
6253
6685
|
function buildSignalDatabaseTriggerContext(data) {
|
|
6686
|
+
const onConflict = {
|
|
6687
|
+
target: ["name"],
|
|
6688
|
+
action: {
|
|
6689
|
+
do: "nothing"
|
|
6690
|
+
}
|
|
6691
|
+
};
|
|
6254
6692
|
return {
|
|
6255
6693
|
data: { ...data },
|
|
6694
|
+
onConflict,
|
|
6256
6695
|
queryData: {
|
|
6257
|
-
data: { ...data }
|
|
6696
|
+
data: { ...data },
|
|
6697
|
+
onConflict
|
|
6258
6698
|
}
|
|
6259
6699
|
};
|
|
6260
6700
|
}
|
|
@@ -6281,16 +6721,28 @@ var SignalController = class _SignalController {
|
|
|
6281
6721
|
CadenzaService.createMetaTask(
|
|
6282
6722
|
"Handle Signal Registration",
|
|
6283
6723
|
(ctx, emit) => {
|
|
6724
|
+
if (!CadenzaService.hasCompletedBootstrapSync()) {
|
|
6725
|
+
return false;
|
|
6726
|
+
}
|
|
6284
6727
|
const { signalName } = ctx;
|
|
6728
|
+
const signalObserver = CadenzaService.signalBroker.signalObservers?.get(
|
|
6729
|
+
signalName
|
|
6730
|
+
);
|
|
6731
|
+
if (signalObserver?.registered || signalObserver?.registrationRequested) {
|
|
6732
|
+
return false;
|
|
6733
|
+
}
|
|
6734
|
+
if (signalObserver) {
|
|
6735
|
+
signalObserver.registrationRequested = true;
|
|
6736
|
+
}
|
|
6285
6737
|
const { isMeta, isGlobal, domain, action } = decomposeSignalName(signalName);
|
|
6286
6738
|
emit(
|
|
6287
6739
|
"global.meta.signal_controller.signal_added",
|
|
6288
6740
|
buildSignalDatabaseTriggerContext({
|
|
6289
6741
|
name: signalName,
|
|
6290
|
-
isGlobal,
|
|
6742
|
+
is_global: isGlobal,
|
|
6291
6743
|
domain,
|
|
6292
6744
|
action,
|
|
6293
|
-
isMeta
|
|
6745
|
+
is_meta: isMeta
|
|
6294
6746
|
})
|
|
6295
6747
|
);
|
|
6296
6748
|
return ctx;
|
|
@@ -6299,12 +6751,35 @@ var SignalController = class _SignalController {
|
|
|
6299
6751
|
).doOn("meta.signal_broker.added").attachSignal("global.meta.signal_controller.signal_added");
|
|
6300
6752
|
CadenzaService.createMetaTask(
|
|
6301
6753
|
"Add data to signal emission",
|
|
6302
|
-
(ctx) => {
|
|
6754
|
+
(ctx, emit) => {
|
|
6303
6755
|
const signalEmission = ctx.__signalEmission;
|
|
6304
6756
|
delete ctx.__signalEmission;
|
|
6305
6757
|
if (!signalEmission) {
|
|
6306
6758
|
return false;
|
|
6307
6759
|
}
|
|
6760
|
+
if (typeof signalEmission.signalName === "string" && signalEmission.signalName.trim().length > 0 && !CadenzaService.signalBroker.signalObservers?.has(signalEmission.signalName)) {
|
|
6761
|
+
CadenzaService.signalBroker.addSignal(signalEmission.signalName);
|
|
6762
|
+
} else {
|
|
6763
|
+
const signalObserver = CadenzaService.signalBroker.signalObservers?.get(
|
|
6764
|
+
signalEmission.signalName
|
|
6765
|
+
);
|
|
6766
|
+
if (signalObserver && signalObserver.registered !== true && signalObserver.registrationRequested !== true && CadenzaService.hasCompletedBootstrapSync()) {
|
|
6767
|
+
signalObserver.registrationRequested = true;
|
|
6768
|
+
const { isMeta, isGlobal, domain, action } = decomposeSignalName(
|
|
6769
|
+
signalEmission.signalName
|
|
6770
|
+
);
|
|
6771
|
+
emit(
|
|
6772
|
+
"global.meta.signal_controller.signal_added",
|
|
6773
|
+
buildSignalDatabaseTriggerContext({
|
|
6774
|
+
name: signalEmission.signalName,
|
|
6775
|
+
is_global: isGlobal,
|
|
6776
|
+
domain,
|
|
6777
|
+
action,
|
|
6778
|
+
is_meta: isMeta
|
|
6779
|
+
})
|
|
6780
|
+
);
|
|
6781
|
+
}
|
|
6782
|
+
}
|
|
6308
6783
|
return {
|
|
6309
6784
|
data: {
|
|
6310
6785
|
uuid: signalEmission.uuid,
|
|
@@ -6659,10 +7134,10 @@ function registerActorSessionPersistenceTasks() {
|
|
|
6659
7134
|
}
|
|
6660
7135
|
|
|
6661
7136
|
// src/graph/controllers/GraphMetadataController.ts
|
|
6662
|
-
function buildDatabaseTriggerContext(data, filter, extra = {}) {
|
|
7137
|
+
function buildDatabaseTriggerContext(data, filter, extra = {}, queryExtra = {}) {
|
|
6663
7138
|
const nextData = data && typeof data === "object" ? { ...data } : void 0;
|
|
6664
7139
|
const nextFilter = filter && typeof filter === "object" ? { ...filter } : void 0;
|
|
6665
|
-
const queryData = {};
|
|
7140
|
+
const queryData = { ...queryExtra };
|
|
6666
7141
|
if (nextData !== void 0) {
|
|
6667
7142
|
queryData.data = nextData;
|
|
6668
7143
|
}
|
|
@@ -6676,19 +7151,108 @@ function buildDatabaseTriggerContext(data, filter, extra = {}) {
|
|
|
6676
7151
|
...Object.keys(queryData).length > 0 ? { queryData } : {}
|
|
6677
7152
|
};
|
|
6678
7153
|
}
|
|
7154
|
+
function resolveTaskFromMetadataContext(ctx) {
|
|
7155
|
+
const taskName = String(
|
|
7156
|
+
ctx?.taskName ?? ctx?.data?.taskName ?? ctx?.data?.task_name ?? ctx?.filter?.taskName ?? ctx?.filter?.task_name ?? ""
|
|
7157
|
+
);
|
|
7158
|
+
return taskName ? CadenzaService.get(taskName) : void 0;
|
|
7159
|
+
}
|
|
7160
|
+
function resolveTaskByName(name) {
|
|
7161
|
+
const taskName = String(name ?? "");
|
|
7162
|
+
return taskName ? CadenzaService.get(taskName) : void 0;
|
|
7163
|
+
}
|
|
7164
|
+
function resolvePredecessorTaskFromMetadataContext(ctx) {
|
|
7165
|
+
return resolveTaskByName(
|
|
7166
|
+
ctx?.predecessorTaskName ?? ctx?.data?.predecessorTaskName ?? ctx?.data?.predecessor_task_name ?? ctx?.filter?.predecessorTaskName ?? ctx?.filter?.predecessor_task_name
|
|
7167
|
+
);
|
|
7168
|
+
}
|
|
7169
|
+
function shouldSkipDirectTaskMetadata(task) {
|
|
7170
|
+
return !task || !task.register || task.isHidden || task.isDeputy;
|
|
7171
|
+
}
|
|
7172
|
+
function shouldPersistBusinessTaskExecution(task) {
|
|
7173
|
+
return !!task && task.register && !task.isHidden && !task.isMeta && !task.isSubMeta && !task.isDeputy;
|
|
7174
|
+
}
|
|
7175
|
+
function shouldEmitDirectPrimitiveMetadata() {
|
|
7176
|
+
return CadenzaService.hasCompletedBootstrapSync();
|
|
7177
|
+
}
|
|
7178
|
+
function shouldPersistBusinessInquiry(ctx) {
|
|
7179
|
+
const inquiryName = String(
|
|
7180
|
+
ctx?.data?.name ?? ctx?.inquiry ?? ctx?.data?.metadata?.inquiryMeta?.inquiry ?? ""
|
|
7181
|
+
);
|
|
7182
|
+
if (!inquiryName) {
|
|
7183
|
+
return false;
|
|
7184
|
+
}
|
|
7185
|
+
return !isMetaIntentName(inquiryName) && ctx?.data?.isMeta !== true && ctx?.data?.is_meta !== true;
|
|
7186
|
+
}
|
|
7187
|
+
function shouldPersistRoutineExecution(ctx) {
|
|
7188
|
+
if (ctx?.data?.isMeta === true || ctx?.data?.is_meta === true) {
|
|
7189
|
+
return false;
|
|
7190
|
+
}
|
|
7191
|
+
const routineTask = resolveTaskByName(ctx?.data?.name);
|
|
7192
|
+
if (routineTask) {
|
|
7193
|
+
return shouldPersistBusinessTaskExecution(routineTask);
|
|
7194
|
+
}
|
|
7195
|
+
return true;
|
|
7196
|
+
}
|
|
7197
|
+
function shouldPersistTaskExecutionMetadata(ctx) {
|
|
7198
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7199
|
+
return shouldPersistBusinessTaskExecution(task);
|
|
7200
|
+
}
|
|
7201
|
+
function shouldPersistTaskExecutionMap(ctx) {
|
|
7202
|
+
return shouldPersistBusinessTaskExecution(resolveTaskFromMetadataContext(ctx)) && shouldPersistBusinessTaskExecution(resolvePredecessorTaskFromMetadataContext(ctx));
|
|
7203
|
+
}
|
|
7204
|
+
function hasInquiryLink(data) {
|
|
7205
|
+
const metaContext = data?.metaContext ?? data?.meta_context;
|
|
7206
|
+
const directInquiryId = metaContext?.__inquiryId ?? metaContext?.__metadata?.__inquiryId;
|
|
7207
|
+
return typeof directInquiryId === "string" && directInquiryId.length > 0;
|
|
7208
|
+
}
|
|
6679
7209
|
var GraphMetadataController = class _GraphMetadataController {
|
|
6680
7210
|
static get instance() {
|
|
6681
7211
|
if (!this._instance) this._instance = new _GraphMetadataController();
|
|
6682
7212
|
return this._instance;
|
|
6683
7213
|
}
|
|
6684
7214
|
constructor() {
|
|
6685
|
-
|
|
6686
|
-
|
|
6687
|
-
|
|
6688
|
-
|
|
6689
|
-
}
|
|
7215
|
+
const buildOnConflictDoNothing = (target) => ({
|
|
7216
|
+
target,
|
|
7217
|
+
action: {
|
|
7218
|
+
do: "nothing"
|
|
7219
|
+
}
|
|
7220
|
+
});
|
|
7221
|
+
CadenzaService.createMetaTask("Handle task creation", (ctx) => {
|
|
7222
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7223
|
+
return false;
|
|
7224
|
+
}
|
|
7225
|
+
const taskName = String(ctx.data?.name ?? ctx.data?.taskName ?? "");
|
|
7226
|
+
const task = taskName ? CadenzaService.get(taskName) : void 0;
|
|
7227
|
+
const onConflict = buildOnConflictDoNothing([
|
|
7228
|
+
"name",
|
|
7229
|
+
"service_name",
|
|
7230
|
+
"version"
|
|
7231
|
+
]);
|
|
7232
|
+
if (shouldSkipDirectTaskMetadata(task) || task?.registered || task?.registrationRequested) {
|
|
7233
|
+
return false;
|
|
7234
|
+
}
|
|
7235
|
+
if (task) {
|
|
7236
|
+
task.registrationRequested = true;
|
|
7237
|
+
}
|
|
7238
|
+
return buildDatabaseTriggerContext(
|
|
7239
|
+
{
|
|
7240
|
+
...ctx.data,
|
|
7241
|
+
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
7242
|
+
},
|
|
7243
|
+
void 0,
|
|
7244
|
+
{ onConflict },
|
|
7245
|
+
{ onConflict }
|
|
7246
|
+
);
|
|
6690
7247
|
}).doOn("meta.task.created").emits("global.meta.graph_metadata.task_created");
|
|
6691
7248
|
CadenzaService.createMetaTask("Handle task update", (ctx) => {
|
|
7249
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7250
|
+
return false;
|
|
7251
|
+
}
|
|
7252
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7253
|
+
if (shouldSkipDirectTaskMetadata(task)) {
|
|
7254
|
+
return false;
|
|
7255
|
+
}
|
|
6692
7256
|
return buildDatabaseTriggerContext(
|
|
6693
7257
|
ctx.data ?? void 0,
|
|
6694
7258
|
{
|
|
@@ -6698,11 +7262,14 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6698
7262
|
);
|
|
6699
7263
|
}).doOn("meta.task.layer_index_changed", "meta.task.destroyed").emits("global.meta.graph_metadata.task_updated");
|
|
6700
7264
|
CadenzaService.createMetaTask("Handle task relationship creation", (ctx) => {
|
|
7265
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7266
|
+
return false;
|
|
7267
|
+
}
|
|
6701
7268
|
const taskName = ctx.data?.taskName ?? ctx.data?.task_name;
|
|
6702
7269
|
const predecessorTaskName = ctx.data?.predecessorTaskName ?? ctx.data?.predecessor_task_name;
|
|
6703
7270
|
const task = taskName ? CadenzaService.get(taskName) : void 0;
|
|
6704
7271
|
const predecessorTask = predecessorTaskName ? CadenzaService.get(predecessorTaskName) : void 0;
|
|
6705
|
-
if (!task?.registered || !predecessorTask?.registered) {
|
|
7272
|
+
if (shouldSkipDirectTaskMetadata(task) || shouldSkipDirectTaskMetadata(predecessorTask) || !task?.registered || !predecessorTask?.registered) {
|
|
6706
7273
|
return false;
|
|
6707
7274
|
}
|
|
6708
7275
|
return buildDatabaseTriggerContext({
|
|
@@ -6715,14 +7282,35 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6715
7282
|
CadenzaService.log(`Error in task ${ctx.data.taskName}`, ctx.data, "error");
|
|
6716
7283
|
}).doOn("meta.node.errored");
|
|
6717
7284
|
CadenzaService.createMetaTask("Handle task signal observation", (ctx) => {
|
|
6718
|
-
|
|
7285
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7286
|
+
return false;
|
|
7287
|
+
}
|
|
7288
|
+
const signalName = String(
|
|
7289
|
+
ctx.signalName ?? ctx.data?.signalName ?? ""
|
|
7290
|
+
).split(":")[0];
|
|
7291
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7292
|
+
if (shouldSkipDirectTaskMetadata(task)) {
|
|
7293
|
+
return false;
|
|
7294
|
+
}
|
|
7295
|
+
if (task?.registered && task.registeredSignals.has(signalName)) {
|
|
7296
|
+
return false;
|
|
7297
|
+
}
|
|
7298
|
+
const isGlobal = signalName.startsWith("global.");
|
|
6719
7299
|
return buildDatabaseTriggerContext({
|
|
6720
7300
|
...ctx.data,
|
|
7301
|
+
signalName,
|
|
6721
7302
|
isGlobal,
|
|
6722
7303
|
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
6723
7304
|
});
|
|
6724
7305
|
}).doOn("meta.task.observed_signal").emits("global.meta.graph_metadata.task_signal_observed");
|
|
6725
7306
|
CadenzaService.createMetaTask("Handle task signal attachment", (ctx) => {
|
|
7307
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7308
|
+
return false;
|
|
7309
|
+
}
|
|
7310
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7311
|
+
if (shouldSkipDirectTaskMetadata(task)) {
|
|
7312
|
+
return false;
|
|
7313
|
+
}
|
|
6726
7314
|
return buildDatabaseTriggerContext(
|
|
6727
7315
|
ctx.data ?? void 0,
|
|
6728
7316
|
{
|
|
@@ -6731,7 +7319,34 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6731
7319
|
}
|
|
6732
7320
|
);
|
|
6733
7321
|
}).doOn("meta.task.attached_signal").emits("global.meta.graph_metadata.task_attached_signal");
|
|
7322
|
+
CadenzaService.createMetaTask("Handle task intent association", (ctx) => {
|
|
7323
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7324
|
+
return false;
|
|
7325
|
+
}
|
|
7326
|
+
const intentName = String(ctx.data?.intentName ?? "");
|
|
7327
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7328
|
+
if (shouldSkipDirectTaskMetadata(task)) {
|
|
7329
|
+
return false;
|
|
7330
|
+
}
|
|
7331
|
+
if (task?.registered && task.__registeredIntents?.has(
|
|
7332
|
+
intentName
|
|
7333
|
+
)) {
|
|
7334
|
+
return false;
|
|
7335
|
+
}
|
|
7336
|
+
return buildDatabaseTriggerContext({
|
|
7337
|
+
...ctx.data,
|
|
7338
|
+
intentName,
|
|
7339
|
+
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
7340
|
+
});
|
|
7341
|
+
}).doOn("meta.task.intent_associated").emits("global.meta.graph_metadata.task_intent_associated");
|
|
6734
7342
|
CadenzaService.createMetaTask("Handle task unsubscribing signal", (ctx) => {
|
|
7343
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7344
|
+
return false;
|
|
7345
|
+
}
|
|
7346
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7347
|
+
if (shouldSkipDirectTaskMetadata(task)) {
|
|
7348
|
+
return false;
|
|
7349
|
+
}
|
|
6735
7350
|
return buildDatabaseTriggerContext(
|
|
6736
7351
|
{
|
|
6737
7352
|
deleted: true
|
|
@@ -6743,6 +7358,13 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6743
7358
|
);
|
|
6744
7359
|
}).doOn("meta.task.unsubscribed_signal").emits("meta.graph_metadata.task_unsubscribed_signal");
|
|
6745
7360
|
CadenzaService.createMetaTask("Handle task detaching signal", (ctx) => {
|
|
7361
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7362
|
+
return false;
|
|
7363
|
+
}
|
|
7364
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7365
|
+
if (shouldSkipDirectTaskMetadata(task)) {
|
|
7366
|
+
return false;
|
|
7367
|
+
}
|
|
6746
7368
|
return buildDatabaseTriggerContext(
|
|
6747
7369
|
{
|
|
6748
7370
|
deleted: true
|
|
@@ -6754,12 +7376,18 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6754
7376
|
);
|
|
6755
7377
|
}).doOn("meta.task.detached_signal").emits("global.meta.graph_metadata.task_detached_signal");
|
|
6756
7378
|
CadenzaService.createMetaTask("Handle routine creation", (ctx) => {
|
|
7379
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7380
|
+
return false;
|
|
7381
|
+
}
|
|
6757
7382
|
return buildDatabaseTriggerContext({
|
|
6758
7383
|
...ctx.data,
|
|
6759
7384
|
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
6760
7385
|
});
|
|
6761
7386
|
}).doAfter(CadenzaService.registry.registerRoutine).emits("global.meta.graph_metadata.routine_created");
|
|
6762
7387
|
CadenzaService.createMetaTask("Handle routine update", (ctx) => {
|
|
7388
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7389
|
+
return false;
|
|
7390
|
+
}
|
|
6763
7391
|
return buildDatabaseTriggerContext(
|
|
6764
7392
|
ctx.data ?? void 0,
|
|
6765
7393
|
{
|
|
@@ -6769,6 +7397,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6769
7397
|
);
|
|
6770
7398
|
}).doOn("meta.routine.destroyed").emits("global.meta.graph_metadata.routine_updated");
|
|
6771
7399
|
CadenzaService.createMetaTask("Handle adding task to routine", (ctx) => {
|
|
7400
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7401
|
+
return false;
|
|
7402
|
+
}
|
|
6772
7403
|
return buildDatabaseTriggerContext({
|
|
6773
7404
|
...ctx.data,
|
|
6774
7405
|
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
@@ -6784,8 +7415,12 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6784
7415
|
CadenzaService.createMetaTask(
|
|
6785
7416
|
"Handle routine execution creation",
|
|
6786
7417
|
(ctx) => {
|
|
7418
|
+
if (!shouldPersistRoutineExecution(ctx)) {
|
|
7419
|
+
return false;
|
|
7420
|
+
}
|
|
6787
7421
|
return buildDatabaseTriggerContext({
|
|
6788
7422
|
...ctx.data,
|
|
7423
|
+
previousRoutineExecution: hasInquiryLink(ctx.data) ? null : ctx.data?.previousRoutineExecution ?? ctx.data?.previous_routine_execution ?? null,
|
|
6789
7424
|
serviceName: CadenzaService.serviceRegistry.serviceName,
|
|
6790
7425
|
serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId
|
|
6791
7426
|
});
|
|
@@ -6822,6 +7457,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6822
7457
|
CadenzaService.createMetaTask(
|
|
6823
7458
|
"Handle task execution creation",
|
|
6824
7459
|
(ctx) => {
|
|
7460
|
+
if (!shouldPersistTaskExecutionMetadata(ctx)) {
|
|
7461
|
+
return false;
|
|
7462
|
+
}
|
|
6825
7463
|
return buildDatabaseTriggerContext({
|
|
6826
7464
|
...ctx.data,
|
|
6827
7465
|
serviceName: CadenzaService.serviceRegistry.serviceName,
|
|
@@ -6834,6 +7472,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6834
7472
|
CadenzaService.createMetaTask(
|
|
6835
7473
|
"Handle task execution mapped",
|
|
6836
7474
|
(ctx) => {
|
|
7475
|
+
if (!shouldPersistTaskExecutionMap(ctx)) {
|
|
7476
|
+
return false;
|
|
7477
|
+
}
|
|
6837
7478
|
return buildDatabaseTriggerContext(
|
|
6838
7479
|
ctx.data ?? void 0,
|
|
6839
7480
|
ctx.filter ?? void 0
|
|
@@ -6845,6 +7486,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6845
7486
|
CadenzaService.createMetaTask(
|
|
6846
7487
|
"Handle task execution started",
|
|
6847
7488
|
(ctx) => {
|
|
7489
|
+
if (!shouldPersistTaskExecutionMetadata(ctx)) {
|
|
7490
|
+
return false;
|
|
7491
|
+
}
|
|
6848
7492
|
return buildDatabaseTriggerContext(
|
|
6849
7493
|
ctx.data ?? void 0,
|
|
6850
7494
|
ctx.filter ?? void 0
|
|
@@ -6856,6 +7500,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6856
7500
|
CadenzaService.createMetaTask(
|
|
6857
7501
|
"Handle task execution ended",
|
|
6858
7502
|
(ctx) => {
|
|
7503
|
+
if (!shouldPersistTaskExecutionMetadata(ctx)) {
|
|
7504
|
+
return false;
|
|
7505
|
+
}
|
|
6859
7506
|
return buildDatabaseTriggerContext(
|
|
6860
7507
|
{
|
|
6861
7508
|
...ctx.data,
|
|
@@ -6868,9 +7515,39 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6868
7515
|
"Handles task execution ended",
|
|
6869
7516
|
{ concurrency: 100, isSubMeta: true }
|
|
6870
7517
|
).doOn("meta.node.ended").emits("global.meta.graph_metadata.task_execution_ended");
|
|
7518
|
+
CadenzaService.createMetaTask(
|
|
7519
|
+
"Handle inquiry creation",
|
|
7520
|
+
(ctx) => {
|
|
7521
|
+
if (!shouldPersistBusinessInquiry(ctx)) {
|
|
7522
|
+
return false;
|
|
7523
|
+
}
|
|
7524
|
+
return buildDatabaseTriggerContext({
|
|
7525
|
+
...ctx.data,
|
|
7526
|
+
serviceName: CadenzaService.serviceRegistry.serviceName,
|
|
7527
|
+
serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
7528
|
+
isMeta: false
|
|
7529
|
+
});
|
|
7530
|
+
},
|
|
7531
|
+
"Handles inquiry creation",
|
|
7532
|
+
{ concurrency: 100, isSubMeta: true }
|
|
7533
|
+
).doOn("meta.inquiry_broker.inquiry_started").emits("global.meta.graph_metadata.inquiry_created");
|
|
7534
|
+
CadenzaService.createMetaTask(
|
|
7535
|
+
"Handle inquiry update",
|
|
7536
|
+
(ctx) => {
|
|
7537
|
+
return buildDatabaseTriggerContext(
|
|
7538
|
+
ctx.data ?? void 0,
|
|
7539
|
+
ctx.filter ?? void 0
|
|
7540
|
+
);
|
|
7541
|
+
},
|
|
7542
|
+
"Handles inquiry completion updates",
|
|
7543
|
+
{ concurrency: 100, isSubMeta: true }
|
|
7544
|
+
).doOn("meta.inquiry_broker.inquiry_completed").emits("global.meta.graph_metadata.inquiry_updated");
|
|
6871
7545
|
CadenzaService.createMetaTask(
|
|
6872
7546
|
"Handle task execution relationship creation",
|
|
6873
7547
|
(ctx) => {
|
|
7548
|
+
if (!shouldPersistTaskExecutionMap(ctx)) {
|
|
7549
|
+
return false;
|
|
7550
|
+
}
|
|
6874
7551
|
return buildDatabaseTriggerContext(
|
|
6875
7552
|
{
|
|
6876
7553
|
executionCount: "increment",
|
|
@@ -6886,12 +7563,18 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6886
7563
|
{ concurrency: 100, isSubMeta: true }
|
|
6887
7564
|
).doOn("meta.node.mapped", "meta.node.detected_previous_task_execution").emits("global.meta.graph_metadata.relationship_executed");
|
|
6888
7565
|
CadenzaService.createMetaTask("Handle actor creation", (ctx) => {
|
|
7566
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7567
|
+
return false;
|
|
7568
|
+
}
|
|
6889
7569
|
return buildDatabaseTriggerContext({
|
|
6890
7570
|
...ctx.data,
|
|
6891
7571
|
service_name: CadenzaService.serviceRegistry.serviceName
|
|
6892
7572
|
});
|
|
6893
7573
|
}).doOn("meta.actor.created").emits("global.meta.graph_metadata.actor_created");
|
|
6894
7574
|
CadenzaService.createMetaTask("Handle actor task association", (ctx) => {
|
|
7575
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7576
|
+
return false;
|
|
7577
|
+
}
|
|
6895
7578
|
return buildDatabaseTriggerContext({
|
|
6896
7579
|
...ctx.data,
|
|
6897
7580
|
service_name: CadenzaService.serviceRegistry.serviceName
|
|
@@ -6899,6 +7582,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6899
7582
|
}).doOn("meta.actor.task_associated").emits("global.meta.graph_metadata.actor_task_associated");
|
|
6900
7583
|
registerActorSessionPersistenceTasks();
|
|
6901
7584
|
CadenzaService.createMetaTask("Handle Intent Creation", (ctx) => {
|
|
7585
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7586
|
+
return false;
|
|
7587
|
+
}
|
|
6902
7588
|
const intentName = ctx.data?.name;
|
|
6903
7589
|
return buildDatabaseTriggerContext({
|
|
6904
7590
|
...ctx.data,
|
|
@@ -6948,6 +7634,10 @@ var AUTHORITY_SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
|
|
|
6948
7634
|
"Prepare for signal sync"
|
|
6949
7635
|
]);
|
|
6950
7636
|
var AUTHORITY_SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
|
|
7637
|
+
var INTENT_MAP_DEBUG_ENABLED = process.env.CADENZA_INTENT_MAP_DEBUG === "1" || process.env.CADENZA_INTENT_MAP_DEBUG === "true";
|
|
7638
|
+
var POSTGRES_SETUP_DEBUG_ENABLED = process.env.CADENZA_POSTGRES_SETUP_DEBUG === "1" || process.env.CADENZA_POSTGRES_SETUP_DEBUG === "true";
|
|
7639
|
+
var GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY = 200;
|
|
7640
|
+
var GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS = 12e4;
|
|
6951
7641
|
function logAuthoritySyncDebug(event, payload) {
|
|
6952
7642
|
if (!AUTHORITY_SYNC_DEBUG_ENABLED) {
|
|
6953
7643
|
return;
|
|
@@ -6987,6 +7677,18 @@ function shouldDebugAuthoritySyncPayload(tableName, payload) {
|
|
|
6987
7677
|
}
|
|
6988
7678
|
return false;
|
|
6989
7679
|
}
|
|
7680
|
+
function logIntentMapSetupDebug(event, payload) {
|
|
7681
|
+
if (!INTENT_MAP_DEBUG_ENABLED) {
|
|
7682
|
+
return;
|
|
7683
|
+
}
|
|
7684
|
+
console.log("[CADENZA_INTENT_MAP_DEBUG]", event, payload);
|
|
7685
|
+
}
|
|
7686
|
+
function logPostgresSetupDebug(event, payload) {
|
|
7687
|
+
if (!POSTGRES_SETUP_DEBUG_ENABLED) {
|
|
7688
|
+
return;
|
|
7689
|
+
}
|
|
7690
|
+
console.log("[CADENZA_POSTGRES_SETUP_DEBUG]", event, payload);
|
|
7691
|
+
}
|
|
6990
7692
|
function buildAuthoritySyncDebugSummary(payload, context) {
|
|
6991
7693
|
const data = payload.data && typeof payload.data === "object" && !Array.isArray(payload.data) ? payload.data : {};
|
|
6992
7694
|
return {
|
|
@@ -7198,7 +7900,55 @@ function errorMessage(error) {
|
|
|
7198
7900
|
}
|
|
7199
7901
|
return String(error);
|
|
7200
7902
|
}
|
|
7201
|
-
|
|
7903
|
+
var EXECUTION_OBSERVABILITY_RETRYABLE_FOREIGN_KEYS = /* @__PURE__ */ new Set([
|
|
7904
|
+
"routine_execution_execution_trace_id_fkey",
|
|
7905
|
+
"routine_execution_previous_routine_execution_fkey",
|
|
7906
|
+
"task_execution_routine_execution_id_fkey",
|
|
7907
|
+
"task_execution_execution_trace_id_fkey",
|
|
7908
|
+
"task_execution_signal_emission_id_fkey",
|
|
7909
|
+
"task_execution_inquiry_id_fkey",
|
|
7910
|
+
"task_execution_map_task_execution_id_fkey",
|
|
7911
|
+
"task_execution_map_previous_task_execution_id_fkey",
|
|
7912
|
+
"signal_emission_execution_trace_id_fkey",
|
|
7913
|
+
"signal_emission_routine_execution_id_fkey",
|
|
7914
|
+
"signal_emission_task_execution_id_fkey",
|
|
7915
|
+
"inquiry_execution_trace_id_fkey",
|
|
7916
|
+
"inquiry_routine_execution_id_fkey",
|
|
7917
|
+
"inquiry_task_execution_id_fkey"
|
|
7918
|
+
]);
|
|
7919
|
+
function resolveOperationTableName(operationLabel) {
|
|
7920
|
+
if (!operationLabel) {
|
|
7921
|
+
return null;
|
|
7922
|
+
}
|
|
7923
|
+
const match = /^insert\s+([a-z0-9_]+)$/i.exec(operationLabel.trim());
|
|
7924
|
+
return match?.[1]?.toLowerCase() ?? null;
|
|
7925
|
+
}
|
|
7926
|
+
function isRetryableExecutionObservabilityForeignKeyError(error, operationLabel) {
|
|
7927
|
+
if (!error || typeof error !== "object") {
|
|
7928
|
+
return false;
|
|
7929
|
+
}
|
|
7930
|
+
const dbError = error;
|
|
7931
|
+
if (String(dbError.code ?? "") !== "23503") {
|
|
7932
|
+
return false;
|
|
7933
|
+
}
|
|
7934
|
+
const constraint = String(dbError.constraint ?? "").toLowerCase();
|
|
7935
|
+
if (constraint && EXECUTION_OBSERVABILITY_RETRYABLE_FOREIGN_KEYS.has(constraint)) {
|
|
7936
|
+
return true;
|
|
7937
|
+
}
|
|
7938
|
+
const table = String(dbError.table ?? "").toLowerCase() || resolveOperationTableName(operationLabel) || "";
|
|
7939
|
+
if (![
|
|
7940
|
+
"routine_execution",
|
|
7941
|
+
"task_execution",
|
|
7942
|
+
"task_execution_map",
|
|
7943
|
+
"signal_emission",
|
|
7944
|
+
"inquiry"
|
|
7945
|
+
].includes(table)) {
|
|
7946
|
+
return false;
|
|
7947
|
+
}
|
|
7948
|
+
const message = String(dbError.message ?? "").toLowerCase();
|
|
7949
|
+
return message.includes("foreign key constraint") && (message.includes("execution_trace") || message.includes("routine_execution") || message.includes("task_execution") || message.includes("signal_emission") || message.includes("inquiry"));
|
|
7950
|
+
}
|
|
7951
|
+
function isTransientDatabaseError(error, operationLabel) {
|
|
7202
7952
|
if (!error || typeof error !== "object") {
|
|
7203
7953
|
return false;
|
|
7204
7954
|
}
|
|
@@ -7208,7 +7958,10 @@ function isTransientDatabaseError(error) {
|
|
|
7208
7958
|
return true;
|
|
7209
7959
|
}
|
|
7210
7960
|
const message = String(dbError.message ?? "").toLowerCase();
|
|
7211
|
-
|
|
7961
|
+
if (message.includes("timeout") || message.includes("terminating connection") || message.includes("connection reset")) {
|
|
7962
|
+
return true;
|
|
7963
|
+
}
|
|
7964
|
+
return isRetryableExecutionObservabilityForeignKeyError(error, operationLabel);
|
|
7212
7965
|
}
|
|
7213
7966
|
function isSqlIdentifier(value) {
|
|
7214
7967
|
return /^[a-z_][a-z0-9_]*$/.test(value);
|
|
@@ -7242,6 +7995,37 @@ function resolveDataRows(data) {
|
|
|
7242
7995
|
}
|
|
7243
7996
|
return [ensurePlainObject(data, "data")];
|
|
7244
7997
|
}
|
|
7998
|
+
var DB_OPERATION_CONTEXT_KEYS = [
|
|
7999
|
+
"data",
|
|
8000
|
+
"batch",
|
|
8001
|
+
"transaction",
|
|
8002
|
+
"onConflict",
|
|
8003
|
+
"filter",
|
|
8004
|
+
"fields",
|
|
8005
|
+
"joins",
|
|
8006
|
+
"sort",
|
|
8007
|
+
"limit",
|
|
8008
|
+
"offset",
|
|
8009
|
+
"queryMode",
|
|
8010
|
+
"aggregates",
|
|
8011
|
+
"groupBy"
|
|
8012
|
+
];
|
|
8013
|
+
function mergeTriggerQueryData(context, triggerQueryData) {
|
|
8014
|
+
const existingQueryData = typeof context.queryData === "object" && context.queryData ? { ...context.queryData } : {};
|
|
8015
|
+
for (const key of DB_OPERATION_CONTEXT_KEYS) {
|
|
8016
|
+
if (!Object.prototype.hasOwnProperty.call(existingQueryData, key) && context[key] !== void 0) {
|
|
8017
|
+
existingQueryData[key] = context[key];
|
|
8018
|
+
}
|
|
8019
|
+
}
|
|
8020
|
+
return {
|
|
8021
|
+
...existingQueryData,
|
|
8022
|
+
...triggerQueryData
|
|
8023
|
+
};
|
|
8024
|
+
}
|
|
8025
|
+
function resolveOperationPayload(context) {
|
|
8026
|
+
const queryData = typeof context.queryData === "object" && context.queryData ? context.queryData : {};
|
|
8027
|
+
return mergeTriggerQueryData(context, queryData);
|
|
8028
|
+
}
|
|
7245
8029
|
function buildAddConstraintIfMissingStatement(tableName, constraintName, constraintDefinition) {
|
|
7246
8030
|
const escapedConstraintName = constraintName.replace(/'/g, "''");
|
|
7247
8031
|
const escapedTableName = tableName.replace(/'/g, "''");
|
|
@@ -7379,9 +8163,19 @@ var DatabaseController = class _DatabaseController {
|
|
|
7379
8163
|
};
|
|
7380
8164
|
const runtimeState = registration.actor.getRuntimeState(registration.actorKey);
|
|
7381
8165
|
if (runtimeState?.ready) {
|
|
8166
|
+
logPostgresSetupDebug("setup_already_ready", {
|
|
8167
|
+
actorName: registration.actorName,
|
|
8168
|
+
databaseName: registration.databaseName
|
|
8169
|
+
});
|
|
7382
8170
|
this.emitSetupDone(registration, payload);
|
|
7383
8171
|
return registration;
|
|
7384
8172
|
}
|
|
8173
|
+
logPostgresSetupDebug("emit_setup_requested", {
|
|
8174
|
+
actorName: registration.actorName,
|
|
8175
|
+
databaseName: registration.databaseName,
|
|
8176
|
+
ownerServiceName: registration.ownerServiceName,
|
|
8177
|
+
payloadKeys: Object.keys(payload)
|
|
8178
|
+
});
|
|
7385
8179
|
CadenzaService.emit(registration.setupSignal, payload);
|
|
7386
8180
|
return registration;
|
|
7387
8181
|
}
|
|
@@ -7433,6 +8227,11 @@ var DatabaseController = class _DatabaseController {
|
|
|
7433
8227
|
`Setup ${registration.actorName}`,
|
|
7434
8228
|
registration.actor.task(
|
|
7435
8229
|
async ({ input, state, runtimeState, setState, setRuntimeState, emit }) => {
|
|
8230
|
+
logPostgresSetupDebug("setup_task_started", {
|
|
8231
|
+
actorName: registration.actorName,
|
|
8232
|
+
databaseName: registration.databaseName,
|
|
8233
|
+
inputKeys: Object.keys(input ?? {})
|
|
8234
|
+
});
|
|
7436
8235
|
const requestedDatabaseName = String(
|
|
7437
8236
|
input.options?.databaseName ?? input.databaseName ?? registration.databaseName
|
|
7438
8237
|
);
|
|
@@ -7451,11 +8250,19 @@ var DatabaseController = class _DatabaseController {
|
|
|
7451
8250
|
}
|
|
7452
8251
|
try {
|
|
7453
8252
|
await this.createDatabaseIfMissing(requestedDatabaseName);
|
|
8253
|
+
logPostgresSetupDebug("database_ready", {
|
|
8254
|
+
actorName: registration.actorName,
|
|
8255
|
+
databaseName: requestedDatabaseName
|
|
8256
|
+
});
|
|
7454
8257
|
const pool = this.createTargetPool(
|
|
7455
8258
|
requestedDatabaseName,
|
|
7456
8259
|
state.safetyPolicy.statementTimeoutMs
|
|
7457
8260
|
);
|
|
7458
8261
|
await this.checkPoolHealth(pool, state.safetyPolicy);
|
|
8262
|
+
logPostgresSetupDebug("pool_healthy", {
|
|
8263
|
+
actorName: registration.actorName,
|
|
8264
|
+
databaseName: requestedDatabaseName
|
|
8265
|
+
});
|
|
7459
8266
|
this.validateSchema({
|
|
7460
8267
|
schema: registration.schema,
|
|
7461
8268
|
options: registration.options
|
|
@@ -7471,6 +8278,18 @@ var DatabaseController = class _DatabaseController {
|
|
|
7471
8278
|
if (!registration.tasksGenerated) {
|
|
7472
8279
|
this.generateDatabaseTasks(registration);
|
|
7473
8280
|
registration.tasksGenerated = true;
|
|
8281
|
+
const localTasks = Array.from(CadenzaService.registry.tasks.values());
|
|
8282
|
+
logIntentMapSetupDebug("generated_database_tasks", {
|
|
8283
|
+
actorName: registration.actorName,
|
|
8284
|
+
ownerServiceName: registration.ownerServiceName,
|
|
8285
|
+
totalLocalTasks: localTasks.length,
|
|
8286
|
+
generatedTaskNames: localTasks.map((task) => task.name).filter(
|
|
8287
|
+
(taskName) => /(Query|Insert|Update|Delete|COUNT|EXISTS|ONE|AGGREGATE|UPSERT) /.test(
|
|
8288
|
+
taskName
|
|
8289
|
+
)
|
|
8290
|
+
).slice(0, 24)
|
|
8291
|
+
});
|
|
8292
|
+
CadenzaService.schedule("meta.sync_requested", { __syncing: true }, 250);
|
|
7474
8293
|
}
|
|
7475
8294
|
const nowIso = (/* @__PURE__ */ new Date()).toISOString();
|
|
7476
8295
|
setRuntimeState({
|
|
@@ -7491,6 +8310,10 @@ var DatabaseController = class _DatabaseController {
|
|
|
7491
8310
|
this.emitSetupDone(registration, {
|
|
7492
8311
|
...input
|
|
7493
8312
|
});
|
|
8313
|
+
logPostgresSetupDebug("setup_task_completed", {
|
|
8314
|
+
actorName: registration.actorName,
|
|
8315
|
+
databaseName: requestedDatabaseName
|
|
8316
|
+
});
|
|
7494
8317
|
return {
|
|
7495
8318
|
...input,
|
|
7496
8319
|
__success: true,
|
|
@@ -7500,6 +8323,11 @@ var DatabaseController = class _DatabaseController {
|
|
|
7500
8323
|
};
|
|
7501
8324
|
} catch (error) {
|
|
7502
8325
|
const message = errorMessage(error);
|
|
8326
|
+
logPostgresSetupDebug("setup_task_failed", {
|
|
8327
|
+
actorName: registration.actorName,
|
|
8328
|
+
databaseName: requestedDatabaseName,
|
|
8329
|
+
error: message
|
|
8330
|
+
});
|
|
7503
8331
|
setRuntimeState({
|
|
7504
8332
|
pool: null,
|
|
7505
8333
|
ready: false,
|
|
@@ -7627,7 +8455,7 @@ var DatabaseController = class _DatabaseController {
|
|
|
7627
8455
|
return await work();
|
|
7628
8456
|
} catch (error) {
|
|
7629
8457
|
lastError = error;
|
|
7630
|
-
const transient = isTransientDatabaseError(error);
|
|
8458
|
+
const transient = isTransientDatabaseError(error, operationLabel);
|
|
7631
8459
|
if (!transient || attempt >= attempts) {
|
|
7632
8460
|
break;
|
|
7633
8461
|
}
|
|
@@ -8293,7 +9121,7 @@ var DatabaseController = class _DatabaseController {
|
|
|
8293
9121
|
description: `Macro upsert operation for table ${tableName}`,
|
|
8294
9122
|
input: insertSchema
|
|
8295
9123
|
});
|
|
8296
|
-
CadenzaService.
|
|
9124
|
+
CadenzaService.createTask(
|
|
8297
9125
|
`UPSERT ${tableName}`,
|
|
8298
9126
|
registration.actor.task(
|
|
8299
9127
|
async ({ input }) => {
|
|
@@ -8314,9 +9142,11 @@ var DatabaseController = class _DatabaseController {
|
|
|
8314
9142
|
},
|
|
8315
9143
|
{ mode: "write" }
|
|
8316
9144
|
),
|
|
8317
|
-
(context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
|
|
8318
9145
|
`Macro upsert task for ${tableName}`,
|
|
8319
9146
|
{
|
|
9147
|
+
concurrency: GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY,
|
|
9148
|
+
timeout: GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS,
|
|
9149
|
+
getTagCallback: () => `upsert:${registration.actorToken}:${tableName}`,
|
|
8320
9150
|
isMeta: registration.options.isMeta,
|
|
8321
9151
|
isSubMeta: registration.options.isMeta,
|
|
8322
9152
|
validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
|
|
@@ -8347,15 +9177,15 @@ var DatabaseController = class _DatabaseController {
|
|
|
8347
9177
|
};
|
|
8348
9178
|
}
|
|
8349
9179
|
if (trigger.queryData) {
|
|
8350
|
-
context.queryData =
|
|
8351
|
-
|
|
8352
|
-
|
|
8353
|
-
|
|
9180
|
+
context.queryData = mergeTriggerQueryData(
|
|
9181
|
+
context,
|
|
9182
|
+
trigger.queryData
|
|
9183
|
+
);
|
|
8354
9184
|
payloadModifiedByTriggers = true;
|
|
8355
9185
|
}
|
|
8356
9186
|
}
|
|
8357
9187
|
}
|
|
8358
|
-
const operationPayload =
|
|
9188
|
+
const operationPayload = resolveOperationPayload(context);
|
|
8359
9189
|
const shouldDebugAuthoritySync = shouldDebugAuthoritySyncPayload(
|
|
8360
9190
|
tableName,
|
|
8361
9191
|
operationPayload
|
|
@@ -8452,18 +9282,29 @@ var DatabaseController = class _DatabaseController {
|
|
|
8452
9282
|
},
|
|
8453
9283
|
{ mode: op === "query" ? "read" : "write" }
|
|
8454
9284
|
);
|
|
8455
|
-
const
|
|
9285
|
+
const taskOptions = {
|
|
9286
|
+
isMeta: registration.options.isMeta,
|
|
9287
|
+
isSubMeta: registration.options.isMeta,
|
|
9288
|
+
validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
|
|
9289
|
+
inputSchema: schema
|
|
9290
|
+
};
|
|
9291
|
+
const task = (op === "insert" ? CadenzaService.createTask(
|
|
8456
9292
|
taskName,
|
|
8457
9293
|
databaseTaskFunction,
|
|
8458
|
-
(context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
|
|
8459
9294
|
`Auto-generated ${op} task for ${tableName} (PostgresActor)`,
|
|
8460
9295
|
{
|
|
8461
|
-
|
|
8462
|
-
|
|
8463
|
-
|
|
8464
|
-
|
|
9296
|
+
...taskOptions,
|
|
9297
|
+
concurrency: GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY,
|
|
9298
|
+
timeout: GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS,
|
|
9299
|
+
getTagCallback: () => `insert:${registration.actorToken}:${tableName}`
|
|
8465
9300
|
}
|
|
8466
|
-
).
|
|
9301
|
+
) : CadenzaService.createThrottledTask(
|
|
9302
|
+
taskName,
|
|
9303
|
+
databaseTaskFunction,
|
|
9304
|
+
(context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
|
|
9305
|
+
`Auto-generated ${op} task for ${tableName} (PostgresActor)`,
|
|
9306
|
+
taskOptions
|
|
9307
|
+
)).doOn(
|
|
8467
9308
|
...table.customSignals?.triggers?.[op]?.map(
|
|
8468
9309
|
(signal) => typeof signal === "string" ? signal : signal.signal
|
|
8469
9310
|
) ?? []
|
|
@@ -9122,7 +9963,7 @@ function buildIntentRegistryData(intent) {
|
|
|
9122
9963
|
description: typeof intent?.description === "string" ? intent.description : "",
|
|
9123
9964
|
input: intent?.input && typeof intent.input === "object" ? intent.input : { type: "object" },
|
|
9124
9965
|
output: intent?.output && typeof intent.output === "object" ? intent.output : { type: "object" },
|
|
9125
|
-
|
|
9966
|
+
is_meta: isMetaIntentName(name)
|
|
9126
9967
|
};
|
|
9127
9968
|
}
|
|
9128
9969
|
function getJoinedContextValue(ctx, key) {
|
|
@@ -9195,34 +10036,7 @@ function buildSyncInsertQueryData(ctx, queryData = {}) {
|
|
|
9195
10036
|
}
|
|
9196
10037
|
return nextQueryData;
|
|
9197
10038
|
}
|
|
9198
|
-
function buildSyncQueryQueryData(ctx, queryData = {}) {
|
|
9199
|
-
const joinedQueryData = getJoinedContextValue(ctx, "queryData");
|
|
9200
|
-
const existingQueryData = ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : joinedQueryData && typeof joinedQueryData === "object" ? joinedQueryData : {};
|
|
9201
|
-
const nextQueryData = {};
|
|
9202
|
-
const allowedKeys = [
|
|
9203
|
-
"transaction",
|
|
9204
|
-
"filter",
|
|
9205
|
-
"fields",
|
|
9206
|
-
"joins",
|
|
9207
|
-
"sort",
|
|
9208
|
-
"limit",
|
|
9209
|
-
"offset",
|
|
9210
|
-
"queryMode",
|
|
9211
|
-
"aggregates",
|
|
9212
|
-
"groupBy"
|
|
9213
|
-
];
|
|
9214
|
-
for (const key of allowedKeys) {
|
|
9215
|
-
if (Object.prototype.hasOwnProperty.call(existingQueryData, key)) {
|
|
9216
|
-
nextQueryData[key] = existingQueryData[key];
|
|
9217
|
-
}
|
|
9218
|
-
}
|
|
9219
|
-
return {
|
|
9220
|
-
...nextQueryData,
|
|
9221
|
-
...queryData
|
|
9222
|
-
};
|
|
9223
|
-
}
|
|
9224
10039
|
var REMOTE_AUTHORITY_SYNC_INSERT_CONCURRENCY = 5;
|
|
9225
|
-
var REMOTE_AUTHORITY_SYNC_QUERY_CONCURRENCY = 3;
|
|
9226
10040
|
function wireSyncTaskGraph(predecessorTask, graph, ...completionTasks) {
|
|
9227
10041
|
if (!graph) {
|
|
9228
10042
|
return void 0;
|
|
@@ -9235,11 +10049,27 @@ function wireSyncTaskGraph(predecessorTask, graph, ...completionTasks) {
|
|
|
9235
10049
|
}
|
|
9236
10050
|
function buildSyncExecutionEnvelope(ctx, queryData) {
|
|
9237
10051
|
const originalContext = { ...ctx };
|
|
10052
|
+
const syncSourceServiceName = typeof ctx.__syncSourceServiceName === "string" && ctx.__syncSourceServiceName.trim().length > 0 ? ctx.__syncSourceServiceName : typeof ctx.__serviceName === "string" && ctx.__serviceName.trim().length > 0 ? ctx.__serviceName : resolveSyncServiceName();
|
|
10053
|
+
const rootDbOperationFields = {};
|
|
10054
|
+
for (const key of [
|
|
10055
|
+
"data",
|
|
10056
|
+
"batch",
|
|
10057
|
+
"transaction",
|
|
10058
|
+
"onConflict",
|
|
10059
|
+
"filter",
|
|
10060
|
+
"fields"
|
|
10061
|
+
]) {
|
|
10062
|
+
if (Object.prototype.hasOwnProperty.call(queryData, key)) {
|
|
10063
|
+
rootDbOperationFields[key] = queryData[key];
|
|
10064
|
+
}
|
|
10065
|
+
}
|
|
9238
10066
|
const nextContext = {
|
|
9239
10067
|
__syncing: ctx.__syncing === true || ctx.__metadata?.__syncing === true || false,
|
|
10068
|
+
__syncSourceServiceName: syncSourceServiceName,
|
|
9240
10069
|
__preferredTransportProtocol: "rest",
|
|
9241
10070
|
__resolverOriginalContext: originalContext,
|
|
9242
10071
|
__resolverQueryData: queryData,
|
|
10072
|
+
...rootDbOperationFields,
|
|
9243
10073
|
queryData
|
|
9244
10074
|
};
|
|
9245
10075
|
if (typeof ctx.__reason === "string" && ctx.__reason.trim().length > 0) {
|
|
@@ -9247,9 +10077,26 @@ function buildSyncExecutionEnvelope(ctx, queryData) {
|
|
|
9247
10077
|
}
|
|
9248
10078
|
return nextContext;
|
|
9249
10079
|
}
|
|
10080
|
+
function markCompletedSyncCycle(completedCycles, cycleId, limit = 32) {
|
|
10081
|
+
if (!cycleId) {
|
|
10082
|
+
return false;
|
|
10083
|
+
}
|
|
10084
|
+
if (completedCycles.has(cycleId)) {
|
|
10085
|
+
return false;
|
|
10086
|
+
}
|
|
10087
|
+
completedCycles.add(cycleId);
|
|
10088
|
+
while (completedCycles.size > limit) {
|
|
10089
|
+
const oldestCycleId = completedCycles.values().next().value;
|
|
10090
|
+
if (!oldestCycleId) {
|
|
10091
|
+
break;
|
|
10092
|
+
}
|
|
10093
|
+
completedCycles.delete(oldestCycleId);
|
|
10094
|
+
}
|
|
10095
|
+
return true;
|
|
10096
|
+
}
|
|
9250
10097
|
function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
|
|
9251
10098
|
const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
|
|
9252
|
-
if (
|
|
10099
|
+
if (isCadenzaDBReady && !localInsertTask) {
|
|
9253
10100
|
return void 0;
|
|
9254
10101
|
}
|
|
9255
10102
|
const targetTask = localInsertTask ?? CadenzaService.createCadenzaDBInsertTask(tableName, queryData, {
|
|
@@ -9300,6 +10147,11 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
9300
10147
|
...ctx,
|
|
9301
10148
|
queryData: ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : originalQueryData
|
|
9302
10149
|
};
|
|
10150
|
+
if (originalContext.__syncing === true && !didSyncInsertSucceed(normalizedContext)) {
|
|
10151
|
+
CadenzaService.debounce("meta.sync_requested", {
|
|
10152
|
+
delayMs: 1e3
|
|
10153
|
+
});
|
|
10154
|
+
}
|
|
9303
10155
|
return normalizedContext;
|
|
9304
10156
|
},
|
|
9305
10157
|
`Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,
|
|
@@ -9327,86 +10179,82 @@ var CADENZA_DB_REQUIRED_LOCAL_SYNC_INSERT_TABLES = [
|
|
|
9327
10179
|
"intent_to_task_map",
|
|
9328
10180
|
"directional_task_graph_map"
|
|
9329
10181
|
];
|
|
9330
|
-
var
|
|
9331
|
-
|
|
9332
|
-
|
|
9333
|
-
|
|
9334
|
-
|
|
9335
|
-
|
|
9336
|
-
|
|
9337
|
-
function
|
|
9338
|
-
const
|
|
9339
|
-
|
|
9340
|
-
|
|
9341
|
-
}
|
|
9342
|
-
function resolveSyncQueryTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
|
|
9343
|
-
const localQueryTask = CadenzaService.getLocalCadenzaDBQueryTask(tableName);
|
|
9344
|
-
if (!localQueryTask && !isCadenzaDBReady) {
|
|
9345
|
-
return void 0;
|
|
10182
|
+
var BOOTSTRAP_SYNC_STALE_CYCLE_MS = 15e3;
|
|
10183
|
+
var EARLY_SYNC_TICK_DELAYS_MS = [
|
|
10184
|
+
400,
|
|
10185
|
+
BOOTSTRAP_SYNC_STALE_CYCLE_MS + 1e3,
|
|
10186
|
+
BOOTSTRAP_SYNC_STALE_CYCLE_MS * 2 + 2e3,
|
|
10187
|
+
BOOTSTRAP_SYNC_STALE_CYCLE_MS * 3 + 3e3
|
|
10188
|
+
];
|
|
10189
|
+
function shouldTraceSyncPhase(serviceName) {
|
|
10190
|
+
const configured = process.env.CADENZA_SYNC_PHASE_TRACE_SERVICE;
|
|
10191
|
+
if (!configured || !serviceName) {
|
|
10192
|
+
return false;
|
|
9346
10193
|
}
|
|
9347
|
-
|
|
9348
|
-
|
|
9349
|
-
|
|
9350
|
-
|
|
9351
|
-
|
|
9352
|
-
|
|
9353
|
-
|
|
9354
|
-
|
|
9355
|
-
|
|
9356
|
-
|
|
9357
|
-
`Prepare graph sync query for ${tableName}`,
|
|
9358
|
-
(ctx) => buildSyncExecutionEnvelope(
|
|
9359
|
-
ctx,
|
|
9360
|
-
buildSyncQueryQueryData(ctx, queryData)
|
|
9361
|
-
),
|
|
9362
|
-
`Prepares ${tableName} graph-sync query payloads.`,
|
|
9363
|
-
{
|
|
9364
|
-
register: false,
|
|
9365
|
-
isHidden: true
|
|
9366
|
-
}
|
|
9367
|
-
);
|
|
9368
|
-
const finalizeQueryTask = CadenzaService.createMetaTask(
|
|
9369
|
-
`Finalize graph sync query for ${tableName}`,
|
|
9370
|
-
(ctx) => ctx,
|
|
9371
|
-
`Finalizes ${tableName} graph-sync query payloads after authority lookup.`,
|
|
9372
|
-
{
|
|
9373
|
-
register: false,
|
|
9374
|
-
isHidden: true
|
|
9375
|
-
}
|
|
9376
|
-
);
|
|
9377
|
-
prepareQueryTask.then(targetTask);
|
|
9378
|
-
targetTask.then(finalizeQueryTask);
|
|
9379
|
-
return {
|
|
9380
|
-
entryTask: prepareQueryTask,
|
|
9381
|
-
completionTask: finalizeQueryTask
|
|
9382
|
-
};
|
|
10194
|
+
return configured === serviceName;
|
|
10195
|
+
}
|
|
10196
|
+
function canonicalizeSignalName(signalName) {
|
|
10197
|
+
if (typeof signalName !== "string") {
|
|
10198
|
+
return "";
|
|
10199
|
+
}
|
|
10200
|
+
return signalName.split(":")[0]?.trim() ?? "";
|
|
10201
|
+
}
|
|
10202
|
+
function isBootstrapLocalOnlySignal(signalName) {
|
|
10203
|
+
return signalName === "meta.service_registry.insert_execution_requested" || signalName.startsWith("meta.sync_controller.");
|
|
9383
10204
|
}
|
|
9384
10205
|
function getRegistrableTasks() {
|
|
9385
10206
|
return Array.from(CadenzaService.registry.tasks.values()).filter(
|
|
9386
|
-
(task) => task.register && !task.isHidden
|
|
10207
|
+
(task) => task.register && !task.isHidden && !task.isDeputy
|
|
9387
10208
|
);
|
|
9388
10209
|
}
|
|
9389
10210
|
function getRegistrableRoutines() {
|
|
9390
10211
|
return Array.from(CadenzaService.registry.routines.values());
|
|
9391
10212
|
}
|
|
9392
|
-
function isAuthoritySyncSignal(signalName) {
|
|
9393
|
-
return decomposeSignalName(signalName).isGlobal;
|
|
9394
|
-
}
|
|
9395
10213
|
function getRegistrableSignalObservers() {
|
|
9396
10214
|
const signalObservers = CadenzaService.signalBroker.signalObservers;
|
|
9397
10215
|
if (!signalObservers) {
|
|
9398
10216
|
return [];
|
|
9399
10217
|
}
|
|
9400
|
-
|
|
9401
|
-
|
|
9402
|
-
|
|
9403
|
-
|
|
10218
|
+
const canonicalObservers = /* @__PURE__ */ new Map();
|
|
10219
|
+
for (const [rawSignalName, observer] of signalObservers.entries()) {
|
|
10220
|
+
const signalName = canonicalizeSignalName(rawSignalName);
|
|
10221
|
+
if (!signalName || isBootstrapLocalOnlySignal(signalName)) {
|
|
10222
|
+
continue;
|
|
10223
|
+
}
|
|
10224
|
+
const existing = canonicalObservers.get(signalName);
|
|
10225
|
+
canonicalObservers.set(signalName, {
|
|
10226
|
+
signalName,
|
|
10227
|
+
registered: existing?.registered === true || observer?.registered === true
|
|
10228
|
+
});
|
|
10229
|
+
}
|
|
10230
|
+
return Array.from(canonicalObservers.values());
|
|
10231
|
+
}
|
|
10232
|
+
function isLocallyHandledIntentName(intentName) {
|
|
10233
|
+
const observer = CadenzaService.inquiryBroker.inquiryObservers.get(intentName);
|
|
10234
|
+
if (!observer) {
|
|
10235
|
+
return false;
|
|
10236
|
+
}
|
|
10237
|
+
for (const task of observer.tasks) {
|
|
10238
|
+
if (task.register && !task.isHidden && !task.isDeputy) {
|
|
10239
|
+
return true;
|
|
10240
|
+
}
|
|
10241
|
+
}
|
|
10242
|
+
return false;
|
|
9404
10243
|
}
|
|
9405
10244
|
function getRegistrableIntentNames() {
|
|
9406
10245
|
return Array.from(CadenzaService.inquiryBroker.intents.values()).map((intent) => buildIntentRegistryData(intent)).filter(
|
|
9407
10246
|
(intentDefinition) => intentDefinition !== null
|
|
10247
|
+
).filter(
|
|
10248
|
+
(intentDefinition) => isLocallyHandledIntentName(String(intentDefinition.name))
|
|
9408
10249
|
).map((intentDefinition) => String(intentDefinition.name));
|
|
9409
10250
|
}
|
|
10251
|
+
function isRegistrableLocalIntentDefinition(intent) {
|
|
10252
|
+
const intentData = buildIntentRegistryData(intent);
|
|
10253
|
+
if (!intentData) {
|
|
10254
|
+
return false;
|
|
10255
|
+
}
|
|
10256
|
+
return isLocallyHandledIntentName(String(intentData.name));
|
|
10257
|
+
}
|
|
9410
10258
|
function buildActorRegistrationKey(actor, serviceName) {
|
|
9411
10259
|
const data = buildActorRegistrationData(actor);
|
|
9412
10260
|
const name = typeof data.name === "string" && data.name.trim().length > 0 ? data.name.trim() : "";
|
|
@@ -9448,10 +10296,23 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9448
10296
|
this.signalsSynced = false;
|
|
9449
10297
|
this.intentsSynced = false;
|
|
9450
10298
|
this.routinesSynced = false;
|
|
10299
|
+
this.directionalTaskMapsSynced = false;
|
|
10300
|
+
this.signalTaskMapsSynced = false;
|
|
10301
|
+
this.intentTaskMapsSynced = false;
|
|
10302
|
+
this.actorTaskMapsSynced = false;
|
|
10303
|
+
this.routineTaskMapsSynced = false;
|
|
9451
10304
|
this.isCadenzaDBReady = false;
|
|
9452
10305
|
this.initialized = false;
|
|
9453
10306
|
this.initRetryScheduled = false;
|
|
9454
10307
|
this.lastMissingLocalCadenzaDBInsertTablesKey = "";
|
|
10308
|
+
this.syncCycleCounter = 0;
|
|
10309
|
+
this.primitivePhaseCompletedCycles = /* @__PURE__ */ new Set();
|
|
10310
|
+
this.mapPhaseCompletedCycles = /* @__PURE__ */ new Set();
|
|
10311
|
+
this.activeSyncCycleId = null;
|
|
10312
|
+
this.activeSyncCycleStartedAt = 0;
|
|
10313
|
+
this.pendingBootstrapSyncRerun = false;
|
|
10314
|
+
this.localServiceInserted = false;
|
|
10315
|
+
this.localServiceInstanceInserted = false;
|
|
9455
10316
|
}
|
|
9456
10317
|
static get instance() {
|
|
9457
10318
|
if (!this._instance) this._instance = new _GraphSyncController();
|
|
@@ -9525,45 +10386,16 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9525
10386
|
},
|
|
9526
10387
|
{ concurrency: 30 }
|
|
9527
10388
|
);
|
|
9528
|
-
const ensureIntentRegistryBeforeIntentMapTask = resolveSyncInsertTask(
|
|
9529
|
-
this.isCadenzaDBReady,
|
|
9530
|
-
"intent_registry",
|
|
9531
|
-
{
|
|
9532
|
-
onConflict: {
|
|
9533
|
-
target: ["name"],
|
|
9534
|
-
action: {
|
|
9535
|
-
do: "nothing"
|
|
9536
|
-
}
|
|
9537
|
-
}
|
|
9538
|
-
},
|
|
9539
|
-
{ concurrency: 30 }
|
|
9540
|
-
);
|
|
9541
|
-
const authoritativeTaskQueryGraph = resolveSyncQueryTask(
|
|
9542
|
-
this.isCadenzaDBReady,
|
|
9543
|
-
"task",
|
|
9544
|
-
{},
|
|
9545
|
-
{ concurrency: 10 }
|
|
9546
|
-
);
|
|
9547
|
-
const authoritativeRoutineQueryGraph = resolveSyncQueryTask(
|
|
9548
|
-
this.isCadenzaDBReady,
|
|
9549
|
-
"routine",
|
|
9550
|
-
{},
|
|
9551
|
-
{ concurrency: 10 }
|
|
9552
|
-
);
|
|
9553
|
-
const authoritativeSignalQueryGraph = resolveSyncQueryTask(
|
|
9554
|
-
this.isCadenzaDBReady,
|
|
9555
|
-
"signal_registry",
|
|
9556
|
-
{},
|
|
9557
|
-
{ concurrency: 10 }
|
|
9558
|
-
);
|
|
9559
|
-
const authoritativeIntentQueryGraph = resolveSyncQueryTask(
|
|
9560
|
-
this.isCadenzaDBReady,
|
|
9561
|
-
"intent_registry",
|
|
9562
|
-
{},
|
|
9563
|
-
{ concurrency: 10 }
|
|
9564
|
-
);
|
|
9565
10389
|
const finalizeTaskSync = (emit, ctx) => {
|
|
9566
10390
|
const pendingTasks = getRegistrableTasks().filter((task) => !task.registered);
|
|
10391
|
+
const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
|
|
10392
|
+
if (shouldTraceSyncPhase(serviceName2)) {
|
|
10393
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_tasks", {
|
|
10394
|
+
serviceName: serviceName2,
|
|
10395
|
+
pendingCount: pendingTasks.length,
|
|
10396
|
+
sample: pendingTasks.slice(0, 5).map((task) => task.name)
|
|
10397
|
+
});
|
|
10398
|
+
}
|
|
9567
10399
|
if (pendingTasks.length > 0) {
|
|
9568
10400
|
this.tasksSynced = false;
|
|
9569
10401
|
return false;
|
|
@@ -9582,6 +10414,14 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9582
10414
|
const pendingRoutines = getRegistrableRoutines().filter(
|
|
9583
10415
|
(routine) => !routine.registered
|
|
9584
10416
|
);
|
|
10417
|
+
const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
|
|
10418
|
+
if (shouldTraceSyncPhase(serviceName2)) {
|
|
10419
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_routines", {
|
|
10420
|
+
serviceName: serviceName2,
|
|
10421
|
+
pendingCount: pendingRoutines.length,
|
|
10422
|
+
sample: pendingRoutines.slice(0, 5).map((routine) => routine.name)
|
|
10423
|
+
});
|
|
10424
|
+
}
|
|
9585
10425
|
if (pendingRoutines.length > 0) {
|
|
9586
10426
|
this.routinesSynced = false;
|
|
9587
10427
|
return false;
|
|
@@ -9600,6 +10440,14 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9600
10440
|
const pendingSignals = getRegistrableSignalObservers().filter(
|
|
9601
10441
|
(observer) => observer.registered !== true
|
|
9602
10442
|
);
|
|
10443
|
+
const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
|
|
10444
|
+
if (shouldTraceSyncPhase(serviceName2)) {
|
|
10445
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_signals", {
|
|
10446
|
+
serviceName: serviceName2,
|
|
10447
|
+
pendingCount: pendingSignals.length,
|
|
10448
|
+
sample: pendingSignals.slice(0, 5).map((observer) => observer.signalName)
|
|
10449
|
+
});
|
|
10450
|
+
}
|
|
9603
10451
|
if (pendingSignals.length > 0) {
|
|
9604
10452
|
this.signalsSynced = false;
|
|
9605
10453
|
return false;
|
|
@@ -9618,6 +10466,14 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9618
10466
|
const pendingIntentNames = getRegistrableIntentNames().filter(
|
|
9619
10467
|
(intentName) => !this.registeredIntentDefinitions.has(intentName)
|
|
9620
10468
|
);
|
|
10469
|
+
const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
|
|
10470
|
+
if (shouldTraceSyncPhase(serviceName2)) {
|
|
10471
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_intents", {
|
|
10472
|
+
serviceName: serviceName2,
|
|
10473
|
+
pendingCount: pendingIntentNames.length,
|
|
10474
|
+
sample: pendingIntentNames.slice(0, 5)
|
|
10475
|
+
});
|
|
10476
|
+
}
|
|
9621
10477
|
if (pendingIntentNames.length > 0) {
|
|
9622
10478
|
this.intentsSynced = false;
|
|
9623
10479
|
return false;
|
|
@@ -9639,6 +10495,13 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9639
10495
|
return false;
|
|
9640
10496
|
}
|
|
9641
10497
|
const pendingActorKeys = CadenzaService.getAllActors().map((actor) => buildActorRegistrationKey(actor, syncServiceName)).filter((registrationKey) => Boolean(registrationKey)).filter((registrationKey) => !this.registeredActors.has(registrationKey));
|
|
10498
|
+
if (shouldTraceSyncPhase(syncServiceName)) {
|
|
10499
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_actors", {
|
|
10500
|
+
serviceName: syncServiceName,
|
|
10501
|
+
pendingCount: pendingActorKeys.length,
|
|
10502
|
+
sample: pendingActorKeys.slice(0, 5)
|
|
10503
|
+
});
|
|
10504
|
+
}
|
|
9642
10505
|
if (pendingActorKeys.length > 0) {
|
|
9643
10506
|
this.actorsSynced = false;
|
|
9644
10507
|
return false;
|
|
@@ -9719,8 +10582,8 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9719
10582
|
name: routine.name,
|
|
9720
10583
|
version: routine.version,
|
|
9721
10584
|
description: routine.description,
|
|
9722
|
-
|
|
9723
|
-
|
|
10585
|
+
service_name: serviceName2,
|
|
10586
|
+
is_meta: routine.isMeta
|
|
9724
10587
|
},
|
|
9725
10588
|
__routineName: routine.name
|
|
9726
10589
|
};
|
|
@@ -9783,11 +10646,11 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9783
10646
|
yield {
|
|
9784
10647
|
__syncing: ctx.__syncing,
|
|
9785
10648
|
data: {
|
|
9786
|
-
|
|
9787
|
-
|
|
9788
|
-
|
|
9789
|
-
|
|
9790
|
-
|
|
10649
|
+
task_name: nextTask.name,
|
|
10650
|
+
task_version: nextTask.version,
|
|
10651
|
+
routine_name: routine.name,
|
|
10652
|
+
routine_version: routine.version,
|
|
10653
|
+
service_name: serviceName2
|
|
9791
10654
|
},
|
|
9792
10655
|
__routineName: routine.name,
|
|
9793
10656
|
__taskName: nextTask.name
|
|
@@ -9845,12 +10708,20 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9845
10708
|
});
|
|
9846
10709
|
const { signals } = ctx;
|
|
9847
10710
|
if (!signals) return;
|
|
9848
|
-
const
|
|
9849
|
-
|
|
10711
|
+
const seenSignals = /* @__PURE__ */ new Set();
|
|
10712
|
+
const filteredSignals = signals.map((signal) => ({
|
|
10713
|
+
signalName: canonicalizeSignalName(signal.signal),
|
|
10714
|
+
data: signal.data
|
|
10715
|
+
})).filter((signal) => {
|
|
10716
|
+
if (!signal.signalName || signal.data?.registered || isBootstrapLocalOnlySignal(signal.signalName)) {
|
|
10717
|
+
return false;
|
|
10718
|
+
}
|
|
10719
|
+
if (seenSignals.has(signal.signalName)) {
|
|
9850
10720
|
return false;
|
|
9851
10721
|
}
|
|
9852
|
-
|
|
9853
|
-
|
|
10722
|
+
seenSignals.add(signal.signalName);
|
|
10723
|
+
return true;
|
|
10724
|
+
}).map((signal) => signal.signalName);
|
|
9854
10725
|
for (const signal of filteredSignals) {
|
|
9855
10726
|
const { isMeta, isGlobal, domain, action } = decomposeSignalName(signal);
|
|
9856
10727
|
this.signalsSynced = false;
|
|
@@ -9858,10 +10729,10 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9858
10729
|
__syncing: ctx.__syncing,
|
|
9859
10730
|
data: {
|
|
9860
10731
|
name: signal,
|
|
9861
|
-
isGlobal,
|
|
10732
|
+
is_global: isGlobal,
|
|
9862
10733
|
domain,
|
|
9863
10734
|
action,
|
|
9864
|
-
isMeta
|
|
10735
|
+
is_meta: isMeta
|
|
9865
10736
|
},
|
|
9866
10737
|
__signal: signal
|
|
9867
10738
|
};
|
|
@@ -9883,14 +10754,15 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9883
10754
|
);
|
|
9884
10755
|
const processSignalRegistrationTask = CadenzaService.createMetaTask(
|
|
9885
10756
|
"Process signal registration",
|
|
9886
|
-
(ctx) => {
|
|
9887
|
-
|
|
10757
|
+
(ctx, emit) => {
|
|
10758
|
+
const insertSucceeded = didSyncInsertSucceed(ctx);
|
|
10759
|
+
const signalName = resolveSignalNameFromSyncContext(ctx);
|
|
10760
|
+
if (!insertSucceeded) {
|
|
9888
10761
|
return;
|
|
9889
10762
|
}
|
|
9890
10763
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
9891
10764
|
delayMs: 3e3
|
|
9892
10765
|
});
|
|
9893
|
-
const signalName = resolveSignalNameFromSyncContext(ctx);
|
|
9894
10766
|
if (!signalName) {
|
|
9895
10767
|
return false;
|
|
9896
10768
|
}
|
|
@@ -9901,7 +10773,14 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9901
10773
|
const observer = signalObservers?.get(signalName);
|
|
9902
10774
|
if (observer) {
|
|
9903
10775
|
observer.registered = true;
|
|
10776
|
+
observer.registrationRequested = false;
|
|
9904
10777
|
}
|
|
10778
|
+
emit(
|
|
10779
|
+
"meta.sync_controller.signal_registered",
|
|
10780
|
+
buildMinimalSyncSignalContext(ctx, {
|
|
10781
|
+
__signal: signalName
|
|
10782
|
+
})
|
|
10783
|
+
);
|
|
9905
10784
|
return { signalName };
|
|
9906
10785
|
}
|
|
9907
10786
|
).then(CadenzaService.signalBroker.registerSignalTask).then(gatherSignalRegistrationTask);
|
|
@@ -9922,6 +10801,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9922
10801
|
return;
|
|
9923
10802
|
}
|
|
9924
10803
|
for (const task of tasks) {
|
|
10804
|
+
if (task.hidden || !task.register || task.isDeputy) continue;
|
|
9925
10805
|
if (task.registered) continue;
|
|
9926
10806
|
const { __functionString, __getTagCallback } = task.export();
|
|
9927
10807
|
this.tasksSynced = false;
|
|
@@ -9931,32 +10811,33 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9931
10811
|
name: task.name,
|
|
9932
10812
|
version: task.version,
|
|
9933
10813
|
description: task.description,
|
|
9934
|
-
|
|
9935
|
-
|
|
9936
|
-
|
|
10814
|
+
function_string: __functionString,
|
|
10815
|
+
tag_id_getter: __getTagCallback,
|
|
10816
|
+
layer_index: task.layerIndex,
|
|
9937
10817
|
concurrency: task.concurrency,
|
|
9938
10818
|
timeout: task.timeout,
|
|
9939
|
-
|
|
9940
|
-
|
|
9941
|
-
|
|
9942
|
-
|
|
9943
|
-
|
|
9944
|
-
|
|
9945
|
-
|
|
9946
|
-
|
|
9947
|
-
|
|
9948
|
-
|
|
9949
|
-
|
|
9950
|
-
|
|
9951
|
-
|
|
9952
|
-
|
|
10819
|
+
is_unique: task.isUnique,
|
|
10820
|
+
is_signal: task.isSignal,
|
|
10821
|
+
is_throttled: task.isThrottled,
|
|
10822
|
+
is_debounce: task.isDebounce,
|
|
10823
|
+
is_ephemeral: task.isEphemeral,
|
|
10824
|
+
is_meta: task.isMeta,
|
|
10825
|
+
is_sub_meta: task.isSubMeta,
|
|
10826
|
+
is_hidden: task.isHidden,
|
|
10827
|
+
validate_input_context: task.validateInputContext,
|
|
10828
|
+
validate_output_context: task.validateOutputContext,
|
|
10829
|
+
retry_count: task.retryCount,
|
|
10830
|
+
retry_delay: task.retryDelay,
|
|
10831
|
+
retry_delay_max: task.retryDelayMax,
|
|
10832
|
+
retry_delay_factor: task.retryDelayFactor,
|
|
9953
10833
|
service_name: serviceName2,
|
|
9954
10834
|
signals: {
|
|
9955
10835
|
emits: Array.from(task.emitsSignals),
|
|
9956
10836
|
signalsToEmitAfter: Array.from(task.signalsToEmitAfter),
|
|
9957
10837
|
signalsToEmitOnFail: Array.from(task.signalsToEmitOnFail),
|
|
9958
10838
|
observed: Array.from(task.observedSignals)
|
|
9959
|
-
}
|
|
10839
|
+
},
|
|
10840
|
+
intents: Array.from(task.handlesIntents)
|
|
9960
10841
|
},
|
|
9961
10842
|
__taskName: task.name
|
|
9962
10843
|
};
|
|
@@ -9979,17 +10860,20 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9979
10860
|
const registerTaskTask = CadenzaService.createMetaTask(
|
|
9980
10861
|
"Record registration",
|
|
9981
10862
|
(ctx, emit) => {
|
|
9982
|
-
|
|
10863
|
+
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
10864
|
+
const serviceName2 = resolveSyncServiceName(task);
|
|
10865
|
+
const insertSucceeded = didSyncInsertSucceed(ctx);
|
|
10866
|
+
if (!insertSucceeded) {
|
|
9983
10867
|
return;
|
|
9984
10868
|
}
|
|
9985
10869
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
9986
10870
|
delayMs: 3e3
|
|
9987
10871
|
});
|
|
9988
|
-
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
9989
10872
|
if (!task) {
|
|
9990
10873
|
return true;
|
|
9991
10874
|
}
|
|
9992
10875
|
task.registered = true;
|
|
10876
|
+
task.registrationRequested = false;
|
|
9993
10877
|
emit(
|
|
9994
10878
|
"meta.sync_controller.task_registered",
|
|
9995
10879
|
buildMinimalSyncSignalContext(ctx, {
|
|
@@ -10000,24 +10884,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10000
10884
|
}
|
|
10001
10885
|
).then(gatherTaskRegistrationTask);
|
|
10002
10886
|
wireSyncTaskGraph(this.splitTasksForRegistration, registerTaskGraph, registerTaskTask);
|
|
10003
|
-
CadenzaService.createMetaTask(
|
|
10004
|
-
"Prepare created task for immediate sync",
|
|
10005
|
-
(ctx) => {
|
|
10006
|
-
const task = ctx.taskInstance ?? (ctx.data?.name ? CadenzaService.get(String(ctx.data.name)) : void 0);
|
|
10007
|
-
if (!task || task.hidden || !task.register || task.registered) {
|
|
10008
|
-
return false;
|
|
10009
|
-
}
|
|
10010
|
-
return {
|
|
10011
|
-
__syncing: true,
|
|
10012
|
-
tasks: [task]
|
|
10013
|
-
};
|
|
10014
|
-
},
|
|
10015
|
-
"Schedules newly created tasks into the graph sync registration flow without waiting for the next periodic tick.",
|
|
10016
|
-
{
|
|
10017
|
-
register: false,
|
|
10018
|
-
isHidden: true
|
|
10019
|
-
}
|
|
10020
|
-
).doOn("meta.task.created").then(this.splitTasksForRegistration);
|
|
10021
10887
|
this.splitActorsForRegistration = CadenzaService.createMetaTask(
|
|
10022
10888
|
"Split actors for registration",
|
|
10023
10889
|
function* (ctx) {
|
|
@@ -10156,13 +11022,14 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10156
11022
|
const registerSignalTask = CadenzaService.createMetaTask(
|
|
10157
11023
|
"Record signal registration",
|
|
10158
11024
|
(ctx) => {
|
|
11025
|
+
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
11026
|
+
const serviceName2 = resolveSyncServiceName(task);
|
|
10159
11027
|
if (!didSyncInsertSucceed(ctx)) {
|
|
10160
11028
|
return;
|
|
10161
11029
|
}
|
|
10162
11030
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
10163
11031
|
delayMs: 3e3
|
|
10164
11032
|
});
|
|
10165
|
-
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
10166
11033
|
const signalName = resolveSignalNameFromSyncContext(ctx);
|
|
10167
11034
|
if (!task || !signalName) {
|
|
10168
11035
|
return true;
|
|
@@ -10174,7 +11041,8 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10174
11041
|
"Split observed signals of task",
|
|
10175
11042
|
function* (ctx) {
|
|
10176
11043
|
const task = ctx.task;
|
|
10177
|
-
if (task.hidden || !task.register || !task.registered)
|
|
11044
|
+
if (task.hidden || !task.register || task.isDeputy || !task.registered)
|
|
11045
|
+
return false;
|
|
10178
11046
|
const serviceName2 = resolveSyncServiceName(task);
|
|
10179
11047
|
if (!serviceName2) {
|
|
10180
11048
|
return false;
|
|
@@ -10193,11 +11061,11 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10193
11061
|
yield {
|
|
10194
11062
|
__syncing: ctx.__syncing,
|
|
10195
11063
|
data: {
|
|
10196
|
-
|
|
10197
|
-
isGlobal,
|
|
10198
|
-
|
|
10199
|
-
|
|
10200
|
-
|
|
11064
|
+
signal_name: _signal,
|
|
11065
|
+
is_global: isGlobal,
|
|
11066
|
+
task_name: task.name,
|
|
11067
|
+
task_version: task.version,
|
|
11068
|
+
service_name: serviceName2
|
|
10201
11069
|
},
|
|
10202
11070
|
__taskName: task.name,
|
|
10203
11071
|
__signal: signal
|
|
@@ -10238,6 +11106,9 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10238
11106
|
});
|
|
10239
11107
|
const intents = Array.isArray(ctx.intents) ? ctx.intents : Array.from(CadenzaService.inquiryBroker.intents.values());
|
|
10240
11108
|
for (const intent of intents) {
|
|
11109
|
+
if (!isRegistrableLocalIntentDefinition(intent)) {
|
|
11110
|
+
continue;
|
|
11111
|
+
}
|
|
10241
11112
|
const intentData = buildIntentRegistryData(intent);
|
|
10242
11113
|
if (!intentData) {
|
|
10243
11114
|
continue;
|
|
@@ -10256,7 +11127,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10256
11127
|
);
|
|
10257
11128
|
const recordIntentDefinitionRegistrationTask = CadenzaService.createMetaTask(
|
|
10258
11129
|
"Record intent definition registration",
|
|
10259
|
-
(ctx) => {
|
|
11130
|
+
(ctx, emit) => {
|
|
10260
11131
|
if (!didSyncInsertSucceed(ctx)) {
|
|
10261
11132
|
return;
|
|
10262
11133
|
}
|
|
@@ -10264,6 +11135,12 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10264
11135
|
delayMs: 3e3
|
|
10265
11136
|
});
|
|
10266
11137
|
this.registeredIntentDefinitions.add(ctx.__intentName);
|
|
11138
|
+
emit(
|
|
11139
|
+
"meta.sync_controller.intent_registered",
|
|
11140
|
+
buildMinimalSyncSignalContext(ctx, {
|
|
11141
|
+
__intentName: ctx.__intentName
|
|
11142
|
+
})
|
|
11143
|
+
);
|
|
10267
11144
|
return true;
|
|
10268
11145
|
}
|
|
10269
11146
|
).then(gatherIntentRegistrationTask);
|
|
@@ -10275,13 +11152,13 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10275
11152
|
const registerIntentTask = CadenzaService.createMetaTask(
|
|
10276
11153
|
"Record intent registration",
|
|
10277
11154
|
(ctx) => {
|
|
11155
|
+
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
10278
11156
|
if (!didSyncInsertSucceed(ctx)) {
|
|
10279
11157
|
return;
|
|
10280
11158
|
}
|
|
10281
11159
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
10282
11160
|
delayMs: 3e3
|
|
10283
11161
|
});
|
|
10284
|
-
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
10285
11162
|
if (!task) {
|
|
10286
11163
|
return true;
|
|
10287
11164
|
}
|
|
@@ -10293,7 +11170,8 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10293
11170
|
"Split intents of task",
|
|
10294
11171
|
function* (ctx) {
|
|
10295
11172
|
const task = ctx.task;
|
|
10296
|
-
if (task.hidden || !task.register || !task.registered)
|
|
11173
|
+
if (task.hidden || !task.register || task.isDeputy || !task.registered)
|
|
11174
|
+
return false;
|
|
10297
11175
|
const serviceName2 = resolveSyncServiceName(task);
|
|
10298
11176
|
if (!serviceName2) {
|
|
10299
11177
|
return false;
|
|
@@ -10328,19 +11206,19 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10328
11206
|
yield {
|
|
10329
11207
|
__syncing: ctx.__syncing,
|
|
10330
11208
|
data: {
|
|
10331
|
-
|
|
10332
|
-
|
|
10333
|
-
|
|
10334
|
-
|
|
11209
|
+
intent_name: intent,
|
|
11210
|
+
task_name: task.name,
|
|
11211
|
+
task_version: task.version,
|
|
11212
|
+
service_name: serviceName2
|
|
10335
11213
|
},
|
|
10336
11214
|
__taskName: task.name,
|
|
10337
11215
|
__intent: intent,
|
|
10338
11216
|
__intentDefinition: intentDefinition,
|
|
10339
11217
|
__intentMapData: {
|
|
10340
|
-
|
|
10341
|
-
|
|
10342
|
-
|
|
10343
|
-
|
|
11218
|
+
intent_name: intent,
|
|
11219
|
+
task_name: task.name,
|
|
11220
|
+
task_version: task.version,
|
|
11221
|
+
service_name: serviceName2
|
|
10344
11222
|
}
|
|
10345
11223
|
};
|
|
10346
11224
|
emittedCount += 1;
|
|
@@ -10348,30 +11226,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10348
11226
|
return emittedCount > 0;
|
|
10349
11227
|
}.bind(this)
|
|
10350
11228
|
);
|
|
10351
|
-
const prepareIntentDefinitionForIntentMapTask = CadenzaService.createMetaTask(
|
|
10352
|
-
"Prepare intent definition for intent-to-task map",
|
|
10353
|
-
(ctx) => {
|
|
10354
|
-
if (!ctx.__intentDefinition || !ctx.__intentMapData) {
|
|
10355
|
-
return false;
|
|
10356
|
-
}
|
|
10357
|
-
return {
|
|
10358
|
-
...ctx,
|
|
10359
|
-
data: ctx.__intentDefinition
|
|
10360
|
-
};
|
|
10361
|
-
}
|
|
10362
|
-
);
|
|
10363
|
-
const restoreIntentToTaskMapPayloadTask = CadenzaService.createMetaTask(
|
|
10364
|
-
"Restore intent-to-task map payload",
|
|
10365
|
-
(ctx) => {
|
|
10366
|
-
if (!ctx.__intentMapData) {
|
|
10367
|
-
return false;
|
|
10368
|
-
}
|
|
10369
|
-
return {
|
|
10370
|
-
...ctx,
|
|
10371
|
-
data: ctx.__intentMapData
|
|
10372
|
-
};
|
|
10373
|
-
}
|
|
10374
|
-
);
|
|
10375
11229
|
const intentToTaskMapGraph = resolveSyncInsertTask(
|
|
10376
11230
|
this.isCadenzaDBReady,
|
|
10377
11231
|
"intent_to_task_map",
|
|
@@ -10390,20 +11244,8 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10390
11244
|
},
|
|
10391
11245
|
{ concurrency: 30 }
|
|
10392
11246
|
);
|
|
10393
|
-
this.registerIntentToTaskMapTask.then(prepareIntentDefinitionForIntentMapTask);
|
|
10394
|
-
if (ensureIntentRegistryBeforeIntentMapTask) {
|
|
10395
|
-
wireSyncTaskGraph(
|
|
10396
|
-
prepareIntentDefinitionForIntentMapTask,
|
|
10397
|
-
ensureIntentRegistryBeforeIntentMapTask,
|
|
10398
|
-
restoreIntentToTaskMapPayloadTask
|
|
10399
|
-
);
|
|
10400
|
-
} else {
|
|
10401
|
-
prepareIntentDefinitionForIntentMapTask.then(
|
|
10402
|
-
restoreIntentToTaskMapPayloadTask
|
|
10403
|
-
);
|
|
10404
|
-
}
|
|
10405
11247
|
wireSyncTaskGraph(
|
|
10406
|
-
|
|
11248
|
+
this.registerIntentToTaskMapTask,
|
|
10407
11249
|
intentToTaskMapGraph,
|
|
10408
11250
|
registerIntentTask
|
|
10409
11251
|
);
|
|
@@ -10414,7 +11256,9 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10414
11256
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
10415
11257
|
delayMs: 3e3
|
|
10416
11258
|
});
|
|
10417
|
-
if (task.hidden || !task.register)
|
|
11259
|
+
if (task.hidden || !task.register || task.isDeputy || !task.registered) {
|
|
11260
|
+
return;
|
|
11261
|
+
}
|
|
10418
11262
|
const predecessorServiceName = resolveSyncServiceName(task);
|
|
10419
11263
|
if (!predecessorServiceName) {
|
|
10420
11264
|
return;
|
|
@@ -10429,12 +11273,12 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10429
11273
|
}
|
|
10430
11274
|
yield {
|
|
10431
11275
|
data: {
|
|
10432
|
-
|
|
10433
|
-
|
|
10434
|
-
|
|
10435
|
-
|
|
10436
|
-
|
|
10437
|
-
predecessorServiceName
|
|
11276
|
+
task_name: t.name,
|
|
11277
|
+
task_version: t.version,
|
|
11278
|
+
predecessor_task_name: task.name,
|
|
11279
|
+
predecessor_task_version: task.version,
|
|
11280
|
+
service_name: serviceName2,
|
|
11281
|
+
predecessor_service_name: predecessorServiceName
|
|
10438
11282
|
},
|
|
10439
11283
|
__taskName: task.name,
|
|
10440
11284
|
__nextTaskName: t.name
|
|
@@ -10481,519 +11325,598 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10481
11325
|
taskMapRegistrationGraph,
|
|
10482
11326
|
recordTaskMapRegistrationTask
|
|
10483
11327
|
);
|
|
10484
|
-
|
|
10485
|
-
|
|
10486
|
-
|
|
10487
|
-
|
|
10488
|
-
|
|
10489
|
-
|
|
10490
|
-
|
|
10491
|
-
|
|
10492
|
-
|
|
10493
|
-
|
|
10494
|
-
|
|
10495
|
-
|
|
10496
|
-
|
|
10497
|
-
|
|
10498
|
-
task_name: task.remoteRoutineName,
|
|
10499
|
-
task_version: 1,
|
|
10500
|
-
service_name: serviceName2,
|
|
10501
|
-
predecessor_task_name: task.name,
|
|
10502
|
-
predecessor_task_version: task.version,
|
|
10503
|
-
predecessor_service_name: predecessorServiceName
|
|
10504
|
-
},
|
|
10505
|
-
__taskName: task.name
|
|
10506
|
-
};
|
|
11328
|
+
const hasPendingDirectionalTaskMaps = () => getRegistrableTasks().some((task) => {
|
|
11329
|
+
if (task.isHidden || !task.register || !task.registered) {
|
|
11330
|
+
return false;
|
|
11331
|
+
}
|
|
11332
|
+
const predecessorServiceName = resolveSyncServiceName(task);
|
|
11333
|
+
if (!predecessorServiceName) {
|
|
11334
|
+
return false;
|
|
11335
|
+
}
|
|
11336
|
+
for (const nextTask of task.nextTasks) {
|
|
11337
|
+
if (task.taskMapRegistration.has(nextTask.name) || nextTask.isHidden || !nextTask.register || !nextTask.registered) {
|
|
11338
|
+
continue;
|
|
11339
|
+
}
|
|
11340
|
+
if (resolveSyncServiceName(nextTask)) {
|
|
11341
|
+
return true;
|
|
10507
11342
|
}
|
|
10508
11343
|
}
|
|
10509
|
-
|
|
10510
|
-
|
|
10511
|
-
|
|
10512
|
-
|
|
10513
|
-
|
|
10514
|
-
|
|
10515
|
-
|
|
10516
|
-
|
|
10517
|
-
|
|
10518
|
-
"task_version",
|
|
10519
|
-
"predecessor_task_version",
|
|
10520
|
-
"service_name",
|
|
10521
|
-
"predecessor_service_name"
|
|
10522
|
-
],
|
|
10523
|
-
action: {
|
|
10524
|
-
do: "nothing"
|
|
10525
|
-
}
|
|
11344
|
+
return false;
|
|
11345
|
+
});
|
|
11346
|
+
const hasPendingSignalTaskMaps = () => getRegistrableTasks().some((task) => {
|
|
11347
|
+
if (task.isHidden || !task.register || !task.registered) {
|
|
11348
|
+
return false;
|
|
11349
|
+
}
|
|
11350
|
+
for (const signal of task.observedSignals) {
|
|
11351
|
+
if (task.registeredSignals.has(signal)) {
|
|
11352
|
+
continue;
|
|
10526
11353
|
}
|
|
10527
|
-
|
|
10528
|
-
|
|
10529
|
-
|
|
10530
|
-
const recordDeputyRelationshipRegistrationTask = CadenzaService.createMetaTask(
|
|
10531
|
-
"Record deputy relationship registration",
|
|
10532
|
-
(ctx) => {
|
|
10533
|
-
if (!didSyncInsertSucceed(ctx)) {
|
|
10534
|
-
return;
|
|
11354
|
+
const signalName = signal.split(":")[0];
|
|
11355
|
+
if (!decomposeSignalName(signalName).isGlobal) {
|
|
11356
|
+
continue;
|
|
10535
11357
|
}
|
|
10536
|
-
CadenzaService.
|
|
10537
|
-
|
|
10538
|
-
});
|
|
10539
|
-
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
10540
|
-
if (!task) {
|
|
10541
|
-
return true;
|
|
11358
|
+
if (!CadenzaService.signalBroker.signalObservers?.get(signalName)?.registered) {
|
|
11359
|
+
continue;
|
|
10542
11360
|
}
|
|
10543
|
-
|
|
11361
|
+
return true;
|
|
10544
11362
|
}
|
|
10545
|
-
|
|
10546
|
-
|
|
10547
|
-
|
|
10548
|
-
|
|
10549
|
-
|
|
10550
|
-
|
|
10551
|
-
|
|
10552
|
-
|
|
10553
|
-
|
|
10554
|
-
|
|
10555
|
-
|
|
10556
|
-
|
|
10557
|
-
|
|
10558
|
-
|
|
11363
|
+
return false;
|
|
11364
|
+
});
|
|
11365
|
+
const hasPendingIntentTaskMaps = () => getRegistrableTasks().some((task) => {
|
|
11366
|
+
if (task.isHidden || !task.register || !task.registered) {
|
|
11367
|
+
return false;
|
|
11368
|
+
}
|
|
11369
|
+
const registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
|
|
11370
|
+
for (const intent of task.handlesIntents) {
|
|
11371
|
+
if (registeredIntents.has(intent) || isLocalOnlySyncIntent(intent)) {
|
|
11372
|
+
continue;
|
|
11373
|
+
}
|
|
11374
|
+
if (isMetaIntentName(intent) && !task.isMeta) {
|
|
11375
|
+
continue;
|
|
11376
|
+
}
|
|
11377
|
+
const intentDefinition = buildIntentRegistryData(CadenzaService.inquiryBroker.intents.get(intent)) ?? buildIntentRegistryData({ name: intent });
|
|
11378
|
+
if (!intentDefinition) {
|
|
11379
|
+
continue;
|
|
11380
|
+
}
|
|
11381
|
+
return true;
|
|
11382
|
+
}
|
|
11383
|
+
return false;
|
|
11384
|
+
});
|
|
11385
|
+
const hasPendingActorTaskMaps = () => getRegistrableTasks().some((task) => {
|
|
11386
|
+
if (task.isHidden || !task.register || !task.registered) {
|
|
11387
|
+
return false;
|
|
11388
|
+
}
|
|
11389
|
+
const metadata = getActorTaskRuntimeMetadata(task.taskFunction);
|
|
11390
|
+
if (!metadata?.actorName) {
|
|
11391
|
+
return false;
|
|
11392
|
+
}
|
|
11393
|
+
const serviceName2 = resolveSyncServiceName(task);
|
|
11394
|
+
if (!serviceName2) {
|
|
11395
|
+
return false;
|
|
11396
|
+
}
|
|
11397
|
+
const registrationKey = `${metadata.actorName}|${task.name}|${task.version}|${serviceName2}`;
|
|
11398
|
+
return !this.registeredActorTaskMaps.has(registrationKey);
|
|
11399
|
+
});
|
|
11400
|
+
const hasPendingRoutineTaskMaps = () => getRegistrableRoutines().some((routine) => {
|
|
11401
|
+
if (!routine.registered) {
|
|
11402
|
+
return false;
|
|
11403
|
+
}
|
|
11404
|
+
for (const task of routine.tasks) {
|
|
11405
|
+
if (!task) {
|
|
11406
|
+
continue;
|
|
11407
|
+
}
|
|
11408
|
+
const tasks = task.getIterator();
|
|
11409
|
+
while (tasks.hasNext()) {
|
|
11410
|
+
const nextTask = tasks.next();
|
|
11411
|
+
if (!nextTask?.registered) {
|
|
10559
11412
|
continue;
|
|
10560
11413
|
}
|
|
10561
|
-
|
|
10562
|
-
|
|
10563
|
-
continue;
|
|
11414
|
+
if (!routine.registeredTasks.has(nextTask.name)) {
|
|
11415
|
+
return true;
|
|
10564
11416
|
}
|
|
10565
|
-
task.registered = true;
|
|
10566
|
-
changed = true;
|
|
10567
|
-
emit("meta.sync_controller.task_registered", {
|
|
10568
|
-
...ctx,
|
|
10569
|
-
__taskName: task.name,
|
|
10570
|
-
task,
|
|
10571
|
-
__authoritativeReconciliation: true
|
|
10572
|
-
});
|
|
10573
11417
|
}
|
|
10574
|
-
|
|
10575
|
-
|
|
10576
|
-
|
|
10577
|
-
|
|
10578
|
-
|
|
11418
|
+
}
|
|
11419
|
+
return false;
|
|
11420
|
+
});
|
|
11421
|
+
const gatherDirectionalTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
|
|
11422
|
+
"Gather directional task map registration",
|
|
11423
|
+
(ctx) => {
|
|
11424
|
+
if (hasPendingDirectionalTaskMaps()) {
|
|
11425
|
+
this.directionalTaskMapsSynced = false;
|
|
11426
|
+
return false;
|
|
10579
11427
|
}
|
|
10580
|
-
|
|
11428
|
+
this.directionalTaskMapsSynced = true;
|
|
11429
|
+
return ctx;
|
|
10581
11430
|
},
|
|
10582
|
-
"
|
|
11431
|
+
"Completes directional task graph registration when task edges and deputy edges are registered.",
|
|
10583
11432
|
{
|
|
10584
11433
|
register: false,
|
|
10585
11434
|
isHidden: true
|
|
10586
11435
|
}
|
|
10587
11436
|
);
|
|
10588
|
-
const
|
|
10589
|
-
"
|
|
10590
|
-
(ctx
|
|
10591
|
-
|
|
10592
|
-
|
|
10593
|
-
|
|
10594
|
-
const routineName = typeof row.name === "string" ? row.name : "";
|
|
10595
|
-
if (!routineName) {
|
|
10596
|
-
continue;
|
|
10597
|
-
}
|
|
10598
|
-
const routine = CadenzaService.getRoutine(routineName);
|
|
10599
|
-
if (!routine || routine.registered) {
|
|
10600
|
-
continue;
|
|
10601
|
-
}
|
|
10602
|
-
routine.registered = true;
|
|
10603
|
-
changed = true;
|
|
11437
|
+
const gatherSignalTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
|
|
11438
|
+
"Gather signal task map registration",
|
|
11439
|
+
(ctx) => {
|
|
11440
|
+
if (hasPendingSignalTaskMaps()) {
|
|
11441
|
+
this.signalTaskMapsSynced = false;
|
|
11442
|
+
return false;
|
|
10604
11443
|
}
|
|
10605
|
-
|
|
10606
|
-
|
|
10607
|
-
|
|
10608
|
-
|
|
10609
|
-
|
|
11444
|
+
this.signalTaskMapsSynced = true;
|
|
11445
|
+
return ctx;
|
|
11446
|
+
},
|
|
11447
|
+
"Completes signal-to-task map registration when all global observed signal edges are registered.",
|
|
11448
|
+
{
|
|
11449
|
+
register: false,
|
|
11450
|
+
isHidden: true
|
|
11451
|
+
}
|
|
11452
|
+
);
|
|
11453
|
+
const gatherIntentTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
|
|
11454
|
+
"Gather intent task map registration",
|
|
11455
|
+
(ctx) => {
|
|
11456
|
+
if (hasPendingIntentTaskMaps()) {
|
|
11457
|
+
this.intentTaskMapsSynced = false;
|
|
11458
|
+
return false;
|
|
10610
11459
|
}
|
|
10611
|
-
|
|
11460
|
+
this.intentTaskMapsSynced = true;
|
|
11461
|
+
return ctx;
|
|
10612
11462
|
},
|
|
10613
|
-
"
|
|
11463
|
+
"Completes intent-to-task map registration when all task responders are registered.",
|
|
10614
11464
|
{
|
|
10615
11465
|
register: false,
|
|
10616
11466
|
isHidden: true
|
|
10617
11467
|
}
|
|
10618
11468
|
);
|
|
10619
|
-
const
|
|
10620
|
-
"
|
|
10621
|
-
(ctx
|
|
10622
|
-
|
|
10623
|
-
|
|
10624
|
-
|
|
10625
|
-
for (const row of authoritativeSignals) {
|
|
10626
|
-
const signalName = typeof row.name === "string" ? row.name : "";
|
|
10627
|
-
if (!signalName) {
|
|
10628
|
-
continue;
|
|
10629
|
-
}
|
|
10630
|
-
const observer = signalObservers?.get(signalName);
|
|
10631
|
-
if (!observer || observer.registered) {
|
|
10632
|
-
continue;
|
|
10633
|
-
}
|
|
10634
|
-
observer.registered = true;
|
|
10635
|
-
changed = true;
|
|
11469
|
+
const gatherActorTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
|
|
11470
|
+
"Gather actor task map registration",
|
|
11471
|
+
(ctx) => {
|
|
11472
|
+
if (hasPendingActorTaskMaps()) {
|
|
11473
|
+
this.actorTaskMapsSynced = false;
|
|
11474
|
+
return false;
|
|
10636
11475
|
}
|
|
10637
|
-
|
|
10638
|
-
|
|
10639
|
-
|
|
10640
|
-
|
|
10641
|
-
|
|
11476
|
+
this.actorTaskMapsSynced = true;
|
|
11477
|
+
return ctx;
|
|
11478
|
+
},
|
|
11479
|
+
"Completes actor-to-task map registration when all actor-backed tasks are registered.",
|
|
11480
|
+
{
|
|
11481
|
+
register: false,
|
|
11482
|
+
isHidden: true
|
|
11483
|
+
}
|
|
11484
|
+
);
|
|
11485
|
+
const gatherRoutineTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
|
|
11486
|
+
"Gather routine task map registration",
|
|
11487
|
+
(ctx) => {
|
|
11488
|
+
if (hasPendingRoutineTaskMaps()) {
|
|
11489
|
+
this.routineTaskMapsSynced = false;
|
|
11490
|
+
return false;
|
|
10642
11491
|
}
|
|
10643
|
-
|
|
11492
|
+
this.routineTaskMapsSynced = true;
|
|
11493
|
+
return ctx;
|
|
10644
11494
|
},
|
|
10645
|
-
"
|
|
11495
|
+
"Completes task-to-routine map registration when all routine task memberships are registered.",
|
|
10646
11496
|
{
|
|
10647
11497
|
register: false,
|
|
10648
11498
|
isHidden: true
|
|
10649
11499
|
}
|
|
10650
11500
|
);
|
|
10651
|
-
const
|
|
10652
|
-
"
|
|
11501
|
+
const finishSyncTask = CadenzaService.createUniqueMetaTask(
|
|
11502
|
+
"Finish sync",
|
|
10653
11503
|
(ctx, emit) => {
|
|
10654
|
-
const
|
|
10655
|
-
|
|
10656
|
-
|
|
10657
|
-
|
|
10658
|
-
|
|
10659
|
-
|
|
10660
|
-
|
|
10661
|
-
|
|
10662
|
-
|
|
11504
|
+
const syncCycleId = typeof ctx.__syncCycleId === "string" ? ctx.__syncCycleId.trim() : "";
|
|
11505
|
+
if (syncCycleId && this.activeSyncCycleId === syncCycleId) {
|
|
11506
|
+
this.activeSyncCycleId = null;
|
|
11507
|
+
this.activeSyncCycleStartedAt = 0;
|
|
11508
|
+
}
|
|
11509
|
+
if (this.pendingBootstrapSyncRerun) {
|
|
11510
|
+
this.pendingBootstrapSyncRerun = false;
|
|
11511
|
+
CadenzaService.debounce("meta.sync_requested", {
|
|
11512
|
+
delayMs: 100
|
|
11513
|
+
});
|
|
11514
|
+
}
|
|
11515
|
+
emit("global.meta.sync_controller.synced", {
|
|
11516
|
+
data: {
|
|
11517
|
+
is_active: true,
|
|
11518
|
+
is_non_responsive: false,
|
|
11519
|
+
is_blocked: false,
|
|
11520
|
+
last_active: formatTimestamp(Date.now())
|
|
11521
|
+
},
|
|
11522
|
+
filter: {
|
|
11523
|
+
uuid: CadenzaService.serviceRegistry.serviceInstanceId
|
|
10663
11524
|
}
|
|
10664
|
-
|
|
10665
|
-
|
|
11525
|
+
});
|
|
11526
|
+
return true;
|
|
11527
|
+
},
|
|
11528
|
+
"Marks the current bootstrap sync cycle as complete.",
|
|
11529
|
+
{
|
|
11530
|
+
register: false,
|
|
11531
|
+
isHidden: true
|
|
11532
|
+
}
|
|
11533
|
+
).attachSignal("global.meta.sync_controller.synced");
|
|
11534
|
+
const mapPhaseBarrierTask = CadenzaService.createUniqueMetaTask(
|
|
11535
|
+
"Complete map sync phase",
|
|
11536
|
+
(ctx) => {
|
|
11537
|
+
const syncCycleId = typeof ctx.__syncCycleId === "string" ? ctx.__syncCycleId.trim() : "";
|
|
11538
|
+
if (!syncCycleId) {
|
|
11539
|
+
return false;
|
|
10666
11540
|
}
|
|
10667
|
-
|
|
10668
|
-
|
|
10669
|
-
|
|
10670
|
-
|
|
11541
|
+
const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
|
|
11542
|
+
if (shouldTraceSyncPhase(serviceName2)) {
|
|
11543
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] map_barrier_check", {
|
|
11544
|
+
serviceName: serviceName2,
|
|
11545
|
+
syncCycleId,
|
|
11546
|
+
directionalTaskMapsSynced: this.directionalTaskMapsSynced,
|
|
11547
|
+
signalTaskMapsSynced: this.signalTaskMapsSynced,
|
|
11548
|
+
intentTaskMapsSynced: this.intentTaskMapsSynced,
|
|
11549
|
+
actorTaskMapsSynced: this.actorTaskMapsSynced,
|
|
11550
|
+
routineTaskMapsSynced: this.routineTaskMapsSynced
|
|
10671
11551
|
});
|
|
10672
11552
|
}
|
|
10673
|
-
|
|
11553
|
+
if (!this.directionalTaskMapsSynced || !this.signalTaskMapsSynced || !this.intentTaskMapsSynced || !this.actorTaskMapsSynced || !this.routineTaskMapsSynced) {
|
|
11554
|
+
return false;
|
|
11555
|
+
}
|
|
11556
|
+
if (!markCompletedSyncCycle(this.mapPhaseCompletedCycles, syncCycleId)) {
|
|
11557
|
+
return false;
|
|
11558
|
+
}
|
|
11559
|
+
return ctx;
|
|
10674
11560
|
},
|
|
10675
|
-
"
|
|
11561
|
+
"Fans in map branch completion and ends the current sync cycle once every map branch is complete.",
|
|
11562
|
+
{
|
|
11563
|
+
register: false,
|
|
11564
|
+
isHidden: true
|
|
11565
|
+
}
|
|
11566
|
+
).then(finishSyncTask);
|
|
11567
|
+
const startDirectionalTaskMapSyncTask = CadenzaService.createMetaTask(
|
|
11568
|
+
"Start directional task map sync",
|
|
11569
|
+
(ctx) => ctx,
|
|
11570
|
+
"Starts the directional task graph map branch for the current sync cycle.",
|
|
10676
11571
|
{
|
|
10677
11572
|
register: false,
|
|
10678
11573
|
isHidden: true
|
|
10679
11574
|
}
|
|
10680
11575
|
);
|
|
10681
|
-
const
|
|
10682
|
-
"
|
|
10683
|
-
() =>
|
|
10684
|
-
"
|
|
11576
|
+
const startSignalTaskMapSyncTask = CadenzaService.createMetaTask(
|
|
11577
|
+
"Start signal task map sync",
|
|
11578
|
+
(ctx) => ctx,
|
|
11579
|
+
"Starts the signal-to-task map branch for the current sync cycle.",
|
|
10685
11580
|
{
|
|
10686
11581
|
register: false,
|
|
10687
11582
|
isHidden: true
|
|
10688
11583
|
}
|
|
10689
11584
|
);
|
|
10690
|
-
const
|
|
10691
|
-
"
|
|
10692
|
-
() =>
|
|
10693
|
-
"
|
|
11585
|
+
const startIntentTaskMapSyncTask = CadenzaService.createMetaTask(
|
|
11586
|
+
"Start intent task map sync",
|
|
11587
|
+
(ctx) => ctx,
|
|
11588
|
+
"Starts the intent-to-task map branch for the current sync cycle.",
|
|
10694
11589
|
{
|
|
10695
11590
|
register: false,
|
|
10696
11591
|
isHidden: true
|
|
10697
11592
|
}
|
|
10698
11593
|
);
|
|
10699
|
-
const
|
|
10700
|
-
"
|
|
10701
|
-
() =>
|
|
10702
|
-
"
|
|
11594
|
+
const startActorTaskMapSyncTask = CadenzaService.createMetaTask(
|
|
11595
|
+
"Start actor task map sync",
|
|
11596
|
+
(ctx) => ctx,
|
|
11597
|
+
"Starts the actor-to-task map branch for the current sync cycle.",
|
|
10703
11598
|
{
|
|
10704
11599
|
register: false,
|
|
10705
11600
|
isHidden: true
|
|
10706
11601
|
}
|
|
10707
11602
|
);
|
|
10708
|
-
const
|
|
10709
|
-
"
|
|
10710
|
-
() =>
|
|
10711
|
-
"
|
|
11603
|
+
const startRoutineTaskMapSyncTask = CadenzaService.createMetaTask(
|
|
11604
|
+
"Start routine task map sync",
|
|
11605
|
+
(ctx) => ctx,
|
|
11606
|
+
"Starts the task-to-routine map branch for the current sync cycle.",
|
|
10712
11607
|
{
|
|
10713
11608
|
register: false,
|
|
10714
11609
|
isHidden: true
|
|
10715
11610
|
}
|
|
10716
11611
|
);
|
|
10717
|
-
|
|
10718
|
-
|
|
10719
|
-
reconcileTaskRegistrationFromAuthorityTask
|
|
10720
|
-
);
|
|
10721
|
-
}
|
|
10722
|
-
if (authoritativeRoutineQueryGraph) {
|
|
10723
|
-
authoritativeRoutineQueryGraph.completionTask.then(
|
|
10724
|
-
reconcileRoutineRegistrationFromAuthorityTask
|
|
10725
|
-
);
|
|
10726
|
-
}
|
|
10727
|
-
if (authoritativeSignalQueryGraph) {
|
|
10728
|
-
authoritativeSignalQueryGraph.completionTask.then(
|
|
10729
|
-
reconcileSignalRegistrationFromAuthorityTask
|
|
10730
|
-
);
|
|
10731
|
-
}
|
|
10732
|
-
if (authoritativeIntentQueryGraph) {
|
|
10733
|
-
authoritativeIntentQueryGraph.completionTask.then(
|
|
10734
|
-
reconcileIntentRegistrationFromAuthorityTask
|
|
10735
|
-
);
|
|
10736
|
-
}
|
|
10737
|
-
const authoritativeRegistrationTriggers = [
|
|
10738
|
-
"meta.service_registry.initial_sync_complete",
|
|
10739
|
-
"meta.sync_requested",
|
|
10740
|
-
"meta.sync_controller.synced_resource",
|
|
10741
|
-
"meta.sync_controller.authority_registration_reconciliation_requested"
|
|
10742
|
-
];
|
|
10743
|
-
CadenzaService.createMetaTask(
|
|
10744
|
-
"Prepare authoritative task registration query",
|
|
11612
|
+
const primitivePhaseBarrierTask = CadenzaService.createUniqueMetaTask(
|
|
11613
|
+
"Complete primitive sync phase",
|
|
10745
11614
|
(ctx) => {
|
|
10746
|
-
|
|
11615
|
+
const syncCycleId = typeof ctx.__syncCycleId === "string" ? ctx.__syncCycleId.trim() : "";
|
|
11616
|
+
if (!syncCycleId) {
|
|
10747
11617
|
return false;
|
|
10748
11618
|
}
|
|
10749
|
-
const serviceName2 = resolveSyncServiceName();
|
|
10750
|
-
if (
|
|
11619
|
+
const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
|
|
11620
|
+
if (shouldTraceSyncPhase(serviceName2)) {
|
|
11621
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] primitive_barrier_check", {
|
|
11622
|
+
serviceName: serviceName2,
|
|
11623
|
+
syncCycleId,
|
|
11624
|
+
tasksSynced: this.tasksSynced,
|
|
11625
|
+
signalsSynced: this.signalsSynced,
|
|
11626
|
+
intentsSynced: this.intentsSynced,
|
|
11627
|
+
actorsSynced: this.actorsSynced,
|
|
11628
|
+
routinesSynced: this.routinesSynced
|
|
11629
|
+
});
|
|
11630
|
+
}
|
|
11631
|
+
if (!this.tasksSynced || !this.signalsSynced || !this.intentsSynced || !this.actorsSynced || !this.routinesSynced) {
|
|
10751
11632
|
return false;
|
|
10752
11633
|
}
|
|
10753
|
-
|
|
10754
|
-
|
|
10755
|
-
|
|
10756
|
-
|
|
10757
|
-
|
|
10758
|
-
|
|
10759
|
-
|
|
10760
|
-
|
|
10761
|
-
|
|
10762
|
-
};
|
|
11634
|
+
if (!markCompletedSyncCycle(this.primitivePhaseCompletedCycles, syncCycleId)) {
|
|
11635
|
+
return false;
|
|
11636
|
+
}
|
|
11637
|
+
this.directionalTaskMapsSynced = false;
|
|
11638
|
+
this.signalTaskMapsSynced = false;
|
|
11639
|
+
this.intentTaskMapsSynced = false;
|
|
11640
|
+
this.actorTaskMapsSynced = false;
|
|
11641
|
+
this.routineTaskMapsSynced = false;
|
|
11642
|
+
return ctx;
|
|
10763
11643
|
},
|
|
10764
|
-
"
|
|
11644
|
+
"Fans in primitive registration and opens the map registration phase once every primitive branch is complete.",
|
|
10765
11645
|
{
|
|
10766
11646
|
register: false,
|
|
10767
11647
|
isHidden: true
|
|
10768
11648
|
}
|
|
10769
|
-
).
|
|
10770
|
-
|
|
10771
|
-
|
|
10772
|
-
|
|
10773
|
-
|
|
11649
|
+
).then(
|
|
11650
|
+
startDirectionalTaskMapSyncTask,
|
|
11651
|
+
startSignalTaskMapSyncTask,
|
|
11652
|
+
startIntentTaskMapSyncTask,
|
|
11653
|
+
startActorTaskMapSyncTask,
|
|
11654
|
+
startRoutineTaskMapSyncTask
|
|
11655
|
+
);
|
|
11656
|
+
gatherTaskRegistrationTask.then(primitivePhaseBarrierTask);
|
|
11657
|
+
gatherSignalRegistrationTask.then(primitivePhaseBarrierTask);
|
|
11658
|
+
gatherIntentRegistrationTask.then(primitivePhaseBarrierTask);
|
|
11659
|
+
gatherActorRegistrationTask.then(primitivePhaseBarrierTask);
|
|
11660
|
+
gatherRoutineRegistrationTask.then(primitivePhaseBarrierTask);
|
|
11661
|
+
const markLocalServiceInsertedForBootstrapSyncTask = CadenzaService.createUniqueMetaTask(
|
|
11662
|
+
"Mark local service inserted for bootstrap sync",
|
|
10774
11663
|
(ctx) => {
|
|
10775
|
-
if (!this.isCadenzaDBReady) {
|
|
10776
|
-
return false;
|
|
10777
|
-
}
|
|
10778
11664
|
const serviceName2 = resolveSyncServiceName();
|
|
10779
|
-
|
|
11665
|
+
const insertedServiceName = typeof ctx.__serviceName === "string" ? ctx.__serviceName : typeof ctx.service_name === "string" ? ctx.service_name : null;
|
|
11666
|
+
if (!serviceName2 || insertedServiceName !== serviceName2) {
|
|
10780
11667
|
return false;
|
|
10781
11668
|
}
|
|
10782
|
-
|
|
10783
|
-
|
|
10784
|
-
__syncServiceName: serviceName2,
|
|
10785
|
-
queryData: {
|
|
10786
|
-
filter: {
|
|
10787
|
-
service_name: serviceName2
|
|
10788
|
-
},
|
|
10789
|
-
fields: ["name", "version", "service_name"]
|
|
10790
|
-
}
|
|
10791
|
-
};
|
|
11669
|
+
this.localServiceInserted = true;
|
|
11670
|
+
return true;
|
|
10792
11671
|
},
|
|
10793
|
-
"
|
|
11672
|
+
"Marks that the local service row has been inserted in authority so bootstrap sync can start only after that prerequisite.",
|
|
10794
11673
|
{
|
|
10795
11674
|
register: false,
|
|
10796
11675
|
isHidden: true
|
|
10797
11676
|
}
|
|
10798
|
-
).doOn(
|
|
10799
|
-
|
|
10800
|
-
|
|
10801
|
-
CadenzaService.createMetaTask(
|
|
10802
|
-
"Prepare authoritative signal registration query",
|
|
11677
|
+
).doOn("meta.service_registry.service_inserted");
|
|
11678
|
+
const markLocalServiceInstanceInsertedForBootstrapSyncTask = CadenzaService.createUniqueMetaTask(
|
|
11679
|
+
"Mark local service instance inserted for bootstrap sync",
|
|
10803
11680
|
(ctx) => {
|
|
10804
|
-
|
|
11681
|
+
const serviceName2 = resolveSyncServiceName();
|
|
11682
|
+
const insertedServiceName = typeof ctx.__serviceName === "string" ? ctx.__serviceName : typeof ctx.service_name === "string" ? ctx.service_name : null;
|
|
11683
|
+
if (!serviceName2 || insertedServiceName !== serviceName2) {
|
|
10805
11684
|
return false;
|
|
10806
11685
|
}
|
|
10807
|
-
|
|
10808
|
-
|
|
10809
|
-
queryData: {
|
|
10810
|
-
fields: ["name"]
|
|
10811
|
-
}
|
|
10812
|
-
};
|
|
11686
|
+
this.localServiceInstanceInserted = true;
|
|
11687
|
+
return true;
|
|
10813
11688
|
},
|
|
10814
|
-
"
|
|
11689
|
+
"Marks that the local service instance row has been inserted in authority so bootstrap sync can start only after that prerequisite.",
|
|
10815
11690
|
{
|
|
10816
11691
|
register: false,
|
|
10817
11692
|
isHidden: true
|
|
10818
11693
|
}
|
|
10819
|
-
).doOn(
|
|
10820
|
-
|
|
10821
|
-
|
|
10822
|
-
CadenzaService.createMetaTask(
|
|
10823
|
-
"Prepare authoritative intent registration query",
|
|
11694
|
+
).doOn("meta.service_registry.instance_inserted");
|
|
11695
|
+
const startBootstrapSyncTask = CadenzaService.createUniqueMetaTask(
|
|
11696
|
+
"Start bootstrap graph sync",
|
|
10824
11697
|
(ctx) => {
|
|
10825
|
-
|
|
11698
|
+
const now = Date.now();
|
|
11699
|
+
const serviceName2 = resolveSyncServiceName();
|
|
11700
|
+
const serviceInstanceId = CadenzaService.serviceRegistry.serviceInstanceId;
|
|
11701
|
+
if (!serviceName2 || !serviceInstanceId) {
|
|
11702
|
+
return false;
|
|
11703
|
+
}
|
|
11704
|
+
if (!this.localServiceInserted) {
|
|
11705
|
+
return false;
|
|
11706
|
+
}
|
|
11707
|
+
if (!this.localServiceInstanceInserted) {
|
|
10826
11708
|
return false;
|
|
10827
11709
|
}
|
|
11710
|
+
if (!ServiceRegistry.instance.hasLocalInstanceRegistered()) {
|
|
11711
|
+
return false;
|
|
11712
|
+
}
|
|
11713
|
+
if (this.activeSyncCycleId) {
|
|
11714
|
+
const activeCycleAgeMs = now - this.activeSyncCycleStartedAt;
|
|
11715
|
+
if (activeCycleAgeMs < BOOTSTRAP_SYNC_STALE_CYCLE_MS) {
|
|
11716
|
+
this.pendingBootstrapSyncRerun = true;
|
|
11717
|
+
return false;
|
|
11718
|
+
}
|
|
11719
|
+
}
|
|
11720
|
+
const syncCycleId = `${now}-${++this.syncCycleCounter}`;
|
|
11721
|
+
this.activeSyncCycleId = syncCycleId;
|
|
11722
|
+
this.activeSyncCycleStartedAt = now;
|
|
11723
|
+
this.pendingBootstrapSyncRerun = false;
|
|
11724
|
+
this.tasksSynced = false;
|
|
11725
|
+
this.signalsSynced = false;
|
|
11726
|
+
this.intentsSynced = false;
|
|
11727
|
+
this.actorsSynced = false;
|
|
11728
|
+
this.routinesSynced = false;
|
|
10828
11729
|
return {
|
|
10829
11730
|
...ctx,
|
|
10830
|
-
|
|
10831
|
-
|
|
10832
|
-
|
|
11731
|
+
__syncing: true,
|
|
11732
|
+
__syncCycleId: syncCycleId,
|
|
11733
|
+
__serviceName: serviceName2,
|
|
11734
|
+
__serviceInstanceId: serviceInstanceId
|
|
10833
11735
|
};
|
|
10834
11736
|
},
|
|
10835
|
-
"
|
|
11737
|
+
"Starts a deterministic bootstrap sync cycle once the local service instance exists.",
|
|
10836
11738
|
{
|
|
10837
11739
|
register: false,
|
|
10838
11740
|
isHidden: true
|
|
10839
11741
|
}
|
|
10840
|
-
).doOn(
|
|
10841
|
-
|
|
10842
|
-
|
|
10843
|
-
CadenzaService.signalBroker.getSignalsTask.clone().doOn(
|
|
10844
|
-
"meta.sync_controller.sync_tick",
|
|
10845
|
-
"meta.service_registry.initial_sync_complete",
|
|
10846
|
-
"meta.sync_requested"
|
|
10847
|
-
).then(this.splitSignalsTask);
|
|
10848
|
-
CadenzaService.registry.getAllTasks.clone().doOn(
|
|
10849
|
-
"meta.sync_controller.sync_tick",
|
|
10850
|
-
"meta.sync_controller.synced_signals",
|
|
10851
|
-
"meta.sync_requested"
|
|
10852
|
-
).then(this.splitTasksForRegistration);
|
|
10853
|
-
CadenzaService.createMetaTask("Get all intents", (ctx) => {
|
|
10854
|
-
return {
|
|
10855
|
-
...ctx,
|
|
10856
|
-
intents: Array.from(CadenzaService.inquiryBroker.intents.values())
|
|
10857
|
-
};
|
|
10858
|
-
}).doOn(
|
|
10859
|
-
"meta.sync_controller.sync_tick",
|
|
10860
|
-
"meta.service_registry.initial_sync_complete",
|
|
10861
|
-
"meta.sync_requested"
|
|
10862
|
-
).then(this.splitIntentsTask);
|
|
10863
|
-
CadenzaService.registry.getAllRoutines.clone().doOn(
|
|
10864
|
-
"meta.sync_controller.sync_tick",
|
|
10865
|
-
"meta.service_registry.initial_sync_complete",
|
|
10866
|
-
"meta.sync_requested"
|
|
10867
|
-
).then(this.splitRoutinesTask);
|
|
10868
|
-
CadenzaService.createMetaTask("Get all actors", (ctx) => {
|
|
10869
|
-
return {
|
|
10870
|
-
...ctx,
|
|
10871
|
-
actors: CadenzaService.getAllActors()
|
|
10872
|
-
};
|
|
10873
|
-
}).doOn(
|
|
11742
|
+
).doOn(
|
|
11743
|
+
"meta.service_registry.service_inserted",
|
|
11744
|
+
"meta.service_registry.instance_inserted",
|
|
10874
11745
|
"meta.sync_controller.sync_tick",
|
|
10875
|
-
"meta.service_registry.initial_sync_complete",
|
|
10876
11746
|
"meta.sync_requested"
|
|
10877
|
-
)
|
|
10878
|
-
CadenzaService.createMetaTask(
|
|
10879
|
-
|
|
10880
|
-
|
|
10881
|
-
|
|
11747
|
+
);
|
|
11748
|
+
const startTaskPrimitiveSyncTask = CadenzaService.createMetaTask(
|
|
11749
|
+
"Start task primitive sync",
|
|
11750
|
+
(ctx) => ctx,
|
|
11751
|
+
"Starts the task registration branch for the current sync cycle.",
|
|
11752
|
+
{
|
|
11753
|
+
register: false,
|
|
11754
|
+
isHidden: true
|
|
10882
11755
|
}
|
|
10883
|
-
return {
|
|
10884
|
-
...ctx,
|
|
10885
|
-
task
|
|
10886
|
-
};
|
|
10887
|
-
}).doOn("meta.sync_controller.task_registered").then(
|
|
10888
|
-
this.registerTaskMapTask,
|
|
10889
|
-
this.registerDeputyRelationshipTask
|
|
10890
11756
|
);
|
|
10891
|
-
CadenzaService.
|
|
10892
|
-
"
|
|
10893
|
-
|
|
10894
|
-
"
|
|
10895
|
-
|
|
10896
|
-
|
|
10897
|
-
|
|
10898
|
-
if (!task) {
|
|
10899
|
-
return false;
|
|
11757
|
+
const startSignalPrimitiveSyncTask = CadenzaService.createMetaTask(
|
|
11758
|
+
"Start signal primitive sync",
|
|
11759
|
+
(ctx) => ctx,
|
|
11760
|
+
"Starts the signal registration branch for the current sync cycle.",
|
|
11761
|
+
{
|
|
11762
|
+
register: false,
|
|
11763
|
+
isHidden: true
|
|
10900
11764
|
}
|
|
10901
|
-
|
|
10902
|
-
|
|
10903
|
-
|
|
10904
|
-
|
|
10905
|
-
|
|
10906
|
-
|
|
10907
|
-
|
|
10908
|
-
|
|
10909
|
-
"meta.sync_requested"
|
|
10910
|
-
).then(this.registerIntentToTaskMapTask);
|
|
10911
|
-
CadenzaService.createMetaTask("Get registered task for intent sync", (ctx) => {
|
|
10912
|
-
const task = ctx.task ?? (ctx.__taskName ? CadenzaService.get(ctx.__taskName) : void 0);
|
|
10913
|
-
if (!task) {
|
|
10914
|
-
return false;
|
|
11765
|
+
);
|
|
11766
|
+
const startIntentPrimitiveSyncTask = CadenzaService.createMetaTask(
|
|
11767
|
+
"Start intent primitive sync",
|
|
11768
|
+
(ctx) => ctx,
|
|
11769
|
+
"Starts the intent registration branch for the current sync cycle.",
|
|
11770
|
+
{
|
|
11771
|
+
register: false,
|
|
11772
|
+
isHidden: true
|
|
10915
11773
|
}
|
|
10916
|
-
|
|
10917
|
-
|
|
10918
|
-
|
|
10919
|
-
|
|
10920
|
-
|
|
10921
|
-
|
|
10922
|
-
|
|
10923
|
-
|
|
10924
|
-
"meta.sync_requested"
|
|
10925
|
-
).then(this.registerActorTaskMapTask);
|
|
10926
|
-
CadenzaService.createMetaTask("Get registered task for actor sync", (ctx) => {
|
|
10927
|
-
const task = ctx.task ?? (ctx.__taskName ? CadenzaService.get(ctx.__taskName) : void 0);
|
|
10928
|
-
if (!task) {
|
|
10929
|
-
return false;
|
|
11774
|
+
);
|
|
11775
|
+
const startActorPrimitiveSyncTask = CadenzaService.createMetaTask(
|
|
11776
|
+
"Start actor primitive sync",
|
|
11777
|
+
(ctx) => ctx,
|
|
11778
|
+
"Starts the actor registration branch for the current sync cycle.",
|
|
11779
|
+
{
|
|
11780
|
+
register: false,
|
|
11781
|
+
isHidden: true
|
|
10930
11782
|
}
|
|
10931
|
-
|
|
11783
|
+
);
|
|
11784
|
+
const startRoutinePrimitiveSyncTask = CadenzaService.createMetaTask(
|
|
11785
|
+
"Start routine primitive sync",
|
|
11786
|
+
(ctx) => ctx,
|
|
11787
|
+
"Starts the routine registration branch for the current sync cycle.",
|
|
11788
|
+
{
|
|
11789
|
+
register: false,
|
|
11790
|
+
isHidden: true
|
|
11791
|
+
}
|
|
11792
|
+
);
|
|
11793
|
+
startBootstrapSyncTask.then(
|
|
11794
|
+
startTaskPrimitiveSyncTask,
|
|
11795
|
+
startSignalPrimitiveSyncTask,
|
|
11796
|
+
startIntentPrimitiveSyncTask,
|
|
11797
|
+
startActorPrimitiveSyncTask,
|
|
11798
|
+
startRoutinePrimitiveSyncTask
|
|
11799
|
+
);
|
|
11800
|
+
const getAllTasksForSyncTask = CadenzaService.registry.getAllTasks.clone();
|
|
11801
|
+
startTaskPrimitiveSyncTask.then(
|
|
11802
|
+
getAllTasksForSyncTask,
|
|
11803
|
+
gatherTaskRegistrationTask
|
|
11804
|
+
);
|
|
11805
|
+
getAllTasksForSyncTask.then(this.splitTasksForRegistration);
|
|
11806
|
+
const getSignalsForSyncTask = CadenzaService.signalBroker.getSignalsTask.clone();
|
|
11807
|
+
startSignalPrimitiveSyncTask.then(
|
|
11808
|
+
getSignalsForSyncTask,
|
|
11809
|
+
gatherSignalRegistrationTask
|
|
11810
|
+
);
|
|
11811
|
+
getSignalsForSyncTask.then(this.splitSignalsTask);
|
|
11812
|
+
const getAllIntentsForSyncTask = CadenzaService.createUniqueMetaTask(
|
|
11813
|
+
"Get all intents for sync",
|
|
11814
|
+
(ctx) => ({
|
|
10932
11815
|
...ctx,
|
|
10933
|
-
|
|
10934
|
-
|
|
10935
|
-
|
|
10936
|
-
|
|
10937
|
-
|
|
10938
|
-
|
|
10939
|
-
|
|
10940
|
-
|
|
10941
|
-
|
|
10942
|
-
return ctx;
|
|
10943
|
-
}
|
|
10944
|
-
).then(this.registerActorTaskMapTask)
|
|
11816
|
+
intents: Array.from(CadenzaService.inquiryBroker.intents.values()).filter(
|
|
11817
|
+
(intent) => isRegistrableLocalIntentDefinition(intent)
|
|
11818
|
+
)
|
|
11819
|
+
}),
|
|
11820
|
+
"Collects local intents for the primitive sync phase.",
|
|
11821
|
+
{
|
|
11822
|
+
register: false,
|
|
11823
|
+
isHidden: true
|
|
11824
|
+
}
|
|
10945
11825
|
);
|
|
10946
|
-
|
|
10947
|
-
|
|
10948
|
-
|
|
10949
|
-
"meta.sync_requested"
|
|
10950
|
-
).then(
|
|
10951
|
-
CadenzaService.createMetaTask(
|
|
10952
|
-
"Ensure routine and task sync ready",
|
|
10953
|
-
(ctx) => {
|
|
10954
|
-
if (!this.tasksSynced || !this.routinesSynced) {
|
|
10955
|
-
return false;
|
|
10956
|
-
}
|
|
10957
|
-
return ctx;
|
|
10958
|
-
}
|
|
10959
|
-
).then(this.splitTasksInRoutines)
|
|
11826
|
+
startIntentPrimitiveSyncTask.then(
|
|
11827
|
+
getAllIntentsForSyncTask,
|
|
11828
|
+
gatherIntentRegistrationTask
|
|
10960
11829
|
);
|
|
10961
|
-
|
|
10962
|
-
|
|
10963
|
-
|
|
10964
|
-
|
|
10965
|
-
|
|
10966
|
-
|
|
10967
|
-
|
|
10968
|
-
|
|
10969
|
-
|
|
10970
|
-
|
|
11830
|
+
getAllIntentsForSyncTask.then(this.splitIntentsTask);
|
|
11831
|
+
const getAllActorsForSyncTask = CadenzaService.createUniqueMetaTask(
|
|
11832
|
+
"Get all actors for sync",
|
|
11833
|
+
(ctx) => ({
|
|
11834
|
+
...ctx,
|
|
11835
|
+
actors: CadenzaService.getAllActors()
|
|
11836
|
+
}),
|
|
11837
|
+
"Collects local actors for the primitive sync phase.",
|
|
11838
|
+
{
|
|
11839
|
+
register: false,
|
|
11840
|
+
isHidden: true
|
|
11841
|
+
}
|
|
11842
|
+
);
|
|
11843
|
+
startActorPrimitiveSyncTask.then(
|
|
11844
|
+
getAllActorsForSyncTask,
|
|
11845
|
+
gatherActorRegistrationTask
|
|
11846
|
+
);
|
|
11847
|
+
getAllActorsForSyncTask.then(this.splitActorsForRegistration);
|
|
11848
|
+
const getAllRoutinesForSyncTask = CadenzaService.registry.getAllRoutines.clone();
|
|
11849
|
+
startRoutinePrimitiveSyncTask.then(
|
|
11850
|
+
getAllRoutinesForSyncTask,
|
|
11851
|
+
gatherRoutineRegistrationTask
|
|
11852
|
+
);
|
|
11853
|
+
getAllRoutinesForSyncTask.then(this.splitRoutinesTask);
|
|
11854
|
+
const iterateTasksForDirectionalTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
|
|
11855
|
+
startDirectionalTaskMapSyncTask.then(
|
|
11856
|
+
iterateTasksForDirectionalTaskMapSyncTask,
|
|
11857
|
+
gatherDirectionalTaskMapRegistrationTask
|
|
11858
|
+
);
|
|
11859
|
+
iterateTasksForDirectionalTaskMapSyncTask.then(this.registerTaskMapTask);
|
|
11860
|
+
recordTaskMapRegistrationTask.then(gatherDirectionalTaskMapRegistrationTask);
|
|
11861
|
+
gatherDirectionalTaskMapRegistrationTask.then(mapPhaseBarrierTask);
|
|
11862
|
+
const iterateTasksForSignalTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
|
|
11863
|
+
startSignalTaskMapSyncTask.then(
|
|
11864
|
+
iterateTasksForSignalTaskMapSyncTask,
|
|
11865
|
+
gatherSignalTaskMapRegistrationTask
|
|
11866
|
+
);
|
|
11867
|
+
iterateTasksForSignalTaskMapSyncTask.then(this.registerSignalToTaskMapTask);
|
|
11868
|
+
registerSignalTask.then(gatherSignalTaskMapRegistrationTask);
|
|
11869
|
+
gatherSignalTaskMapRegistrationTask.then(mapPhaseBarrierTask);
|
|
11870
|
+
const iterateTasksForIntentTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
|
|
11871
|
+
startIntentTaskMapSyncTask.then(
|
|
11872
|
+
iterateTasksForIntentTaskMapSyncTask,
|
|
11873
|
+
gatherIntentTaskMapRegistrationTask
|
|
11874
|
+
);
|
|
11875
|
+
iterateTasksForIntentTaskMapSyncTask.then(this.registerIntentToTaskMapTask);
|
|
11876
|
+
registerIntentTask.then(gatherIntentTaskMapRegistrationTask);
|
|
11877
|
+
gatherIntentTaskMapRegistrationTask.then(mapPhaseBarrierTask);
|
|
11878
|
+
const iterateTasksForActorTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
|
|
11879
|
+
startActorTaskMapSyncTask.then(
|
|
11880
|
+
iterateTasksForActorTaskMapSyncTask,
|
|
11881
|
+
gatherActorTaskMapRegistrationTask
|
|
11882
|
+
);
|
|
11883
|
+
iterateTasksForActorTaskMapSyncTask.then(this.registerActorTaskMapTask);
|
|
11884
|
+
recordActorTaskMapRegistrationTask.then(gatherActorTaskMapRegistrationTask);
|
|
11885
|
+
gatherActorTaskMapRegistrationTask.then(mapPhaseBarrierTask);
|
|
11886
|
+
const getAllRoutinesForTaskMapSyncTask = CadenzaService.registry.getAllRoutines.clone();
|
|
11887
|
+
startRoutineTaskMapSyncTask.then(
|
|
11888
|
+
getAllRoutinesForTaskMapSyncTask,
|
|
11889
|
+
gatherRoutineTaskMapRegistrationTask
|
|
11890
|
+
);
|
|
11891
|
+
getAllRoutinesForTaskMapSyncTask.then(this.splitTasksInRoutines);
|
|
11892
|
+
registerTaskToRoutineMapTask.then(gatherRoutineTaskMapRegistrationTask);
|
|
11893
|
+
gatherRoutineTaskMapRegistrationTask.then(mapPhaseBarrierTask);
|
|
11894
|
+
CadenzaService.createMetaTask(
|
|
11895
|
+
"Request sync after local service instance registration",
|
|
11896
|
+
(ctx) => {
|
|
11897
|
+
for (const delayMs of EARLY_SYNC_TICK_DELAYS_MS) {
|
|
11898
|
+
CadenzaService.schedule(
|
|
11899
|
+
"meta.sync_controller.sync_tick",
|
|
11900
|
+
{
|
|
11901
|
+
...buildMinimalSyncSignalContext(ctx),
|
|
11902
|
+
__syncing: true
|
|
11903
|
+
},
|
|
11904
|
+
delayMs
|
|
11905
|
+
);
|
|
10971
11906
|
}
|
|
10972
|
-
|
|
10973
|
-
|
|
10974
|
-
|
|
10975
|
-
|
|
10976
|
-
|
|
10977
|
-
|
|
10978
|
-
{ __syncing: true },
|
|
10979
|
-
3e5,
|
|
10980
|
-
true
|
|
10981
|
-
);
|
|
10982
|
-
} else {
|
|
10983
|
-
CadenzaService.interval(
|
|
10984
|
-
"meta.sync_controller.sync_tick",
|
|
10985
|
-
{ __syncing: true },
|
|
10986
|
-
18e4
|
|
10987
|
-
);
|
|
10988
|
-
CadenzaService.schedule(
|
|
10989
|
-
"meta.sync_controller.sync_tick",
|
|
10990
|
-
{ __syncing: true },
|
|
10991
|
-
250
|
|
10992
|
-
);
|
|
10993
|
-
for (const delayMs of EARLY_SYNC_REQUEST_DELAYS_MS) {
|
|
10994
|
-
CadenzaService.schedule("meta.sync_requested", { __syncing: true }, delayMs);
|
|
11907
|
+
return true;
|
|
11908
|
+
},
|
|
11909
|
+
"Schedules the early bootstrap sync burst after local instance registration so startup-defined primitives can converge deterministically.",
|
|
11910
|
+
{
|
|
11911
|
+
register: false,
|
|
11912
|
+
isHidden: true
|
|
10995
11913
|
}
|
|
10996
|
-
|
|
11914
|
+
).doOn("meta.service_registry.instance_inserted");
|
|
11915
|
+
CadenzaService.interval(
|
|
11916
|
+
"meta.sync_controller.sync_tick",
|
|
11917
|
+
{ __syncing: true },
|
|
11918
|
+
this.isCadenzaDBReady ? 18e4 : 3e5
|
|
11919
|
+
);
|
|
10997
11920
|
}
|
|
10998
11921
|
};
|
|
10999
11922
|
|
|
@@ -11167,7 +12090,53 @@ function resolveBootstrapEndpoint(options) {
|
|
|
11167
12090
|
}
|
|
11168
12091
|
|
|
11169
12092
|
// src/Cadenza.ts
|
|
12093
|
+
var POSTGRES_SETUP_DEBUG_ENABLED2 = process.env.CADENZA_POSTGRES_SETUP_DEBUG === "1" || process.env.CADENZA_POSTGRES_SETUP_DEBUG === "true";
|
|
12094
|
+
var DEFAULT_DEPUTY_TASK_CONCURRENCY = 50;
|
|
12095
|
+
var DEFAULT_DEPUTY_TASK_TIMEOUT_MS = 12e4;
|
|
12096
|
+
var DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY = 50;
|
|
12097
|
+
var DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS = 12e4;
|
|
11170
12098
|
var CadenzaService = class {
|
|
12099
|
+
static replayRegisteredTaskIntentAssociations() {
|
|
12100
|
+
for (const task of this.registry.tasks.values()) {
|
|
12101
|
+
if (!task.register || task.isHidden || task.handlesIntents.size === 0) {
|
|
12102
|
+
continue;
|
|
12103
|
+
}
|
|
12104
|
+
for (const intentName of task.handlesIntents) {
|
|
12105
|
+
task.emitWithMetadata("meta.task.intent_associated", {
|
|
12106
|
+
data: {
|
|
12107
|
+
intentName,
|
|
12108
|
+
taskName: task.name,
|
|
12109
|
+
taskVersion: task.version
|
|
12110
|
+
},
|
|
12111
|
+
taskInstance: task,
|
|
12112
|
+
__isSubMeta: task.isSubMeta
|
|
12113
|
+
});
|
|
12114
|
+
}
|
|
12115
|
+
}
|
|
12116
|
+
}
|
|
12117
|
+
static replayRegisteredTaskSignalObservations() {
|
|
12118
|
+
for (const task of this.registry.tasks.values()) {
|
|
12119
|
+
if (!task.register || task.isHidden || task.observedSignals.size === 0) {
|
|
12120
|
+
continue;
|
|
12121
|
+
}
|
|
12122
|
+
for (const signalName of task.observedSignals) {
|
|
12123
|
+
task.emitWithMetadata("meta.task.observed_signal", {
|
|
12124
|
+
data: {
|
|
12125
|
+
signalName,
|
|
12126
|
+
taskName: task.name,
|
|
12127
|
+
taskVersion: task.version
|
|
12128
|
+
},
|
|
12129
|
+
taskInstance: task,
|
|
12130
|
+
signalName,
|
|
12131
|
+
__isSubMeta: task.isSubMeta
|
|
12132
|
+
});
|
|
12133
|
+
}
|
|
12134
|
+
}
|
|
12135
|
+
}
|
|
12136
|
+
static replayRegisteredTaskGraphMetadata() {
|
|
12137
|
+
this.replayRegisteredTaskSignalObservations();
|
|
12138
|
+
this.replayRegisteredTaskIntentAssociations();
|
|
12139
|
+
}
|
|
11171
12140
|
static buildLegacyLocalCadenzaDBTaskName(tableName, operation) {
|
|
11172
12141
|
const operationPrefix = operation.charAt(0).toUpperCase() + operation.slice(1);
|
|
11173
12142
|
const helperSuffix = camelCase2(String(tableName ?? "").trim());
|
|
@@ -11310,6 +12279,12 @@ var CadenzaService = class {
|
|
|
11310
12279
|
static setMode(mode) {
|
|
11311
12280
|
Cadenza.setMode(mode);
|
|
11312
12281
|
}
|
|
12282
|
+
static hasCompletedBootstrapSync() {
|
|
12283
|
+
return !this.serviceCreated || this.bootstrapSyncCompleted;
|
|
12284
|
+
}
|
|
12285
|
+
static markBootstrapSyncCompleted() {
|
|
12286
|
+
this.bootstrapSyncCompleted = true;
|
|
12287
|
+
}
|
|
11313
12288
|
/**
|
|
11314
12289
|
* Emits a signal with the specified data using the associated broker.
|
|
11315
12290
|
*
|
|
@@ -11397,6 +12372,46 @@ var CadenzaService = class {
|
|
|
11397
12372
|
responders: statuses
|
|
11398
12373
|
};
|
|
11399
12374
|
}
|
|
12375
|
+
static shouldPersistInquiry(inquiry, _context) {
|
|
12376
|
+
return !isMetaIntentName(inquiry);
|
|
12377
|
+
}
|
|
12378
|
+
static splitInquiryPersistenceContext(context) {
|
|
12379
|
+
const businessContext = {};
|
|
12380
|
+
const metadata = context?.__metadata && typeof context.__metadata === "object" ? { ...context.__metadata } : {};
|
|
12381
|
+
for (const [key, value] of Object.entries(context ?? {})) {
|
|
12382
|
+
if (key === "__metadata") {
|
|
12383
|
+
continue;
|
|
12384
|
+
}
|
|
12385
|
+
if (key.startsWith("__")) {
|
|
12386
|
+
metadata[key] = value;
|
|
12387
|
+
continue;
|
|
12388
|
+
}
|
|
12389
|
+
businessContext[key] = value;
|
|
12390
|
+
}
|
|
12391
|
+
return {
|
|
12392
|
+
context: businessContext,
|
|
12393
|
+
metadata
|
|
12394
|
+
};
|
|
12395
|
+
}
|
|
12396
|
+
static buildInquiryPersistenceStartData(inquiryId, inquiry, context, startedAt) {
|
|
12397
|
+
const normalizedTaskVersion = Number(context?.__inquirySourceTaskVersion);
|
|
12398
|
+
const { context: inquiryContext, metadata } = this.splitInquiryPersistenceContext(context);
|
|
12399
|
+
return {
|
|
12400
|
+
uuid: inquiryId,
|
|
12401
|
+
name: inquiry,
|
|
12402
|
+
taskName: typeof context?.__inquirySourceTaskName === "string" ? context.__inquirySourceTaskName : null,
|
|
12403
|
+
taskVersion: Number.isFinite(normalizedTaskVersion) && normalizedTaskVersion > 0 ? normalizedTaskVersion : null,
|
|
12404
|
+
taskExecutionId: typeof context?.__inquirySourceTaskExecutionId === "string" ? context.__inquirySourceTaskExecutionId : null,
|
|
12405
|
+
serviceName: this.serviceRegistry.serviceName,
|
|
12406
|
+
serviceInstanceId: this.serviceRegistry.serviceInstanceId,
|
|
12407
|
+
executionTraceId: typeof (context?.__metadata?.__executionTraceId ?? context?.__executionTraceId) === "string" ? context.__metadata?.__executionTraceId ?? context.__executionTraceId : null,
|
|
12408
|
+
routineExecutionId: typeof context?.__inquirySourceRoutineExecutionId === "string" ? context.__inquirySourceRoutineExecutionId : null,
|
|
12409
|
+
context: inquiryContext,
|
|
12410
|
+
metadata,
|
|
12411
|
+
isMeta: false,
|
|
12412
|
+
sentAt: formatTimestamp(startedAt)
|
|
12413
|
+
};
|
|
12414
|
+
}
|
|
11400
12415
|
static async inquire(inquiry, context, options = {}) {
|
|
11401
12416
|
this.bootstrap();
|
|
11402
12417
|
const hydratedResult = this.consumeHydratedInquiryResult(
|
|
@@ -11411,6 +12426,20 @@ var CadenzaService = class {
|
|
|
11411
12426
|
descriptor: this.getInquiryResponderDescriptor(task)
|
|
11412
12427
|
})) : [];
|
|
11413
12428
|
const isMetaInquiry = isMetaIntentName(inquiry);
|
|
12429
|
+
const startedAt = Date.now();
|
|
12430
|
+
const persistInquiry = this.shouldPersistInquiry(inquiry, context);
|
|
12431
|
+
const logicalInquiryId = persistInquiry ? uuid6() : null;
|
|
12432
|
+
const inquiryStartData = logicalInquiryId ? this.buildInquiryPersistenceStartData(
|
|
12433
|
+
logicalInquiryId,
|
|
12434
|
+
inquiry,
|
|
12435
|
+
context,
|
|
12436
|
+
startedAt
|
|
12437
|
+
) : null;
|
|
12438
|
+
if (inquiryStartData) {
|
|
12439
|
+
this.emit("meta.inquiry_broker.inquiry_started", {
|
|
12440
|
+
data: inquiryStartData
|
|
12441
|
+
});
|
|
12442
|
+
}
|
|
11414
12443
|
const responders = allResponders.filter(({ task, descriptor }) => {
|
|
11415
12444
|
const shouldExecute = shouldExecuteInquiryResponder(inquiry, task.isMeta);
|
|
11416
12445
|
if (shouldExecute) {
|
|
@@ -11445,6 +12474,21 @@ var CadenzaService = class {
|
|
|
11445
12474
|
durationMs: 0,
|
|
11446
12475
|
responders: []
|
|
11447
12476
|
};
|
|
12477
|
+
if (logicalInquiryId) {
|
|
12478
|
+
this.emit("meta.inquiry_broker.inquiry_completed", {
|
|
12479
|
+
data: {
|
|
12480
|
+
fulfilledAt: formatTimestamp(startedAt),
|
|
12481
|
+
duration: 0,
|
|
12482
|
+
metadata: {
|
|
12483
|
+
...inquiryStartData?.metadata ?? {},
|
|
12484
|
+
inquiryMeta
|
|
12485
|
+
}
|
|
12486
|
+
},
|
|
12487
|
+
filter: {
|
|
12488
|
+
uuid: logicalInquiryId
|
|
12489
|
+
}
|
|
12490
|
+
});
|
|
12491
|
+
}
|
|
11448
12492
|
if (options.requireComplete) {
|
|
11449
12493
|
throw {
|
|
11450
12494
|
__inquiryMeta: inquiryMeta,
|
|
@@ -11460,7 +12504,6 @@ var CadenzaService = class {
|
|
|
11460
12504
|
const overallTimeoutMs = options.overallTimeoutMs ?? options.timeout ?? 0;
|
|
11461
12505
|
const requireComplete = options.requireComplete ?? false;
|
|
11462
12506
|
const perResponderTimeoutMs = options.perResponderTimeoutMs;
|
|
11463
|
-
const startedAt = Date.now();
|
|
11464
12507
|
const statuses = [];
|
|
11465
12508
|
const statusByTask = /* @__PURE__ */ new Map();
|
|
11466
12509
|
for (const responder of responders) {
|
|
@@ -11506,10 +12549,26 @@ var CadenzaService = class {
|
|
|
11506
12549
|
statuses,
|
|
11507
12550
|
allResponders.length
|
|
11508
12551
|
);
|
|
12552
|
+
const finishedAt = Date.now();
|
|
11509
12553
|
const responseContext = {
|
|
11510
12554
|
...mergedContext,
|
|
11511
12555
|
__inquiryMeta: inquiryMeta
|
|
11512
12556
|
};
|
|
12557
|
+
if (logicalInquiryId) {
|
|
12558
|
+
this.emit("meta.inquiry_broker.inquiry_completed", {
|
|
12559
|
+
data: {
|
|
12560
|
+
fulfilledAt: formatTimestamp(finishedAt),
|
|
12561
|
+
duration: finishedAt - startedAt,
|
|
12562
|
+
metadata: {
|
|
12563
|
+
...inquiryStartData?.metadata ?? {},
|
|
12564
|
+
inquiryMeta
|
|
12565
|
+
}
|
|
12566
|
+
},
|
|
12567
|
+
filter: {
|
|
12568
|
+
uuid: logicalInquiryId
|
|
12569
|
+
}
|
|
12570
|
+
});
|
|
12571
|
+
}
|
|
11513
12572
|
if (requireComplete && (timedOut || inquiryMeta.failed > 0 || inquiryMeta.timedOut > 0 || inquiryMeta.pending > 0)) {
|
|
11514
12573
|
reject({
|
|
11515
12574
|
...responseContext,
|
|
@@ -11525,7 +12584,7 @@ var CadenzaService = class {
|
|
|
11525
12584
|
}
|
|
11526
12585
|
for (const responder of responders) {
|
|
11527
12586
|
const { task, descriptor } = responder;
|
|
11528
|
-
const
|
|
12587
|
+
const responderInquiryId = uuid6();
|
|
11529
12588
|
startTimeByTask.set(task, Date.now());
|
|
11530
12589
|
const resolverTask = this.createEphemeralMetaTask(
|
|
11531
12590
|
`Resolve inquiry ${inquiry} for ${descriptor.localTaskName}`,
|
|
@@ -11553,11 +12612,12 @@ var CadenzaService = class {
|
|
|
11553
12612
|
},
|
|
11554
12613
|
"Resolves distributed inquiry responder result",
|
|
11555
12614
|
{ register: false }
|
|
11556
|
-
).doOn(`meta.node.graph_completed:${
|
|
12615
|
+
).doOn(`meta.node.graph_completed:${responderInquiryId}`);
|
|
11557
12616
|
resolverTasks.push(resolverTask);
|
|
11558
12617
|
const executionContext = {
|
|
11559
12618
|
...context,
|
|
11560
|
-
|
|
12619
|
+
...logicalInquiryId ? { __inquiryId: logicalInquiryId } : {},
|
|
12620
|
+
__routineExecId: responderInquiryId,
|
|
11561
12621
|
__isInquiry: true
|
|
11562
12622
|
};
|
|
11563
12623
|
if (perResponderTimeoutMs !== void 0) {
|
|
@@ -11719,8 +12779,8 @@ var CadenzaService = class {
|
|
|
11719
12779
|
this.validateName(routineName);
|
|
11720
12780
|
const name = `${routineName} (Proxy)`;
|
|
11721
12781
|
options = {
|
|
11722
|
-
concurrency:
|
|
11723
|
-
timeout:
|
|
12782
|
+
concurrency: DEFAULT_DEPUTY_TASK_CONCURRENCY,
|
|
12783
|
+
timeout: DEFAULT_DEPUTY_TASK_TIMEOUT_MS,
|
|
11724
12784
|
register: true,
|
|
11725
12785
|
isUnique: false,
|
|
11726
12786
|
isMeta: false,
|
|
@@ -11827,8 +12887,8 @@ var CadenzaService = class {
|
|
|
11827
12887
|
return;
|
|
11828
12888
|
}
|
|
11829
12889
|
options = {
|
|
11830
|
-
concurrency:
|
|
11831
|
-
timeout:
|
|
12890
|
+
concurrency: DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY,
|
|
12891
|
+
timeout: DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS,
|
|
11832
12892
|
register: true,
|
|
11833
12893
|
isUnique: false,
|
|
11834
12894
|
isMeta: true,
|
|
@@ -11889,8 +12949,8 @@ var CadenzaService = class {
|
|
|
11889
12949
|
const description = `Executes a ${operation} on table ${tableName} in ${targetDatabaseServiceName}`;
|
|
11890
12950
|
const taskName = `${operation.charAt(0).toUpperCase() + operation.slice(1)} ${tableName}`;
|
|
11891
12951
|
options = {
|
|
11892
|
-
concurrency:
|
|
11893
|
-
timeout:
|
|
12952
|
+
concurrency: DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY,
|
|
12953
|
+
timeout: DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS,
|
|
11894
12954
|
register: true,
|
|
11895
12955
|
isUnique: false,
|
|
11896
12956
|
isMeta: false,
|
|
@@ -12034,8 +13094,10 @@ var CadenzaService = class {
|
|
|
12034
13094
|
this.validateName(serviceName);
|
|
12035
13095
|
this.validateServiceName(serviceName);
|
|
12036
13096
|
const serviceId = options.customServiceId ?? uuid6();
|
|
13097
|
+
this.bootstrapSyncCompleted = false;
|
|
12037
13098
|
this.serviceRegistry.serviceName = serviceName;
|
|
12038
13099
|
this.serviceRegistry.serviceInstanceId = serviceId;
|
|
13100
|
+
this.serviceRegistry.connectsToCadenzaDB = !!options.cadenzaDB?.connect;
|
|
12039
13101
|
this.setHydrationResults(options.hydration);
|
|
12040
13102
|
const explicitFrontendMode = options.isFrontend;
|
|
12041
13103
|
options = {
|
|
@@ -12064,6 +13126,23 @@ var CadenzaService = class {
|
|
|
12064
13126
|
this.serviceRegistry.useSocket = !!options.useSocket;
|
|
12065
13127
|
this.serviceRegistry.retryCount = options.retryCount ?? 3;
|
|
12066
13128
|
this.ensureTransportControllers(isFrontend);
|
|
13129
|
+
if (!isFrontend) {
|
|
13130
|
+
this.createMetaTask(
|
|
13131
|
+
"Initialize graph metadata controller after initial sync",
|
|
13132
|
+
() => {
|
|
13133
|
+
this.markBootstrapSyncCompleted();
|
|
13134
|
+
GraphMetadataController.instance;
|
|
13135
|
+
return true;
|
|
13136
|
+
},
|
|
13137
|
+
"Delays direct graph-metadata registration until the bootstrap sync has completed.",
|
|
13138
|
+
{
|
|
13139
|
+
register: false,
|
|
13140
|
+
isHidden: true
|
|
13141
|
+
}
|
|
13142
|
+
).doOn("meta.service_registry.initial_sync_complete");
|
|
13143
|
+
GraphSyncController.instance.isCadenzaDBReady = serviceName === "CadenzaDB";
|
|
13144
|
+
GraphSyncController.instance.init();
|
|
13145
|
+
}
|
|
12067
13146
|
const resolvedBootstrapEndpoint = options.cadenzaDB?.connect ? resolveBootstrapEndpoint({
|
|
12068
13147
|
runtime: isFrontend ? "browser" : "server",
|
|
12069
13148
|
bootstrap: options.bootstrap,
|
|
@@ -12137,14 +13216,14 @@ var CadenzaService = class {
|
|
|
12137
13216
|
data: {
|
|
12138
13217
|
name: serviceName,
|
|
12139
13218
|
description,
|
|
12140
|
-
|
|
12141
|
-
|
|
13219
|
+
display_name: options.displayName ?? "",
|
|
13220
|
+
is_meta: options.isMeta
|
|
12142
13221
|
},
|
|
12143
13222
|
__registrationData: {
|
|
12144
13223
|
name: serviceName,
|
|
12145
13224
|
description,
|
|
12146
|
-
|
|
12147
|
-
|
|
13225
|
+
display_name: options.displayName ?? "",
|
|
13226
|
+
is_meta: options.isMeta
|
|
12148
13227
|
},
|
|
12149
13228
|
__serviceName: serviceName,
|
|
12150
13229
|
__serviceInstanceId: serviceId,
|
|
@@ -12175,14 +13254,13 @@ var CadenzaService = class {
|
|
|
12175
13254
|
);
|
|
12176
13255
|
}).doOn("meta.rest.handshake", "meta.socket.handshake");
|
|
12177
13256
|
}
|
|
12178
|
-
this.createMetaTask("Handle service setup completion", () => {
|
|
13257
|
+
this.createMetaTask("Handle service setup completion", (ctx, emit) => {
|
|
13258
|
+
if (options.cadenzaDB?.connect) {
|
|
13259
|
+
this.serviceRegistry.bootstrapFullSync(emit, ctx, "service_setup_completed");
|
|
13260
|
+
}
|
|
12179
13261
|
if (isFrontend) {
|
|
12180
13262
|
registerActorSessionPersistenceTasks();
|
|
12181
13263
|
this.ensureFrontendSyncLoop();
|
|
12182
|
-
} else {
|
|
12183
|
-
GraphMetadataController.instance;
|
|
12184
|
-
GraphSyncController.instance.isCadenzaDBReady = serviceName === "CadenzaDB" || !!options.cadenzaDB?.connect;
|
|
12185
|
-
GraphSyncController.instance.init();
|
|
12186
13264
|
}
|
|
12187
13265
|
this.log("Service created.");
|
|
12188
13266
|
return true;
|
|
@@ -12211,7 +13289,15 @@ var CadenzaService = class {
|
|
|
12211
13289
|
is_blocked: false,
|
|
12212
13290
|
health: {}
|
|
12213
13291
|
},
|
|
12214
|
-
__transportData:
|
|
13292
|
+
__transportData: declaredTransports.map((transport) => ({
|
|
13293
|
+
uuid: transport.uuid,
|
|
13294
|
+
service_instance_id: serviceId,
|
|
13295
|
+
role: transport.role,
|
|
13296
|
+
origin: transport.origin,
|
|
13297
|
+
protocols: transport.protocols ?? ["rest", "socket"],
|
|
13298
|
+
...transport.securityProfile ? { security_profile: transport.securityProfile } : {},
|
|
13299
|
+
...transport.authStrategy ? { auth_strategy: transport.authStrategy } : {}
|
|
13300
|
+
})),
|
|
12215
13301
|
__serviceName: serviceName,
|
|
12216
13302
|
__serviceInstanceId: serviceId,
|
|
12217
13303
|
__useSocket: options.useSocket,
|
|
@@ -12328,10 +13414,35 @@ var CadenzaService = class {
|
|
|
12328
13414
|
registration.actorName
|
|
12329
13415
|
);
|
|
12330
13416
|
const createServiceTaskName = `Create database service ${name} after ${registration.actorName} setup`;
|
|
13417
|
+
const traceSetupDoneTaskName = `Trace database service ${name} setup done`;
|
|
13418
|
+
if (POSTGRES_SETUP_DEBUG_ENABLED2 && !this.get(traceSetupDoneTaskName)) {
|
|
13419
|
+
this.createMetaTask(
|
|
13420
|
+
traceSetupDoneTaskName,
|
|
13421
|
+
(ctx) => {
|
|
13422
|
+
console.log("[CADENZA_POSTGRES_SETUP_DEBUG] setup_done_signal_observed", {
|
|
13423
|
+
serviceName: name,
|
|
13424
|
+
actorName: registration.actorName,
|
|
13425
|
+
payloadKeys: Object.keys(ctx ?? {})
|
|
13426
|
+
});
|
|
13427
|
+
return true;
|
|
13428
|
+
},
|
|
13429
|
+
"Debug trace for PostgresActor setup-done signal delivery.",
|
|
13430
|
+
{ isHidden: true, register: false }
|
|
13431
|
+
).doOn(registration.setupDoneSignal);
|
|
13432
|
+
}
|
|
12331
13433
|
if (!this.get(createServiceTaskName)) {
|
|
12332
13434
|
this.createMetaTask(
|
|
12333
13435
|
createServiceTaskName,
|
|
12334
13436
|
() => {
|
|
13437
|
+
if (POSTGRES_SETUP_DEBUG_ENABLED2) {
|
|
13438
|
+
console.log(
|
|
13439
|
+
"[CADENZA_POSTGRES_SETUP_DEBUG] create_database_service_task_fired",
|
|
13440
|
+
{
|
|
13441
|
+
serviceName: name,
|
|
13442
|
+
actorName: registration.actorName
|
|
13443
|
+
}
|
|
13444
|
+
);
|
|
13445
|
+
}
|
|
12335
13446
|
this.createCadenzaService(name, description, serviceOptions);
|
|
12336
13447
|
return true;
|
|
12337
13448
|
},
|
|
@@ -12863,6 +13974,7 @@ var CadenzaService = class {
|
|
|
12863
13974
|
this.serviceRegistry?.reset();
|
|
12864
13975
|
this.isBootstrapped = false;
|
|
12865
13976
|
this.serviceCreated = false;
|
|
13977
|
+
this.bootstrapSyncCompleted = false;
|
|
12866
13978
|
this.defaultDatabaseServiceName = null;
|
|
12867
13979
|
this.warnedInvalidMetaIntentResponderKeys = /* @__PURE__ */ new Set();
|
|
12868
13980
|
this.hydratedInquiryResults = /* @__PURE__ */ new Map();
|
|
@@ -12871,6 +13983,7 @@ var CadenzaService = class {
|
|
|
12871
13983
|
};
|
|
12872
13984
|
CadenzaService.isBootstrapped = false;
|
|
12873
13985
|
CadenzaService.serviceCreated = false;
|
|
13986
|
+
CadenzaService.bootstrapSyncCompleted = false;
|
|
12874
13987
|
CadenzaService.defaultDatabaseServiceName = null;
|
|
12875
13988
|
CadenzaService.warnedInvalidMetaIntentResponderKeys = /* @__PURE__ */ new Set();
|
|
12876
13989
|
CadenzaService.hydratedInquiryResults = /* @__PURE__ */ new Map();
|