@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.js
CHANGED
|
@@ -55,8 +55,46 @@ module.exports = __toCommonJS(index_exports);
|
|
|
55
55
|
var import_core5 = __toESM(require("@cadenza.io/core"));
|
|
56
56
|
|
|
57
57
|
// src/graph/definition/DeputyTask.ts
|
|
58
|
-
var
|
|
58
|
+
var import_uuid2 = require("uuid");
|
|
59
59
|
var import_core = require("@cadenza.io/core");
|
|
60
|
+
|
|
61
|
+
// src/utils/delegation.ts
|
|
62
|
+
var import_uuid = require("uuid");
|
|
63
|
+
var ROOT_METADATA_PASSTHROUGH_KEYS = [
|
|
64
|
+
"__executionTraceId",
|
|
65
|
+
"__inquiryId",
|
|
66
|
+
"__inquirySourceTaskName",
|
|
67
|
+
"__inquirySourceTaskVersion",
|
|
68
|
+
"__inquirySourceTaskExecutionId",
|
|
69
|
+
"__inquirySourceRoutineExecutionId"
|
|
70
|
+
];
|
|
71
|
+
function hoistDelegationMetadataFields(input, metadataInput) {
|
|
72
|
+
const context = input && typeof input === "object" ? { ...input } : {};
|
|
73
|
+
const mutableContext = context;
|
|
74
|
+
const metadata = metadataInput && typeof metadataInput === "object" ? metadataInput : context.__metadata && typeof context.__metadata === "object" ? context.__metadata : {};
|
|
75
|
+
for (const key of ROOT_METADATA_PASSTHROUGH_KEYS) {
|
|
76
|
+
if ((mutableContext[key] === void 0 || mutableContext[key] === null) && metadata[key] !== void 0 && metadata[key] !== null) {
|
|
77
|
+
mutableContext[key] = metadata[key];
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return context;
|
|
81
|
+
}
|
|
82
|
+
function ensureDelegationContextMetadata(input) {
|
|
83
|
+
const rawContext = input && typeof input === "object" ? { ...input } : {};
|
|
84
|
+
const metadata = rawContext.__metadata && typeof rawContext.__metadata === "object" ? { ...rawContext.__metadata } : {};
|
|
85
|
+
const context = hoistDelegationMetadataFields(rawContext, metadata);
|
|
86
|
+
const deputyExecId = typeof metadata.__deputyExecId === "string" && metadata.__deputyExecId.length > 0 ? metadata.__deputyExecId : typeof rawContext.__deputyExecId === "string" && rawContext.__deputyExecId.length > 0 ? context.__deputyExecId : (0, import_uuid.v4)();
|
|
87
|
+
return {
|
|
88
|
+
...context,
|
|
89
|
+
__deputyExecId: deputyExecId,
|
|
90
|
+
__metadata: {
|
|
91
|
+
...metadata,
|
|
92
|
+
__deputyExecId: deputyExecId
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// src/graph/definition/DeputyTask.ts
|
|
60
98
|
var DeputyTask = class extends import_core.Task {
|
|
61
99
|
/**
|
|
62
100
|
* Constructs a new instance of the class with the specified parameters.
|
|
@@ -94,7 +132,7 @@ var DeputyTask = class extends import_core.Task {
|
|
|
94
132
|
resolve(context);
|
|
95
133
|
return;
|
|
96
134
|
}
|
|
97
|
-
const processId = (0,
|
|
135
|
+
const processId = (0, import_uuid2.v4)();
|
|
98
136
|
context.__metadata.__deputyExecId = processId;
|
|
99
137
|
emit("meta.deputy.delegation_requested", {
|
|
100
138
|
...context
|
|
@@ -182,7 +220,7 @@ var DeputyTask = class extends import_core.Task {
|
|
|
182
220
|
execute(context, emit, inquire, progressCallback, nodeData) {
|
|
183
221
|
const ctx = context.getContext();
|
|
184
222
|
const metadata = context.getMetadata();
|
|
185
|
-
const deputyContext = {
|
|
223
|
+
const deputyContext = hoistDelegationMetadataFields({
|
|
186
224
|
__timeout: this.timeout,
|
|
187
225
|
__localTaskName: this.name,
|
|
188
226
|
__localTaskVersion: this.version,
|
|
@@ -199,7 +237,7 @@ var DeputyTask = class extends import_core.Task {
|
|
|
199
237
|
__deputyTaskName: this.name
|
|
200
238
|
},
|
|
201
239
|
...ctx
|
|
202
|
-
};
|
|
240
|
+
});
|
|
203
241
|
return this.taskFunction(deputyContext, emit, inquire, progressCallback);
|
|
204
242
|
}
|
|
205
243
|
};
|
|
@@ -280,7 +318,7 @@ var DatabaseTask = class extends DeputyTask {
|
|
|
280
318
|
},
|
|
281
319
|
...dynamicQueryData
|
|
282
320
|
};
|
|
283
|
-
const deputyContext = {
|
|
321
|
+
const deputyContext = hoistDelegationMetadataFields({
|
|
284
322
|
...ctx,
|
|
285
323
|
__localTaskName: this.name,
|
|
286
324
|
__localTaskVersion: this.version,
|
|
@@ -303,7 +341,7 @@ var DatabaseTask = class extends DeputyTask {
|
|
|
303
341
|
filter: nextQueryData.filter ?? ctx.filter,
|
|
304
342
|
fields: nextQueryData.fields ?? ctx.fields,
|
|
305
343
|
queryData: nextQueryData
|
|
306
|
-
};
|
|
344
|
+
});
|
|
307
345
|
return this.taskFunction(deputyContext, emit, inquire, progressCallback);
|
|
308
346
|
}
|
|
309
347
|
};
|
|
@@ -554,22 +592,6 @@ function getRouteableTransport(instance, role, protocol) {
|
|
|
554
592
|
return selectTransportForRole(instance.transports ?? [], role, protocol);
|
|
555
593
|
}
|
|
556
594
|
|
|
557
|
-
// src/utils/delegation.ts
|
|
558
|
-
var import_uuid2 = require("uuid");
|
|
559
|
-
function ensureDelegationContextMetadata(input) {
|
|
560
|
-
const context = input && typeof input === "object" ? { ...input } : {};
|
|
561
|
-
const metadata = context.__metadata && typeof context.__metadata === "object" ? { ...context.__metadata } : {};
|
|
562
|
-
const deputyExecId = typeof metadata.__deputyExecId === "string" && metadata.__deputyExecId.length > 0 ? metadata.__deputyExecId : typeof context.__deputyExecId === "string" && context.__deputyExecId.length > 0 ? context.__deputyExecId : (0, import_uuid2.v4)();
|
|
563
|
-
return {
|
|
564
|
-
...context,
|
|
565
|
-
__deputyExecId: deputyExecId,
|
|
566
|
-
__metadata: {
|
|
567
|
-
...metadata,
|
|
568
|
-
__deputyExecId: deputyExecId
|
|
569
|
-
}
|
|
570
|
-
};
|
|
571
|
-
}
|
|
572
|
-
|
|
573
595
|
// src/utils/readiness.ts
|
|
574
596
|
function evaluateDependencyReadiness(input) {
|
|
575
597
|
const missedHeartbeats = Math.max(
|
|
@@ -739,6 +761,21 @@ var CADENZA_DB_GATHERED_SYNC_SIGNAL = "global.meta.cadenza_db.gathered_sync_data
|
|
|
739
761
|
var META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL = "meta.service_registry.gathered_sync_transmission_reconcile_requested";
|
|
740
762
|
var META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL = "meta.service_registry.runtime_status.heartbeat_tick";
|
|
741
763
|
var META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL = "meta.service_registry.runtime_status.monitor_tick";
|
|
764
|
+
var EARLY_FULL_SYNC_DELAYS_MS = [
|
|
765
|
+
100,
|
|
766
|
+
1500,
|
|
767
|
+
5e3,
|
|
768
|
+
12e3,
|
|
769
|
+
25e3,
|
|
770
|
+
45e3,
|
|
771
|
+
7e4
|
|
772
|
+
];
|
|
773
|
+
var BOOTSTRAP_FULL_SYNC_RESPONDER_TASKS = [
|
|
774
|
+
"Query service_instance",
|
|
775
|
+
"Query service_instance_transport",
|
|
776
|
+
"Query signal_to_task_map",
|
|
777
|
+
"Query intent_to_task_map"
|
|
778
|
+
];
|
|
742
779
|
var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
|
|
743
780
|
"Track local routine start",
|
|
744
781
|
"Track local routine end",
|
|
@@ -751,6 +788,10 @@ var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
|
|
|
751
788
|
"Collect distributed readiness",
|
|
752
789
|
"Get status"
|
|
753
790
|
]);
|
|
791
|
+
var SERVICE_REGISTRY_TRACE_SERVICE = (process.env.CADENZA_SERVICE_REGISTRY_TRACE_SERVICE ?? "").trim();
|
|
792
|
+
function shouldTraceServiceRegistry(serviceName) {
|
|
793
|
+
return SERVICE_REGISTRY_TRACE_SERVICE.length > 0 && serviceName === SERVICE_REGISTRY_TRACE_SERVICE;
|
|
794
|
+
}
|
|
754
795
|
function buildServiceRegistryInsertQueryData(ctx, queryData) {
|
|
755
796
|
const joinedContexts = Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : [];
|
|
756
797
|
const getJoinedValue = (key) => {
|
|
@@ -824,6 +865,45 @@ function normalizeServiceRegistryInsertResult(tableName, ctx, queryData, rawResu
|
|
|
824
865
|
}
|
|
825
866
|
return result;
|
|
826
867
|
}
|
|
868
|
+
function resolveServiceInstanceRegistrationPayload(ctx, fallbackServiceName, fallbackServiceInstanceId) {
|
|
869
|
+
const candidateSources = [
|
|
870
|
+
ctx.__registrationData,
|
|
871
|
+
ctx.queryData?.data,
|
|
872
|
+
ctx.__resolverQueryData?.data,
|
|
873
|
+
ctx.__resolverOriginalContext?.__registrationData,
|
|
874
|
+
ctx.__resolverOriginalContext?.queryData?.data,
|
|
875
|
+
ctx.data,
|
|
876
|
+
ctx.__resolverOriginalContext?.data
|
|
877
|
+
];
|
|
878
|
+
let resolvedData = null;
|
|
879
|
+
for (const candidate of candidateSources) {
|
|
880
|
+
if (candidate && typeof candidate === "object" && !Array.isArray(candidate)) {
|
|
881
|
+
resolvedData = {
|
|
882
|
+
...candidate
|
|
883
|
+
};
|
|
884
|
+
break;
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
if (!resolvedData) {
|
|
888
|
+
return null;
|
|
889
|
+
}
|
|
890
|
+
const resolvedUuid = String(
|
|
891
|
+
resolvedData.uuid ?? ctx.__serviceInstanceId ?? ctx.__resolverOriginalContext?.__serviceInstanceId ?? fallbackServiceInstanceId ?? ""
|
|
892
|
+
).trim();
|
|
893
|
+
const resolvedServiceName = String(
|
|
894
|
+
resolvedData.service_name ?? ctx.__serviceName ?? ctx.__resolverOriginalContext?.__serviceName ?? fallbackServiceName ?? ""
|
|
895
|
+
).trim();
|
|
896
|
+
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;
|
|
897
|
+
if (!resolvedUuid || !resolvedServiceName || resolvedProcessPid === null) {
|
|
898
|
+
return null;
|
|
899
|
+
}
|
|
900
|
+
return {
|
|
901
|
+
...resolvedData,
|
|
902
|
+
uuid: resolvedUuid,
|
|
903
|
+
service_name: resolvedServiceName,
|
|
904
|
+
process_pid: resolvedProcessPid
|
|
905
|
+
};
|
|
906
|
+
}
|
|
827
907
|
function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {}) {
|
|
828
908
|
const remoteInsertTask = CadenzaService.createCadenzaDBInsertTask(
|
|
829
909
|
tableName,
|
|
@@ -848,13 +928,24 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
848
928
|
});
|
|
849
929
|
delegationContext.__metadata.__skipRemoteExecution = delegationContext.__metadata.__skipRemoteExecution ?? delegationContext.__skipRemoteExecution ?? false;
|
|
850
930
|
delegationContext.__metadata.__blockRemoteExecution = delegationContext.__metadata.__blockRemoteExecution ?? delegationContext.__blockRemoteExecution ?? false;
|
|
851
|
-
|
|
931
|
+
const nextContext = {
|
|
852
932
|
...delegationContext,
|
|
853
933
|
__resolverOriginalContext: {
|
|
854
934
|
...ctx
|
|
855
935
|
},
|
|
856
936
|
__resolverQueryData: nextQueryData
|
|
857
937
|
};
|
|
938
|
+
if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
|
|
939
|
+
console.log("[CADENZA_INSTANCE_DEBUG] prepare_service_registry_insert_execution", {
|
|
940
|
+
tableName,
|
|
941
|
+
signalName,
|
|
942
|
+
resolverRequestId: ctx.__resolverRequestId ?? null,
|
|
943
|
+
hasData: nextQueryData.data !== void 0,
|
|
944
|
+
queryDataKeys: Object.keys(nextQueryData),
|
|
945
|
+
dataKeys: nextQueryData.data && typeof nextQueryData.data === "object" ? Object.keys(nextQueryData.data) : []
|
|
946
|
+
});
|
|
947
|
+
}
|
|
948
|
+
return nextContext;
|
|
858
949
|
},
|
|
859
950
|
`Prepares ${tableName} service-registry insert payloads for runner execution.`,
|
|
860
951
|
{
|
|
@@ -880,6 +971,18 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
880
971
|
ctx.__resolverQueryData ?? ctx.queryData ?? {},
|
|
881
972
|
ctx
|
|
882
973
|
);
|
|
974
|
+
if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
|
|
975
|
+
console.log("[CADENZA_INSTANCE_DEBUG] finalize_service_registry_insert", {
|
|
976
|
+
tableName,
|
|
977
|
+
hasNormalized: !!normalized,
|
|
978
|
+
normalizedKeys: normalized && typeof normalized === "object" ? Object.keys(normalized) : [],
|
|
979
|
+
uuid: normalized && typeof normalized === "object" ? normalized.uuid ?? normalized.data?.uuid ?? normalized.queryData?.data?.uuid ?? null : null,
|
|
980
|
+
serviceName: normalized && typeof normalized === "object" ? normalized.__serviceName ?? normalized.data?.service_name ?? normalized.queryData?.data?.service_name ?? null : null,
|
|
981
|
+
errored: normalized && typeof normalized === "object" ? normalized.errored === true : false,
|
|
982
|
+
error: normalized && typeof normalized === "object" ? normalized.__error ?? null : null,
|
|
983
|
+
inquiryMeta: normalized && typeof normalized === "object" ? normalized.__inquiryMeta ?? null : null
|
|
984
|
+
});
|
|
985
|
+
}
|
|
883
986
|
if (!normalized || typeof normalized !== "object") {
|
|
884
987
|
return normalized;
|
|
885
988
|
}
|
|
@@ -905,6 +1008,16 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
905
1008
|
CadenzaService.createEphemeralMetaTask(
|
|
906
1009
|
`Resolve service registry insert execution for ${tableName} (${resolverRequestId})`,
|
|
907
1010
|
(resultCtx) => {
|
|
1011
|
+
if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
|
|
1012
|
+
console.log("[CADENZA_INSTANCE_DEBUG] resolve_service_registry_insert_signal", {
|
|
1013
|
+
tableName,
|
|
1014
|
+
resolverRequestId,
|
|
1015
|
+
incomingResolverRequestId: resultCtx.__resolverRequestId ?? null,
|
|
1016
|
+
errored: resultCtx.errored === true,
|
|
1017
|
+
error: resultCtx.__error ?? null,
|
|
1018
|
+
keys: resultCtx && typeof resultCtx === "object" ? Object.keys(resultCtx) : []
|
|
1019
|
+
});
|
|
1020
|
+
}
|
|
908
1021
|
if (resultCtx.__resolverRequestId !== resolverRequestId) {
|
|
909
1022
|
return false;
|
|
910
1023
|
}
|
|
@@ -924,6 +1037,18 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
924
1037
|
).doOn(executionResolvedSignal, executionFailedSignal);
|
|
925
1038
|
const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
|
|
926
1039
|
const executionSignal = localInsertTask ? localExecutionRequestedSignal : remoteExecutionRequestedSignal;
|
|
1040
|
+
if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
|
|
1041
|
+
console.log("[CADENZA_INSTANCE_DEBUG] resolve_service_registry_insert", {
|
|
1042
|
+
tableName,
|
|
1043
|
+
executionSignal,
|
|
1044
|
+
hasLocalInsertTask: !!localInsertTask,
|
|
1045
|
+
serviceName: ctx.__serviceName ?? ctx.data?.service_name ?? null,
|
|
1046
|
+
serviceInstanceId: ctx.__serviceInstanceId ?? ctx.data?.uuid ?? null,
|
|
1047
|
+
hasData: !!ctx.data,
|
|
1048
|
+
dataKeys: ctx.data && typeof ctx.data === "object" ? Object.keys(ctx.data) : [],
|
|
1049
|
+
registrationKeys: ctx.__registrationData && typeof ctx.__registrationData === "object" ? Object.keys(ctx.__registrationData) : []
|
|
1050
|
+
});
|
|
1051
|
+
}
|
|
927
1052
|
if (localInsertTask && !wiredLocalTaskNames.has(localInsertTask.name)) {
|
|
928
1053
|
wireExecutionTarget(localInsertTask, prepareLocalExecutionTask);
|
|
929
1054
|
wiredLocalTaskNames.add(localInsertTask.name);
|
|
@@ -1006,6 +1131,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1006
1131
|
this.useSocket = false;
|
|
1007
1132
|
this.retryCount = 3;
|
|
1008
1133
|
this.isFrontend = false;
|
|
1134
|
+
this.connectsToCadenzaDB = false;
|
|
1009
1135
|
CadenzaService.defineIntent({
|
|
1010
1136
|
name: META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT,
|
|
1011
1137
|
description: "Gather transport diagnostics across all services and communication clients.",
|
|
@@ -1364,6 +1490,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1364
1490
|
)?.destroy();
|
|
1365
1491
|
continue;
|
|
1366
1492
|
}
|
|
1493
|
+
if (map.serviceName === this.serviceName) {
|
|
1494
|
+
continue;
|
|
1495
|
+
}
|
|
1367
1496
|
if (locallyEmittedSignals.includes(map.signalName)) {
|
|
1368
1497
|
if (!this.remoteSignals.get(map.serviceName)) {
|
|
1369
1498
|
this.remoteSignals.set(map.serviceName, /* @__PURE__ */ new Set());
|
|
@@ -1380,7 +1509,10 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1380
1509
|
return true;
|
|
1381
1510
|
},
|
|
1382
1511
|
"Handles registration of remote signals"
|
|
1383
|
-
).emits("meta.service_registry.registered_global_signals").doOn(
|
|
1512
|
+
).emits("meta.service_registry.registered_global_signals").doOn(
|
|
1513
|
+
"global.meta.cadenza_db.gathered_sync_data",
|
|
1514
|
+
"global.meta.graph_metadata.task_signal_observed"
|
|
1515
|
+
);
|
|
1384
1516
|
this.reconcileGatheredSyncTransmissionsTask = CadenzaService.createMetaTask(
|
|
1385
1517
|
"Reconcile gathered sync signal transmissions",
|
|
1386
1518
|
(ctx, emit) => this.reconcileGatheredSyncTransmissions(ctx, emit),
|
|
@@ -1394,6 +1526,13 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1394
1526
|
"Handle global intent registration",
|
|
1395
1527
|
(ctx, emit) => {
|
|
1396
1528
|
const intentToTaskMaps = this.normalizeIntentMaps(ctx);
|
|
1529
|
+
if (shouldTraceServiceRegistry(this.serviceName)) {
|
|
1530
|
+
console.log("[CADENZA_SERVICE_REGISTRY_TRACE] handle_global_intents", {
|
|
1531
|
+
localServiceName: this.serviceName,
|
|
1532
|
+
intentCount: intentToTaskMaps.length,
|
|
1533
|
+
sample: intentToTaskMaps.slice(0, 5)
|
|
1534
|
+
});
|
|
1535
|
+
}
|
|
1397
1536
|
const sorted = intentToTaskMaps.sort((a, b) => {
|
|
1398
1537
|
if (a.deleted && !b.deleted) return -1;
|
|
1399
1538
|
if (!a.deleted && b.deleted) return 1;
|
|
@@ -1405,6 +1544,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1405
1544
|
this.unregisterRemoteIntentDeputy(map);
|
|
1406
1545
|
continue;
|
|
1407
1546
|
}
|
|
1547
|
+
if (map.serviceName === this.serviceName) {
|
|
1548
|
+
continue;
|
|
1549
|
+
}
|
|
1408
1550
|
CadenzaService.inquiryBroker.addIntent({
|
|
1409
1551
|
name: map.intentName
|
|
1410
1552
|
});
|
|
@@ -1534,7 +1676,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1534
1676
|
);
|
|
1535
1677
|
this.handleSocketStatusUpdateTask = CadenzaService.createMetaTask(
|
|
1536
1678
|
"Handle Socket Status Update",
|
|
1537
|
-
(ctx) => {
|
|
1679
|
+
(ctx, emit) => {
|
|
1538
1680
|
const report = this.normalizeRuntimeStatusReport(ctx);
|
|
1539
1681
|
if (!report) {
|
|
1540
1682
|
return false;
|
|
@@ -1577,6 +1719,13 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1577
1719
|
if (!applied) {
|
|
1578
1720
|
return false;
|
|
1579
1721
|
}
|
|
1722
|
+
const updatedInstance = this.getInstance(
|
|
1723
|
+
report.serviceName,
|
|
1724
|
+
report.serviceInstanceId
|
|
1725
|
+
);
|
|
1726
|
+
if (updatedInstance && !updatedInstance.isFrontend && (this.deputies.has(report.serviceName) || this.remoteIntents.has(report.serviceName) || this.remoteSignals.has(report.serviceName))) {
|
|
1727
|
+
this.ensureDependeeClientForInstance(updatedInstance, emit, ctx);
|
|
1728
|
+
}
|
|
1580
1729
|
this.registerDependee(report.serviceName, report.serviceInstanceId);
|
|
1581
1730
|
this.lastHeartbeatAtByInstance.set(report.serviceInstanceId, Date.now());
|
|
1582
1731
|
this.missedHeartbeatsByInstance.set(report.serviceInstanceId, 0);
|
|
@@ -1587,9 +1736,28 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1587
1736
|
},
|
|
1588
1737
|
"Handles status update from socket broadcast"
|
|
1589
1738
|
).doOn("meta.socket_client.status_received");
|
|
1739
|
+
CadenzaService.createMetaTask(
|
|
1740
|
+
"Request full sync after CadenzaDB fetch handshake",
|
|
1741
|
+
(ctx) => {
|
|
1742
|
+
const serviceName = typeof ctx.serviceName === "string" ? ctx.serviceName.trim() : typeof ctx.__serviceName === "string" ? ctx.__serviceName.trim() : "";
|
|
1743
|
+
if (serviceName !== "CadenzaDB") {
|
|
1744
|
+
return false;
|
|
1745
|
+
}
|
|
1746
|
+
return this.scheduleEarlyFullSyncRequests("cadenza_db_fetch_handshake");
|
|
1747
|
+
},
|
|
1748
|
+
"Schedules a few early service-registry full-sync retries after the authority fetch transport comes up."
|
|
1749
|
+
).doOn("meta.fetch.handshake_complete");
|
|
1590
1750
|
this.fullSyncTask = CadenzaService.createMetaTask(
|
|
1591
1751
|
"Full sync",
|
|
1592
1752
|
async (ctx) => {
|
|
1753
|
+
if (this.connectsToCadenzaDB && this.serviceName !== "CadenzaDB" && !this.hasBootstrapFullSyncDeputies()) {
|
|
1754
|
+
if (shouldTraceServiceRegistry(this.serviceName)) {
|
|
1755
|
+
console.log("[CADENZA_SERVICE_REGISTRY_TRACE] full_sync_skipped_missing_bootstrap_deputies", {
|
|
1756
|
+
localServiceName: this.serviceName
|
|
1757
|
+
});
|
|
1758
|
+
}
|
|
1759
|
+
return false;
|
|
1760
|
+
}
|
|
1593
1761
|
const inquiryResult = await CadenzaService.inquire(
|
|
1594
1762
|
META_SERVICE_REGISTRY_FULL_SYNC_INTENT,
|
|
1595
1763
|
{
|
|
@@ -1606,6 +1774,15 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1606
1774
|
const serviceInstances = this.normalizeServiceInstancesFromSync(
|
|
1607
1775
|
inquiryResult
|
|
1608
1776
|
);
|
|
1777
|
+
if (shouldTraceServiceRegistry(this.serviceName)) {
|
|
1778
|
+
console.log("[CADENZA_SERVICE_REGISTRY_TRACE] full_sync_result", {
|
|
1779
|
+
localServiceName: this.serviceName,
|
|
1780
|
+
inquiryMeta: inquiryResult.__inquiryMeta,
|
|
1781
|
+
signalToTaskMaps: signalToTaskMaps.length,
|
|
1782
|
+
intentToTaskMaps: intentToTaskMaps.length,
|
|
1783
|
+
serviceInstances: serviceInstances.length
|
|
1784
|
+
});
|
|
1785
|
+
}
|
|
1609
1786
|
return {
|
|
1610
1787
|
...ctx,
|
|
1611
1788
|
signalToTaskMaps,
|
|
@@ -1646,8 +1823,11 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1646
1823
|
);
|
|
1647
1824
|
this.handleDeputyRegistrationTask = CadenzaService.createMetaTask(
|
|
1648
1825
|
"Handle Deputy Registration",
|
|
1649
|
-
(ctx) => {
|
|
1826
|
+
(ctx, emit) => {
|
|
1650
1827
|
const { serviceName } = ctx;
|
|
1828
|
+
if (!serviceName || serviceName === this.serviceName) {
|
|
1829
|
+
return false;
|
|
1830
|
+
}
|
|
1651
1831
|
if (!this.deputies.has(serviceName)) this.deputies.set(serviceName, []);
|
|
1652
1832
|
this.deputies.get(serviceName).push({
|
|
1653
1833
|
serviceName,
|
|
@@ -1656,6 +1836,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1656
1836
|
localTaskName: ctx.localTaskName,
|
|
1657
1837
|
communicationType: ctx.communicationType
|
|
1658
1838
|
});
|
|
1839
|
+
this.ensureDependeeClientsForService(serviceName, emit, ctx);
|
|
1659
1840
|
}
|
|
1660
1841
|
).doOn("meta.deputy.created");
|
|
1661
1842
|
this.getAllInstances = CadenzaService.createMetaTask(
|
|
@@ -2208,9 +2389,29 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2208
2389
|
retryDelayFactor: 1.3
|
|
2209
2390
|
}
|
|
2210
2391
|
).emits("meta.service_registry.service_inserted").emitsOnFail("meta.service_registry.service_insertion_failed");
|
|
2211
|
-
|
|
2392
|
+
const insertServiceInstanceResolverTask = resolveServiceRegistryInsertTask(
|
|
2212
2393
|
"service_instance",
|
|
2213
|
-
{
|
|
2394
|
+
{
|
|
2395
|
+
onConflict: {
|
|
2396
|
+
target: ["uuid"],
|
|
2397
|
+
action: {
|
|
2398
|
+
do: "update",
|
|
2399
|
+
set: {
|
|
2400
|
+
process_pid: "excluded",
|
|
2401
|
+
is_primary: "excluded",
|
|
2402
|
+
service_name: "excluded",
|
|
2403
|
+
is_database: "excluded",
|
|
2404
|
+
is_frontend: "excluded",
|
|
2405
|
+
is_blocked: "excluded",
|
|
2406
|
+
is_non_responsive: "excluded",
|
|
2407
|
+
is_active: "excluded",
|
|
2408
|
+
last_active: "excluded",
|
|
2409
|
+
health: "excluded",
|
|
2410
|
+
deleted: "false"
|
|
2411
|
+
}
|
|
2412
|
+
}
|
|
2413
|
+
}
|
|
2414
|
+
},
|
|
2214
2415
|
{
|
|
2215
2416
|
inputSchema: {
|
|
2216
2417
|
type: "object",
|
|
@@ -2266,7 +2467,8 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2266
2467
|
retryCount: 5,
|
|
2267
2468
|
retryDelay: 1e3
|
|
2268
2469
|
}
|
|
2269
|
-
).
|
|
2470
|
+
).emitsOnFail("meta.service_registry.instance_insertion_failed");
|
|
2471
|
+
this.insertServiceInstanceTask = insertServiceInstanceResolverTask.then(
|
|
2270
2472
|
CadenzaService.createMetaTask(
|
|
2271
2473
|
"Setup service",
|
|
2272
2474
|
(ctx) => {
|
|
@@ -2283,6 +2485,21 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2283
2485
|
transports: ctx.__transportData ?? ctx.transportData ?? []
|
|
2284
2486
|
});
|
|
2285
2487
|
if (!normalizedLocalInstance?.uuid || !normalizedLocalInstance.serviceName) {
|
|
2488
|
+
if (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true") {
|
|
2489
|
+
console.log("[CADENZA_INSTANCE_DEBUG] setup_service_rejected_instance", {
|
|
2490
|
+
hasServiceInstance: !!serviceInstance,
|
|
2491
|
+
hasData: !!data,
|
|
2492
|
+
hasQueryDataData: !!queryData?.data,
|
|
2493
|
+
serviceInstanceKeys: serviceInstance && typeof serviceInstance === "object" ? Object.keys(serviceInstance) : [],
|
|
2494
|
+
dataKeys: data && typeof data === "object" ? Object.keys(data) : [],
|
|
2495
|
+
queryDataDataKeys: queryData?.data && typeof queryData.data === "object" ? Object.keys(queryData.data) : [],
|
|
2496
|
+
normalizedLocalInstance,
|
|
2497
|
+
transportCount: Array.isArray(ctx.__transportData) ? ctx.__transportData.length : Array.isArray(ctx.transportData) ? ctx.transportData.length : 0,
|
|
2498
|
+
errored: ctx.errored === true,
|
|
2499
|
+
error: ctx.__error ?? null,
|
|
2500
|
+
inquiryMeta: ctx.__inquiryMeta ?? null
|
|
2501
|
+
});
|
|
2502
|
+
}
|
|
2286
2503
|
return false;
|
|
2287
2504
|
}
|
|
2288
2505
|
this.serviceInstanceId = normalizedLocalInstance.uuid;
|
|
@@ -2334,11 +2551,65 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2334
2551
|
).attachSignal("meta.service_registry.transport_registration_requested")
|
|
2335
2552
|
)
|
|
2336
2553
|
);
|
|
2554
|
+
CadenzaService.createMetaTask(
|
|
2555
|
+
"Retry local service instance registration after failed insert",
|
|
2556
|
+
(ctx) => {
|
|
2557
|
+
const registrationPayload = resolveServiceInstanceRegistrationPayload(
|
|
2558
|
+
ctx,
|
|
2559
|
+
this.serviceName,
|
|
2560
|
+
this.serviceInstanceId
|
|
2561
|
+
);
|
|
2562
|
+
if (!registrationPayload) {
|
|
2563
|
+
return false;
|
|
2564
|
+
}
|
|
2565
|
+
const serviceName = String(
|
|
2566
|
+
registrationPayload.service_name ?? this.serviceName ?? ""
|
|
2567
|
+
).trim();
|
|
2568
|
+
if (!serviceName || serviceName !== this.serviceName) {
|
|
2569
|
+
return false;
|
|
2570
|
+
}
|
|
2571
|
+
CadenzaService.schedule(
|
|
2572
|
+
"meta.service_registry.instance_registration_requested",
|
|
2573
|
+
{
|
|
2574
|
+
...ctx,
|
|
2575
|
+
data: registrationPayload,
|
|
2576
|
+
__registrationData: registrationPayload,
|
|
2577
|
+
__serviceName: serviceName,
|
|
2578
|
+
__serviceInstanceId: registrationPayload.uuid
|
|
2579
|
+
},
|
|
2580
|
+
5e3
|
|
2581
|
+
);
|
|
2582
|
+
return true;
|
|
2583
|
+
},
|
|
2584
|
+
"Retries local service instance registration only after the previous insert attempt has failed.",
|
|
2585
|
+
{
|
|
2586
|
+
register: false,
|
|
2587
|
+
isHidden: true
|
|
2588
|
+
}
|
|
2589
|
+
).doOn("meta.service_registry.instance_insertion_failed");
|
|
2337
2590
|
CadenzaService.createMetaTask(
|
|
2338
2591
|
"Prepare service instance registration",
|
|
2339
2592
|
(ctx) => {
|
|
2593
|
+
const registrationPayload = resolveServiceInstanceRegistrationPayload(
|
|
2594
|
+
ctx,
|
|
2595
|
+
this.serviceName,
|
|
2596
|
+
this.serviceInstanceId
|
|
2597
|
+
);
|
|
2598
|
+
if (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true") {
|
|
2599
|
+
console.log("[CADENZA_INSTANCE_DEBUG] prepare_service_instance_registration", {
|
|
2600
|
+
serviceName: registrationPayload?.service_name ?? ctx.data?.service_name ?? ctx.__serviceName ?? this.serviceName ?? null,
|
|
2601
|
+
serviceInstanceId: registrationPayload?.uuid ?? ctx.data?.uuid ?? ctx.__serviceInstanceId ?? this.serviceInstanceId ?? null,
|
|
2602
|
+
hasData: !!registrationPayload,
|
|
2603
|
+
dataKeys: registrationPayload && typeof registrationPayload === "object" ? Object.keys(registrationPayload) : [],
|
|
2604
|
+
transportCount: Array.isArray(ctx.__transportData) ? ctx.__transportData.length : Array.isArray(ctx.transportData) ? ctx.transportData.length : 0,
|
|
2605
|
+
skipRemoteExecution: ctx.__skipRemoteExecution === true
|
|
2606
|
+
});
|
|
2607
|
+
}
|
|
2608
|
+
if (!registrationPayload) {
|
|
2609
|
+
return false;
|
|
2610
|
+
}
|
|
2340
2611
|
const serviceName = String(
|
|
2341
|
-
|
|
2612
|
+
registrationPayload.service_name ?? ctx.__serviceName ?? this.serviceName ?? ""
|
|
2342
2613
|
).trim();
|
|
2343
2614
|
if (serviceName === "CadenzaDB" && !CadenzaService.getLocalCadenzaDBInsertTask("service_instance")) {
|
|
2344
2615
|
CadenzaService.schedule(
|
|
@@ -2348,7 +2619,16 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2348
2619
|
);
|
|
2349
2620
|
return false;
|
|
2350
2621
|
}
|
|
2351
|
-
return
|
|
2622
|
+
return {
|
|
2623
|
+
...ctx,
|
|
2624
|
+
data: registrationPayload,
|
|
2625
|
+
__registrationData: {
|
|
2626
|
+
...ctx.__registrationData ?? {},
|
|
2627
|
+
...registrationPayload
|
|
2628
|
+
},
|
|
2629
|
+
__serviceName: serviceName,
|
|
2630
|
+
__serviceInstanceId: registrationPayload.uuid
|
|
2631
|
+
};
|
|
2352
2632
|
},
|
|
2353
2633
|
"Waits for the exact local CadenzaDB service instance insert task during self-bootstrap."
|
|
2354
2634
|
).doOn("meta.service_registry.instance_registration_requested").then(this.insertServiceInstanceTask);
|
|
@@ -2529,21 +2809,40 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2529
2809
|
return [];
|
|
2530
2810
|
}
|
|
2531
2811
|
normalizeSignalMaps(ctx) {
|
|
2532
|
-
|
|
2812
|
+
const arrayPayload = this.readArrayPayload(ctx, [
|
|
2533
2813
|
"signalToTaskMaps",
|
|
2534
2814
|
"signal_to_task_maps",
|
|
2535
2815
|
"signalToTaskMap",
|
|
2536
2816
|
"signal_to_task_map"
|
|
2537
|
-
])
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2817
|
+
]);
|
|
2818
|
+
if (arrayPayload.length > 0) {
|
|
2819
|
+
return arrayPayload.map((map) => ({
|
|
2820
|
+
signalName: String(
|
|
2821
|
+
map.signalName ?? map.signal_name ?? ""
|
|
2822
|
+
).trim(),
|
|
2823
|
+
serviceName: String(
|
|
2824
|
+
map.serviceName ?? map.service_name ?? ""
|
|
2825
|
+
).trim(),
|
|
2826
|
+
isGlobal: Boolean(map.isGlobal ?? map.is_global ?? false),
|
|
2827
|
+
deleted: Boolean(map.deleted)
|
|
2828
|
+
})).filter((map) => map.signalName && map.serviceName);
|
|
2829
|
+
}
|
|
2830
|
+
const single = ctx.signalToTaskMap ?? ctx.signal_to_task_map ?? ctx.data ?? (ctx.signalName ?? ctx.signal_name ? ctx : void 0);
|
|
2831
|
+
if (!single || typeof single !== "object") {
|
|
2832
|
+
return [];
|
|
2833
|
+
}
|
|
2834
|
+
return [
|
|
2835
|
+
{
|
|
2836
|
+
signalName: String(
|
|
2837
|
+
single.signalName ?? single.signal_name ?? ""
|
|
2838
|
+
).trim(),
|
|
2839
|
+
serviceName: String(
|
|
2840
|
+
single.serviceName ?? single.service_name ?? ""
|
|
2841
|
+
).trim(),
|
|
2842
|
+
isGlobal: Boolean(single.isGlobal ?? single.is_global ?? false),
|
|
2843
|
+
deleted: Boolean(single.deleted)
|
|
2844
|
+
}
|
|
2845
|
+
].filter((map) => map.signalName && map.serviceName);
|
|
2547
2846
|
}
|
|
2548
2847
|
normalizeIntentMaps(ctx) {
|
|
2549
2848
|
const arrayPayload = this.readArrayPayload(ctx, [
|
|
@@ -2658,7 +2957,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2658
2957
|
)?.destroy();
|
|
2659
2958
|
this.gatheredSyncTransmissionServices.delete(serviceName);
|
|
2660
2959
|
}
|
|
2661
|
-
if (createdRecipients.length > 0
|
|
2960
|
+
if (createdRecipients.length > 0) {
|
|
2662
2961
|
emit("meta.cadenza_db.sync_tick", {
|
|
2663
2962
|
__syncing: true,
|
|
2664
2963
|
__reason: "gathered_sync_transmissions_reconciled"
|
|
@@ -2704,6 +3003,15 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2704
3003
|
};
|
|
2705
3004
|
this.remoteIntentDeputiesByKey.set(key, descriptor);
|
|
2706
3005
|
this.remoteIntentDeputiesByTask.set(deputyTask, descriptor);
|
|
3006
|
+
if (shouldTraceServiceRegistry(this.serviceName)) {
|
|
3007
|
+
console.log("[CADENZA_SERVICE_REGISTRY_TRACE] register_remote_intent_deputy", {
|
|
3008
|
+
localServiceName: this.serviceName,
|
|
3009
|
+
intentName: map.intentName,
|
|
3010
|
+
remoteServiceName: map.serviceName,
|
|
3011
|
+
remoteTaskName: map.taskName,
|
|
3012
|
+
remoteTaskVersion: map.taskVersion
|
|
3013
|
+
});
|
|
3014
|
+
}
|
|
2707
3015
|
}
|
|
2708
3016
|
unregisterRemoteIntentDeputy(map) {
|
|
2709
3017
|
const key = this.buildRemoteIntentDeputyKey(map);
|
|
@@ -2733,6 +3041,56 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2733
3041
|
}
|
|
2734
3042
|
}
|
|
2735
3043
|
}
|
|
3044
|
+
registerBootstrapFullSyncDeputies(emit, ctx) {
|
|
3045
|
+
if (!this.serviceName || this.serviceName === "CadenzaDB") {
|
|
3046
|
+
return false;
|
|
3047
|
+
}
|
|
3048
|
+
CadenzaService.inquiryBroker.addIntent({
|
|
3049
|
+
name: META_SERVICE_REGISTRY_FULL_SYNC_INTENT
|
|
3050
|
+
});
|
|
3051
|
+
for (const taskName of BOOTSTRAP_FULL_SYNC_RESPONDER_TASKS) {
|
|
3052
|
+
this.registerRemoteIntentDeputy({
|
|
3053
|
+
intentName: META_SERVICE_REGISTRY_FULL_SYNC_INTENT,
|
|
3054
|
+
serviceName: "CadenzaDB",
|
|
3055
|
+
taskName,
|
|
3056
|
+
taskVersion: 1
|
|
3057
|
+
});
|
|
3058
|
+
}
|
|
3059
|
+
this.ensureDependeeClientsForService("CadenzaDB", emit, ctx);
|
|
3060
|
+
return true;
|
|
3061
|
+
}
|
|
3062
|
+
hasBootstrapFullSyncDeputies() {
|
|
3063
|
+
if (!this.serviceName || this.serviceName === "CadenzaDB") {
|
|
3064
|
+
return true;
|
|
3065
|
+
}
|
|
3066
|
+
return BOOTSTRAP_FULL_SYNC_RESPONDER_TASKS.every(
|
|
3067
|
+
(taskName) => this.remoteIntentDeputiesByKey.has(
|
|
3068
|
+
this.buildRemoteIntentDeputyKey({
|
|
3069
|
+
intentName: META_SERVICE_REGISTRY_FULL_SYNC_INTENT,
|
|
3070
|
+
serviceName: "CadenzaDB",
|
|
3071
|
+
taskName,
|
|
3072
|
+
taskVersion: 1
|
|
3073
|
+
})
|
|
3074
|
+
)
|
|
3075
|
+
);
|
|
3076
|
+
}
|
|
3077
|
+
scheduleEarlyFullSyncRequests(reason) {
|
|
3078
|
+
for (const delayMs of EARLY_FULL_SYNC_DELAYS_MS) {
|
|
3079
|
+
CadenzaService.schedule(
|
|
3080
|
+
"meta.sync_requested",
|
|
3081
|
+
{
|
|
3082
|
+
__syncing: false,
|
|
3083
|
+
__reason: reason
|
|
3084
|
+
},
|
|
3085
|
+
delayMs
|
|
3086
|
+
);
|
|
3087
|
+
}
|
|
3088
|
+
return true;
|
|
3089
|
+
}
|
|
3090
|
+
bootstrapFullSync(emit, ctx, reason = "local_instance_inserted") {
|
|
3091
|
+
this.registerBootstrapFullSyncDeputies(emit, ctx);
|
|
3092
|
+
return this.scheduleEarlyFullSyncRequests(reason);
|
|
3093
|
+
}
|
|
2736
3094
|
getInquiryResponderDescriptor(task) {
|
|
2737
3095
|
const remote = this.remoteIntentDeputiesByTask.get(task);
|
|
2738
3096
|
if (remote) {
|
|
@@ -2761,6 +3119,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2761
3119
|
}
|
|
2762
3120
|
return this.getInstance(this.serviceName, this.serviceInstanceId);
|
|
2763
3121
|
}
|
|
3122
|
+
hasLocalInstanceRegistered() {
|
|
3123
|
+
return Boolean(this.getLocalInstance());
|
|
3124
|
+
}
|
|
2764
3125
|
summarizeTransportForDebug(transport) {
|
|
2765
3126
|
if (!transport) {
|
|
2766
3127
|
return void 0;
|
|
@@ -2909,7 +3270,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2909
3270
|
return communicationTypes;
|
|
2910
3271
|
}
|
|
2911
3272
|
ensureDependeeClientForInstance(instance, emit, ctx) {
|
|
2912
|
-
if (!instance || instance.uuid === this.serviceInstanceId || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
|
|
3273
|
+
if (!instance || instance.uuid === this.serviceInstanceId || instance.serviceName === this.serviceName || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
|
|
2913
3274
|
return false;
|
|
2914
3275
|
}
|
|
2915
3276
|
if (!this.deputies.has(instance.serviceName) && !this.remoteIntents.has(instance.serviceName) && !this.remoteSignals.has(instance.serviceName)) {
|
|
@@ -2937,6 +3298,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2937
3298
|
return true;
|
|
2938
3299
|
}
|
|
2939
3300
|
ensureDependeeClientsForService(serviceName, emit, ctx) {
|
|
3301
|
+
if (!serviceName || serviceName === this.serviceName) {
|
|
3302
|
+
return;
|
|
3303
|
+
}
|
|
2940
3304
|
for (const instance of this.instances.get(serviceName) ?? []) {
|
|
2941
3305
|
this.ensureDependeeClientForInstance(instance, emit, ctx);
|
|
2942
3306
|
}
|
|
@@ -3729,7 +4093,7 @@ var SignalTransmissionTask = class extends import_core2.Task {
|
|
|
3729
4093
|
execute(context, emit, inquire, progressCallback) {
|
|
3730
4094
|
const ctx = context.getContext();
|
|
3731
4095
|
const metadata = context.getMetadata();
|
|
3732
|
-
const deputyContext = {
|
|
4096
|
+
const deputyContext = hoistDelegationMetadataFields({
|
|
3733
4097
|
__localTaskName: this.name,
|
|
3734
4098
|
__localServiceName: CadenzaService.serviceRegistry.serviceName,
|
|
3735
4099
|
__serviceName: this.serviceName,
|
|
@@ -3742,7 +4106,7 @@ var SignalTransmissionTask = class extends import_core2.Task {
|
|
|
3742
4106
|
__signalName: this.signalName,
|
|
3743
4107
|
__signalEmissionId: metadata.__signalEmission?.uuid,
|
|
3744
4108
|
...ctx
|
|
3745
|
-
};
|
|
4109
|
+
});
|
|
3746
4110
|
return this.taskFunction(deputyContext, emit, inquire, progressCallback);
|
|
3747
4111
|
}
|
|
3748
4112
|
};
|
|
@@ -3758,6 +4122,7 @@ var import_node_fs = __toESM(require("fs"));
|
|
|
3758
4122
|
var import_node_https = __toESM(require("https"));
|
|
3759
4123
|
var import_node_fetch = __toESM(require("node-fetch"));
|
|
3760
4124
|
var import_uuid5 = require("uuid");
|
|
4125
|
+
var FETCH_HANDSHAKE_TIMEOUT_MS = 5e3;
|
|
3761
4126
|
var RestController = class _RestController {
|
|
3762
4127
|
/**
|
|
3763
4128
|
* Constructor for initializing the REST server and related configurations.
|
|
@@ -3849,7 +4214,15 @@ var RestController = class _RestController {
|
|
|
3849
4214
|
is_blocked: false,
|
|
3850
4215
|
health: {}
|
|
3851
4216
|
},
|
|
3852
|
-
__transportData:
|
|
4217
|
+
__transportData: Array.isArray(ctx.__declaredTransports) ? ctx.__declaredTransports.map((transport) => ({
|
|
4218
|
+
uuid: transport.uuid,
|
|
4219
|
+
service_instance_id: ctx.__serviceInstanceId,
|
|
4220
|
+
role: transport.role,
|
|
4221
|
+
origin: transport.origin,
|
|
4222
|
+
protocols: transport.protocols ?? ["rest", "socket"],
|
|
4223
|
+
...transport.securityProfile ? { security_profile: transport.securityProfile } : {},
|
|
4224
|
+
...transport.authStrategy ? { auth_strategy: transport.authStrategy } : {}
|
|
4225
|
+
})) : []
|
|
3853
4226
|
});
|
|
3854
4227
|
return;
|
|
3855
4228
|
}
|
|
@@ -3932,8 +4305,11 @@ var RestController = class _RestController {
|
|
|
3932
4305
|
const app = ctx.__app;
|
|
3933
4306
|
app.post("/handshake", (req, res) => {
|
|
3934
4307
|
try {
|
|
3935
|
-
|
|
3936
|
-
|
|
4308
|
+
const handshakePayload = req.body && typeof req.body === "object" ? req.body : {};
|
|
4309
|
+
if (Object.keys(handshakePayload).length > 0) {
|
|
4310
|
+
CadenzaService.log("New fetch connection.", handshakePayload);
|
|
4311
|
+
}
|
|
4312
|
+
CadenzaService.emit("meta.rest.handshake", handshakePayload);
|
|
3937
4313
|
res.send({
|
|
3938
4314
|
__status: "success",
|
|
3939
4315
|
__serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId
|
|
@@ -4181,6 +4557,19 @@ var RestController = class _RestController {
|
|
|
4181
4557
|
...ctx.data
|
|
4182
4558
|
};
|
|
4183
4559
|
ctx.__transportData = transportData;
|
|
4560
|
+
if (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true") {
|
|
4561
|
+
console.log("[CADENZA_INSTANCE_DEBUG] configure_network_emit", {
|
|
4562
|
+
serviceName: ctx.__serviceName,
|
|
4563
|
+
serviceInstanceId: ctx.__serviceInstanceId,
|
|
4564
|
+
isDatabase: ctx.__isDatabase === true,
|
|
4565
|
+
transportCount: transportData.length,
|
|
4566
|
+
transports: transportData.map((transport) => ({
|
|
4567
|
+
role: transport.role,
|
|
4568
|
+
origin: transport.origin,
|
|
4569
|
+
protocols: transport.protocols
|
|
4570
|
+
}))
|
|
4571
|
+
});
|
|
4572
|
+
}
|
|
4184
4573
|
delete ctx.__app;
|
|
4185
4574
|
CadenzaService.emit(
|
|
4186
4575
|
"meta.service_registry.instance_registration_requested",
|
|
@@ -4241,6 +4630,7 @@ var RestController = class _RestController {
|
|
|
4241
4630
|
if (!serviceName || !URL2 || !fetchId) {
|
|
4242
4631
|
return false;
|
|
4243
4632
|
}
|
|
4633
|
+
const clientTaskSuffix = `${URL2} (${fetchId})`;
|
|
4244
4634
|
const fetchDiagnostics = this.ensureFetchClientDiagnostics(
|
|
4245
4635
|
fetchId,
|
|
4246
4636
|
serviceName,
|
|
@@ -4248,12 +4638,12 @@ var RestController = class _RestController {
|
|
|
4248
4638
|
);
|
|
4249
4639
|
fetchDiagnostics.destroyed = false;
|
|
4250
4640
|
fetchDiagnostics.updatedAt = Date.now();
|
|
4251
|
-
if (CadenzaService.get(`Send Handshake to ${
|
|
4252
|
-
console.error("Fetch client already exists", URL2);
|
|
4641
|
+
if (CadenzaService.get(`Send Handshake to ${clientTaskSuffix}`)) {
|
|
4642
|
+
console.error("Fetch client already exists", { URL: URL2, fetchId });
|
|
4253
4643
|
return;
|
|
4254
4644
|
}
|
|
4255
4645
|
const handshakeTask = CadenzaService.createMetaTask(
|
|
4256
|
-
`Send Handshake to ${
|
|
4646
|
+
`Send Handshake to ${clientTaskSuffix}`,
|
|
4257
4647
|
async (ctx2, emit) => {
|
|
4258
4648
|
try {
|
|
4259
4649
|
const response = await this.fetchDataWithTimeout(
|
|
@@ -4265,7 +4655,7 @@ var RestController = class _RestController {
|
|
|
4265
4655
|
method: "POST",
|
|
4266
4656
|
body: JSON.stringify(ctx2.handshakeData)
|
|
4267
4657
|
},
|
|
4268
|
-
|
|
4658
|
+
FETCH_HANDSHAKE_TIMEOUT_MS
|
|
4269
4659
|
);
|
|
4270
4660
|
if (response.__status !== "success") {
|
|
4271
4661
|
const error = response.__error ?? `Failed to connect to service ${serviceName} ${ctx2.serviceInstanceId}`;
|
|
@@ -4316,13 +4706,19 @@ var RestController = class _RestController {
|
|
|
4316
4706
|
return ctx2;
|
|
4317
4707
|
},
|
|
4318
4708
|
"Sends handshake request",
|
|
4319
|
-
{
|
|
4709
|
+
{
|
|
4710
|
+
retryCount: 5,
|
|
4711
|
+
retryDelay: 1e3,
|
|
4712
|
+
retryDelayFactor: 1.5,
|
|
4713
|
+
register: false,
|
|
4714
|
+
isHidden: true
|
|
4715
|
+
}
|
|
4320
4716
|
).doOn(`meta.fetch.handshake_requested:${fetchId}`).emits("meta.fetch.handshake_complete").attachSignal(
|
|
4321
4717
|
"meta.fetch.handshake_failed",
|
|
4322
4718
|
"global.meta.fetch.service_communication_established"
|
|
4323
4719
|
);
|
|
4324
4720
|
const delegateTask = CadenzaService.createMetaTask(
|
|
4325
|
-
`Delegate flow to REST server ${
|
|
4721
|
+
`Delegate flow to REST server ${clientTaskSuffix}`,
|
|
4326
4722
|
async (ctx2, emit) => {
|
|
4327
4723
|
if (ctx2.__remoteRoutineName === void 0) {
|
|
4328
4724
|
return;
|
|
@@ -4370,13 +4766,17 @@ var RestController = class _RestController {
|
|
|
4370
4766
|
}
|
|
4371
4767
|
return resultContext;
|
|
4372
4768
|
},
|
|
4373
|
-
"Sends delegation request"
|
|
4769
|
+
"Sends delegation request",
|
|
4770
|
+
{
|
|
4771
|
+
register: false,
|
|
4772
|
+
isHidden: true
|
|
4773
|
+
}
|
|
4374
4774
|
).doOn(
|
|
4375
4775
|
`meta.service_registry.selected_instance_for_fetch:${fetchId}`,
|
|
4376
4776
|
`meta.service_registry.socket_failed:${fetchId}`
|
|
4377
4777
|
).emitsOnFail("meta.fetch.delegate_failed").attachSignal("meta.fetch.delegated");
|
|
4378
4778
|
const transmitTask = CadenzaService.createMetaTask(
|
|
4379
|
-
`Transmit signal to server ${
|
|
4779
|
+
`Transmit signal to server ${clientTaskSuffix}`,
|
|
4380
4780
|
async (ctx2, emit) => {
|
|
4381
4781
|
if (ctx2.__signalName === void 0) {
|
|
4382
4782
|
return;
|
|
@@ -4422,14 +4822,18 @@ var RestController = class _RestController {
|
|
|
4422
4822
|
}
|
|
4423
4823
|
return response;
|
|
4424
4824
|
},
|
|
4425
|
-
"Sends signal request"
|
|
4825
|
+
"Sends signal request",
|
|
4826
|
+
{
|
|
4827
|
+
register: false,
|
|
4828
|
+
isHidden: true
|
|
4829
|
+
}
|
|
4426
4830
|
).doOn(
|
|
4427
4831
|
`meta.service_registry.selected_instance_for_fetch:${fetchId}`,
|
|
4428
4832
|
`meta.signal_controller.remote_signal_registered:${serviceName}`,
|
|
4429
4833
|
"meta.signal_controller.wildcard_signal_registered"
|
|
4430
4834
|
).emitsOnFail("meta.fetch.signal_transmission_failed").attachSignal("meta.fetch.transmitted");
|
|
4431
4835
|
const statusTask = CadenzaService.createMetaTask(
|
|
4432
|
-
`Request status from ${
|
|
4836
|
+
`Request status from ${clientTaskSuffix}`,
|
|
4433
4837
|
async (ctx2) => {
|
|
4434
4838
|
fetchDiagnostics.statusChecks++;
|
|
4435
4839
|
fetchDiagnostics.updatedAt = Date.now();
|
|
@@ -4464,18 +4868,30 @@ var RestController = class _RestController {
|
|
|
4464
4868
|
}
|
|
4465
4869
|
return status;
|
|
4466
4870
|
},
|
|
4467
|
-
"Requests status"
|
|
4871
|
+
"Requests status",
|
|
4872
|
+
{
|
|
4873
|
+
register: false,
|
|
4874
|
+
isHidden: true
|
|
4875
|
+
}
|
|
4468
4876
|
).doOn("meta.fetch.status_check_requested").emits("meta.fetch.status_checked").emitsOnFail("meta.fetch.status_check_failed");
|
|
4469
|
-
CadenzaService.createEphemeralMetaTask(
|
|
4470
|
-
|
|
4471
|
-
|
|
4472
|
-
|
|
4473
|
-
|
|
4474
|
-
|
|
4475
|
-
|
|
4476
|
-
|
|
4477
|
-
|
|
4478
|
-
|
|
4877
|
+
CadenzaService.createEphemeralMetaTask(
|
|
4878
|
+
`Destroy fetch client ${fetchId}`,
|
|
4879
|
+
() => {
|
|
4880
|
+
fetchDiagnostics.connected = false;
|
|
4881
|
+
fetchDiagnostics.destroyed = true;
|
|
4882
|
+
fetchDiagnostics.updatedAt = Date.now();
|
|
4883
|
+
CadenzaService.log("Destroying fetch client", { URL: URL2, serviceName });
|
|
4884
|
+
handshakeTask.destroy();
|
|
4885
|
+
delegateTask.destroy();
|
|
4886
|
+
transmitTask.destroy();
|
|
4887
|
+
statusTask.destroy();
|
|
4888
|
+
},
|
|
4889
|
+
"",
|
|
4890
|
+
{
|
|
4891
|
+
register: false,
|
|
4892
|
+
isHidden: true
|
|
4893
|
+
}
|
|
4894
|
+
).doOn(
|
|
4479
4895
|
`meta.fetch.destroy_requested:${fetchId}`,
|
|
4480
4896
|
`meta.socket_client.disconnected:${fetchId}`,
|
|
4481
4897
|
`meta.fetch.handshake_failed:${fetchId}`
|
|
@@ -5894,7 +6310,11 @@ var SocketController = class _SocketController {
|
|
|
5894
6310
|
}
|
|
5895
6311
|
);
|
|
5896
6312
|
},
|
|
5897
|
-
"Handshakes with socket server"
|
|
6313
|
+
"Handshakes with socket server",
|
|
6314
|
+
{
|
|
6315
|
+
register: false,
|
|
6316
|
+
isHidden: true
|
|
6317
|
+
}
|
|
5898
6318
|
).doOn(`meta.socket_client.connected:${fetchId}`);
|
|
5899
6319
|
runtimeHandle.delegateTask = CadenzaService.createMetaTask(
|
|
5900
6320
|
`Delegate flow to Socket service ${url}`,
|
|
@@ -5972,7 +6392,11 @@ var SocketController = class _SocketController {
|
|
|
5972
6392
|
}
|
|
5973
6393
|
}
|
|
5974
6394
|
},
|
|
5975
|
-
`Delegate flow to service ${serviceName} with address ${url}
|
|
6395
|
+
`Delegate flow to service ${serviceName} with address ${url}`,
|
|
6396
|
+
{
|
|
6397
|
+
register: false,
|
|
6398
|
+
isHidden: true
|
|
6399
|
+
}
|
|
5976
6400
|
).doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`).attachSignal(
|
|
5977
6401
|
"meta.socket_client.delegated",
|
|
5978
6402
|
"meta.socket_shutdown_requested"
|
|
@@ -5996,7 +6420,11 @@ var SocketController = class _SocketController {
|
|
|
5996
6420
|
}
|
|
5997
6421
|
return response;
|
|
5998
6422
|
},
|
|
5999
|
-
`Transmits signal to service ${serviceName} with address ${url}
|
|
6423
|
+
`Transmits signal to service ${serviceName} with address ${url}`,
|
|
6424
|
+
{
|
|
6425
|
+
register: false,
|
|
6426
|
+
isHidden: true
|
|
6427
|
+
}
|
|
6000
6428
|
).doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`).attachSignal("meta.socket_client.transmitted");
|
|
6001
6429
|
CadenzaService.createEphemeralMetaTask(
|
|
6002
6430
|
`Shutdown SocketClient ${url}`,
|
|
@@ -6040,7 +6468,11 @@ var SocketController = class _SocketController {
|
|
|
6040
6468
|
fetchId
|
|
6041
6469
|
});
|
|
6042
6470
|
},
|
|
6043
|
-
"Shuts down the socket client"
|
|
6471
|
+
"Shuts down the socket client",
|
|
6472
|
+
{
|
|
6473
|
+
register: false,
|
|
6474
|
+
isHidden: true
|
|
6475
|
+
}
|
|
6044
6476
|
).doOn(
|
|
6045
6477
|
`meta.socket_shutdown_requested:${fetchId}`,
|
|
6046
6478
|
`meta.socket_client.disconnected:${fetchId}`,
|
|
@@ -6304,10 +6736,18 @@ function decomposeSignalName(signalName) {
|
|
|
6304
6736
|
|
|
6305
6737
|
// src/signals/SignalController.ts
|
|
6306
6738
|
function buildSignalDatabaseTriggerContext(data) {
|
|
6739
|
+
const onConflict = {
|
|
6740
|
+
target: ["name"],
|
|
6741
|
+
action: {
|
|
6742
|
+
do: "nothing"
|
|
6743
|
+
}
|
|
6744
|
+
};
|
|
6307
6745
|
return {
|
|
6308
6746
|
data: { ...data },
|
|
6747
|
+
onConflict,
|
|
6309
6748
|
queryData: {
|
|
6310
|
-
data: { ...data }
|
|
6749
|
+
data: { ...data },
|
|
6750
|
+
onConflict
|
|
6311
6751
|
}
|
|
6312
6752
|
};
|
|
6313
6753
|
}
|
|
@@ -6334,16 +6774,28 @@ var SignalController = class _SignalController {
|
|
|
6334
6774
|
CadenzaService.createMetaTask(
|
|
6335
6775
|
"Handle Signal Registration",
|
|
6336
6776
|
(ctx, emit) => {
|
|
6777
|
+
if (!CadenzaService.hasCompletedBootstrapSync()) {
|
|
6778
|
+
return false;
|
|
6779
|
+
}
|
|
6337
6780
|
const { signalName } = ctx;
|
|
6781
|
+
const signalObserver = CadenzaService.signalBroker.signalObservers?.get(
|
|
6782
|
+
signalName
|
|
6783
|
+
);
|
|
6784
|
+
if (signalObserver?.registered || signalObserver?.registrationRequested) {
|
|
6785
|
+
return false;
|
|
6786
|
+
}
|
|
6787
|
+
if (signalObserver) {
|
|
6788
|
+
signalObserver.registrationRequested = true;
|
|
6789
|
+
}
|
|
6338
6790
|
const { isMeta, isGlobal, domain, action } = decomposeSignalName(signalName);
|
|
6339
6791
|
emit(
|
|
6340
6792
|
"global.meta.signal_controller.signal_added",
|
|
6341
6793
|
buildSignalDatabaseTriggerContext({
|
|
6342
6794
|
name: signalName,
|
|
6343
|
-
isGlobal,
|
|
6795
|
+
is_global: isGlobal,
|
|
6344
6796
|
domain,
|
|
6345
6797
|
action,
|
|
6346
|
-
isMeta
|
|
6798
|
+
is_meta: isMeta
|
|
6347
6799
|
})
|
|
6348
6800
|
);
|
|
6349
6801
|
return ctx;
|
|
@@ -6352,12 +6804,35 @@ var SignalController = class _SignalController {
|
|
|
6352
6804
|
).doOn("meta.signal_broker.added").attachSignal("global.meta.signal_controller.signal_added");
|
|
6353
6805
|
CadenzaService.createMetaTask(
|
|
6354
6806
|
"Add data to signal emission",
|
|
6355
|
-
(ctx) => {
|
|
6807
|
+
(ctx, emit) => {
|
|
6356
6808
|
const signalEmission = ctx.__signalEmission;
|
|
6357
6809
|
delete ctx.__signalEmission;
|
|
6358
6810
|
if (!signalEmission) {
|
|
6359
6811
|
return false;
|
|
6360
6812
|
}
|
|
6813
|
+
if (typeof signalEmission.signalName === "string" && signalEmission.signalName.trim().length > 0 && !CadenzaService.signalBroker.signalObservers?.has(signalEmission.signalName)) {
|
|
6814
|
+
CadenzaService.signalBroker.addSignal(signalEmission.signalName);
|
|
6815
|
+
} else {
|
|
6816
|
+
const signalObserver = CadenzaService.signalBroker.signalObservers?.get(
|
|
6817
|
+
signalEmission.signalName
|
|
6818
|
+
);
|
|
6819
|
+
if (signalObserver && signalObserver.registered !== true && signalObserver.registrationRequested !== true && CadenzaService.hasCompletedBootstrapSync()) {
|
|
6820
|
+
signalObserver.registrationRequested = true;
|
|
6821
|
+
const { isMeta, isGlobal, domain, action } = decomposeSignalName(
|
|
6822
|
+
signalEmission.signalName
|
|
6823
|
+
);
|
|
6824
|
+
emit(
|
|
6825
|
+
"global.meta.signal_controller.signal_added",
|
|
6826
|
+
buildSignalDatabaseTriggerContext({
|
|
6827
|
+
name: signalEmission.signalName,
|
|
6828
|
+
is_global: isGlobal,
|
|
6829
|
+
domain,
|
|
6830
|
+
action,
|
|
6831
|
+
is_meta: isMeta
|
|
6832
|
+
})
|
|
6833
|
+
);
|
|
6834
|
+
}
|
|
6835
|
+
}
|
|
6361
6836
|
return {
|
|
6362
6837
|
data: {
|
|
6363
6838
|
uuid: signalEmission.uuid,
|
|
@@ -6712,10 +7187,10 @@ function registerActorSessionPersistenceTasks() {
|
|
|
6712
7187
|
}
|
|
6713
7188
|
|
|
6714
7189
|
// src/graph/controllers/GraphMetadataController.ts
|
|
6715
|
-
function buildDatabaseTriggerContext(data, filter, extra = {}) {
|
|
7190
|
+
function buildDatabaseTriggerContext(data, filter, extra = {}, queryExtra = {}) {
|
|
6716
7191
|
const nextData = data && typeof data === "object" ? { ...data } : void 0;
|
|
6717
7192
|
const nextFilter = filter && typeof filter === "object" ? { ...filter } : void 0;
|
|
6718
|
-
const queryData = {};
|
|
7193
|
+
const queryData = { ...queryExtra };
|
|
6719
7194
|
if (nextData !== void 0) {
|
|
6720
7195
|
queryData.data = nextData;
|
|
6721
7196
|
}
|
|
@@ -6729,19 +7204,108 @@ function buildDatabaseTriggerContext(data, filter, extra = {}) {
|
|
|
6729
7204
|
...Object.keys(queryData).length > 0 ? { queryData } : {}
|
|
6730
7205
|
};
|
|
6731
7206
|
}
|
|
7207
|
+
function resolveTaskFromMetadataContext(ctx) {
|
|
7208
|
+
const taskName = String(
|
|
7209
|
+
ctx?.taskName ?? ctx?.data?.taskName ?? ctx?.data?.task_name ?? ctx?.filter?.taskName ?? ctx?.filter?.task_name ?? ""
|
|
7210
|
+
);
|
|
7211
|
+
return taskName ? CadenzaService.get(taskName) : void 0;
|
|
7212
|
+
}
|
|
7213
|
+
function resolveTaskByName(name) {
|
|
7214
|
+
const taskName = String(name ?? "");
|
|
7215
|
+
return taskName ? CadenzaService.get(taskName) : void 0;
|
|
7216
|
+
}
|
|
7217
|
+
function resolvePredecessorTaskFromMetadataContext(ctx) {
|
|
7218
|
+
return resolveTaskByName(
|
|
7219
|
+
ctx?.predecessorTaskName ?? ctx?.data?.predecessorTaskName ?? ctx?.data?.predecessor_task_name ?? ctx?.filter?.predecessorTaskName ?? ctx?.filter?.predecessor_task_name
|
|
7220
|
+
);
|
|
7221
|
+
}
|
|
7222
|
+
function shouldSkipDirectTaskMetadata(task) {
|
|
7223
|
+
return !task || !task.register || task.isHidden || task.isDeputy;
|
|
7224
|
+
}
|
|
7225
|
+
function shouldPersistBusinessTaskExecution(task) {
|
|
7226
|
+
return !!task && task.register && !task.isHidden && !task.isMeta && !task.isSubMeta && !task.isDeputy;
|
|
7227
|
+
}
|
|
7228
|
+
function shouldEmitDirectPrimitiveMetadata() {
|
|
7229
|
+
return CadenzaService.hasCompletedBootstrapSync();
|
|
7230
|
+
}
|
|
7231
|
+
function shouldPersistBusinessInquiry(ctx) {
|
|
7232
|
+
const inquiryName = String(
|
|
7233
|
+
ctx?.data?.name ?? ctx?.inquiry ?? ctx?.data?.metadata?.inquiryMeta?.inquiry ?? ""
|
|
7234
|
+
);
|
|
7235
|
+
if (!inquiryName) {
|
|
7236
|
+
return false;
|
|
7237
|
+
}
|
|
7238
|
+
return !isMetaIntentName(inquiryName) && ctx?.data?.isMeta !== true && ctx?.data?.is_meta !== true;
|
|
7239
|
+
}
|
|
7240
|
+
function shouldPersistRoutineExecution(ctx) {
|
|
7241
|
+
if (ctx?.data?.isMeta === true || ctx?.data?.is_meta === true) {
|
|
7242
|
+
return false;
|
|
7243
|
+
}
|
|
7244
|
+
const routineTask = resolveTaskByName(ctx?.data?.name);
|
|
7245
|
+
if (routineTask) {
|
|
7246
|
+
return shouldPersistBusinessTaskExecution(routineTask);
|
|
7247
|
+
}
|
|
7248
|
+
return true;
|
|
7249
|
+
}
|
|
7250
|
+
function shouldPersistTaskExecutionMetadata(ctx) {
|
|
7251
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7252
|
+
return shouldPersistBusinessTaskExecution(task);
|
|
7253
|
+
}
|
|
7254
|
+
function shouldPersistTaskExecutionMap(ctx) {
|
|
7255
|
+
return shouldPersistBusinessTaskExecution(resolveTaskFromMetadataContext(ctx)) && shouldPersistBusinessTaskExecution(resolvePredecessorTaskFromMetadataContext(ctx));
|
|
7256
|
+
}
|
|
7257
|
+
function hasInquiryLink(data) {
|
|
7258
|
+
const metaContext = data?.metaContext ?? data?.meta_context;
|
|
7259
|
+
const directInquiryId = metaContext?.__inquiryId ?? metaContext?.__metadata?.__inquiryId;
|
|
7260
|
+
return typeof directInquiryId === "string" && directInquiryId.length > 0;
|
|
7261
|
+
}
|
|
6732
7262
|
var GraphMetadataController = class _GraphMetadataController {
|
|
6733
7263
|
static get instance() {
|
|
6734
7264
|
if (!this._instance) this._instance = new _GraphMetadataController();
|
|
6735
7265
|
return this._instance;
|
|
6736
7266
|
}
|
|
6737
7267
|
constructor() {
|
|
6738
|
-
|
|
6739
|
-
|
|
6740
|
-
|
|
6741
|
-
|
|
6742
|
-
}
|
|
7268
|
+
const buildOnConflictDoNothing = (target) => ({
|
|
7269
|
+
target,
|
|
7270
|
+
action: {
|
|
7271
|
+
do: "nothing"
|
|
7272
|
+
}
|
|
7273
|
+
});
|
|
7274
|
+
CadenzaService.createMetaTask("Handle task creation", (ctx) => {
|
|
7275
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7276
|
+
return false;
|
|
7277
|
+
}
|
|
7278
|
+
const taskName = String(ctx.data?.name ?? ctx.data?.taskName ?? "");
|
|
7279
|
+
const task = taskName ? CadenzaService.get(taskName) : void 0;
|
|
7280
|
+
const onConflict = buildOnConflictDoNothing([
|
|
7281
|
+
"name",
|
|
7282
|
+
"service_name",
|
|
7283
|
+
"version"
|
|
7284
|
+
]);
|
|
7285
|
+
if (shouldSkipDirectTaskMetadata(task) || task?.registered || task?.registrationRequested) {
|
|
7286
|
+
return false;
|
|
7287
|
+
}
|
|
7288
|
+
if (task) {
|
|
7289
|
+
task.registrationRequested = true;
|
|
7290
|
+
}
|
|
7291
|
+
return buildDatabaseTriggerContext(
|
|
7292
|
+
{
|
|
7293
|
+
...ctx.data,
|
|
7294
|
+
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
7295
|
+
},
|
|
7296
|
+
void 0,
|
|
7297
|
+
{ onConflict },
|
|
7298
|
+
{ onConflict }
|
|
7299
|
+
);
|
|
6743
7300
|
}).doOn("meta.task.created").emits("global.meta.graph_metadata.task_created");
|
|
6744
7301
|
CadenzaService.createMetaTask("Handle task update", (ctx) => {
|
|
7302
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7303
|
+
return false;
|
|
7304
|
+
}
|
|
7305
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7306
|
+
if (shouldSkipDirectTaskMetadata(task)) {
|
|
7307
|
+
return false;
|
|
7308
|
+
}
|
|
6745
7309
|
return buildDatabaseTriggerContext(
|
|
6746
7310
|
ctx.data ?? void 0,
|
|
6747
7311
|
{
|
|
@@ -6751,11 +7315,14 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6751
7315
|
);
|
|
6752
7316
|
}).doOn("meta.task.layer_index_changed", "meta.task.destroyed").emits("global.meta.graph_metadata.task_updated");
|
|
6753
7317
|
CadenzaService.createMetaTask("Handle task relationship creation", (ctx) => {
|
|
7318
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7319
|
+
return false;
|
|
7320
|
+
}
|
|
6754
7321
|
const taskName = ctx.data?.taskName ?? ctx.data?.task_name;
|
|
6755
7322
|
const predecessorTaskName = ctx.data?.predecessorTaskName ?? ctx.data?.predecessor_task_name;
|
|
6756
7323
|
const task = taskName ? CadenzaService.get(taskName) : void 0;
|
|
6757
7324
|
const predecessorTask = predecessorTaskName ? CadenzaService.get(predecessorTaskName) : void 0;
|
|
6758
|
-
if (!task?.registered || !predecessorTask?.registered) {
|
|
7325
|
+
if (shouldSkipDirectTaskMetadata(task) || shouldSkipDirectTaskMetadata(predecessorTask) || !task?.registered || !predecessorTask?.registered) {
|
|
6759
7326
|
return false;
|
|
6760
7327
|
}
|
|
6761
7328
|
return buildDatabaseTriggerContext({
|
|
@@ -6768,14 +7335,35 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6768
7335
|
CadenzaService.log(`Error in task ${ctx.data.taskName}`, ctx.data, "error");
|
|
6769
7336
|
}).doOn("meta.node.errored");
|
|
6770
7337
|
CadenzaService.createMetaTask("Handle task signal observation", (ctx) => {
|
|
6771
|
-
|
|
7338
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7339
|
+
return false;
|
|
7340
|
+
}
|
|
7341
|
+
const signalName = String(
|
|
7342
|
+
ctx.signalName ?? ctx.data?.signalName ?? ""
|
|
7343
|
+
).split(":")[0];
|
|
7344
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7345
|
+
if (shouldSkipDirectTaskMetadata(task)) {
|
|
7346
|
+
return false;
|
|
7347
|
+
}
|
|
7348
|
+
if (task?.registered && task.registeredSignals.has(signalName)) {
|
|
7349
|
+
return false;
|
|
7350
|
+
}
|
|
7351
|
+
const isGlobal = signalName.startsWith("global.");
|
|
6772
7352
|
return buildDatabaseTriggerContext({
|
|
6773
7353
|
...ctx.data,
|
|
7354
|
+
signalName,
|
|
6774
7355
|
isGlobal,
|
|
6775
7356
|
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
6776
7357
|
});
|
|
6777
7358
|
}).doOn("meta.task.observed_signal").emits("global.meta.graph_metadata.task_signal_observed");
|
|
6778
7359
|
CadenzaService.createMetaTask("Handle task signal attachment", (ctx) => {
|
|
7360
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7361
|
+
return false;
|
|
7362
|
+
}
|
|
7363
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7364
|
+
if (shouldSkipDirectTaskMetadata(task)) {
|
|
7365
|
+
return false;
|
|
7366
|
+
}
|
|
6779
7367
|
return buildDatabaseTriggerContext(
|
|
6780
7368
|
ctx.data ?? void 0,
|
|
6781
7369
|
{
|
|
@@ -6784,7 +7372,34 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6784
7372
|
}
|
|
6785
7373
|
);
|
|
6786
7374
|
}).doOn("meta.task.attached_signal").emits("global.meta.graph_metadata.task_attached_signal");
|
|
7375
|
+
CadenzaService.createMetaTask("Handle task intent association", (ctx) => {
|
|
7376
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7377
|
+
return false;
|
|
7378
|
+
}
|
|
7379
|
+
const intentName = String(ctx.data?.intentName ?? "");
|
|
7380
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7381
|
+
if (shouldSkipDirectTaskMetadata(task)) {
|
|
7382
|
+
return false;
|
|
7383
|
+
}
|
|
7384
|
+
if (task?.registered && task.__registeredIntents?.has(
|
|
7385
|
+
intentName
|
|
7386
|
+
)) {
|
|
7387
|
+
return false;
|
|
7388
|
+
}
|
|
7389
|
+
return buildDatabaseTriggerContext({
|
|
7390
|
+
...ctx.data,
|
|
7391
|
+
intentName,
|
|
7392
|
+
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
7393
|
+
});
|
|
7394
|
+
}).doOn("meta.task.intent_associated").emits("global.meta.graph_metadata.task_intent_associated");
|
|
6787
7395
|
CadenzaService.createMetaTask("Handle task unsubscribing signal", (ctx) => {
|
|
7396
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7397
|
+
return false;
|
|
7398
|
+
}
|
|
7399
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7400
|
+
if (shouldSkipDirectTaskMetadata(task)) {
|
|
7401
|
+
return false;
|
|
7402
|
+
}
|
|
6788
7403
|
return buildDatabaseTriggerContext(
|
|
6789
7404
|
{
|
|
6790
7405
|
deleted: true
|
|
@@ -6796,6 +7411,13 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6796
7411
|
);
|
|
6797
7412
|
}).doOn("meta.task.unsubscribed_signal").emits("meta.graph_metadata.task_unsubscribed_signal");
|
|
6798
7413
|
CadenzaService.createMetaTask("Handle task detaching signal", (ctx) => {
|
|
7414
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7415
|
+
return false;
|
|
7416
|
+
}
|
|
7417
|
+
const task = resolveTaskFromMetadataContext(ctx);
|
|
7418
|
+
if (shouldSkipDirectTaskMetadata(task)) {
|
|
7419
|
+
return false;
|
|
7420
|
+
}
|
|
6799
7421
|
return buildDatabaseTriggerContext(
|
|
6800
7422
|
{
|
|
6801
7423
|
deleted: true
|
|
@@ -6807,12 +7429,18 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6807
7429
|
);
|
|
6808
7430
|
}).doOn("meta.task.detached_signal").emits("global.meta.graph_metadata.task_detached_signal");
|
|
6809
7431
|
CadenzaService.createMetaTask("Handle routine creation", (ctx) => {
|
|
7432
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7433
|
+
return false;
|
|
7434
|
+
}
|
|
6810
7435
|
return buildDatabaseTriggerContext({
|
|
6811
7436
|
...ctx.data,
|
|
6812
7437
|
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
6813
7438
|
});
|
|
6814
7439
|
}).doAfter(CadenzaService.registry.registerRoutine).emits("global.meta.graph_metadata.routine_created");
|
|
6815
7440
|
CadenzaService.createMetaTask("Handle routine update", (ctx) => {
|
|
7441
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7442
|
+
return false;
|
|
7443
|
+
}
|
|
6816
7444
|
return buildDatabaseTriggerContext(
|
|
6817
7445
|
ctx.data ?? void 0,
|
|
6818
7446
|
{
|
|
@@ -6822,6 +7450,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6822
7450
|
);
|
|
6823
7451
|
}).doOn("meta.routine.destroyed").emits("global.meta.graph_metadata.routine_updated");
|
|
6824
7452
|
CadenzaService.createMetaTask("Handle adding task to routine", (ctx) => {
|
|
7453
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7454
|
+
return false;
|
|
7455
|
+
}
|
|
6825
7456
|
return buildDatabaseTriggerContext({
|
|
6826
7457
|
...ctx.data,
|
|
6827
7458
|
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
@@ -6837,8 +7468,12 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6837
7468
|
CadenzaService.createMetaTask(
|
|
6838
7469
|
"Handle routine execution creation",
|
|
6839
7470
|
(ctx) => {
|
|
7471
|
+
if (!shouldPersistRoutineExecution(ctx)) {
|
|
7472
|
+
return false;
|
|
7473
|
+
}
|
|
6840
7474
|
return buildDatabaseTriggerContext({
|
|
6841
7475
|
...ctx.data,
|
|
7476
|
+
previousRoutineExecution: hasInquiryLink(ctx.data) ? null : ctx.data?.previousRoutineExecution ?? ctx.data?.previous_routine_execution ?? null,
|
|
6842
7477
|
serviceName: CadenzaService.serviceRegistry.serviceName,
|
|
6843
7478
|
serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId
|
|
6844
7479
|
});
|
|
@@ -6875,6 +7510,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6875
7510
|
CadenzaService.createMetaTask(
|
|
6876
7511
|
"Handle task execution creation",
|
|
6877
7512
|
(ctx) => {
|
|
7513
|
+
if (!shouldPersistTaskExecutionMetadata(ctx)) {
|
|
7514
|
+
return false;
|
|
7515
|
+
}
|
|
6878
7516
|
return buildDatabaseTriggerContext({
|
|
6879
7517
|
...ctx.data,
|
|
6880
7518
|
serviceName: CadenzaService.serviceRegistry.serviceName,
|
|
@@ -6887,6 +7525,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6887
7525
|
CadenzaService.createMetaTask(
|
|
6888
7526
|
"Handle task execution mapped",
|
|
6889
7527
|
(ctx) => {
|
|
7528
|
+
if (!shouldPersistTaskExecutionMap(ctx)) {
|
|
7529
|
+
return false;
|
|
7530
|
+
}
|
|
6890
7531
|
return buildDatabaseTriggerContext(
|
|
6891
7532
|
ctx.data ?? void 0,
|
|
6892
7533
|
ctx.filter ?? void 0
|
|
@@ -6898,6 +7539,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6898
7539
|
CadenzaService.createMetaTask(
|
|
6899
7540
|
"Handle task execution started",
|
|
6900
7541
|
(ctx) => {
|
|
7542
|
+
if (!shouldPersistTaskExecutionMetadata(ctx)) {
|
|
7543
|
+
return false;
|
|
7544
|
+
}
|
|
6901
7545
|
return buildDatabaseTriggerContext(
|
|
6902
7546
|
ctx.data ?? void 0,
|
|
6903
7547
|
ctx.filter ?? void 0
|
|
@@ -6909,6 +7553,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6909
7553
|
CadenzaService.createMetaTask(
|
|
6910
7554
|
"Handle task execution ended",
|
|
6911
7555
|
(ctx) => {
|
|
7556
|
+
if (!shouldPersistTaskExecutionMetadata(ctx)) {
|
|
7557
|
+
return false;
|
|
7558
|
+
}
|
|
6912
7559
|
return buildDatabaseTriggerContext(
|
|
6913
7560
|
{
|
|
6914
7561
|
...ctx.data,
|
|
@@ -6921,9 +7568,39 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6921
7568
|
"Handles task execution ended",
|
|
6922
7569
|
{ concurrency: 100, isSubMeta: true }
|
|
6923
7570
|
).doOn("meta.node.ended").emits("global.meta.graph_metadata.task_execution_ended");
|
|
7571
|
+
CadenzaService.createMetaTask(
|
|
7572
|
+
"Handle inquiry creation",
|
|
7573
|
+
(ctx) => {
|
|
7574
|
+
if (!shouldPersistBusinessInquiry(ctx)) {
|
|
7575
|
+
return false;
|
|
7576
|
+
}
|
|
7577
|
+
return buildDatabaseTriggerContext({
|
|
7578
|
+
...ctx.data,
|
|
7579
|
+
serviceName: CadenzaService.serviceRegistry.serviceName,
|
|
7580
|
+
serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
7581
|
+
isMeta: false
|
|
7582
|
+
});
|
|
7583
|
+
},
|
|
7584
|
+
"Handles inquiry creation",
|
|
7585
|
+
{ concurrency: 100, isSubMeta: true }
|
|
7586
|
+
).doOn("meta.inquiry_broker.inquiry_started").emits("global.meta.graph_metadata.inquiry_created");
|
|
7587
|
+
CadenzaService.createMetaTask(
|
|
7588
|
+
"Handle inquiry update",
|
|
7589
|
+
(ctx) => {
|
|
7590
|
+
return buildDatabaseTriggerContext(
|
|
7591
|
+
ctx.data ?? void 0,
|
|
7592
|
+
ctx.filter ?? void 0
|
|
7593
|
+
);
|
|
7594
|
+
},
|
|
7595
|
+
"Handles inquiry completion updates",
|
|
7596
|
+
{ concurrency: 100, isSubMeta: true }
|
|
7597
|
+
).doOn("meta.inquiry_broker.inquiry_completed").emits("global.meta.graph_metadata.inquiry_updated");
|
|
6924
7598
|
CadenzaService.createMetaTask(
|
|
6925
7599
|
"Handle task execution relationship creation",
|
|
6926
7600
|
(ctx) => {
|
|
7601
|
+
if (!shouldPersistTaskExecutionMap(ctx)) {
|
|
7602
|
+
return false;
|
|
7603
|
+
}
|
|
6927
7604
|
return buildDatabaseTriggerContext(
|
|
6928
7605
|
{
|
|
6929
7606
|
executionCount: "increment",
|
|
@@ -6939,12 +7616,18 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6939
7616
|
{ concurrency: 100, isSubMeta: true }
|
|
6940
7617
|
).doOn("meta.node.mapped", "meta.node.detected_previous_task_execution").emits("global.meta.graph_metadata.relationship_executed");
|
|
6941
7618
|
CadenzaService.createMetaTask("Handle actor creation", (ctx) => {
|
|
7619
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7620
|
+
return false;
|
|
7621
|
+
}
|
|
6942
7622
|
return buildDatabaseTriggerContext({
|
|
6943
7623
|
...ctx.data,
|
|
6944
7624
|
service_name: CadenzaService.serviceRegistry.serviceName
|
|
6945
7625
|
});
|
|
6946
7626
|
}).doOn("meta.actor.created").emits("global.meta.graph_metadata.actor_created");
|
|
6947
7627
|
CadenzaService.createMetaTask("Handle actor task association", (ctx) => {
|
|
7628
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7629
|
+
return false;
|
|
7630
|
+
}
|
|
6948
7631
|
return buildDatabaseTriggerContext({
|
|
6949
7632
|
...ctx.data,
|
|
6950
7633
|
service_name: CadenzaService.serviceRegistry.serviceName
|
|
@@ -6952,6 +7635,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6952
7635
|
}).doOn("meta.actor.task_associated").emits("global.meta.graph_metadata.actor_task_associated");
|
|
6953
7636
|
registerActorSessionPersistenceTasks();
|
|
6954
7637
|
CadenzaService.createMetaTask("Handle Intent Creation", (ctx) => {
|
|
7638
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7639
|
+
return false;
|
|
7640
|
+
}
|
|
6955
7641
|
const intentName = ctx.data?.name;
|
|
6956
7642
|
return buildDatabaseTriggerContext({
|
|
6957
7643
|
...ctx.data,
|
|
@@ -7001,6 +7687,10 @@ var AUTHORITY_SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
|
|
|
7001
7687
|
"Prepare for signal sync"
|
|
7002
7688
|
]);
|
|
7003
7689
|
var AUTHORITY_SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
|
|
7690
|
+
var INTENT_MAP_DEBUG_ENABLED = process.env.CADENZA_INTENT_MAP_DEBUG === "1" || process.env.CADENZA_INTENT_MAP_DEBUG === "true";
|
|
7691
|
+
var POSTGRES_SETUP_DEBUG_ENABLED = process.env.CADENZA_POSTGRES_SETUP_DEBUG === "1" || process.env.CADENZA_POSTGRES_SETUP_DEBUG === "true";
|
|
7692
|
+
var GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY = 200;
|
|
7693
|
+
var GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS = 12e4;
|
|
7004
7694
|
function logAuthoritySyncDebug(event, payload) {
|
|
7005
7695
|
if (!AUTHORITY_SYNC_DEBUG_ENABLED) {
|
|
7006
7696
|
return;
|
|
@@ -7040,6 +7730,18 @@ function shouldDebugAuthoritySyncPayload(tableName, payload) {
|
|
|
7040
7730
|
}
|
|
7041
7731
|
return false;
|
|
7042
7732
|
}
|
|
7733
|
+
function logIntentMapSetupDebug(event, payload) {
|
|
7734
|
+
if (!INTENT_MAP_DEBUG_ENABLED) {
|
|
7735
|
+
return;
|
|
7736
|
+
}
|
|
7737
|
+
console.log("[CADENZA_INTENT_MAP_DEBUG]", event, payload);
|
|
7738
|
+
}
|
|
7739
|
+
function logPostgresSetupDebug(event, payload) {
|
|
7740
|
+
if (!POSTGRES_SETUP_DEBUG_ENABLED) {
|
|
7741
|
+
return;
|
|
7742
|
+
}
|
|
7743
|
+
console.log("[CADENZA_POSTGRES_SETUP_DEBUG]", event, payload);
|
|
7744
|
+
}
|
|
7043
7745
|
function buildAuthoritySyncDebugSummary(payload, context) {
|
|
7044
7746
|
const data = payload.data && typeof payload.data === "object" && !Array.isArray(payload.data) ? payload.data : {};
|
|
7045
7747
|
return {
|
|
@@ -7251,7 +7953,55 @@ function errorMessage(error) {
|
|
|
7251
7953
|
}
|
|
7252
7954
|
return String(error);
|
|
7253
7955
|
}
|
|
7254
|
-
|
|
7956
|
+
var EXECUTION_OBSERVABILITY_RETRYABLE_FOREIGN_KEYS = /* @__PURE__ */ new Set([
|
|
7957
|
+
"routine_execution_execution_trace_id_fkey",
|
|
7958
|
+
"routine_execution_previous_routine_execution_fkey",
|
|
7959
|
+
"task_execution_routine_execution_id_fkey",
|
|
7960
|
+
"task_execution_execution_trace_id_fkey",
|
|
7961
|
+
"task_execution_signal_emission_id_fkey",
|
|
7962
|
+
"task_execution_inquiry_id_fkey",
|
|
7963
|
+
"task_execution_map_task_execution_id_fkey",
|
|
7964
|
+
"task_execution_map_previous_task_execution_id_fkey",
|
|
7965
|
+
"signal_emission_execution_trace_id_fkey",
|
|
7966
|
+
"signal_emission_routine_execution_id_fkey",
|
|
7967
|
+
"signal_emission_task_execution_id_fkey",
|
|
7968
|
+
"inquiry_execution_trace_id_fkey",
|
|
7969
|
+
"inquiry_routine_execution_id_fkey",
|
|
7970
|
+
"inquiry_task_execution_id_fkey"
|
|
7971
|
+
]);
|
|
7972
|
+
function resolveOperationTableName(operationLabel) {
|
|
7973
|
+
if (!operationLabel) {
|
|
7974
|
+
return null;
|
|
7975
|
+
}
|
|
7976
|
+
const match = /^insert\s+([a-z0-9_]+)$/i.exec(operationLabel.trim());
|
|
7977
|
+
return match?.[1]?.toLowerCase() ?? null;
|
|
7978
|
+
}
|
|
7979
|
+
function isRetryableExecutionObservabilityForeignKeyError(error, operationLabel) {
|
|
7980
|
+
if (!error || typeof error !== "object") {
|
|
7981
|
+
return false;
|
|
7982
|
+
}
|
|
7983
|
+
const dbError = error;
|
|
7984
|
+
if (String(dbError.code ?? "") !== "23503") {
|
|
7985
|
+
return false;
|
|
7986
|
+
}
|
|
7987
|
+
const constraint = String(dbError.constraint ?? "").toLowerCase();
|
|
7988
|
+
if (constraint && EXECUTION_OBSERVABILITY_RETRYABLE_FOREIGN_KEYS.has(constraint)) {
|
|
7989
|
+
return true;
|
|
7990
|
+
}
|
|
7991
|
+
const table = String(dbError.table ?? "").toLowerCase() || resolveOperationTableName(operationLabel) || "";
|
|
7992
|
+
if (![
|
|
7993
|
+
"routine_execution",
|
|
7994
|
+
"task_execution",
|
|
7995
|
+
"task_execution_map",
|
|
7996
|
+
"signal_emission",
|
|
7997
|
+
"inquiry"
|
|
7998
|
+
].includes(table)) {
|
|
7999
|
+
return false;
|
|
8000
|
+
}
|
|
8001
|
+
const message = String(dbError.message ?? "").toLowerCase();
|
|
8002
|
+
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"));
|
|
8003
|
+
}
|
|
8004
|
+
function isTransientDatabaseError(error, operationLabel) {
|
|
7255
8005
|
if (!error || typeof error !== "object") {
|
|
7256
8006
|
return false;
|
|
7257
8007
|
}
|
|
@@ -7261,7 +8011,10 @@ function isTransientDatabaseError(error) {
|
|
|
7261
8011
|
return true;
|
|
7262
8012
|
}
|
|
7263
8013
|
const message = String(dbError.message ?? "").toLowerCase();
|
|
7264
|
-
|
|
8014
|
+
if (message.includes("timeout") || message.includes("terminating connection") || message.includes("connection reset")) {
|
|
8015
|
+
return true;
|
|
8016
|
+
}
|
|
8017
|
+
return isRetryableExecutionObservabilityForeignKeyError(error, operationLabel);
|
|
7265
8018
|
}
|
|
7266
8019
|
function isSqlIdentifier(value) {
|
|
7267
8020
|
return /^[a-z_][a-z0-9_]*$/.test(value);
|
|
@@ -7295,6 +8048,37 @@ function resolveDataRows(data) {
|
|
|
7295
8048
|
}
|
|
7296
8049
|
return [ensurePlainObject(data, "data")];
|
|
7297
8050
|
}
|
|
8051
|
+
var DB_OPERATION_CONTEXT_KEYS = [
|
|
8052
|
+
"data",
|
|
8053
|
+
"batch",
|
|
8054
|
+
"transaction",
|
|
8055
|
+
"onConflict",
|
|
8056
|
+
"filter",
|
|
8057
|
+
"fields",
|
|
8058
|
+
"joins",
|
|
8059
|
+
"sort",
|
|
8060
|
+
"limit",
|
|
8061
|
+
"offset",
|
|
8062
|
+
"queryMode",
|
|
8063
|
+
"aggregates",
|
|
8064
|
+
"groupBy"
|
|
8065
|
+
];
|
|
8066
|
+
function mergeTriggerQueryData(context, triggerQueryData) {
|
|
8067
|
+
const existingQueryData = typeof context.queryData === "object" && context.queryData ? { ...context.queryData } : {};
|
|
8068
|
+
for (const key of DB_OPERATION_CONTEXT_KEYS) {
|
|
8069
|
+
if (!Object.prototype.hasOwnProperty.call(existingQueryData, key) && context[key] !== void 0) {
|
|
8070
|
+
existingQueryData[key] = context[key];
|
|
8071
|
+
}
|
|
8072
|
+
}
|
|
8073
|
+
return {
|
|
8074
|
+
...existingQueryData,
|
|
8075
|
+
...triggerQueryData
|
|
8076
|
+
};
|
|
8077
|
+
}
|
|
8078
|
+
function resolveOperationPayload(context) {
|
|
8079
|
+
const queryData = typeof context.queryData === "object" && context.queryData ? context.queryData : {};
|
|
8080
|
+
return mergeTriggerQueryData(context, queryData);
|
|
8081
|
+
}
|
|
7298
8082
|
function buildAddConstraintIfMissingStatement(tableName, constraintName, constraintDefinition) {
|
|
7299
8083
|
const escapedConstraintName = constraintName.replace(/'/g, "''");
|
|
7300
8084
|
const escapedTableName = tableName.replace(/'/g, "''");
|
|
@@ -7432,9 +8216,19 @@ var DatabaseController = class _DatabaseController {
|
|
|
7432
8216
|
};
|
|
7433
8217
|
const runtimeState = registration.actor.getRuntimeState(registration.actorKey);
|
|
7434
8218
|
if (runtimeState?.ready) {
|
|
8219
|
+
logPostgresSetupDebug("setup_already_ready", {
|
|
8220
|
+
actorName: registration.actorName,
|
|
8221
|
+
databaseName: registration.databaseName
|
|
8222
|
+
});
|
|
7435
8223
|
this.emitSetupDone(registration, payload);
|
|
7436
8224
|
return registration;
|
|
7437
8225
|
}
|
|
8226
|
+
logPostgresSetupDebug("emit_setup_requested", {
|
|
8227
|
+
actorName: registration.actorName,
|
|
8228
|
+
databaseName: registration.databaseName,
|
|
8229
|
+
ownerServiceName: registration.ownerServiceName,
|
|
8230
|
+
payloadKeys: Object.keys(payload)
|
|
8231
|
+
});
|
|
7438
8232
|
CadenzaService.emit(registration.setupSignal, payload);
|
|
7439
8233
|
return registration;
|
|
7440
8234
|
}
|
|
@@ -7486,6 +8280,11 @@ var DatabaseController = class _DatabaseController {
|
|
|
7486
8280
|
`Setup ${registration.actorName}`,
|
|
7487
8281
|
registration.actor.task(
|
|
7488
8282
|
async ({ input, state, runtimeState, setState, setRuntimeState, emit }) => {
|
|
8283
|
+
logPostgresSetupDebug("setup_task_started", {
|
|
8284
|
+
actorName: registration.actorName,
|
|
8285
|
+
databaseName: registration.databaseName,
|
|
8286
|
+
inputKeys: Object.keys(input ?? {})
|
|
8287
|
+
});
|
|
7489
8288
|
const requestedDatabaseName = String(
|
|
7490
8289
|
input.options?.databaseName ?? input.databaseName ?? registration.databaseName
|
|
7491
8290
|
);
|
|
@@ -7504,11 +8303,19 @@ var DatabaseController = class _DatabaseController {
|
|
|
7504
8303
|
}
|
|
7505
8304
|
try {
|
|
7506
8305
|
await this.createDatabaseIfMissing(requestedDatabaseName);
|
|
8306
|
+
logPostgresSetupDebug("database_ready", {
|
|
8307
|
+
actorName: registration.actorName,
|
|
8308
|
+
databaseName: requestedDatabaseName
|
|
8309
|
+
});
|
|
7507
8310
|
const pool = this.createTargetPool(
|
|
7508
8311
|
requestedDatabaseName,
|
|
7509
8312
|
state.safetyPolicy.statementTimeoutMs
|
|
7510
8313
|
);
|
|
7511
8314
|
await this.checkPoolHealth(pool, state.safetyPolicy);
|
|
8315
|
+
logPostgresSetupDebug("pool_healthy", {
|
|
8316
|
+
actorName: registration.actorName,
|
|
8317
|
+
databaseName: requestedDatabaseName
|
|
8318
|
+
});
|
|
7512
8319
|
this.validateSchema({
|
|
7513
8320
|
schema: registration.schema,
|
|
7514
8321
|
options: registration.options
|
|
@@ -7524,6 +8331,18 @@ var DatabaseController = class _DatabaseController {
|
|
|
7524
8331
|
if (!registration.tasksGenerated) {
|
|
7525
8332
|
this.generateDatabaseTasks(registration);
|
|
7526
8333
|
registration.tasksGenerated = true;
|
|
8334
|
+
const localTasks = Array.from(CadenzaService.registry.tasks.values());
|
|
8335
|
+
logIntentMapSetupDebug("generated_database_tasks", {
|
|
8336
|
+
actorName: registration.actorName,
|
|
8337
|
+
ownerServiceName: registration.ownerServiceName,
|
|
8338
|
+
totalLocalTasks: localTasks.length,
|
|
8339
|
+
generatedTaskNames: localTasks.map((task) => task.name).filter(
|
|
8340
|
+
(taskName) => /(Query|Insert|Update|Delete|COUNT|EXISTS|ONE|AGGREGATE|UPSERT) /.test(
|
|
8341
|
+
taskName
|
|
8342
|
+
)
|
|
8343
|
+
).slice(0, 24)
|
|
8344
|
+
});
|
|
8345
|
+
CadenzaService.schedule("meta.sync_requested", { __syncing: true }, 250);
|
|
7527
8346
|
}
|
|
7528
8347
|
const nowIso = (/* @__PURE__ */ new Date()).toISOString();
|
|
7529
8348
|
setRuntimeState({
|
|
@@ -7544,6 +8363,10 @@ var DatabaseController = class _DatabaseController {
|
|
|
7544
8363
|
this.emitSetupDone(registration, {
|
|
7545
8364
|
...input
|
|
7546
8365
|
});
|
|
8366
|
+
logPostgresSetupDebug("setup_task_completed", {
|
|
8367
|
+
actorName: registration.actorName,
|
|
8368
|
+
databaseName: requestedDatabaseName
|
|
8369
|
+
});
|
|
7547
8370
|
return {
|
|
7548
8371
|
...input,
|
|
7549
8372
|
__success: true,
|
|
@@ -7553,6 +8376,11 @@ var DatabaseController = class _DatabaseController {
|
|
|
7553
8376
|
};
|
|
7554
8377
|
} catch (error) {
|
|
7555
8378
|
const message = errorMessage(error);
|
|
8379
|
+
logPostgresSetupDebug("setup_task_failed", {
|
|
8380
|
+
actorName: registration.actorName,
|
|
8381
|
+
databaseName: requestedDatabaseName,
|
|
8382
|
+
error: message
|
|
8383
|
+
});
|
|
7556
8384
|
setRuntimeState({
|
|
7557
8385
|
pool: null,
|
|
7558
8386
|
ready: false,
|
|
@@ -7680,7 +8508,7 @@ var DatabaseController = class _DatabaseController {
|
|
|
7680
8508
|
return await work();
|
|
7681
8509
|
} catch (error) {
|
|
7682
8510
|
lastError = error;
|
|
7683
|
-
const transient = isTransientDatabaseError(error);
|
|
8511
|
+
const transient = isTransientDatabaseError(error, operationLabel);
|
|
7684
8512
|
if (!transient || attempt >= attempts) {
|
|
7685
8513
|
break;
|
|
7686
8514
|
}
|
|
@@ -8346,7 +9174,7 @@ var DatabaseController = class _DatabaseController {
|
|
|
8346
9174
|
description: `Macro upsert operation for table ${tableName}`,
|
|
8347
9175
|
input: insertSchema
|
|
8348
9176
|
});
|
|
8349
|
-
CadenzaService.
|
|
9177
|
+
CadenzaService.createTask(
|
|
8350
9178
|
`UPSERT ${tableName}`,
|
|
8351
9179
|
registration.actor.task(
|
|
8352
9180
|
async ({ input }) => {
|
|
@@ -8367,9 +9195,11 @@ var DatabaseController = class _DatabaseController {
|
|
|
8367
9195
|
},
|
|
8368
9196
|
{ mode: "write" }
|
|
8369
9197
|
),
|
|
8370
|
-
(context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
|
|
8371
9198
|
`Macro upsert task for ${tableName}`,
|
|
8372
9199
|
{
|
|
9200
|
+
concurrency: GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY,
|
|
9201
|
+
timeout: GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS,
|
|
9202
|
+
getTagCallback: () => `upsert:${registration.actorToken}:${tableName}`,
|
|
8373
9203
|
isMeta: registration.options.isMeta,
|
|
8374
9204
|
isSubMeta: registration.options.isMeta,
|
|
8375
9205
|
validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
|
|
@@ -8400,15 +9230,15 @@ var DatabaseController = class _DatabaseController {
|
|
|
8400
9230
|
};
|
|
8401
9231
|
}
|
|
8402
9232
|
if (trigger.queryData) {
|
|
8403
|
-
context.queryData =
|
|
8404
|
-
|
|
8405
|
-
|
|
8406
|
-
|
|
9233
|
+
context.queryData = mergeTriggerQueryData(
|
|
9234
|
+
context,
|
|
9235
|
+
trigger.queryData
|
|
9236
|
+
);
|
|
8407
9237
|
payloadModifiedByTriggers = true;
|
|
8408
9238
|
}
|
|
8409
9239
|
}
|
|
8410
9240
|
}
|
|
8411
|
-
const operationPayload =
|
|
9241
|
+
const operationPayload = resolveOperationPayload(context);
|
|
8412
9242
|
const shouldDebugAuthoritySync = shouldDebugAuthoritySyncPayload(
|
|
8413
9243
|
tableName,
|
|
8414
9244
|
operationPayload
|
|
@@ -8505,18 +9335,29 @@ var DatabaseController = class _DatabaseController {
|
|
|
8505
9335
|
},
|
|
8506
9336
|
{ mode: op === "query" ? "read" : "write" }
|
|
8507
9337
|
);
|
|
8508
|
-
const
|
|
9338
|
+
const taskOptions = {
|
|
9339
|
+
isMeta: registration.options.isMeta,
|
|
9340
|
+
isSubMeta: registration.options.isMeta,
|
|
9341
|
+
validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
|
|
9342
|
+
inputSchema: schema
|
|
9343
|
+
};
|
|
9344
|
+
const task = (op === "insert" ? CadenzaService.createTask(
|
|
8509
9345
|
taskName,
|
|
8510
9346
|
databaseTaskFunction,
|
|
8511
|
-
(context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
|
|
8512
9347
|
`Auto-generated ${op} task for ${tableName} (PostgresActor)`,
|
|
8513
9348
|
{
|
|
8514
|
-
|
|
8515
|
-
|
|
8516
|
-
|
|
8517
|
-
|
|
9349
|
+
...taskOptions,
|
|
9350
|
+
concurrency: GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY,
|
|
9351
|
+
timeout: GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS,
|
|
9352
|
+
getTagCallback: () => `insert:${registration.actorToken}:${tableName}`
|
|
8518
9353
|
}
|
|
8519
|
-
).
|
|
9354
|
+
) : CadenzaService.createThrottledTask(
|
|
9355
|
+
taskName,
|
|
9356
|
+
databaseTaskFunction,
|
|
9357
|
+
(context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
|
|
9358
|
+
`Auto-generated ${op} task for ${tableName} (PostgresActor)`,
|
|
9359
|
+
taskOptions
|
|
9360
|
+
)).doOn(
|
|
8520
9361
|
...table.customSignals?.triggers?.[op]?.map(
|
|
8521
9362
|
(signal) => typeof signal === "string" ? signal : signal.signal
|
|
8522
9363
|
) ?? []
|
|
@@ -9173,7 +10014,7 @@ function buildIntentRegistryData(intent) {
|
|
|
9173
10014
|
description: typeof intent?.description === "string" ? intent.description : "",
|
|
9174
10015
|
input: intent?.input && typeof intent.input === "object" ? intent.input : { type: "object" },
|
|
9175
10016
|
output: intent?.output && typeof intent.output === "object" ? intent.output : { type: "object" },
|
|
9176
|
-
|
|
10017
|
+
is_meta: isMetaIntentName(name)
|
|
9177
10018
|
};
|
|
9178
10019
|
}
|
|
9179
10020
|
function getJoinedContextValue(ctx, key) {
|
|
@@ -9246,34 +10087,7 @@ function buildSyncInsertQueryData(ctx, queryData = {}) {
|
|
|
9246
10087
|
}
|
|
9247
10088
|
return nextQueryData;
|
|
9248
10089
|
}
|
|
9249
|
-
function buildSyncQueryQueryData(ctx, queryData = {}) {
|
|
9250
|
-
const joinedQueryData = getJoinedContextValue(ctx, "queryData");
|
|
9251
|
-
const existingQueryData = ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : joinedQueryData && typeof joinedQueryData === "object" ? joinedQueryData : {};
|
|
9252
|
-
const nextQueryData = {};
|
|
9253
|
-
const allowedKeys = [
|
|
9254
|
-
"transaction",
|
|
9255
|
-
"filter",
|
|
9256
|
-
"fields",
|
|
9257
|
-
"joins",
|
|
9258
|
-
"sort",
|
|
9259
|
-
"limit",
|
|
9260
|
-
"offset",
|
|
9261
|
-
"queryMode",
|
|
9262
|
-
"aggregates",
|
|
9263
|
-
"groupBy"
|
|
9264
|
-
];
|
|
9265
|
-
for (const key of allowedKeys) {
|
|
9266
|
-
if (Object.prototype.hasOwnProperty.call(existingQueryData, key)) {
|
|
9267
|
-
nextQueryData[key] = existingQueryData[key];
|
|
9268
|
-
}
|
|
9269
|
-
}
|
|
9270
|
-
return {
|
|
9271
|
-
...nextQueryData,
|
|
9272
|
-
...queryData
|
|
9273
|
-
};
|
|
9274
|
-
}
|
|
9275
10090
|
var REMOTE_AUTHORITY_SYNC_INSERT_CONCURRENCY = 5;
|
|
9276
|
-
var REMOTE_AUTHORITY_SYNC_QUERY_CONCURRENCY = 3;
|
|
9277
10091
|
function wireSyncTaskGraph(predecessorTask, graph, ...completionTasks) {
|
|
9278
10092
|
if (!graph) {
|
|
9279
10093
|
return void 0;
|
|
@@ -9286,11 +10100,27 @@ function wireSyncTaskGraph(predecessorTask, graph, ...completionTasks) {
|
|
|
9286
10100
|
}
|
|
9287
10101
|
function buildSyncExecutionEnvelope(ctx, queryData) {
|
|
9288
10102
|
const originalContext = { ...ctx };
|
|
10103
|
+
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();
|
|
10104
|
+
const rootDbOperationFields = {};
|
|
10105
|
+
for (const key of [
|
|
10106
|
+
"data",
|
|
10107
|
+
"batch",
|
|
10108
|
+
"transaction",
|
|
10109
|
+
"onConflict",
|
|
10110
|
+
"filter",
|
|
10111
|
+
"fields"
|
|
10112
|
+
]) {
|
|
10113
|
+
if (Object.prototype.hasOwnProperty.call(queryData, key)) {
|
|
10114
|
+
rootDbOperationFields[key] = queryData[key];
|
|
10115
|
+
}
|
|
10116
|
+
}
|
|
9289
10117
|
const nextContext = {
|
|
9290
10118
|
__syncing: ctx.__syncing === true || ctx.__metadata?.__syncing === true || false,
|
|
10119
|
+
__syncSourceServiceName: syncSourceServiceName,
|
|
9291
10120
|
__preferredTransportProtocol: "rest",
|
|
9292
10121
|
__resolverOriginalContext: originalContext,
|
|
9293
10122
|
__resolverQueryData: queryData,
|
|
10123
|
+
...rootDbOperationFields,
|
|
9294
10124
|
queryData
|
|
9295
10125
|
};
|
|
9296
10126
|
if (typeof ctx.__reason === "string" && ctx.__reason.trim().length > 0) {
|
|
@@ -9298,9 +10128,26 @@ function buildSyncExecutionEnvelope(ctx, queryData) {
|
|
|
9298
10128
|
}
|
|
9299
10129
|
return nextContext;
|
|
9300
10130
|
}
|
|
10131
|
+
function markCompletedSyncCycle(completedCycles, cycleId, limit = 32) {
|
|
10132
|
+
if (!cycleId) {
|
|
10133
|
+
return false;
|
|
10134
|
+
}
|
|
10135
|
+
if (completedCycles.has(cycleId)) {
|
|
10136
|
+
return false;
|
|
10137
|
+
}
|
|
10138
|
+
completedCycles.add(cycleId);
|
|
10139
|
+
while (completedCycles.size > limit) {
|
|
10140
|
+
const oldestCycleId = completedCycles.values().next().value;
|
|
10141
|
+
if (!oldestCycleId) {
|
|
10142
|
+
break;
|
|
10143
|
+
}
|
|
10144
|
+
completedCycles.delete(oldestCycleId);
|
|
10145
|
+
}
|
|
10146
|
+
return true;
|
|
10147
|
+
}
|
|
9301
10148
|
function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
|
|
9302
10149
|
const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
|
|
9303
|
-
if (
|
|
10150
|
+
if (isCadenzaDBReady && !localInsertTask) {
|
|
9304
10151
|
return void 0;
|
|
9305
10152
|
}
|
|
9306
10153
|
const targetTask = localInsertTask ?? CadenzaService.createCadenzaDBInsertTask(tableName, queryData, {
|
|
@@ -9351,6 +10198,11 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
9351
10198
|
...ctx,
|
|
9352
10199
|
queryData: ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : originalQueryData
|
|
9353
10200
|
};
|
|
10201
|
+
if (originalContext.__syncing === true && !didSyncInsertSucceed(normalizedContext)) {
|
|
10202
|
+
CadenzaService.debounce("meta.sync_requested", {
|
|
10203
|
+
delayMs: 1e3
|
|
10204
|
+
});
|
|
10205
|
+
}
|
|
9354
10206
|
return normalizedContext;
|
|
9355
10207
|
},
|
|
9356
10208
|
`Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,
|
|
@@ -9378,86 +10230,82 @@ var CADENZA_DB_REQUIRED_LOCAL_SYNC_INSERT_TABLES = [
|
|
|
9378
10230
|
"intent_to_task_map",
|
|
9379
10231
|
"directional_task_graph_map"
|
|
9380
10232
|
];
|
|
9381
|
-
var
|
|
9382
|
-
|
|
9383
|
-
|
|
9384
|
-
|
|
9385
|
-
|
|
9386
|
-
|
|
9387
|
-
|
|
9388
|
-
function
|
|
9389
|
-
const
|
|
9390
|
-
|
|
9391
|
-
|
|
9392
|
-
}
|
|
9393
|
-
function resolveSyncQueryTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
|
|
9394
|
-
const localQueryTask = CadenzaService.getLocalCadenzaDBQueryTask(tableName);
|
|
9395
|
-
if (!localQueryTask && !isCadenzaDBReady) {
|
|
9396
|
-
return void 0;
|
|
10233
|
+
var BOOTSTRAP_SYNC_STALE_CYCLE_MS = 15e3;
|
|
10234
|
+
var EARLY_SYNC_TICK_DELAYS_MS = [
|
|
10235
|
+
400,
|
|
10236
|
+
BOOTSTRAP_SYNC_STALE_CYCLE_MS + 1e3,
|
|
10237
|
+
BOOTSTRAP_SYNC_STALE_CYCLE_MS * 2 + 2e3,
|
|
10238
|
+
BOOTSTRAP_SYNC_STALE_CYCLE_MS * 3 + 3e3
|
|
10239
|
+
];
|
|
10240
|
+
function shouldTraceSyncPhase(serviceName) {
|
|
10241
|
+
const configured = process.env.CADENZA_SYNC_PHASE_TRACE_SERVICE;
|
|
10242
|
+
if (!configured || !serviceName) {
|
|
10243
|
+
return false;
|
|
9397
10244
|
}
|
|
9398
|
-
|
|
9399
|
-
|
|
9400
|
-
|
|
9401
|
-
|
|
9402
|
-
|
|
9403
|
-
|
|
9404
|
-
|
|
9405
|
-
|
|
9406
|
-
|
|
9407
|
-
|
|
9408
|
-
`Prepare graph sync query for ${tableName}`,
|
|
9409
|
-
(ctx) => buildSyncExecutionEnvelope(
|
|
9410
|
-
ctx,
|
|
9411
|
-
buildSyncQueryQueryData(ctx, queryData)
|
|
9412
|
-
),
|
|
9413
|
-
`Prepares ${tableName} graph-sync query payloads.`,
|
|
9414
|
-
{
|
|
9415
|
-
register: false,
|
|
9416
|
-
isHidden: true
|
|
9417
|
-
}
|
|
9418
|
-
);
|
|
9419
|
-
const finalizeQueryTask = CadenzaService.createMetaTask(
|
|
9420
|
-
`Finalize graph sync query for ${tableName}`,
|
|
9421
|
-
(ctx) => ctx,
|
|
9422
|
-
`Finalizes ${tableName} graph-sync query payloads after authority lookup.`,
|
|
9423
|
-
{
|
|
9424
|
-
register: false,
|
|
9425
|
-
isHidden: true
|
|
9426
|
-
}
|
|
9427
|
-
);
|
|
9428
|
-
prepareQueryTask.then(targetTask);
|
|
9429
|
-
targetTask.then(finalizeQueryTask);
|
|
9430
|
-
return {
|
|
9431
|
-
entryTask: prepareQueryTask,
|
|
9432
|
-
completionTask: finalizeQueryTask
|
|
9433
|
-
};
|
|
10245
|
+
return configured === serviceName;
|
|
10246
|
+
}
|
|
10247
|
+
function canonicalizeSignalName(signalName) {
|
|
10248
|
+
if (typeof signalName !== "string") {
|
|
10249
|
+
return "";
|
|
10250
|
+
}
|
|
10251
|
+
return signalName.split(":")[0]?.trim() ?? "";
|
|
10252
|
+
}
|
|
10253
|
+
function isBootstrapLocalOnlySignal(signalName) {
|
|
10254
|
+
return signalName === "meta.service_registry.insert_execution_requested" || signalName.startsWith("meta.sync_controller.");
|
|
9434
10255
|
}
|
|
9435
10256
|
function getRegistrableTasks() {
|
|
9436
10257
|
return Array.from(CadenzaService.registry.tasks.values()).filter(
|
|
9437
|
-
(task) => task.register && !task.isHidden
|
|
10258
|
+
(task) => task.register && !task.isHidden && !task.isDeputy
|
|
9438
10259
|
);
|
|
9439
10260
|
}
|
|
9440
10261
|
function getRegistrableRoutines() {
|
|
9441
10262
|
return Array.from(CadenzaService.registry.routines.values());
|
|
9442
10263
|
}
|
|
9443
|
-
function isAuthoritySyncSignal(signalName) {
|
|
9444
|
-
return decomposeSignalName(signalName).isGlobal;
|
|
9445
|
-
}
|
|
9446
10264
|
function getRegistrableSignalObservers() {
|
|
9447
10265
|
const signalObservers = CadenzaService.signalBroker.signalObservers;
|
|
9448
10266
|
if (!signalObservers) {
|
|
9449
10267
|
return [];
|
|
9450
10268
|
}
|
|
9451
|
-
|
|
9452
|
-
|
|
9453
|
-
|
|
9454
|
-
|
|
10269
|
+
const canonicalObservers = /* @__PURE__ */ new Map();
|
|
10270
|
+
for (const [rawSignalName, observer] of signalObservers.entries()) {
|
|
10271
|
+
const signalName = canonicalizeSignalName(rawSignalName);
|
|
10272
|
+
if (!signalName || isBootstrapLocalOnlySignal(signalName)) {
|
|
10273
|
+
continue;
|
|
10274
|
+
}
|
|
10275
|
+
const existing = canonicalObservers.get(signalName);
|
|
10276
|
+
canonicalObservers.set(signalName, {
|
|
10277
|
+
signalName,
|
|
10278
|
+
registered: existing?.registered === true || observer?.registered === true
|
|
10279
|
+
});
|
|
10280
|
+
}
|
|
10281
|
+
return Array.from(canonicalObservers.values());
|
|
10282
|
+
}
|
|
10283
|
+
function isLocallyHandledIntentName(intentName) {
|
|
10284
|
+
const observer = CadenzaService.inquiryBroker.inquiryObservers.get(intentName);
|
|
10285
|
+
if (!observer) {
|
|
10286
|
+
return false;
|
|
10287
|
+
}
|
|
10288
|
+
for (const task of observer.tasks) {
|
|
10289
|
+
if (task.register && !task.isHidden && !task.isDeputy) {
|
|
10290
|
+
return true;
|
|
10291
|
+
}
|
|
10292
|
+
}
|
|
10293
|
+
return false;
|
|
9455
10294
|
}
|
|
9456
10295
|
function getRegistrableIntentNames() {
|
|
9457
10296
|
return Array.from(CadenzaService.inquiryBroker.intents.values()).map((intent) => buildIntentRegistryData(intent)).filter(
|
|
9458
10297
|
(intentDefinition) => intentDefinition !== null
|
|
10298
|
+
).filter(
|
|
10299
|
+
(intentDefinition) => isLocallyHandledIntentName(String(intentDefinition.name))
|
|
9459
10300
|
).map((intentDefinition) => String(intentDefinition.name));
|
|
9460
10301
|
}
|
|
10302
|
+
function isRegistrableLocalIntentDefinition(intent) {
|
|
10303
|
+
const intentData = buildIntentRegistryData(intent);
|
|
10304
|
+
if (!intentData) {
|
|
10305
|
+
return false;
|
|
10306
|
+
}
|
|
10307
|
+
return isLocallyHandledIntentName(String(intentData.name));
|
|
10308
|
+
}
|
|
9461
10309
|
function buildActorRegistrationKey(actor, serviceName) {
|
|
9462
10310
|
const data = buildActorRegistrationData(actor);
|
|
9463
10311
|
const name = typeof data.name === "string" && data.name.trim().length > 0 ? data.name.trim() : "";
|
|
@@ -9499,10 +10347,23 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9499
10347
|
this.signalsSynced = false;
|
|
9500
10348
|
this.intentsSynced = false;
|
|
9501
10349
|
this.routinesSynced = false;
|
|
10350
|
+
this.directionalTaskMapsSynced = false;
|
|
10351
|
+
this.signalTaskMapsSynced = false;
|
|
10352
|
+
this.intentTaskMapsSynced = false;
|
|
10353
|
+
this.actorTaskMapsSynced = false;
|
|
10354
|
+
this.routineTaskMapsSynced = false;
|
|
9502
10355
|
this.isCadenzaDBReady = false;
|
|
9503
10356
|
this.initialized = false;
|
|
9504
10357
|
this.initRetryScheduled = false;
|
|
9505
10358
|
this.lastMissingLocalCadenzaDBInsertTablesKey = "";
|
|
10359
|
+
this.syncCycleCounter = 0;
|
|
10360
|
+
this.primitivePhaseCompletedCycles = /* @__PURE__ */ new Set();
|
|
10361
|
+
this.mapPhaseCompletedCycles = /* @__PURE__ */ new Set();
|
|
10362
|
+
this.activeSyncCycleId = null;
|
|
10363
|
+
this.activeSyncCycleStartedAt = 0;
|
|
10364
|
+
this.pendingBootstrapSyncRerun = false;
|
|
10365
|
+
this.localServiceInserted = false;
|
|
10366
|
+
this.localServiceInstanceInserted = false;
|
|
9506
10367
|
}
|
|
9507
10368
|
static get instance() {
|
|
9508
10369
|
if (!this._instance) this._instance = new _GraphSyncController();
|
|
@@ -9576,45 +10437,16 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9576
10437
|
},
|
|
9577
10438
|
{ concurrency: 30 }
|
|
9578
10439
|
);
|
|
9579
|
-
const ensureIntentRegistryBeforeIntentMapTask = resolveSyncInsertTask(
|
|
9580
|
-
this.isCadenzaDBReady,
|
|
9581
|
-
"intent_registry",
|
|
9582
|
-
{
|
|
9583
|
-
onConflict: {
|
|
9584
|
-
target: ["name"],
|
|
9585
|
-
action: {
|
|
9586
|
-
do: "nothing"
|
|
9587
|
-
}
|
|
9588
|
-
}
|
|
9589
|
-
},
|
|
9590
|
-
{ concurrency: 30 }
|
|
9591
|
-
);
|
|
9592
|
-
const authoritativeTaskQueryGraph = resolveSyncQueryTask(
|
|
9593
|
-
this.isCadenzaDBReady,
|
|
9594
|
-
"task",
|
|
9595
|
-
{},
|
|
9596
|
-
{ concurrency: 10 }
|
|
9597
|
-
);
|
|
9598
|
-
const authoritativeRoutineQueryGraph = resolveSyncQueryTask(
|
|
9599
|
-
this.isCadenzaDBReady,
|
|
9600
|
-
"routine",
|
|
9601
|
-
{},
|
|
9602
|
-
{ concurrency: 10 }
|
|
9603
|
-
);
|
|
9604
|
-
const authoritativeSignalQueryGraph = resolveSyncQueryTask(
|
|
9605
|
-
this.isCadenzaDBReady,
|
|
9606
|
-
"signal_registry",
|
|
9607
|
-
{},
|
|
9608
|
-
{ concurrency: 10 }
|
|
9609
|
-
);
|
|
9610
|
-
const authoritativeIntentQueryGraph = resolveSyncQueryTask(
|
|
9611
|
-
this.isCadenzaDBReady,
|
|
9612
|
-
"intent_registry",
|
|
9613
|
-
{},
|
|
9614
|
-
{ concurrency: 10 }
|
|
9615
|
-
);
|
|
9616
10440
|
const finalizeTaskSync = (emit, ctx) => {
|
|
9617
10441
|
const pendingTasks = getRegistrableTasks().filter((task) => !task.registered);
|
|
10442
|
+
const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
|
|
10443
|
+
if (shouldTraceSyncPhase(serviceName2)) {
|
|
10444
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_tasks", {
|
|
10445
|
+
serviceName: serviceName2,
|
|
10446
|
+
pendingCount: pendingTasks.length,
|
|
10447
|
+
sample: pendingTasks.slice(0, 5).map((task) => task.name)
|
|
10448
|
+
});
|
|
10449
|
+
}
|
|
9618
10450
|
if (pendingTasks.length > 0) {
|
|
9619
10451
|
this.tasksSynced = false;
|
|
9620
10452
|
return false;
|
|
@@ -9633,6 +10465,14 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9633
10465
|
const pendingRoutines = getRegistrableRoutines().filter(
|
|
9634
10466
|
(routine) => !routine.registered
|
|
9635
10467
|
);
|
|
10468
|
+
const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
|
|
10469
|
+
if (shouldTraceSyncPhase(serviceName2)) {
|
|
10470
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_routines", {
|
|
10471
|
+
serviceName: serviceName2,
|
|
10472
|
+
pendingCount: pendingRoutines.length,
|
|
10473
|
+
sample: pendingRoutines.slice(0, 5).map((routine) => routine.name)
|
|
10474
|
+
});
|
|
10475
|
+
}
|
|
9636
10476
|
if (pendingRoutines.length > 0) {
|
|
9637
10477
|
this.routinesSynced = false;
|
|
9638
10478
|
return false;
|
|
@@ -9651,6 +10491,14 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9651
10491
|
const pendingSignals = getRegistrableSignalObservers().filter(
|
|
9652
10492
|
(observer) => observer.registered !== true
|
|
9653
10493
|
);
|
|
10494
|
+
const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
|
|
10495
|
+
if (shouldTraceSyncPhase(serviceName2)) {
|
|
10496
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_signals", {
|
|
10497
|
+
serviceName: serviceName2,
|
|
10498
|
+
pendingCount: pendingSignals.length,
|
|
10499
|
+
sample: pendingSignals.slice(0, 5).map((observer) => observer.signalName)
|
|
10500
|
+
});
|
|
10501
|
+
}
|
|
9654
10502
|
if (pendingSignals.length > 0) {
|
|
9655
10503
|
this.signalsSynced = false;
|
|
9656
10504
|
return false;
|
|
@@ -9669,6 +10517,14 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9669
10517
|
const pendingIntentNames = getRegistrableIntentNames().filter(
|
|
9670
10518
|
(intentName) => !this.registeredIntentDefinitions.has(intentName)
|
|
9671
10519
|
);
|
|
10520
|
+
const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
|
|
10521
|
+
if (shouldTraceSyncPhase(serviceName2)) {
|
|
10522
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_intents", {
|
|
10523
|
+
serviceName: serviceName2,
|
|
10524
|
+
pendingCount: pendingIntentNames.length,
|
|
10525
|
+
sample: pendingIntentNames.slice(0, 5)
|
|
10526
|
+
});
|
|
10527
|
+
}
|
|
9672
10528
|
if (pendingIntentNames.length > 0) {
|
|
9673
10529
|
this.intentsSynced = false;
|
|
9674
10530
|
return false;
|
|
@@ -9690,6 +10546,13 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9690
10546
|
return false;
|
|
9691
10547
|
}
|
|
9692
10548
|
const pendingActorKeys = CadenzaService.getAllActors().map((actor) => buildActorRegistrationKey(actor, syncServiceName)).filter((registrationKey) => Boolean(registrationKey)).filter((registrationKey) => !this.registeredActors.has(registrationKey));
|
|
10549
|
+
if (shouldTraceSyncPhase(syncServiceName)) {
|
|
10550
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_actors", {
|
|
10551
|
+
serviceName: syncServiceName,
|
|
10552
|
+
pendingCount: pendingActorKeys.length,
|
|
10553
|
+
sample: pendingActorKeys.slice(0, 5)
|
|
10554
|
+
});
|
|
10555
|
+
}
|
|
9693
10556
|
if (pendingActorKeys.length > 0) {
|
|
9694
10557
|
this.actorsSynced = false;
|
|
9695
10558
|
return false;
|
|
@@ -9770,8 +10633,8 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9770
10633
|
name: routine.name,
|
|
9771
10634
|
version: routine.version,
|
|
9772
10635
|
description: routine.description,
|
|
9773
|
-
|
|
9774
|
-
|
|
10636
|
+
service_name: serviceName2,
|
|
10637
|
+
is_meta: routine.isMeta
|
|
9775
10638
|
},
|
|
9776
10639
|
__routineName: routine.name
|
|
9777
10640
|
};
|
|
@@ -9834,11 +10697,11 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9834
10697
|
yield {
|
|
9835
10698
|
__syncing: ctx.__syncing,
|
|
9836
10699
|
data: {
|
|
9837
|
-
|
|
9838
|
-
|
|
9839
|
-
|
|
9840
|
-
|
|
9841
|
-
|
|
10700
|
+
task_name: nextTask.name,
|
|
10701
|
+
task_version: nextTask.version,
|
|
10702
|
+
routine_name: routine.name,
|
|
10703
|
+
routine_version: routine.version,
|
|
10704
|
+
service_name: serviceName2
|
|
9842
10705
|
},
|
|
9843
10706
|
__routineName: routine.name,
|
|
9844
10707
|
__taskName: nextTask.name
|
|
@@ -9896,12 +10759,20 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9896
10759
|
});
|
|
9897
10760
|
const { signals } = ctx;
|
|
9898
10761
|
if (!signals) return;
|
|
9899
|
-
const
|
|
9900
|
-
|
|
10762
|
+
const seenSignals = /* @__PURE__ */ new Set();
|
|
10763
|
+
const filteredSignals = signals.map((signal) => ({
|
|
10764
|
+
signalName: canonicalizeSignalName(signal.signal),
|
|
10765
|
+
data: signal.data
|
|
10766
|
+
})).filter((signal) => {
|
|
10767
|
+
if (!signal.signalName || signal.data?.registered || isBootstrapLocalOnlySignal(signal.signalName)) {
|
|
10768
|
+
return false;
|
|
10769
|
+
}
|
|
10770
|
+
if (seenSignals.has(signal.signalName)) {
|
|
9901
10771
|
return false;
|
|
9902
10772
|
}
|
|
9903
|
-
|
|
9904
|
-
|
|
10773
|
+
seenSignals.add(signal.signalName);
|
|
10774
|
+
return true;
|
|
10775
|
+
}).map((signal) => signal.signalName);
|
|
9905
10776
|
for (const signal of filteredSignals) {
|
|
9906
10777
|
const { isMeta, isGlobal, domain, action } = decomposeSignalName(signal);
|
|
9907
10778
|
this.signalsSynced = false;
|
|
@@ -9909,10 +10780,10 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9909
10780
|
__syncing: ctx.__syncing,
|
|
9910
10781
|
data: {
|
|
9911
10782
|
name: signal,
|
|
9912
|
-
isGlobal,
|
|
10783
|
+
is_global: isGlobal,
|
|
9913
10784
|
domain,
|
|
9914
10785
|
action,
|
|
9915
|
-
isMeta
|
|
10786
|
+
is_meta: isMeta
|
|
9916
10787
|
},
|
|
9917
10788
|
__signal: signal
|
|
9918
10789
|
};
|
|
@@ -9934,14 +10805,15 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9934
10805
|
);
|
|
9935
10806
|
const processSignalRegistrationTask = CadenzaService.createMetaTask(
|
|
9936
10807
|
"Process signal registration",
|
|
9937
|
-
(ctx) => {
|
|
9938
|
-
|
|
10808
|
+
(ctx, emit) => {
|
|
10809
|
+
const insertSucceeded = didSyncInsertSucceed(ctx);
|
|
10810
|
+
const signalName = resolveSignalNameFromSyncContext(ctx);
|
|
10811
|
+
if (!insertSucceeded) {
|
|
9939
10812
|
return;
|
|
9940
10813
|
}
|
|
9941
10814
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
9942
10815
|
delayMs: 3e3
|
|
9943
10816
|
});
|
|
9944
|
-
const signalName = resolveSignalNameFromSyncContext(ctx);
|
|
9945
10817
|
if (!signalName) {
|
|
9946
10818
|
return false;
|
|
9947
10819
|
}
|
|
@@ -9952,7 +10824,14 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9952
10824
|
const observer = signalObservers?.get(signalName);
|
|
9953
10825
|
if (observer) {
|
|
9954
10826
|
observer.registered = true;
|
|
10827
|
+
observer.registrationRequested = false;
|
|
9955
10828
|
}
|
|
10829
|
+
emit(
|
|
10830
|
+
"meta.sync_controller.signal_registered",
|
|
10831
|
+
buildMinimalSyncSignalContext(ctx, {
|
|
10832
|
+
__signal: signalName
|
|
10833
|
+
})
|
|
10834
|
+
);
|
|
9956
10835
|
return { signalName };
|
|
9957
10836
|
}
|
|
9958
10837
|
).then(CadenzaService.signalBroker.registerSignalTask).then(gatherSignalRegistrationTask);
|
|
@@ -9973,6 +10852,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9973
10852
|
return;
|
|
9974
10853
|
}
|
|
9975
10854
|
for (const task of tasks) {
|
|
10855
|
+
if (task.hidden || !task.register || task.isDeputy) continue;
|
|
9976
10856
|
if (task.registered) continue;
|
|
9977
10857
|
const { __functionString, __getTagCallback } = task.export();
|
|
9978
10858
|
this.tasksSynced = false;
|
|
@@ -9982,32 +10862,33 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9982
10862
|
name: task.name,
|
|
9983
10863
|
version: task.version,
|
|
9984
10864
|
description: task.description,
|
|
9985
|
-
|
|
9986
|
-
|
|
9987
|
-
|
|
10865
|
+
function_string: __functionString,
|
|
10866
|
+
tag_id_getter: __getTagCallback,
|
|
10867
|
+
layer_index: task.layerIndex,
|
|
9988
10868
|
concurrency: task.concurrency,
|
|
9989
10869
|
timeout: task.timeout,
|
|
9990
|
-
|
|
9991
|
-
|
|
9992
|
-
|
|
9993
|
-
|
|
9994
|
-
|
|
9995
|
-
|
|
9996
|
-
|
|
9997
|
-
|
|
9998
|
-
|
|
9999
|
-
|
|
10000
|
-
|
|
10001
|
-
|
|
10002
|
-
|
|
10003
|
-
|
|
10870
|
+
is_unique: task.isUnique,
|
|
10871
|
+
is_signal: task.isSignal,
|
|
10872
|
+
is_throttled: task.isThrottled,
|
|
10873
|
+
is_debounce: task.isDebounce,
|
|
10874
|
+
is_ephemeral: task.isEphemeral,
|
|
10875
|
+
is_meta: task.isMeta,
|
|
10876
|
+
is_sub_meta: task.isSubMeta,
|
|
10877
|
+
is_hidden: task.isHidden,
|
|
10878
|
+
validate_input_context: task.validateInputContext,
|
|
10879
|
+
validate_output_context: task.validateOutputContext,
|
|
10880
|
+
retry_count: task.retryCount,
|
|
10881
|
+
retry_delay: task.retryDelay,
|
|
10882
|
+
retry_delay_max: task.retryDelayMax,
|
|
10883
|
+
retry_delay_factor: task.retryDelayFactor,
|
|
10004
10884
|
service_name: serviceName2,
|
|
10005
10885
|
signals: {
|
|
10006
10886
|
emits: Array.from(task.emitsSignals),
|
|
10007
10887
|
signalsToEmitAfter: Array.from(task.signalsToEmitAfter),
|
|
10008
10888
|
signalsToEmitOnFail: Array.from(task.signalsToEmitOnFail),
|
|
10009
10889
|
observed: Array.from(task.observedSignals)
|
|
10010
|
-
}
|
|
10890
|
+
},
|
|
10891
|
+
intents: Array.from(task.handlesIntents)
|
|
10011
10892
|
},
|
|
10012
10893
|
__taskName: task.name
|
|
10013
10894
|
};
|
|
@@ -10030,17 +10911,20 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10030
10911
|
const registerTaskTask = CadenzaService.createMetaTask(
|
|
10031
10912
|
"Record registration",
|
|
10032
10913
|
(ctx, emit) => {
|
|
10033
|
-
|
|
10914
|
+
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
10915
|
+
const serviceName2 = resolveSyncServiceName(task);
|
|
10916
|
+
const insertSucceeded = didSyncInsertSucceed(ctx);
|
|
10917
|
+
if (!insertSucceeded) {
|
|
10034
10918
|
return;
|
|
10035
10919
|
}
|
|
10036
10920
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
10037
10921
|
delayMs: 3e3
|
|
10038
10922
|
});
|
|
10039
|
-
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
10040
10923
|
if (!task) {
|
|
10041
10924
|
return true;
|
|
10042
10925
|
}
|
|
10043
10926
|
task.registered = true;
|
|
10927
|
+
task.registrationRequested = false;
|
|
10044
10928
|
emit(
|
|
10045
10929
|
"meta.sync_controller.task_registered",
|
|
10046
10930
|
buildMinimalSyncSignalContext(ctx, {
|
|
@@ -10051,24 +10935,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10051
10935
|
}
|
|
10052
10936
|
).then(gatherTaskRegistrationTask);
|
|
10053
10937
|
wireSyncTaskGraph(this.splitTasksForRegistration, registerTaskGraph, registerTaskTask);
|
|
10054
|
-
CadenzaService.createMetaTask(
|
|
10055
|
-
"Prepare created task for immediate sync",
|
|
10056
|
-
(ctx) => {
|
|
10057
|
-
const task = ctx.taskInstance ?? (ctx.data?.name ? CadenzaService.get(String(ctx.data.name)) : void 0);
|
|
10058
|
-
if (!task || task.hidden || !task.register || task.registered) {
|
|
10059
|
-
return false;
|
|
10060
|
-
}
|
|
10061
|
-
return {
|
|
10062
|
-
__syncing: true,
|
|
10063
|
-
tasks: [task]
|
|
10064
|
-
};
|
|
10065
|
-
},
|
|
10066
|
-
"Schedules newly created tasks into the graph sync registration flow without waiting for the next periodic tick.",
|
|
10067
|
-
{
|
|
10068
|
-
register: false,
|
|
10069
|
-
isHidden: true
|
|
10070
|
-
}
|
|
10071
|
-
).doOn("meta.task.created").then(this.splitTasksForRegistration);
|
|
10072
10938
|
this.splitActorsForRegistration = CadenzaService.createMetaTask(
|
|
10073
10939
|
"Split actors for registration",
|
|
10074
10940
|
function* (ctx) {
|
|
@@ -10207,13 +11073,14 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10207
11073
|
const registerSignalTask = CadenzaService.createMetaTask(
|
|
10208
11074
|
"Record signal registration",
|
|
10209
11075
|
(ctx) => {
|
|
11076
|
+
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
11077
|
+
const serviceName2 = resolveSyncServiceName(task);
|
|
10210
11078
|
if (!didSyncInsertSucceed(ctx)) {
|
|
10211
11079
|
return;
|
|
10212
11080
|
}
|
|
10213
11081
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
10214
11082
|
delayMs: 3e3
|
|
10215
11083
|
});
|
|
10216
|
-
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
10217
11084
|
const signalName = resolveSignalNameFromSyncContext(ctx);
|
|
10218
11085
|
if (!task || !signalName) {
|
|
10219
11086
|
return true;
|
|
@@ -10225,7 +11092,8 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10225
11092
|
"Split observed signals of task",
|
|
10226
11093
|
function* (ctx) {
|
|
10227
11094
|
const task = ctx.task;
|
|
10228
|
-
if (task.hidden || !task.register || !task.registered)
|
|
11095
|
+
if (task.hidden || !task.register || task.isDeputy || !task.registered)
|
|
11096
|
+
return false;
|
|
10229
11097
|
const serviceName2 = resolveSyncServiceName(task);
|
|
10230
11098
|
if (!serviceName2) {
|
|
10231
11099
|
return false;
|
|
@@ -10244,11 +11112,11 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10244
11112
|
yield {
|
|
10245
11113
|
__syncing: ctx.__syncing,
|
|
10246
11114
|
data: {
|
|
10247
|
-
|
|
10248
|
-
isGlobal,
|
|
10249
|
-
|
|
10250
|
-
|
|
10251
|
-
|
|
11115
|
+
signal_name: _signal,
|
|
11116
|
+
is_global: isGlobal,
|
|
11117
|
+
task_name: task.name,
|
|
11118
|
+
task_version: task.version,
|
|
11119
|
+
service_name: serviceName2
|
|
10252
11120
|
},
|
|
10253
11121
|
__taskName: task.name,
|
|
10254
11122
|
__signal: signal
|
|
@@ -10289,6 +11157,9 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10289
11157
|
});
|
|
10290
11158
|
const intents = Array.isArray(ctx.intents) ? ctx.intents : Array.from(CadenzaService.inquiryBroker.intents.values());
|
|
10291
11159
|
for (const intent of intents) {
|
|
11160
|
+
if (!isRegistrableLocalIntentDefinition(intent)) {
|
|
11161
|
+
continue;
|
|
11162
|
+
}
|
|
10292
11163
|
const intentData = buildIntentRegistryData(intent);
|
|
10293
11164
|
if (!intentData) {
|
|
10294
11165
|
continue;
|
|
@@ -10307,7 +11178,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10307
11178
|
);
|
|
10308
11179
|
const recordIntentDefinitionRegistrationTask = CadenzaService.createMetaTask(
|
|
10309
11180
|
"Record intent definition registration",
|
|
10310
|
-
(ctx) => {
|
|
11181
|
+
(ctx, emit) => {
|
|
10311
11182
|
if (!didSyncInsertSucceed(ctx)) {
|
|
10312
11183
|
return;
|
|
10313
11184
|
}
|
|
@@ -10315,6 +11186,12 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10315
11186
|
delayMs: 3e3
|
|
10316
11187
|
});
|
|
10317
11188
|
this.registeredIntentDefinitions.add(ctx.__intentName);
|
|
11189
|
+
emit(
|
|
11190
|
+
"meta.sync_controller.intent_registered",
|
|
11191
|
+
buildMinimalSyncSignalContext(ctx, {
|
|
11192
|
+
__intentName: ctx.__intentName
|
|
11193
|
+
})
|
|
11194
|
+
);
|
|
10318
11195
|
return true;
|
|
10319
11196
|
}
|
|
10320
11197
|
).then(gatherIntentRegistrationTask);
|
|
@@ -10326,13 +11203,13 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10326
11203
|
const registerIntentTask = CadenzaService.createMetaTask(
|
|
10327
11204
|
"Record intent registration",
|
|
10328
11205
|
(ctx) => {
|
|
11206
|
+
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
10329
11207
|
if (!didSyncInsertSucceed(ctx)) {
|
|
10330
11208
|
return;
|
|
10331
11209
|
}
|
|
10332
11210
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
10333
11211
|
delayMs: 3e3
|
|
10334
11212
|
});
|
|
10335
|
-
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
10336
11213
|
if (!task) {
|
|
10337
11214
|
return true;
|
|
10338
11215
|
}
|
|
@@ -10344,7 +11221,8 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10344
11221
|
"Split intents of task",
|
|
10345
11222
|
function* (ctx) {
|
|
10346
11223
|
const task = ctx.task;
|
|
10347
|
-
if (task.hidden || !task.register || !task.registered)
|
|
11224
|
+
if (task.hidden || !task.register || task.isDeputy || !task.registered)
|
|
11225
|
+
return false;
|
|
10348
11226
|
const serviceName2 = resolveSyncServiceName(task);
|
|
10349
11227
|
if (!serviceName2) {
|
|
10350
11228
|
return false;
|
|
@@ -10379,19 +11257,19 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10379
11257
|
yield {
|
|
10380
11258
|
__syncing: ctx.__syncing,
|
|
10381
11259
|
data: {
|
|
10382
|
-
|
|
10383
|
-
|
|
10384
|
-
|
|
10385
|
-
|
|
11260
|
+
intent_name: intent,
|
|
11261
|
+
task_name: task.name,
|
|
11262
|
+
task_version: task.version,
|
|
11263
|
+
service_name: serviceName2
|
|
10386
11264
|
},
|
|
10387
11265
|
__taskName: task.name,
|
|
10388
11266
|
__intent: intent,
|
|
10389
11267
|
__intentDefinition: intentDefinition,
|
|
10390
11268
|
__intentMapData: {
|
|
10391
|
-
|
|
10392
|
-
|
|
10393
|
-
|
|
10394
|
-
|
|
11269
|
+
intent_name: intent,
|
|
11270
|
+
task_name: task.name,
|
|
11271
|
+
task_version: task.version,
|
|
11272
|
+
service_name: serviceName2
|
|
10395
11273
|
}
|
|
10396
11274
|
};
|
|
10397
11275
|
emittedCount += 1;
|
|
@@ -10399,30 +11277,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10399
11277
|
return emittedCount > 0;
|
|
10400
11278
|
}.bind(this)
|
|
10401
11279
|
);
|
|
10402
|
-
const prepareIntentDefinitionForIntentMapTask = CadenzaService.createMetaTask(
|
|
10403
|
-
"Prepare intent definition for intent-to-task map",
|
|
10404
|
-
(ctx) => {
|
|
10405
|
-
if (!ctx.__intentDefinition || !ctx.__intentMapData) {
|
|
10406
|
-
return false;
|
|
10407
|
-
}
|
|
10408
|
-
return {
|
|
10409
|
-
...ctx,
|
|
10410
|
-
data: ctx.__intentDefinition
|
|
10411
|
-
};
|
|
10412
|
-
}
|
|
10413
|
-
);
|
|
10414
|
-
const restoreIntentToTaskMapPayloadTask = CadenzaService.createMetaTask(
|
|
10415
|
-
"Restore intent-to-task map payload",
|
|
10416
|
-
(ctx) => {
|
|
10417
|
-
if (!ctx.__intentMapData) {
|
|
10418
|
-
return false;
|
|
10419
|
-
}
|
|
10420
|
-
return {
|
|
10421
|
-
...ctx,
|
|
10422
|
-
data: ctx.__intentMapData
|
|
10423
|
-
};
|
|
10424
|
-
}
|
|
10425
|
-
);
|
|
10426
11280
|
const intentToTaskMapGraph = resolveSyncInsertTask(
|
|
10427
11281
|
this.isCadenzaDBReady,
|
|
10428
11282
|
"intent_to_task_map",
|
|
@@ -10441,20 +11295,8 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10441
11295
|
},
|
|
10442
11296
|
{ concurrency: 30 }
|
|
10443
11297
|
);
|
|
10444
|
-
this.registerIntentToTaskMapTask.then(prepareIntentDefinitionForIntentMapTask);
|
|
10445
|
-
if (ensureIntentRegistryBeforeIntentMapTask) {
|
|
10446
|
-
wireSyncTaskGraph(
|
|
10447
|
-
prepareIntentDefinitionForIntentMapTask,
|
|
10448
|
-
ensureIntentRegistryBeforeIntentMapTask,
|
|
10449
|
-
restoreIntentToTaskMapPayloadTask
|
|
10450
|
-
);
|
|
10451
|
-
} else {
|
|
10452
|
-
prepareIntentDefinitionForIntentMapTask.then(
|
|
10453
|
-
restoreIntentToTaskMapPayloadTask
|
|
10454
|
-
);
|
|
10455
|
-
}
|
|
10456
11298
|
wireSyncTaskGraph(
|
|
10457
|
-
|
|
11299
|
+
this.registerIntentToTaskMapTask,
|
|
10458
11300
|
intentToTaskMapGraph,
|
|
10459
11301
|
registerIntentTask
|
|
10460
11302
|
);
|
|
@@ -10465,7 +11307,9 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10465
11307
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
10466
11308
|
delayMs: 3e3
|
|
10467
11309
|
});
|
|
10468
|
-
if (task.hidden || !task.register)
|
|
11310
|
+
if (task.hidden || !task.register || task.isDeputy || !task.registered) {
|
|
11311
|
+
return;
|
|
11312
|
+
}
|
|
10469
11313
|
const predecessorServiceName = resolveSyncServiceName(task);
|
|
10470
11314
|
if (!predecessorServiceName) {
|
|
10471
11315
|
return;
|
|
@@ -10480,12 +11324,12 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10480
11324
|
}
|
|
10481
11325
|
yield {
|
|
10482
11326
|
data: {
|
|
10483
|
-
|
|
10484
|
-
|
|
10485
|
-
|
|
10486
|
-
|
|
10487
|
-
|
|
10488
|
-
predecessorServiceName
|
|
11327
|
+
task_name: t.name,
|
|
11328
|
+
task_version: t.version,
|
|
11329
|
+
predecessor_task_name: task.name,
|
|
11330
|
+
predecessor_task_version: task.version,
|
|
11331
|
+
service_name: serviceName2,
|
|
11332
|
+
predecessor_service_name: predecessorServiceName
|
|
10489
11333
|
},
|
|
10490
11334
|
__taskName: task.name,
|
|
10491
11335
|
__nextTaskName: t.name
|
|
@@ -10532,519 +11376,598 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10532
11376
|
taskMapRegistrationGraph,
|
|
10533
11377
|
recordTaskMapRegistrationTask
|
|
10534
11378
|
);
|
|
10535
|
-
|
|
10536
|
-
|
|
10537
|
-
|
|
10538
|
-
|
|
10539
|
-
|
|
10540
|
-
|
|
10541
|
-
|
|
10542
|
-
|
|
10543
|
-
|
|
10544
|
-
|
|
10545
|
-
|
|
10546
|
-
|
|
10547
|
-
|
|
10548
|
-
|
|
10549
|
-
task_name: task.remoteRoutineName,
|
|
10550
|
-
task_version: 1,
|
|
10551
|
-
service_name: serviceName2,
|
|
10552
|
-
predecessor_task_name: task.name,
|
|
10553
|
-
predecessor_task_version: task.version,
|
|
10554
|
-
predecessor_service_name: predecessorServiceName
|
|
10555
|
-
},
|
|
10556
|
-
__taskName: task.name
|
|
10557
|
-
};
|
|
11379
|
+
const hasPendingDirectionalTaskMaps = () => getRegistrableTasks().some((task) => {
|
|
11380
|
+
if (task.isHidden || !task.register || !task.registered) {
|
|
11381
|
+
return false;
|
|
11382
|
+
}
|
|
11383
|
+
const predecessorServiceName = resolveSyncServiceName(task);
|
|
11384
|
+
if (!predecessorServiceName) {
|
|
11385
|
+
return false;
|
|
11386
|
+
}
|
|
11387
|
+
for (const nextTask of task.nextTasks) {
|
|
11388
|
+
if (task.taskMapRegistration.has(nextTask.name) || nextTask.isHidden || !nextTask.register || !nextTask.registered) {
|
|
11389
|
+
continue;
|
|
11390
|
+
}
|
|
11391
|
+
if (resolveSyncServiceName(nextTask)) {
|
|
11392
|
+
return true;
|
|
10558
11393
|
}
|
|
10559
11394
|
}
|
|
10560
|
-
|
|
10561
|
-
|
|
10562
|
-
|
|
10563
|
-
|
|
10564
|
-
|
|
10565
|
-
|
|
10566
|
-
|
|
10567
|
-
|
|
10568
|
-
|
|
10569
|
-
"task_version",
|
|
10570
|
-
"predecessor_task_version",
|
|
10571
|
-
"service_name",
|
|
10572
|
-
"predecessor_service_name"
|
|
10573
|
-
],
|
|
10574
|
-
action: {
|
|
10575
|
-
do: "nothing"
|
|
10576
|
-
}
|
|
11395
|
+
return false;
|
|
11396
|
+
});
|
|
11397
|
+
const hasPendingSignalTaskMaps = () => getRegistrableTasks().some((task) => {
|
|
11398
|
+
if (task.isHidden || !task.register || !task.registered) {
|
|
11399
|
+
return false;
|
|
11400
|
+
}
|
|
11401
|
+
for (const signal of task.observedSignals) {
|
|
11402
|
+
if (task.registeredSignals.has(signal)) {
|
|
11403
|
+
continue;
|
|
10577
11404
|
}
|
|
10578
|
-
|
|
10579
|
-
|
|
10580
|
-
|
|
10581
|
-
const recordDeputyRelationshipRegistrationTask = CadenzaService.createMetaTask(
|
|
10582
|
-
"Record deputy relationship registration",
|
|
10583
|
-
(ctx) => {
|
|
10584
|
-
if (!didSyncInsertSucceed(ctx)) {
|
|
10585
|
-
return;
|
|
11405
|
+
const signalName = signal.split(":")[0];
|
|
11406
|
+
if (!decomposeSignalName(signalName).isGlobal) {
|
|
11407
|
+
continue;
|
|
10586
11408
|
}
|
|
10587
|
-
CadenzaService.
|
|
10588
|
-
|
|
10589
|
-
});
|
|
10590
|
-
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
10591
|
-
if (!task) {
|
|
10592
|
-
return true;
|
|
11409
|
+
if (!CadenzaService.signalBroker.signalObservers?.get(signalName)?.registered) {
|
|
11410
|
+
continue;
|
|
10593
11411
|
}
|
|
10594
|
-
|
|
11412
|
+
return true;
|
|
10595
11413
|
}
|
|
10596
|
-
|
|
10597
|
-
|
|
10598
|
-
|
|
10599
|
-
|
|
10600
|
-
|
|
10601
|
-
|
|
10602
|
-
|
|
10603
|
-
|
|
10604
|
-
|
|
10605
|
-
|
|
10606
|
-
|
|
10607
|
-
|
|
10608
|
-
|
|
10609
|
-
|
|
11414
|
+
return false;
|
|
11415
|
+
});
|
|
11416
|
+
const hasPendingIntentTaskMaps = () => getRegistrableTasks().some((task) => {
|
|
11417
|
+
if (task.isHidden || !task.register || !task.registered) {
|
|
11418
|
+
return false;
|
|
11419
|
+
}
|
|
11420
|
+
const registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
|
|
11421
|
+
for (const intent of task.handlesIntents) {
|
|
11422
|
+
if (registeredIntents.has(intent) || isLocalOnlySyncIntent(intent)) {
|
|
11423
|
+
continue;
|
|
11424
|
+
}
|
|
11425
|
+
if (isMetaIntentName(intent) && !task.isMeta) {
|
|
11426
|
+
continue;
|
|
11427
|
+
}
|
|
11428
|
+
const intentDefinition = buildIntentRegistryData(CadenzaService.inquiryBroker.intents.get(intent)) ?? buildIntentRegistryData({ name: intent });
|
|
11429
|
+
if (!intentDefinition) {
|
|
11430
|
+
continue;
|
|
11431
|
+
}
|
|
11432
|
+
return true;
|
|
11433
|
+
}
|
|
11434
|
+
return false;
|
|
11435
|
+
});
|
|
11436
|
+
const hasPendingActorTaskMaps = () => getRegistrableTasks().some((task) => {
|
|
11437
|
+
if (task.isHidden || !task.register || !task.registered) {
|
|
11438
|
+
return false;
|
|
11439
|
+
}
|
|
11440
|
+
const metadata = getActorTaskRuntimeMetadata(task.taskFunction);
|
|
11441
|
+
if (!metadata?.actorName) {
|
|
11442
|
+
return false;
|
|
11443
|
+
}
|
|
11444
|
+
const serviceName2 = resolveSyncServiceName(task);
|
|
11445
|
+
if (!serviceName2) {
|
|
11446
|
+
return false;
|
|
11447
|
+
}
|
|
11448
|
+
const registrationKey = `${metadata.actorName}|${task.name}|${task.version}|${serviceName2}`;
|
|
11449
|
+
return !this.registeredActorTaskMaps.has(registrationKey);
|
|
11450
|
+
});
|
|
11451
|
+
const hasPendingRoutineTaskMaps = () => getRegistrableRoutines().some((routine) => {
|
|
11452
|
+
if (!routine.registered) {
|
|
11453
|
+
return false;
|
|
11454
|
+
}
|
|
11455
|
+
for (const task of routine.tasks) {
|
|
11456
|
+
if (!task) {
|
|
11457
|
+
continue;
|
|
11458
|
+
}
|
|
11459
|
+
const tasks = task.getIterator();
|
|
11460
|
+
while (tasks.hasNext()) {
|
|
11461
|
+
const nextTask = tasks.next();
|
|
11462
|
+
if (!nextTask?.registered) {
|
|
10610
11463
|
continue;
|
|
10611
11464
|
}
|
|
10612
|
-
|
|
10613
|
-
|
|
10614
|
-
continue;
|
|
11465
|
+
if (!routine.registeredTasks.has(nextTask.name)) {
|
|
11466
|
+
return true;
|
|
10615
11467
|
}
|
|
10616
|
-
task.registered = true;
|
|
10617
|
-
changed = true;
|
|
10618
|
-
emit("meta.sync_controller.task_registered", {
|
|
10619
|
-
...ctx,
|
|
10620
|
-
__taskName: task.name,
|
|
10621
|
-
task,
|
|
10622
|
-
__authoritativeReconciliation: true
|
|
10623
|
-
});
|
|
10624
11468
|
}
|
|
10625
|
-
|
|
10626
|
-
|
|
10627
|
-
|
|
10628
|
-
|
|
10629
|
-
|
|
11469
|
+
}
|
|
11470
|
+
return false;
|
|
11471
|
+
});
|
|
11472
|
+
const gatherDirectionalTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
|
|
11473
|
+
"Gather directional task map registration",
|
|
11474
|
+
(ctx) => {
|
|
11475
|
+
if (hasPendingDirectionalTaskMaps()) {
|
|
11476
|
+
this.directionalTaskMapsSynced = false;
|
|
11477
|
+
return false;
|
|
10630
11478
|
}
|
|
10631
|
-
|
|
11479
|
+
this.directionalTaskMapsSynced = true;
|
|
11480
|
+
return ctx;
|
|
10632
11481
|
},
|
|
10633
|
-
"
|
|
11482
|
+
"Completes directional task graph registration when task edges and deputy edges are registered.",
|
|
10634
11483
|
{
|
|
10635
11484
|
register: false,
|
|
10636
11485
|
isHidden: true
|
|
10637
11486
|
}
|
|
10638
11487
|
);
|
|
10639
|
-
const
|
|
10640
|
-
"
|
|
10641
|
-
(ctx
|
|
10642
|
-
|
|
10643
|
-
|
|
10644
|
-
|
|
10645
|
-
const routineName = typeof row.name === "string" ? row.name : "";
|
|
10646
|
-
if (!routineName) {
|
|
10647
|
-
continue;
|
|
10648
|
-
}
|
|
10649
|
-
const routine = CadenzaService.getRoutine(routineName);
|
|
10650
|
-
if (!routine || routine.registered) {
|
|
10651
|
-
continue;
|
|
10652
|
-
}
|
|
10653
|
-
routine.registered = true;
|
|
10654
|
-
changed = true;
|
|
11488
|
+
const gatherSignalTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
|
|
11489
|
+
"Gather signal task map registration",
|
|
11490
|
+
(ctx) => {
|
|
11491
|
+
if (hasPendingSignalTaskMaps()) {
|
|
11492
|
+
this.signalTaskMapsSynced = false;
|
|
11493
|
+
return false;
|
|
10655
11494
|
}
|
|
10656
|
-
|
|
10657
|
-
|
|
10658
|
-
|
|
10659
|
-
|
|
10660
|
-
|
|
11495
|
+
this.signalTaskMapsSynced = true;
|
|
11496
|
+
return ctx;
|
|
11497
|
+
},
|
|
11498
|
+
"Completes signal-to-task map registration when all global observed signal edges are registered.",
|
|
11499
|
+
{
|
|
11500
|
+
register: false,
|
|
11501
|
+
isHidden: true
|
|
11502
|
+
}
|
|
11503
|
+
);
|
|
11504
|
+
const gatherIntentTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
|
|
11505
|
+
"Gather intent task map registration",
|
|
11506
|
+
(ctx) => {
|
|
11507
|
+
if (hasPendingIntentTaskMaps()) {
|
|
11508
|
+
this.intentTaskMapsSynced = false;
|
|
11509
|
+
return false;
|
|
10661
11510
|
}
|
|
10662
|
-
|
|
11511
|
+
this.intentTaskMapsSynced = true;
|
|
11512
|
+
return ctx;
|
|
10663
11513
|
},
|
|
10664
|
-
"
|
|
11514
|
+
"Completes intent-to-task map registration when all task responders are registered.",
|
|
10665
11515
|
{
|
|
10666
11516
|
register: false,
|
|
10667
11517
|
isHidden: true
|
|
10668
11518
|
}
|
|
10669
11519
|
);
|
|
10670
|
-
const
|
|
10671
|
-
"
|
|
10672
|
-
(ctx
|
|
10673
|
-
|
|
10674
|
-
|
|
10675
|
-
|
|
10676
|
-
for (const row of authoritativeSignals) {
|
|
10677
|
-
const signalName = typeof row.name === "string" ? row.name : "";
|
|
10678
|
-
if (!signalName) {
|
|
10679
|
-
continue;
|
|
10680
|
-
}
|
|
10681
|
-
const observer = signalObservers?.get(signalName);
|
|
10682
|
-
if (!observer || observer.registered) {
|
|
10683
|
-
continue;
|
|
10684
|
-
}
|
|
10685
|
-
observer.registered = true;
|
|
10686
|
-
changed = true;
|
|
11520
|
+
const gatherActorTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
|
|
11521
|
+
"Gather actor task map registration",
|
|
11522
|
+
(ctx) => {
|
|
11523
|
+
if (hasPendingActorTaskMaps()) {
|
|
11524
|
+
this.actorTaskMapsSynced = false;
|
|
11525
|
+
return false;
|
|
10687
11526
|
}
|
|
10688
|
-
|
|
10689
|
-
|
|
10690
|
-
|
|
10691
|
-
|
|
10692
|
-
|
|
11527
|
+
this.actorTaskMapsSynced = true;
|
|
11528
|
+
return ctx;
|
|
11529
|
+
},
|
|
11530
|
+
"Completes actor-to-task map registration when all actor-backed tasks are registered.",
|
|
11531
|
+
{
|
|
11532
|
+
register: false,
|
|
11533
|
+
isHidden: true
|
|
11534
|
+
}
|
|
11535
|
+
);
|
|
11536
|
+
const gatherRoutineTaskMapRegistrationTask = CadenzaService.createUniqueMetaTask(
|
|
11537
|
+
"Gather routine task map registration",
|
|
11538
|
+
(ctx) => {
|
|
11539
|
+
if (hasPendingRoutineTaskMaps()) {
|
|
11540
|
+
this.routineTaskMapsSynced = false;
|
|
11541
|
+
return false;
|
|
10693
11542
|
}
|
|
10694
|
-
|
|
11543
|
+
this.routineTaskMapsSynced = true;
|
|
11544
|
+
return ctx;
|
|
10695
11545
|
},
|
|
10696
|
-
"
|
|
11546
|
+
"Completes task-to-routine map registration when all routine task memberships are registered.",
|
|
10697
11547
|
{
|
|
10698
11548
|
register: false,
|
|
10699
11549
|
isHidden: true
|
|
10700
11550
|
}
|
|
10701
11551
|
);
|
|
10702
|
-
const
|
|
10703
|
-
"
|
|
11552
|
+
const finishSyncTask = CadenzaService.createUniqueMetaTask(
|
|
11553
|
+
"Finish sync",
|
|
10704
11554
|
(ctx, emit) => {
|
|
10705
|
-
const
|
|
10706
|
-
|
|
10707
|
-
|
|
10708
|
-
|
|
10709
|
-
|
|
10710
|
-
|
|
10711
|
-
|
|
10712
|
-
|
|
10713
|
-
|
|
11555
|
+
const syncCycleId = typeof ctx.__syncCycleId === "string" ? ctx.__syncCycleId.trim() : "";
|
|
11556
|
+
if (syncCycleId && this.activeSyncCycleId === syncCycleId) {
|
|
11557
|
+
this.activeSyncCycleId = null;
|
|
11558
|
+
this.activeSyncCycleStartedAt = 0;
|
|
11559
|
+
}
|
|
11560
|
+
if (this.pendingBootstrapSyncRerun) {
|
|
11561
|
+
this.pendingBootstrapSyncRerun = false;
|
|
11562
|
+
CadenzaService.debounce("meta.sync_requested", {
|
|
11563
|
+
delayMs: 100
|
|
11564
|
+
});
|
|
11565
|
+
}
|
|
11566
|
+
emit("global.meta.sync_controller.synced", {
|
|
11567
|
+
data: {
|
|
11568
|
+
is_active: true,
|
|
11569
|
+
is_non_responsive: false,
|
|
11570
|
+
is_blocked: false,
|
|
11571
|
+
last_active: formatTimestamp(Date.now())
|
|
11572
|
+
},
|
|
11573
|
+
filter: {
|
|
11574
|
+
uuid: CadenzaService.serviceRegistry.serviceInstanceId
|
|
10714
11575
|
}
|
|
10715
|
-
|
|
10716
|
-
|
|
11576
|
+
});
|
|
11577
|
+
return true;
|
|
11578
|
+
},
|
|
11579
|
+
"Marks the current bootstrap sync cycle as complete.",
|
|
11580
|
+
{
|
|
11581
|
+
register: false,
|
|
11582
|
+
isHidden: true
|
|
11583
|
+
}
|
|
11584
|
+
).attachSignal("global.meta.sync_controller.synced");
|
|
11585
|
+
const mapPhaseBarrierTask = CadenzaService.createUniqueMetaTask(
|
|
11586
|
+
"Complete map sync phase",
|
|
11587
|
+
(ctx) => {
|
|
11588
|
+
const syncCycleId = typeof ctx.__syncCycleId === "string" ? ctx.__syncCycleId.trim() : "";
|
|
11589
|
+
if (!syncCycleId) {
|
|
11590
|
+
return false;
|
|
10717
11591
|
}
|
|
10718
|
-
|
|
10719
|
-
|
|
10720
|
-
|
|
10721
|
-
|
|
11592
|
+
const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
|
|
11593
|
+
if (shouldTraceSyncPhase(serviceName2)) {
|
|
11594
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] map_barrier_check", {
|
|
11595
|
+
serviceName: serviceName2,
|
|
11596
|
+
syncCycleId,
|
|
11597
|
+
directionalTaskMapsSynced: this.directionalTaskMapsSynced,
|
|
11598
|
+
signalTaskMapsSynced: this.signalTaskMapsSynced,
|
|
11599
|
+
intentTaskMapsSynced: this.intentTaskMapsSynced,
|
|
11600
|
+
actorTaskMapsSynced: this.actorTaskMapsSynced,
|
|
11601
|
+
routineTaskMapsSynced: this.routineTaskMapsSynced
|
|
10722
11602
|
});
|
|
10723
11603
|
}
|
|
10724
|
-
|
|
11604
|
+
if (!this.directionalTaskMapsSynced || !this.signalTaskMapsSynced || !this.intentTaskMapsSynced || !this.actorTaskMapsSynced || !this.routineTaskMapsSynced) {
|
|
11605
|
+
return false;
|
|
11606
|
+
}
|
|
11607
|
+
if (!markCompletedSyncCycle(this.mapPhaseCompletedCycles, syncCycleId)) {
|
|
11608
|
+
return false;
|
|
11609
|
+
}
|
|
11610
|
+
return ctx;
|
|
10725
11611
|
},
|
|
10726
|
-
"
|
|
11612
|
+
"Fans in map branch completion and ends the current sync cycle once every map branch is complete.",
|
|
11613
|
+
{
|
|
11614
|
+
register: false,
|
|
11615
|
+
isHidden: true
|
|
11616
|
+
}
|
|
11617
|
+
).then(finishSyncTask);
|
|
11618
|
+
const startDirectionalTaskMapSyncTask = CadenzaService.createMetaTask(
|
|
11619
|
+
"Start directional task map sync",
|
|
11620
|
+
(ctx) => ctx,
|
|
11621
|
+
"Starts the directional task graph map branch for the current sync cycle.",
|
|
10727
11622
|
{
|
|
10728
11623
|
register: false,
|
|
10729
11624
|
isHidden: true
|
|
10730
11625
|
}
|
|
10731
11626
|
);
|
|
10732
|
-
const
|
|
10733
|
-
"
|
|
10734
|
-
() =>
|
|
10735
|
-
"
|
|
11627
|
+
const startSignalTaskMapSyncTask = CadenzaService.createMetaTask(
|
|
11628
|
+
"Start signal task map sync",
|
|
11629
|
+
(ctx) => ctx,
|
|
11630
|
+
"Starts the signal-to-task map branch for the current sync cycle.",
|
|
10736
11631
|
{
|
|
10737
11632
|
register: false,
|
|
10738
11633
|
isHidden: true
|
|
10739
11634
|
}
|
|
10740
11635
|
);
|
|
10741
|
-
const
|
|
10742
|
-
"
|
|
10743
|
-
() =>
|
|
10744
|
-
"
|
|
11636
|
+
const startIntentTaskMapSyncTask = CadenzaService.createMetaTask(
|
|
11637
|
+
"Start intent task map sync",
|
|
11638
|
+
(ctx) => ctx,
|
|
11639
|
+
"Starts the intent-to-task map branch for the current sync cycle.",
|
|
10745
11640
|
{
|
|
10746
11641
|
register: false,
|
|
10747
11642
|
isHidden: true
|
|
10748
11643
|
}
|
|
10749
11644
|
);
|
|
10750
|
-
const
|
|
10751
|
-
"
|
|
10752
|
-
() =>
|
|
10753
|
-
"
|
|
11645
|
+
const startActorTaskMapSyncTask = CadenzaService.createMetaTask(
|
|
11646
|
+
"Start actor task map sync",
|
|
11647
|
+
(ctx) => ctx,
|
|
11648
|
+
"Starts the actor-to-task map branch for the current sync cycle.",
|
|
10754
11649
|
{
|
|
10755
11650
|
register: false,
|
|
10756
11651
|
isHidden: true
|
|
10757
11652
|
}
|
|
10758
11653
|
);
|
|
10759
|
-
const
|
|
10760
|
-
"
|
|
10761
|
-
() =>
|
|
10762
|
-
"
|
|
11654
|
+
const startRoutineTaskMapSyncTask = CadenzaService.createMetaTask(
|
|
11655
|
+
"Start routine task map sync",
|
|
11656
|
+
(ctx) => ctx,
|
|
11657
|
+
"Starts the task-to-routine map branch for the current sync cycle.",
|
|
10763
11658
|
{
|
|
10764
11659
|
register: false,
|
|
10765
11660
|
isHidden: true
|
|
10766
11661
|
}
|
|
10767
11662
|
);
|
|
10768
|
-
|
|
10769
|
-
|
|
10770
|
-
reconcileTaskRegistrationFromAuthorityTask
|
|
10771
|
-
);
|
|
10772
|
-
}
|
|
10773
|
-
if (authoritativeRoutineQueryGraph) {
|
|
10774
|
-
authoritativeRoutineQueryGraph.completionTask.then(
|
|
10775
|
-
reconcileRoutineRegistrationFromAuthorityTask
|
|
10776
|
-
);
|
|
10777
|
-
}
|
|
10778
|
-
if (authoritativeSignalQueryGraph) {
|
|
10779
|
-
authoritativeSignalQueryGraph.completionTask.then(
|
|
10780
|
-
reconcileSignalRegistrationFromAuthorityTask
|
|
10781
|
-
);
|
|
10782
|
-
}
|
|
10783
|
-
if (authoritativeIntentQueryGraph) {
|
|
10784
|
-
authoritativeIntentQueryGraph.completionTask.then(
|
|
10785
|
-
reconcileIntentRegistrationFromAuthorityTask
|
|
10786
|
-
);
|
|
10787
|
-
}
|
|
10788
|
-
const authoritativeRegistrationTriggers = [
|
|
10789
|
-
"meta.service_registry.initial_sync_complete",
|
|
10790
|
-
"meta.sync_requested",
|
|
10791
|
-
"meta.sync_controller.synced_resource",
|
|
10792
|
-
"meta.sync_controller.authority_registration_reconciliation_requested"
|
|
10793
|
-
];
|
|
10794
|
-
CadenzaService.createMetaTask(
|
|
10795
|
-
"Prepare authoritative task registration query",
|
|
11663
|
+
const primitivePhaseBarrierTask = CadenzaService.createUniqueMetaTask(
|
|
11664
|
+
"Complete primitive sync phase",
|
|
10796
11665
|
(ctx) => {
|
|
10797
|
-
|
|
11666
|
+
const syncCycleId = typeof ctx.__syncCycleId === "string" ? ctx.__syncCycleId.trim() : "";
|
|
11667
|
+
if (!syncCycleId) {
|
|
10798
11668
|
return false;
|
|
10799
11669
|
}
|
|
10800
|
-
const serviceName2 = resolveSyncServiceName();
|
|
10801
|
-
if (
|
|
11670
|
+
const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
|
|
11671
|
+
if (shouldTraceSyncPhase(serviceName2)) {
|
|
11672
|
+
console.log("[CADENZA_SYNC_PHASE_TRACE] primitive_barrier_check", {
|
|
11673
|
+
serviceName: serviceName2,
|
|
11674
|
+
syncCycleId,
|
|
11675
|
+
tasksSynced: this.tasksSynced,
|
|
11676
|
+
signalsSynced: this.signalsSynced,
|
|
11677
|
+
intentsSynced: this.intentsSynced,
|
|
11678
|
+
actorsSynced: this.actorsSynced,
|
|
11679
|
+
routinesSynced: this.routinesSynced
|
|
11680
|
+
});
|
|
11681
|
+
}
|
|
11682
|
+
if (!this.tasksSynced || !this.signalsSynced || !this.intentsSynced || !this.actorsSynced || !this.routinesSynced) {
|
|
10802
11683
|
return false;
|
|
10803
11684
|
}
|
|
10804
|
-
|
|
10805
|
-
|
|
10806
|
-
|
|
10807
|
-
|
|
10808
|
-
|
|
10809
|
-
|
|
10810
|
-
|
|
10811
|
-
|
|
10812
|
-
|
|
10813
|
-
};
|
|
11685
|
+
if (!markCompletedSyncCycle(this.primitivePhaseCompletedCycles, syncCycleId)) {
|
|
11686
|
+
return false;
|
|
11687
|
+
}
|
|
11688
|
+
this.directionalTaskMapsSynced = false;
|
|
11689
|
+
this.signalTaskMapsSynced = false;
|
|
11690
|
+
this.intentTaskMapsSynced = false;
|
|
11691
|
+
this.actorTaskMapsSynced = false;
|
|
11692
|
+
this.routineTaskMapsSynced = false;
|
|
11693
|
+
return ctx;
|
|
10814
11694
|
},
|
|
10815
|
-
"
|
|
11695
|
+
"Fans in primitive registration and opens the map registration phase once every primitive branch is complete.",
|
|
10816
11696
|
{
|
|
10817
11697
|
register: false,
|
|
10818
11698
|
isHidden: true
|
|
10819
11699
|
}
|
|
10820
|
-
).
|
|
10821
|
-
|
|
10822
|
-
|
|
10823
|
-
|
|
10824
|
-
|
|
11700
|
+
).then(
|
|
11701
|
+
startDirectionalTaskMapSyncTask,
|
|
11702
|
+
startSignalTaskMapSyncTask,
|
|
11703
|
+
startIntentTaskMapSyncTask,
|
|
11704
|
+
startActorTaskMapSyncTask,
|
|
11705
|
+
startRoutineTaskMapSyncTask
|
|
11706
|
+
);
|
|
11707
|
+
gatherTaskRegistrationTask.then(primitivePhaseBarrierTask);
|
|
11708
|
+
gatherSignalRegistrationTask.then(primitivePhaseBarrierTask);
|
|
11709
|
+
gatherIntentRegistrationTask.then(primitivePhaseBarrierTask);
|
|
11710
|
+
gatherActorRegistrationTask.then(primitivePhaseBarrierTask);
|
|
11711
|
+
gatherRoutineRegistrationTask.then(primitivePhaseBarrierTask);
|
|
11712
|
+
const markLocalServiceInsertedForBootstrapSyncTask = CadenzaService.createUniqueMetaTask(
|
|
11713
|
+
"Mark local service inserted for bootstrap sync",
|
|
10825
11714
|
(ctx) => {
|
|
10826
|
-
if (!this.isCadenzaDBReady) {
|
|
10827
|
-
return false;
|
|
10828
|
-
}
|
|
10829
11715
|
const serviceName2 = resolveSyncServiceName();
|
|
10830
|
-
|
|
11716
|
+
const insertedServiceName = typeof ctx.__serviceName === "string" ? ctx.__serviceName : typeof ctx.service_name === "string" ? ctx.service_name : null;
|
|
11717
|
+
if (!serviceName2 || insertedServiceName !== serviceName2) {
|
|
10831
11718
|
return false;
|
|
10832
11719
|
}
|
|
10833
|
-
|
|
10834
|
-
|
|
10835
|
-
__syncServiceName: serviceName2,
|
|
10836
|
-
queryData: {
|
|
10837
|
-
filter: {
|
|
10838
|
-
service_name: serviceName2
|
|
10839
|
-
},
|
|
10840
|
-
fields: ["name", "version", "service_name"]
|
|
10841
|
-
}
|
|
10842
|
-
};
|
|
11720
|
+
this.localServiceInserted = true;
|
|
11721
|
+
return true;
|
|
10843
11722
|
},
|
|
10844
|
-
"
|
|
11723
|
+
"Marks that the local service row has been inserted in authority so bootstrap sync can start only after that prerequisite.",
|
|
10845
11724
|
{
|
|
10846
11725
|
register: false,
|
|
10847
11726
|
isHidden: true
|
|
10848
11727
|
}
|
|
10849
|
-
).doOn(
|
|
10850
|
-
|
|
10851
|
-
|
|
10852
|
-
CadenzaService.createMetaTask(
|
|
10853
|
-
"Prepare authoritative signal registration query",
|
|
11728
|
+
).doOn("meta.service_registry.service_inserted");
|
|
11729
|
+
const markLocalServiceInstanceInsertedForBootstrapSyncTask = CadenzaService.createUniqueMetaTask(
|
|
11730
|
+
"Mark local service instance inserted for bootstrap sync",
|
|
10854
11731
|
(ctx) => {
|
|
10855
|
-
|
|
11732
|
+
const serviceName2 = resolveSyncServiceName();
|
|
11733
|
+
const insertedServiceName = typeof ctx.__serviceName === "string" ? ctx.__serviceName : typeof ctx.service_name === "string" ? ctx.service_name : null;
|
|
11734
|
+
if (!serviceName2 || insertedServiceName !== serviceName2) {
|
|
10856
11735
|
return false;
|
|
10857
11736
|
}
|
|
10858
|
-
|
|
10859
|
-
|
|
10860
|
-
queryData: {
|
|
10861
|
-
fields: ["name"]
|
|
10862
|
-
}
|
|
10863
|
-
};
|
|
11737
|
+
this.localServiceInstanceInserted = true;
|
|
11738
|
+
return true;
|
|
10864
11739
|
},
|
|
10865
|
-
"
|
|
11740
|
+
"Marks that the local service instance row has been inserted in authority so bootstrap sync can start only after that prerequisite.",
|
|
10866
11741
|
{
|
|
10867
11742
|
register: false,
|
|
10868
11743
|
isHidden: true
|
|
10869
11744
|
}
|
|
10870
|
-
).doOn(
|
|
10871
|
-
|
|
10872
|
-
|
|
10873
|
-
CadenzaService.createMetaTask(
|
|
10874
|
-
"Prepare authoritative intent registration query",
|
|
11745
|
+
).doOn("meta.service_registry.instance_inserted");
|
|
11746
|
+
const startBootstrapSyncTask = CadenzaService.createUniqueMetaTask(
|
|
11747
|
+
"Start bootstrap graph sync",
|
|
10875
11748
|
(ctx) => {
|
|
10876
|
-
|
|
11749
|
+
const now = Date.now();
|
|
11750
|
+
const serviceName2 = resolveSyncServiceName();
|
|
11751
|
+
const serviceInstanceId = CadenzaService.serviceRegistry.serviceInstanceId;
|
|
11752
|
+
if (!serviceName2 || !serviceInstanceId) {
|
|
11753
|
+
return false;
|
|
11754
|
+
}
|
|
11755
|
+
if (!this.localServiceInserted) {
|
|
11756
|
+
return false;
|
|
11757
|
+
}
|
|
11758
|
+
if (!this.localServiceInstanceInserted) {
|
|
10877
11759
|
return false;
|
|
10878
11760
|
}
|
|
11761
|
+
if (!ServiceRegistry.instance.hasLocalInstanceRegistered()) {
|
|
11762
|
+
return false;
|
|
11763
|
+
}
|
|
11764
|
+
if (this.activeSyncCycleId) {
|
|
11765
|
+
const activeCycleAgeMs = now - this.activeSyncCycleStartedAt;
|
|
11766
|
+
if (activeCycleAgeMs < BOOTSTRAP_SYNC_STALE_CYCLE_MS) {
|
|
11767
|
+
this.pendingBootstrapSyncRerun = true;
|
|
11768
|
+
return false;
|
|
11769
|
+
}
|
|
11770
|
+
}
|
|
11771
|
+
const syncCycleId = `${now}-${++this.syncCycleCounter}`;
|
|
11772
|
+
this.activeSyncCycleId = syncCycleId;
|
|
11773
|
+
this.activeSyncCycleStartedAt = now;
|
|
11774
|
+
this.pendingBootstrapSyncRerun = false;
|
|
11775
|
+
this.tasksSynced = false;
|
|
11776
|
+
this.signalsSynced = false;
|
|
11777
|
+
this.intentsSynced = false;
|
|
11778
|
+
this.actorsSynced = false;
|
|
11779
|
+
this.routinesSynced = false;
|
|
10879
11780
|
return {
|
|
10880
11781
|
...ctx,
|
|
10881
|
-
|
|
10882
|
-
|
|
10883
|
-
|
|
11782
|
+
__syncing: true,
|
|
11783
|
+
__syncCycleId: syncCycleId,
|
|
11784
|
+
__serviceName: serviceName2,
|
|
11785
|
+
__serviceInstanceId: serviceInstanceId
|
|
10884
11786
|
};
|
|
10885
11787
|
},
|
|
10886
|
-
"
|
|
11788
|
+
"Starts a deterministic bootstrap sync cycle once the local service instance exists.",
|
|
10887
11789
|
{
|
|
10888
11790
|
register: false,
|
|
10889
11791
|
isHidden: true
|
|
10890
11792
|
}
|
|
10891
|
-
).doOn(
|
|
10892
|
-
|
|
10893
|
-
|
|
10894
|
-
CadenzaService.signalBroker.getSignalsTask.clone().doOn(
|
|
10895
|
-
"meta.sync_controller.sync_tick",
|
|
10896
|
-
"meta.service_registry.initial_sync_complete",
|
|
10897
|
-
"meta.sync_requested"
|
|
10898
|
-
).then(this.splitSignalsTask);
|
|
10899
|
-
CadenzaService.registry.getAllTasks.clone().doOn(
|
|
10900
|
-
"meta.sync_controller.sync_tick",
|
|
10901
|
-
"meta.sync_controller.synced_signals",
|
|
10902
|
-
"meta.sync_requested"
|
|
10903
|
-
).then(this.splitTasksForRegistration);
|
|
10904
|
-
CadenzaService.createMetaTask("Get all intents", (ctx) => {
|
|
10905
|
-
return {
|
|
10906
|
-
...ctx,
|
|
10907
|
-
intents: Array.from(CadenzaService.inquiryBroker.intents.values())
|
|
10908
|
-
};
|
|
10909
|
-
}).doOn(
|
|
10910
|
-
"meta.sync_controller.sync_tick",
|
|
10911
|
-
"meta.service_registry.initial_sync_complete",
|
|
10912
|
-
"meta.sync_requested"
|
|
10913
|
-
).then(this.splitIntentsTask);
|
|
10914
|
-
CadenzaService.registry.getAllRoutines.clone().doOn(
|
|
10915
|
-
"meta.sync_controller.sync_tick",
|
|
10916
|
-
"meta.service_registry.initial_sync_complete",
|
|
10917
|
-
"meta.sync_requested"
|
|
10918
|
-
).then(this.splitRoutinesTask);
|
|
10919
|
-
CadenzaService.createMetaTask("Get all actors", (ctx) => {
|
|
10920
|
-
return {
|
|
10921
|
-
...ctx,
|
|
10922
|
-
actors: CadenzaService.getAllActors()
|
|
10923
|
-
};
|
|
10924
|
-
}).doOn(
|
|
11793
|
+
).doOn(
|
|
11794
|
+
"meta.service_registry.service_inserted",
|
|
11795
|
+
"meta.service_registry.instance_inserted",
|
|
10925
11796
|
"meta.sync_controller.sync_tick",
|
|
10926
|
-
"meta.service_registry.initial_sync_complete",
|
|
10927
11797
|
"meta.sync_requested"
|
|
10928
|
-
)
|
|
10929
|
-
CadenzaService.createMetaTask(
|
|
10930
|
-
|
|
10931
|
-
|
|
10932
|
-
|
|
11798
|
+
);
|
|
11799
|
+
const startTaskPrimitiveSyncTask = CadenzaService.createMetaTask(
|
|
11800
|
+
"Start task primitive sync",
|
|
11801
|
+
(ctx) => ctx,
|
|
11802
|
+
"Starts the task registration branch for the current sync cycle.",
|
|
11803
|
+
{
|
|
11804
|
+
register: false,
|
|
11805
|
+
isHidden: true
|
|
10933
11806
|
}
|
|
10934
|
-
return {
|
|
10935
|
-
...ctx,
|
|
10936
|
-
task
|
|
10937
|
-
};
|
|
10938
|
-
}).doOn("meta.sync_controller.task_registered").then(
|
|
10939
|
-
this.registerTaskMapTask,
|
|
10940
|
-
this.registerDeputyRelationshipTask
|
|
10941
11807
|
);
|
|
10942
|
-
CadenzaService.
|
|
10943
|
-
"
|
|
10944
|
-
|
|
10945
|
-
"
|
|
10946
|
-
|
|
10947
|
-
|
|
10948
|
-
|
|
10949
|
-
if (!task) {
|
|
10950
|
-
return false;
|
|
11808
|
+
const startSignalPrimitiveSyncTask = CadenzaService.createMetaTask(
|
|
11809
|
+
"Start signal primitive sync",
|
|
11810
|
+
(ctx) => ctx,
|
|
11811
|
+
"Starts the signal registration branch for the current sync cycle.",
|
|
11812
|
+
{
|
|
11813
|
+
register: false,
|
|
11814
|
+
isHidden: true
|
|
10951
11815
|
}
|
|
10952
|
-
|
|
10953
|
-
|
|
10954
|
-
|
|
10955
|
-
|
|
10956
|
-
|
|
10957
|
-
|
|
10958
|
-
|
|
10959
|
-
|
|
10960
|
-
"meta.sync_requested"
|
|
10961
|
-
).then(this.registerIntentToTaskMapTask);
|
|
10962
|
-
CadenzaService.createMetaTask("Get registered task for intent sync", (ctx) => {
|
|
10963
|
-
const task = ctx.task ?? (ctx.__taskName ? CadenzaService.get(ctx.__taskName) : void 0);
|
|
10964
|
-
if (!task) {
|
|
10965
|
-
return false;
|
|
11816
|
+
);
|
|
11817
|
+
const startIntentPrimitiveSyncTask = CadenzaService.createMetaTask(
|
|
11818
|
+
"Start intent primitive sync",
|
|
11819
|
+
(ctx) => ctx,
|
|
11820
|
+
"Starts the intent registration branch for the current sync cycle.",
|
|
11821
|
+
{
|
|
11822
|
+
register: false,
|
|
11823
|
+
isHidden: true
|
|
10966
11824
|
}
|
|
10967
|
-
|
|
10968
|
-
|
|
10969
|
-
|
|
10970
|
-
|
|
10971
|
-
|
|
10972
|
-
|
|
10973
|
-
|
|
10974
|
-
|
|
10975
|
-
"meta.sync_requested"
|
|
10976
|
-
).then(this.registerActorTaskMapTask);
|
|
10977
|
-
CadenzaService.createMetaTask("Get registered task for actor sync", (ctx) => {
|
|
10978
|
-
const task = ctx.task ?? (ctx.__taskName ? CadenzaService.get(ctx.__taskName) : void 0);
|
|
10979
|
-
if (!task) {
|
|
10980
|
-
return false;
|
|
11825
|
+
);
|
|
11826
|
+
const startActorPrimitiveSyncTask = CadenzaService.createMetaTask(
|
|
11827
|
+
"Start actor primitive sync",
|
|
11828
|
+
(ctx) => ctx,
|
|
11829
|
+
"Starts the actor registration branch for the current sync cycle.",
|
|
11830
|
+
{
|
|
11831
|
+
register: false,
|
|
11832
|
+
isHidden: true
|
|
10981
11833
|
}
|
|
10982
|
-
|
|
11834
|
+
);
|
|
11835
|
+
const startRoutinePrimitiveSyncTask = CadenzaService.createMetaTask(
|
|
11836
|
+
"Start routine primitive sync",
|
|
11837
|
+
(ctx) => ctx,
|
|
11838
|
+
"Starts the routine registration branch for the current sync cycle.",
|
|
11839
|
+
{
|
|
11840
|
+
register: false,
|
|
11841
|
+
isHidden: true
|
|
11842
|
+
}
|
|
11843
|
+
);
|
|
11844
|
+
startBootstrapSyncTask.then(
|
|
11845
|
+
startTaskPrimitiveSyncTask,
|
|
11846
|
+
startSignalPrimitiveSyncTask,
|
|
11847
|
+
startIntentPrimitiveSyncTask,
|
|
11848
|
+
startActorPrimitiveSyncTask,
|
|
11849
|
+
startRoutinePrimitiveSyncTask
|
|
11850
|
+
);
|
|
11851
|
+
const getAllTasksForSyncTask = CadenzaService.registry.getAllTasks.clone();
|
|
11852
|
+
startTaskPrimitiveSyncTask.then(
|
|
11853
|
+
getAllTasksForSyncTask,
|
|
11854
|
+
gatherTaskRegistrationTask
|
|
11855
|
+
);
|
|
11856
|
+
getAllTasksForSyncTask.then(this.splitTasksForRegistration);
|
|
11857
|
+
const getSignalsForSyncTask = CadenzaService.signalBroker.getSignalsTask.clone();
|
|
11858
|
+
startSignalPrimitiveSyncTask.then(
|
|
11859
|
+
getSignalsForSyncTask,
|
|
11860
|
+
gatherSignalRegistrationTask
|
|
11861
|
+
);
|
|
11862
|
+
getSignalsForSyncTask.then(this.splitSignalsTask);
|
|
11863
|
+
const getAllIntentsForSyncTask = CadenzaService.createUniqueMetaTask(
|
|
11864
|
+
"Get all intents for sync",
|
|
11865
|
+
(ctx) => ({
|
|
10983
11866
|
...ctx,
|
|
10984
|
-
|
|
10985
|
-
|
|
10986
|
-
|
|
10987
|
-
|
|
10988
|
-
|
|
10989
|
-
|
|
10990
|
-
|
|
10991
|
-
|
|
10992
|
-
|
|
10993
|
-
return ctx;
|
|
10994
|
-
}
|
|
10995
|
-
).then(this.registerActorTaskMapTask)
|
|
11867
|
+
intents: Array.from(CadenzaService.inquiryBroker.intents.values()).filter(
|
|
11868
|
+
(intent) => isRegistrableLocalIntentDefinition(intent)
|
|
11869
|
+
)
|
|
11870
|
+
}),
|
|
11871
|
+
"Collects local intents for the primitive sync phase.",
|
|
11872
|
+
{
|
|
11873
|
+
register: false,
|
|
11874
|
+
isHidden: true
|
|
11875
|
+
}
|
|
10996
11876
|
);
|
|
10997
|
-
|
|
10998
|
-
|
|
10999
|
-
|
|
11000
|
-
"meta.sync_requested"
|
|
11001
|
-
).then(
|
|
11002
|
-
CadenzaService.createMetaTask(
|
|
11003
|
-
"Ensure routine and task sync ready",
|
|
11004
|
-
(ctx) => {
|
|
11005
|
-
if (!this.tasksSynced || !this.routinesSynced) {
|
|
11006
|
-
return false;
|
|
11007
|
-
}
|
|
11008
|
-
return ctx;
|
|
11009
|
-
}
|
|
11010
|
-
).then(this.splitTasksInRoutines)
|
|
11877
|
+
startIntentPrimitiveSyncTask.then(
|
|
11878
|
+
getAllIntentsForSyncTask,
|
|
11879
|
+
gatherIntentRegistrationTask
|
|
11011
11880
|
);
|
|
11012
|
-
|
|
11013
|
-
|
|
11014
|
-
|
|
11015
|
-
|
|
11016
|
-
|
|
11017
|
-
|
|
11018
|
-
|
|
11019
|
-
|
|
11020
|
-
|
|
11021
|
-
|
|
11881
|
+
getAllIntentsForSyncTask.then(this.splitIntentsTask);
|
|
11882
|
+
const getAllActorsForSyncTask = CadenzaService.createUniqueMetaTask(
|
|
11883
|
+
"Get all actors for sync",
|
|
11884
|
+
(ctx) => ({
|
|
11885
|
+
...ctx,
|
|
11886
|
+
actors: CadenzaService.getAllActors()
|
|
11887
|
+
}),
|
|
11888
|
+
"Collects local actors for the primitive sync phase.",
|
|
11889
|
+
{
|
|
11890
|
+
register: false,
|
|
11891
|
+
isHidden: true
|
|
11892
|
+
}
|
|
11893
|
+
);
|
|
11894
|
+
startActorPrimitiveSyncTask.then(
|
|
11895
|
+
getAllActorsForSyncTask,
|
|
11896
|
+
gatherActorRegistrationTask
|
|
11897
|
+
);
|
|
11898
|
+
getAllActorsForSyncTask.then(this.splitActorsForRegistration);
|
|
11899
|
+
const getAllRoutinesForSyncTask = CadenzaService.registry.getAllRoutines.clone();
|
|
11900
|
+
startRoutinePrimitiveSyncTask.then(
|
|
11901
|
+
getAllRoutinesForSyncTask,
|
|
11902
|
+
gatherRoutineRegistrationTask
|
|
11903
|
+
);
|
|
11904
|
+
getAllRoutinesForSyncTask.then(this.splitRoutinesTask);
|
|
11905
|
+
const iterateTasksForDirectionalTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
|
|
11906
|
+
startDirectionalTaskMapSyncTask.then(
|
|
11907
|
+
iterateTasksForDirectionalTaskMapSyncTask,
|
|
11908
|
+
gatherDirectionalTaskMapRegistrationTask
|
|
11909
|
+
);
|
|
11910
|
+
iterateTasksForDirectionalTaskMapSyncTask.then(this.registerTaskMapTask);
|
|
11911
|
+
recordTaskMapRegistrationTask.then(gatherDirectionalTaskMapRegistrationTask);
|
|
11912
|
+
gatherDirectionalTaskMapRegistrationTask.then(mapPhaseBarrierTask);
|
|
11913
|
+
const iterateTasksForSignalTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
|
|
11914
|
+
startSignalTaskMapSyncTask.then(
|
|
11915
|
+
iterateTasksForSignalTaskMapSyncTask,
|
|
11916
|
+
gatherSignalTaskMapRegistrationTask
|
|
11917
|
+
);
|
|
11918
|
+
iterateTasksForSignalTaskMapSyncTask.then(this.registerSignalToTaskMapTask);
|
|
11919
|
+
registerSignalTask.then(gatherSignalTaskMapRegistrationTask);
|
|
11920
|
+
gatherSignalTaskMapRegistrationTask.then(mapPhaseBarrierTask);
|
|
11921
|
+
const iterateTasksForIntentTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
|
|
11922
|
+
startIntentTaskMapSyncTask.then(
|
|
11923
|
+
iterateTasksForIntentTaskMapSyncTask,
|
|
11924
|
+
gatherIntentTaskMapRegistrationTask
|
|
11925
|
+
);
|
|
11926
|
+
iterateTasksForIntentTaskMapSyncTask.then(this.registerIntentToTaskMapTask);
|
|
11927
|
+
registerIntentTask.then(gatherIntentTaskMapRegistrationTask);
|
|
11928
|
+
gatherIntentTaskMapRegistrationTask.then(mapPhaseBarrierTask);
|
|
11929
|
+
const iterateTasksForActorTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
|
|
11930
|
+
startActorTaskMapSyncTask.then(
|
|
11931
|
+
iterateTasksForActorTaskMapSyncTask,
|
|
11932
|
+
gatherActorTaskMapRegistrationTask
|
|
11933
|
+
);
|
|
11934
|
+
iterateTasksForActorTaskMapSyncTask.then(this.registerActorTaskMapTask);
|
|
11935
|
+
recordActorTaskMapRegistrationTask.then(gatherActorTaskMapRegistrationTask);
|
|
11936
|
+
gatherActorTaskMapRegistrationTask.then(mapPhaseBarrierTask);
|
|
11937
|
+
const getAllRoutinesForTaskMapSyncTask = CadenzaService.registry.getAllRoutines.clone();
|
|
11938
|
+
startRoutineTaskMapSyncTask.then(
|
|
11939
|
+
getAllRoutinesForTaskMapSyncTask,
|
|
11940
|
+
gatherRoutineTaskMapRegistrationTask
|
|
11941
|
+
);
|
|
11942
|
+
getAllRoutinesForTaskMapSyncTask.then(this.splitTasksInRoutines);
|
|
11943
|
+
registerTaskToRoutineMapTask.then(gatherRoutineTaskMapRegistrationTask);
|
|
11944
|
+
gatherRoutineTaskMapRegistrationTask.then(mapPhaseBarrierTask);
|
|
11945
|
+
CadenzaService.createMetaTask(
|
|
11946
|
+
"Request sync after local service instance registration",
|
|
11947
|
+
(ctx) => {
|
|
11948
|
+
for (const delayMs of EARLY_SYNC_TICK_DELAYS_MS) {
|
|
11949
|
+
CadenzaService.schedule(
|
|
11950
|
+
"meta.sync_controller.sync_tick",
|
|
11951
|
+
{
|
|
11952
|
+
...buildMinimalSyncSignalContext(ctx),
|
|
11953
|
+
__syncing: true
|
|
11954
|
+
},
|
|
11955
|
+
delayMs
|
|
11956
|
+
);
|
|
11022
11957
|
}
|
|
11023
|
-
|
|
11024
|
-
|
|
11025
|
-
|
|
11026
|
-
|
|
11027
|
-
|
|
11028
|
-
|
|
11029
|
-
{ __syncing: true },
|
|
11030
|
-
3e5,
|
|
11031
|
-
true
|
|
11032
|
-
);
|
|
11033
|
-
} else {
|
|
11034
|
-
CadenzaService.interval(
|
|
11035
|
-
"meta.sync_controller.sync_tick",
|
|
11036
|
-
{ __syncing: true },
|
|
11037
|
-
18e4
|
|
11038
|
-
);
|
|
11039
|
-
CadenzaService.schedule(
|
|
11040
|
-
"meta.sync_controller.sync_tick",
|
|
11041
|
-
{ __syncing: true },
|
|
11042
|
-
250
|
|
11043
|
-
);
|
|
11044
|
-
for (const delayMs of EARLY_SYNC_REQUEST_DELAYS_MS) {
|
|
11045
|
-
CadenzaService.schedule("meta.sync_requested", { __syncing: true }, delayMs);
|
|
11958
|
+
return true;
|
|
11959
|
+
},
|
|
11960
|
+
"Schedules the early bootstrap sync burst after local instance registration so startup-defined primitives can converge deterministically.",
|
|
11961
|
+
{
|
|
11962
|
+
register: false,
|
|
11963
|
+
isHidden: true
|
|
11046
11964
|
}
|
|
11047
|
-
|
|
11965
|
+
).doOn("meta.service_registry.instance_inserted");
|
|
11966
|
+
CadenzaService.interval(
|
|
11967
|
+
"meta.sync_controller.sync_tick",
|
|
11968
|
+
{ __syncing: true },
|
|
11969
|
+
this.isCadenzaDBReady ? 18e4 : 3e5
|
|
11970
|
+
);
|
|
11048
11971
|
}
|
|
11049
11972
|
};
|
|
11050
11973
|
|
|
@@ -11218,7 +12141,53 @@ function resolveBootstrapEndpoint(options) {
|
|
|
11218
12141
|
}
|
|
11219
12142
|
|
|
11220
12143
|
// src/Cadenza.ts
|
|
12144
|
+
var POSTGRES_SETUP_DEBUG_ENABLED2 = process.env.CADENZA_POSTGRES_SETUP_DEBUG === "1" || process.env.CADENZA_POSTGRES_SETUP_DEBUG === "true";
|
|
12145
|
+
var DEFAULT_DEPUTY_TASK_CONCURRENCY = 50;
|
|
12146
|
+
var DEFAULT_DEPUTY_TASK_TIMEOUT_MS = 12e4;
|
|
12147
|
+
var DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY = 50;
|
|
12148
|
+
var DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS = 12e4;
|
|
11221
12149
|
var CadenzaService = class {
|
|
12150
|
+
static replayRegisteredTaskIntentAssociations() {
|
|
12151
|
+
for (const task of this.registry.tasks.values()) {
|
|
12152
|
+
if (!task.register || task.isHidden || task.handlesIntents.size === 0) {
|
|
12153
|
+
continue;
|
|
12154
|
+
}
|
|
12155
|
+
for (const intentName of task.handlesIntents) {
|
|
12156
|
+
task.emitWithMetadata("meta.task.intent_associated", {
|
|
12157
|
+
data: {
|
|
12158
|
+
intentName,
|
|
12159
|
+
taskName: task.name,
|
|
12160
|
+
taskVersion: task.version
|
|
12161
|
+
},
|
|
12162
|
+
taskInstance: task,
|
|
12163
|
+
__isSubMeta: task.isSubMeta
|
|
12164
|
+
});
|
|
12165
|
+
}
|
|
12166
|
+
}
|
|
12167
|
+
}
|
|
12168
|
+
static replayRegisteredTaskSignalObservations() {
|
|
12169
|
+
for (const task of this.registry.tasks.values()) {
|
|
12170
|
+
if (!task.register || task.isHidden || task.observedSignals.size === 0) {
|
|
12171
|
+
continue;
|
|
12172
|
+
}
|
|
12173
|
+
for (const signalName of task.observedSignals) {
|
|
12174
|
+
task.emitWithMetadata("meta.task.observed_signal", {
|
|
12175
|
+
data: {
|
|
12176
|
+
signalName,
|
|
12177
|
+
taskName: task.name,
|
|
12178
|
+
taskVersion: task.version
|
|
12179
|
+
},
|
|
12180
|
+
taskInstance: task,
|
|
12181
|
+
signalName,
|
|
12182
|
+
__isSubMeta: task.isSubMeta
|
|
12183
|
+
});
|
|
12184
|
+
}
|
|
12185
|
+
}
|
|
12186
|
+
}
|
|
12187
|
+
static replayRegisteredTaskGraphMetadata() {
|
|
12188
|
+
this.replayRegisteredTaskSignalObservations();
|
|
12189
|
+
this.replayRegisteredTaskIntentAssociations();
|
|
12190
|
+
}
|
|
11222
12191
|
static buildLegacyLocalCadenzaDBTaskName(tableName, operation) {
|
|
11223
12192
|
const operationPrefix = operation.charAt(0).toUpperCase() + operation.slice(1);
|
|
11224
12193
|
const helperSuffix = (0, import_lodash_es2.camelCase)(String(tableName ?? "").trim());
|
|
@@ -11361,6 +12330,12 @@ var CadenzaService = class {
|
|
|
11361
12330
|
static setMode(mode) {
|
|
11362
12331
|
import_core5.default.setMode(mode);
|
|
11363
12332
|
}
|
|
12333
|
+
static hasCompletedBootstrapSync() {
|
|
12334
|
+
return !this.serviceCreated || this.bootstrapSyncCompleted;
|
|
12335
|
+
}
|
|
12336
|
+
static markBootstrapSyncCompleted() {
|
|
12337
|
+
this.bootstrapSyncCompleted = true;
|
|
12338
|
+
}
|
|
11364
12339
|
/**
|
|
11365
12340
|
* Emits a signal with the specified data using the associated broker.
|
|
11366
12341
|
*
|
|
@@ -11448,6 +12423,46 @@ var CadenzaService = class {
|
|
|
11448
12423
|
responders: statuses
|
|
11449
12424
|
};
|
|
11450
12425
|
}
|
|
12426
|
+
static shouldPersistInquiry(inquiry, _context) {
|
|
12427
|
+
return !isMetaIntentName(inquiry);
|
|
12428
|
+
}
|
|
12429
|
+
static splitInquiryPersistenceContext(context) {
|
|
12430
|
+
const businessContext = {};
|
|
12431
|
+
const metadata = context?.__metadata && typeof context.__metadata === "object" ? { ...context.__metadata } : {};
|
|
12432
|
+
for (const [key, value] of Object.entries(context ?? {})) {
|
|
12433
|
+
if (key === "__metadata") {
|
|
12434
|
+
continue;
|
|
12435
|
+
}
|
|
12436
|
+
if (key.startsWith("__")) {
|
|
12437
|
+
metadata[key] = value;
|
|
12438
|
+
continue;
|
|
12439
|
+
}
|
|
12440
|
+
businessContext[key] = value;
|
|
12441
|
+
}
|
|
12442
|
+
return {
|
|
12443
|
+
context: businessContext,
|
|
12444
|
+
metadata
|
|
12445
|
+
};
|
|
12446
|
+
}
|
|
12447
|
+
static buildInquiryPersistenceStartData(inquiryId, inquiry, context, startedAt) {
|
|
12448
|
+
const normalizedTaskVersion = Number(context?.__inquirySourceTaskVersion);
|
|
12449
|
+
const { context: inquiryContext, metadata } = this.splitInquiryPersistenceContext(context);
|
|
12450
|
+
return {
|
|
12451
|
+
uuid: inquiryId,
|
|
12452
|
+
name: inquiry,
|
|
12453
|
+
taskName: typeof context?.__inquirySourceTaskName === "string" ? context.__inquirySourceTaskName : null,
|
|
12454
|
+
taskVersion: Number.isFinite(normalizedTaskVersion) && normalizedTaskVersion > 0 ? normalizedTaskVersion : null,
|
|
12455
|
+
taskExecutionId: typeof context?.__inquirySourceTaskExecutionId === "string" ? context.__inquirySourceTaskExecutionId : null,
|
|
12456
|
+
serviceName: this.serviceRegistry.serviceName,
|
|
12457
|
+
serviceInstanceId: this.serviceRegistry.serviceInstanceId,
|
|
12458
|
+
executionTraceId: typeof (context?.__metadata?.__executionTraceId ?? context?.__executionTraceId) === "string" ? context.__metadata?.__executionTraceId ?? context.__executionTraceId : null,
|
|
12459
|
+
routineExecutionId: typeof context?.__inquirySourceRoutineExecutionId === "string" ? context.__inquirySourceRoutineExecutionId : null,
|
|
12460
|
+
context: inquiryContext,
|
|
12461
|
+
metadata,
|
|
12462
|
+
isMeta: false,
|
|
12463
|
+
sentAt: formatTimestamp(startedAt)
|
|
12464
|
+
};
|
|
12465
|
+
}
|
|
11451
12466
|
static async inquire(inquiry, context, options = {}) {
|
|
11452
12467
|
this.bootstrap();
|
|
11453
12468
|
const hydratedResult = this.consumeHydratedInquiryResult(
|
|
@@ -11462,6 +12477,20 @@ var CadenzaService = class {
|
|
|
11462
12477
|
descriptor: this.getInquiryResponderDescriptor(task)
|
|
11463
12478
|
})) : [];
|
|
11464
12479
|
const isMetaInquiry = isMetaIntentName(inquiry);
|
|
12480
|
+
const startedAt = Date.now();
|
|
12481
|
+
const persistInquiry = this.shouldPersistInquiry(inquiry, context);
|
|
12482
|
+
const logicalInquiryId = persistInquiry ? (0, import_uuid6.v4)() : null;
|
|
12483
|
+
const inquiryStartData = logicalInquiryId ? this.buildInquiryPersistenceStartData(
|
|
12484
|
+
logicalInquiryId,
|
|
12485
|
+
inquiry,
|
|
12486
|
+
context,
|
|
12487
|
+
startedAt
|
|
12488
|
+
) : null;
|
|
12489
|
+
if (inquiryStartData) {
|
|
12490
|
+
this.emit("meta.inquiry_broker.inquiry_started", {
|
|
12491
|
+
data: inquiryStartData
|
|
12492
|
+
});
|
|
12493
|
+
}
|
|
11465
12494
|
const responders = allResponders.filter(({ task, descriptor }) => {
|
|
11466
12495
|
const shouldExecute = shouldExecuteInquiryResponder(inquiry, task.isMeta);
|
|
11467
12496
|
if (shouldExecute) {
|
|
@@ -11496,6 +12525,21 @@ var CadenzaService = class {
|
|
|
11496
12525
|
durationMs: 0,
|
|
11497
12526
|
responders: []
|
|
11498
12527
|
};
|
|
12528
|
+
if (logicalInquiryId) {
|
|
12529
|
+
this.emit("meta.inquiry_broker.inquiry_completed", {
|
|
12530
|
+
data: {
|
|
12531
|
+
fulfilledAt: formatTimestamp(startedAt),
|
|
12532
|
+
duration: 0,
|
|
12533
|
+
metadata: {
|
|
12534
|
+
...inquiryStartData?.metadata ?? {},
|
|
12535
|
+
inquiryMeta
|
|
12536
|
+
}
|
|
12537
|
+
},
|
|
12538
|
+
filter: {
|
|
12539
|
+
uuid: logicalInquiryId
|
|
12540
|
+
}
|
|
12541
|
+
});
|
|
12542
|
+
}
|
|
11499
12543
|
if (options.requireComplete) {
|
|
11500
12544
|
throw {
|
|
11501
12545
|
__inquiryMeta: inquiryMeta,
|
|
@@ -11511,7 +12555,6 @@ var CadenzaService = class {
|
|
|
11511
12555
|
const overallTimeoutMs = options.overallTimeoutMs ?? options.timeout ?? 0;
|
|
11512
12556
|
const requireComplete = options.requireComplete ?? false;
|
|
11513
12557
|
const perResponderTimeoutMs = options.perResponderTimeoutMs;
|
|
11514
|
-
const startedAt = Date.now();
|
|
11515
12558
|
const statuses = [];
|
|
11516
12559
|
const statusByTask = /* @__PURE__ */ new Map();
|
|
11517
12560
|
for (const responder of responders) {
|
|
@@ -11557,10 +12600,26 @@ var CadenzaService = class {
|
|
|
11557
12600
|
statuses,
|
|
11558
12601
|
allResponders.length
|
|
11559
12602
|
);
|
|
12603
|
+
const finishedAt = Date.now();
|
|
11560
12604
|
const responseContext = {
|
|
11561
12605
|
...mergedContext,
|
|
11562
12606
|
__inquiryMeta: inquiryMeta
|
|
11563
12607
|
};
|
|
12608
|
+
if (logicalInquiryId) {
|
|
12609
|
+
this.emit("meta.inquiry_broker.inquiry_completed", {
|
|
12610
|
+
data: {
|
|
12611
|
+
fulfilledAt: formatTimestamp(finishedAt),
|
|
12612
|
+
duration: finishedAt - startedAt,
|
|
12613
|
+
metadata: {
|
|
12614
|
+
...inquiryStartData?.metadata ?? {},
|
|
12615
|
+
inquiryMeta
|
|
12616
|
+
}
|
|
12617
|
+
},
|
|
12618
|
+
filter: {
|
|
12619
|
+
uuid: logicalInquiryId
|
|
12620
|
+
}
|
|
12621
|
+
});
|
|
12622
|
+
}
|
|
11564
12623
|
if (requireComplete && (timedOut || inquiryMeta.failed > 0 || inquiryMeta.timedOut > 0 || inquiryMeta.pending > 0)) {
|
|
11565
12624
|
reject({
|
|
11566
12625
|
...responseContext,
|
|
@@ -11576,7 +12635,7 @@ var CadenzaService = class {
|
|
|
11576
12635
|
}
|
|
11577
12636
|
for (const responder of responders) {
|
|
11578
12637
|
const { task, descriptor } = responder;
|
|
11579
|
-
const
|
|
12638
|
+
const responderInquiryId = (0, import_uuid6.v4)();
|
|
11580
12639
|
startTimeByTask.set(task, Date.now());
|
|
11581
12640
|
const resolverTask = this.createEphemeralMetaTask(
|
|
11582
12641
|
`Resolve inquiry ${inquiry} for ${descriptor.localTaskName}`,
|
|
@@ -11604,11 +12663,12 @@ var CadenzaService = class {
|
|
|
11604
12663
|
},
|
|
11605
12664
|
"Resolves distributed inquiry responder result",
|
|
11606
12665
|
{ register: false }
|
|
11607
|
-
).doOn(`meta.node.graph_completed:${
|
|
12666
|
+
).doOn(`meta.node.graph_completed:${responderInquiryId}`);
|
|
11608
12667
|
resolverTasks.push(resolverTask);
|
|
11609
12668
|
const executionContext = {
|
|
11610
12669
|
...context,
|
|
11611
|
-
|
|
12670
|
+
...logicalInquiryId ? { __inquiryId: logicalInquiryId } : {},
|
|
12671
|
+
__routineExecId: responderInquiryId,
|
|
11612
12672
|
__isInquiry: true
|
|
11613
12673
|
};
|
|
11614
12674
|
if (perResponderTimeoutMs !== void 0) {
|
|
@@ -11770,8 +12830,8 @@ var CadenzaService = class {
|
|
|
11770
12830
|
this.validateName(routineName);
|
|
11771
12831
|
const name = `${routineName} (Proxy)`;
|
|
11772
12832
|
options = {
|
|
11773
|
-
concurrency:
|
|
11774
|
-
timeout:
|
|
12833
|
+
concurrency: DEFAULT_DEPUTY_TASK_CONCURRENCY,
|
|
12834
|
+
timeout: DEFAULT_DEPUTY_TASK_TIMEOUT_MS,
|
|
11775
12835
|
register: true,
|
|
11776
12836
|
isUnique: false,
|
|
11777
12837
|
isMeta: false,
|
|
@@ -11878,8 +12938,8 @@ var CadenzaService = class {
|
|
|
11878
12938
|
return;
|
|
11879
12939
|
}
|
|
11880
12940
|
options = {
|
|
11881
|
-
concurrency:
|
|
11882
|
-
timeout:
|
|
12941
|
+
concurrency: DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY,
|
|
12942
|
+
timeout: DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS,
|
|
11883
12943
|
register: true,
|
|
11884
12944
|
isUnique: false,
|
|
11885
12945
|
isMeta: true,
|
|
@@ -11940,8 +13000,8 @@ var CadenzaService = class {
|
|
|
11940
13000
|
const description = `Executes a ${operation} on table ${tableName} in ${targetDatabaseServiceName}`;
|
|
11941
13001
|
const taskName = `${operation.charAt(0).toUpperCase() + operation.slice(1)} ${tableName}`;
|
|
11942
13002
|
options = {
|
|
11943
|
-
concurrency:
|
|
11944
|
-
timeout:
|
|
13003
|
+
concurrency: DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY,
|
|
13004
|
+
timeout: DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS,
|
|
11945
13005
|
register: true,
|
|
11946
13006
|
isUnique: false,
|
|
11947
13007
|
isMeta: false,
|
|
@@ -12085,8 +13145,10 @@ var CadenzaService = class {
|
|
|
12085
13145
|
this.validateName(serviceName);
|
|
12086
13146
|
this.validateServiceName(serviceName);
|
|
12087
13147
|
const serviceId = options.customServiceId ?? (0, import_uuid6.v4)();
|
|
13148
|
+
this.bootstrapSyncCompleted = false;
|
|
12088
13149
|
this.serviceRegistry.serviceName = serviceName;
|
|
12089
13150
|
this.serviceRegistry.serviceInstanceId = serviceId;
|
|
13151
|
+
this.serviceRegistry.connectsToCadenzaDB = !!options.cadenzaDB?.connect;
|
|
12090
13152
|
this.setHydrationResults(options.hydration);
|
|
12091
13153
|
const explicitFrontendMode = options.isFrontend;
|
|
12092
13154
|
options = {
|
|
@@ -12115,6 +13177,23 @@ var CadenzaService = class {
|
|
|
12115
13177
|
this.serviceRegistry.useSocket = !!options.useSocket;
|
|
12116
13178
|
this.serviceRegistry.retryCount = options.retryCount ?? 3;
|
|
12117
13179
|
this.ensureTransportControllers(isFrontend);
|
|
13180
|
+
if (!isFrontend) {
|
|
13181
|
+
this.createMetaTask(
|
|
13182
|
+
"Initialize graph metadata controller after initial sync",
|
|
13183
|
+
() => {
|
|
13184
|
+
this.markBootstrapSyncCompleted();
|
|
13185
|
+
GraphMetadataController.instance;
|
|
13186
|
+
return true;
|
|
13187
|
+
},
|
|
13188
|
+
"Delays direct graph-metadata registration until the bootstrap sync has completed.",
|
|
13189
|
+
{
|
|
13190
|
+
register: false,
|
|
13191
|
+
isHidden: true
|
|
13192
|
+
}
|
|
13193
|
+
).doOn("meta.service_registry.initial_sync_complete");
|
|
13194
|
+
GraphSyncController.instance.isCadenzaDBReady = serviceName === "CadenzaDB";
|
|
13195
|
+
GraphSyncController.instance.init();
|
|
13196
|
+
}
|
|
12118
13197
|
const resolvedBootstrapEndpoint = options.cadenzaDB?.connect ? resolveBootstrapEndpoint({
|
|
12119
13198
|
runtime: isFrontend ? "browser" : "server",
|
|
12120
13199
|
bootstrap: options.bootstrap,
|
|
@@ -12188,14 +13267,14 @@ var CadenzaService = class {
|
|
|
12188
13267
|
data: {
|
|
12189
13268
|
name: serviceName,
|
|
12190
13269
|
description,
|
|
12191
|
-
|
|
12192
|
-
|
|
13270
|
+
display_name: options.displayName ?? "",
|
|
13271
|
+
is_meta: options.isMeta
|
|
12193
13272
|
},
|
|
12194
13273
|
__registrationData: {
|
|
12195
13274
|
name: serviceName,
|
|
12196
13275
|
description,
|
|
12197
|
-
|
|
12198
|
-
|
|
13276
|
+
display_name: options.displayName ?? "",
|
|
13277
|
+
is_meta: options.isMeta
|
|
12199
13278
|
},
|
|
12200
13279
|
__serviceName: serviceName,
|
|
12201
13280
|
__serviceInstanceId: serviceId,
|
|
@@ -12226,14 +13305,13 @@ var CadenzaService = class {
|
|
|
12226
13305
|
);
|
|
12227
13306
|
}).doOn("meta.rest.handshake", "meta.socket.handshake");
|
|
12228
13307
|
}
|
|
12229
|
-
this.createMetaTask("Handle service setup completion", () => {
|
|
13308
|
+
this.createMetaTask("Handle service setup completion", (ctx, emit) => {
|
|
13309
|
+
if (options.cadenzaDB?.connect) {
|
|
13310
|
+
this.serviceRegistry.bootstrapFullSync(emit, ctx, "service_setup_completed");
|
|
13311
|
+
}
|
|
12230
13312
|
if (isFrontend) {
|
|
12231
13313
|
registerActorSessionPersistenceTasks();
|
|
12232
13314
|
this.ensureFrontendSyncLoop();
|
|
12233
|
-
} else {
|
|
12234
|
-
GraphMetadataController.instance;
|
|
12235
|
-
GraphSyncController.instance.isCadenzaDBReady = serviceName === "CadenzaDB" || !!options.cadenzaDB?.connect;
|
|
12236
|
-
GraphSyncController.instance.init();
|
|
12237
13315
|
}
|
|
12238
13316
|
this.log("Service created.");
|
|
12239
13317
|
return true;
|
|
@@ -12262,7 +13340,15 @@ var CadenzaService = class {
|
|
|
12262
13340
|
is_blocked: false,
|
|
12263
13341
|
health: {}
|
|
12264
13342
|
},
|
|
12265
|
-
__transportData:
|
|
13343
|
+
__transportData: declaredTransports.map((transport) => ({
|
|
13344
|
+
uuid: transport.uuid,
|
|
13345
|
+
service_instance_id: serviceId,
|
|
13346
|
+
role: transport.role,
|
|
13347
|
+
origin: transport.origin,
|
|
13348
|
+
protocols: transport.protocols ?? ["rest", "socket"],
|
|
13349
|
+
...transport.securityProfile ? { security_profile: transport.securityProfile } : {},
|
|
13350
|
+
...transport.authStrategy ? { auth_strategy: transport.authStrategy } : {}
|
|
13351
|
+
})),
|
|
12266
13352
|
__serviceName: serviceName,
|
|
12267
13353
|
__serviceInstanceId: serviceId,
|
|
12268
13354
|
__useSocket: options.useSocket,
|
|
@@ -12379,10 +13465,35 @@ var CadenzaService = class {
|
|
|
12379
13465
|
registration.actorName
|
|
12380
13466
|
);
|
|
12381
13467
|
const createServiceTaskName = `Create database service ${name} after ${registration.actorName} setup`;
|
|
13468
|
+
const traceSetupDoneTaskName = `Trace database service ${name} setup done`;
|
|
13469
|
+
if (POSTGRES_SETUP_DEBUG_ENABLED2 && !this.get(traceSetupDoneTaskName)) {
|
|
13470
|
+
this.createMetaTask(
|
|
13471
|
+
traceSetupDoneTaskName,
|
|
13472
|
+
(ctx) => {
|
|
13473
|
+
console.log("[CADENZA_POSTGRES_SETUP_DEBUG] setup_done_signal_observed", {
|
|
13474
|
+
serviceName: name,
|
|
13475
|
+
actorName: registration.actorName,
|
|
13476
|
+
payloadKeys: Object.keys(ctx ?? {})
|
|
13477
|
+
});
|
|
13478
|
+
return true;
|
|
13479
|
+
},
|
|
13480
|
+
"Debug trace for PostgresActor setup-done signal delivery.",
|
|
13481
|
+
{ isHidden: true, register: false }
|
|
13482
|
+
).doOn(registration.setupDoneSignal);
|
|
13483
|
+
}
|
|
12382
13484
|
if (!this.get(createServiceTaskName)) {
|
|
12383
13485
|
this.createMetaTask(
|
|
12384
13486
|
createServiceTaskName,
|
|
12385
13487
|
() => {
|
|
13488
|
+
if (POSTGRES_SETUP_DEBUG_ENABLED2) {
|
|
13489
|
+
console.log(
|
|
13490
|
+
"[CADENZA_POSTGRES_SETUP_DEBUG] create_database_service_task_fired",
|
|
13491
|
+
{
|
|
13492
|
+
serviceName: name,
|
|
13493
|
+
actorName: registration.actorName
|
|
13494
|
+
}
|
|
13495
|
+
);
|
|
13496
|
+
}
|
|
12386
13497
|
this.createCadenzaService(name, description, serviceOptions);
|
|
12387
13498
|
return true;
|
|
12388
13499
|
},
|
|
@@ -12914,6 +14025,7 @@ var CadenzaService = class {
|
|
|
12914
14025
|
this.serviceRegistry?.reset();
|
|
12915
14026
|
this.isBootstrapped = false;
|
|
12916
14027
|
this.serviceCreated = false;
|
|
14028
|
+
this.bootstrapSyncCompleted = false;
|
|
12917
14029
|
this.defaultDatabaseServiceName = null;
|
|
12918
14030
|
this.warnedInvalidMetaIntentResponderKeys = /* @__PURE__ */ new Set();
|
|
12919
14031
|
this.hydratedInquiryResults = /* @__PURE__ */ new Map();
|
|
@@ -12922,6 +14034,7 @@ var CadenzaService = class {
|
|
|
12922
14034
|
};
|
|
12923
14035
|
CadenzaService.isBootstrapped = false;
|
|
12924
14036
|
CadenzaService.serviceCreated = false;
|
|
14037
|
+
CadenzaService.bootstrapSyncCompleted = false;
|
|
12925
14038
|
CadenzaService.defaultDatabaseServiceName = null;
|
|
12926
14039
|
CadenzaService.warnedInvalidMetaIntentResponderKeys = /* @__PURE__ */ new Set();
|
|
12927
14040
|
CadenzaService.hydratedInquiryResults = /* @__PURE__ */ new Map();
|