@cadenza.io/service 2.18.2 → 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 +831 -216
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/index.mjs +831 -216
- package/dist/browser/index.mjs.map +1 -1
- package/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +990 -236
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +990 -236
- 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(
|
|
@@ -766,6 +788,10 @@ var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
|
|
|
766
788
|
"Collect distributed readiness",
|
|
767
789
|
"Get status"
|
|
768
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
|
+
}
|
|
769
795
|
function buildServiceRegistryInsertQueryData(ctx, queryData) {
|
|
770
796
|
const joinedContexts = Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : [];
|
|
771
797
|
const getJoinedValue = (key) => {
|
|
@@ -839,6 +865,45 @@ function normalizeServiceRegistryInsertResult(tableName, ctx, queryData, rawResu
|
|
|
839
865
|
}
|
|
840
866
|
return result;
|
|
841
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
|
+
}
|
|
842
907
|
function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {}) {
|
|
843
908
|
const remoteInsertTask = CadenzaService.createCadenzaDBInsertTask(
|
|
844
909
|
tableName,
|
|
@@ -863,13 +928,24 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
863
928
|
});
|
|
864
929
|
delegationContext.__metadata.__skipRemoteExecution = delegationContext.__metadata.__skipRemoteExecution ?? delegationContext.__skipRemoteExecution ?? false;
|
|
865
930
|
delegationContext.__metadata.__blockRemoteExecution = delegationContext.__metadata.__blockRemoteExecution ?? delegationContext.__blockRemoteExecution ?? false;
|
|
866
|
-
|
|
931
|
+
const nextContext = {
|
|
867
932
|
...delegationContext,
|
|
868
933
|
__resolverOriginalContext: {
|
|
869
934
|
...ctx
|
|
870
935
|
},
|
|
871
936
|
__resolverQueryData: nextQueryData
|
|
872
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;
|
|
873
949
|
},
|
|
874
950
|
`Prepares ${tableName} service-registry insert payloads for runner execution.`,
|
|
875
951
|
{
|
|
@@ -895,7 +971,7 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
895
971
|
ctx.__resolverQueryData ?? ctx.queryData ?? {},
|
|
896
972
|
ctx
|
|
897
973
|
);
|
|
898
|
-
if (tableName === "service_instance" && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
|
|
974
|
+
if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
|
|
899
975
|
console.log("[CADENZA_INSTANCE_DEBUG] finalize_service_registry_insert", {
|
|
900
976
|
tableName,
|
|
901
977
|
hasNormalized: !!normalized,
|
|
@@ -932,6 +1008,16 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
932
1008
|
CadenzaService.createEphemeralMetaTask(
|
|
933
1009
|
`Resolve service registry insert execution for ${tableName} (${resolverRequestId})`,
|
|
934
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
|
+
}
|
|
935
1021
|
if (resultCtx.__resolverRequestId !== resolverRequestId) {
|
|
936
1022
|
return false;
|
|
937
1023
|
}
|
|
@@ -951,7 +1037,7 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
951
1037
|
).doOn(executionResolvedSignal, executionFailedSignal);
|
|
952
1038
|
const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
|
|
953
1039
|
const executionSignal = localInsertTask ? localExecutionRequestedSignal : remoteExecutionRequestedSignal;
|
|
954
|
-
if (tableName === "service_instance" && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
|
|
1040
|
+
if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
|
|
955
1041
|
console.log("[CADENZA_INSTANCE_DEBUG] resolve_service_registry_insert", {
|
|
956
1042
|
tableName,
|
|
957
1043
|
executionSignal,
|
|
@@ -1404,6 +1490,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1404
1490
|
)?.destroy();
|
|
1405
1491
|
continue;
|
|
1406
1492
|
}
|
|
1493
|
+
if (map.serviceName === this.serviceName) {
|
|
1494
|
+
continue;
|
|
1495
|
+
}
|
|
1407
1496
|
if (locallyEmittedSignals.includes(map.signalName)) {
|
|
1408
1497
|
if (!this.remoteSignals.get(map.serviceName)) {
|
|
1409
1498
|
this.remoteSignals.set(map.serviceName, /* @__PURE__ */ new Set());
|
|
@@ -1437,6 +1526,13 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1437
1526
|
"Handle global intent registration",
|
|
1438
1527
|
(ctx, emit) => {
|
|
1439
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
|
+
}
|
|
1440
1536
|
const sorted = intentToTaskMaps.sort((a, b) => {
|
|
1441
1537
|
if (a.deleted && !b.deleted) return -1;
|
|
1442
1538
|
if (!a.deleted && b.deleted) return 1;
|
|
@@ -1448,6 +1544,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1448
1544
|
this.unregisterRemoteIntentDeputy(map);
|
|
1449
1545
|
continue;
|
|
1450
1546
|
}
|
|
1547
|
+
if (map.serviceName === this.serviceName) {
|
|
1548
|
+
continue;
|
|
1549
|
+
}
|
|
1451
1550
|
CadenzaService.inquiryBroker.addIntent({
|
|
1452
1551
|
name: map.intentName
|
|
1453
1552
|
});
|
|
@@ -1652,6 +1751,11 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1652
1751
|
"Full sync",
|
|
1653
1752
|
async (ctx) => {
|
|
1654
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
|
+
}
|
|
1655
1759
|
return false;
|
|
1656
1760
|
}
|
|
1657
1761
|
const inquiryResult = await CadenzaService.inquire(
|
|
@@ -1670,6 +1774,15 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1670
1774
|
const serviceInstances = this.normalizeServiceInstancesFromSync(
|
|
1671
1775
|
inquiryResult
|
|
1672
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
|
+
}
|
|
1673
1786
|
return {
|
|
1674
1787
|
...ctx,
|
|
1675
1788
|
signalToTaskMaps,
|
|
@@ -1712,6 +1825,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1712
1825
|
"Handle Deputy Registration",
|
|
1713
1826
|
(ctx, emit) => {
|
|
1714
1827
|
const { serviceName } = ctx;
|
|
1828
|
+
if (!serviceName || serviceName === this.serviceName) {
|
|
1829
|
+
return false;
|
|
1830
|
+
}
|
|
1715
1831
|
if (!this.deputies.has(serviceName)) this.deputies.set(serviceName, []);
|
|
1716
1832
|
this.deputies.get(serviceName).push({
|
|
1717
1833
|
serviceName,
|
|
@@ -2438,15 +2554,29 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2438
2554
|
CadenzaService.createMetaTask(
|
|
2439
2555
|
"Retry local service instance registration after failed insert",
|
|
2440
2556
|
(ctx) => {
|
|
2557
|
+
const registrationPayload = resolveServiceInstanceRegistrationPayload(
|
|
2558
|
+
ctx,
|
|
2559
|
+
this.serviceName,
|
|
2560
|
+
this.serviceInstanceId
|
|
2561
|
+
);
|
|
2562
|
+
if (!registrationPayload) {
|
|
2563
|
+
return false;
|
|
2564
|
+
}
|
|
2441
2565
|
const serviceName = String(
|
|
2442
|
-
|
|
2566
|
+
registrationPayload.service_name ?? this.serviceName ?? ""
|
|
2443
2567
|
).trim();
|
|
2444
2568
|
if (!serviceName || serviceName !== this.serviceName) {
|
|
2445
2569
|
return false;
|
|
2446
2570
|
}
|
|
2447
2571
|
CadenzaService.schedule(
|
|
2448
2572
|
"meta.service_registry.instance_registration_requested",
|
|
2449
|
-
{
|
|
2573
|
+
{
|
|
2574
|
+
...ctx,
|
|
2575
|
+
data: registrationPayload,
|
|
2576
|
+
__registrationData: registrationPayload,
|
|
2577
|
+
__serviceName: serviceName,
|
|
2578
|
+
__serviceInstanceId: registrationPayload.uuid
|
|
2579
|
+
},
|
|
2450
2580
|
5e3
|
|
2451
2581
|
);
|
|
2452
2582
|
return true;
|
|
@@ -2460,18 +2590,26 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2460
2590
|
CadenzaService.createMetaTask(
|
|
2461
2591
|
"Prepare service instance registration",
|
|
2462
2592
|
(ctx) => {
|
|
2593
|
+
const registrationPayload = resolveServiceInstanceRegistrationPayload(
|
|
2594
|
+
ctx,
|
|
2595
|
+
this.serviceName,
|
|
2596
|
+
this.serviceInstanceId
|
|
2597
|
+
);
|
|
2463
2598
|
if (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true") {
|
|
2464
2599
|
console.log("[CADENZA_INSTANCE_DEBUG] prepare_service_instance_registration", {
|
|
2465
|
-
serviceName: ctx.data?.service_name ?? ctx.__serviceName ?? this.serviceName ?? null,
|
|
2466
|
-
serviceInstanceId: ctx.data?.uuid ?? ctx.__serviceInstanceId ?? this.serviceInstanceId ?? null,
|
|
2467
|
-
hasData: !!
|
|
2468
|
-
dataKeys:
|
|
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) : [],
|
|
2469
2604
|
transportCount: Array.isArray(ctx.__transportData) ? ctx.__transportData.length : Array.isArray(ctx.transportData) ? ctx.transportData.length : 0,
|
|
2470
2605
|
skipRemoteExecution: ctx.__skipRemoteExecution === true
|
|
2471
2606
|
});
|
|
2472
2607
|
}
|
|
2608
|
+
if (!registrationPayload) {
|
|
2609
|
+
return false;
|
|
2610
|
+
}
|
|
2473
2611
|
const serviceName = String(
|
|
2474
|
-
|
|
2612
|
+
registrationPayload.service_name ?? ctx.__serviceName ?? this.serviceName ?? ""
|
|
2475
2613
|
).trim();
|
|
2476
2614
|
if (serviceName === "CadenzaDB" && !CadenzaService.getLocalCadenzaDBInsertTask("service_instance")) {
|
|
2477
2615
|
CadenzaService.schedule(
|
|
@@ -2481,7 +2619,16 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2481
2619
|
);
|
|
2482
2620
|
return false;
|
|
2483
2621
|
}
|
|
2484
|
-
return
|
|
2622
|
+
return {
|
|
2623
|
+
...ctx,
|
|
2624
|
+
data: registrationPayload,
|
|
2625
|
+
__registrationData: {
|
|
2626
|
+
...ctx.__registrationData ?? {},
|
|
2627
|
+
...registrationPayload
|
|
2628
|
+
},
|
|
2629
|
+
__serviceName: serviceName,
|
|
2630
|
+
__serviceInstanceId: registrationPayload.uuid
|
|
2631
|
+
};
|
|
2485
2632
|
},
|
|
2486
2633
|
"Waits for the exact local CadenzaDB service instance insert task during self-bootstrap."
|
|
2487
2634
|
).doOn("meta.service_registry.instance_registration_requested").then(this.insertServiceInstanceTask);
|
|
@@ -2856,6 +3003,15 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2856
3003
|
};
|
|
2857
3004
|
this.remoteIntentDeputiesByKey.set(key, descriptor);
|
|
2858
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
|
+
}
|
|
2859
3015
|
}
|
|
2860
3016
|
unregisterRemoteIntentDeputy(map) {
|
|
2861
3017
|
const key = this.buildRemoteIntentDeputyKey(map);
|
|
@@ -3114,7 +3270,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3114
3270
|
return communicationTypes;
|
|
3115
3271
|
}
|
|
3116
3272
|
ensureDependeeClientForInstance(instance, emit, ctx) {
|
|
3117
|
-
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) {
|
|
3118
3274
|
return false;
|
|
3119
3275
|
}
|
|
3120
3276
|
if (!this.deputies.has(instance.serviceName) && !this.remoteIntents.has(instance.serviceName) && !this.remoteSignals.has(instance.serviceName)) {
|
|
@@ -3142,6 +3298,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3142
3298
|
return true;
|
|
3143
3299
|
}
|
|
3144
3300
|
ensureDependeeClientsForService(serviceName, emit, ctx) {
|
|
3301
|
+
if (!serviceName || serviceName === this.serviceName) {
|
|
3302
|
+
return;
|
|
3303
|
+
}
|
|
3145
3304
|
for (const instance of this.instances.get(serviceName) ?? []) {
|
|
3146
3305
|
this.ensureDependeeClientForInstance(instance, emit, ctx);
|
|
3147
3306
|
}
|
|
@@ -3934,7 +4093,7 @@ var SignalTransmissionTask = class extends import_core2.Task {
|
|
|
3934
4093
|
execute(context, emit, inquire, progressCallback) {
|
|
3935
4094
|
const ctx = context.getContext();
|
|
3936
4095
|
const metadata = context.getMetadata();
|
|
3937
|
-
const deputyContext = {
|
|
4096
|
+
const deputyContext = hoistDelegationMetadataFields({
|
|
3938
4097
|
__localTaskName: this.name,
|
|
3939
4098
|
__localServiceName: CadenzaService.serviceRegistry.serviceName,
|
|
3940
4099
|
__serviceName: this.serviceName,
|
|
@@ -3947,7 +4106,7 @@ var SignalTransmissionTask = class extends import_core2.Task {
|
|
|
3947
4106
|
__signalName: this.signalName,
|
|
3948
4107
|
__signalEmissionId: metadata.__signalEmission?.uuid,
|
|
3949
4108
|
...ctx
|
|
3950
|
-
};
|
|
4109
|
+
});
|
|
3951
4110
|
return this.taskFunction(deputyContext, emit, inquire, progressCallback);
|
|
3952
4111
|
}
|
|
3953
4112
|
};
|
|
@@ -4146,8 +4305,11 @@ var RestController = class _RestController {
|
|
|
4146
4305
|
const app = ctx.__app;
|
|
4147
4306
|
app.post("/handshake", (req, res) => {
|
|
4148
4307
|
try {
|
|
4149
|
-
|
|
4150
|
-
|
|
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);
|
|
4151
4313
|
res.send({
|
|
4152
4314
|
__status: "success",
|
|
4153
4315
|
__serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId
|
|
@@ -4544,7 +4706,13 @@ var RestController = class _RestController {
|
|
|
4544
4706
|
return ctx2;
|
|
4545
4707
|
},
|
|
4546
4708
|
"Sends handshake request",
|
|
4547
|
-
{
|
|
4709
|
+
{
|
|
4710
|
+
retryCount: 5,
|
|
4711
|
+
retryDelay: 1e3,
|
|
4712
|
+
retryDelayFactor: 1.5,
|
|
4713
|
+
register: false,
|
|
4714
|
+
isHidden: true
|
|
4715
|
+
}
|
|
4548
4716
|
).doOn(`meta.fetch.handshake_requested:${fetchId}`).emits("meta.fetch.handshake_complete").attachSignal(
|
|
4549
4717
|
"meta.fetch.handshake_failed",
|
|
4550
4718
|
"global.meta.fetch.service_communication_established"
|
|
@@ -4598,7 +4766,11 @@ var RestController = class _RestController {
|
|
|
4598
4766
|
}
|
|
4599
4767
|
return resultContext;
|
|
4600
4768
|
},
|
|
4601
|
-
"Sends delegation request"
|
|
4769
|
+
"Sends delegation request",
|
|
4770
|
+
{
|
|
4771
|
+
register: false,
|
|
4772
|
+
isHidden: true
|
|
4773
|
+
}
|
|
4602
4774
|
).doOn(
|
|
4603
4775
|
`meta.service_registry.selected_instance_for_fetch:${fetchId}`,
|
|
4604
4776
|
`meta.service_registry.socket_failed:${fetchId}`
|
|
@@ -4650,7 +4822,11 @@ var RestController = class _RestController {
|
|
|
4650
4822
|
}
|
|
4651
4823
|
return response;
|
|
4652
4824
|
},
|
|
4653
|
-
"Sends signal request"
|
|
4825
|
+
"Sends signal request",
|
|
4826
|
+
{
|
|
4827
|
+
register: false,
|
|
4828
|
+
isHidden: true
|
|
4829
|
+
}
|
|
4654
4830
|
).doOn(
|
|
4655
4831
|
`meta.service_registry.selected_instance_for_fetch:${fetchId}`,
|
|
4656
4832
|
`meta.signal_controller.remote_signal_registered:${serviceName}`,
|
|
@@ -4692,18 +4868,30 @@ var RestController = class _RestController {
|
|
|
4692
4868
|
}
|
|
4693
4869
|
return status;
|
|
4694
4870
|
},
|
|
4695
|
-
"Requests status"
|
|
4871
|
+
"Requests status",
|
|
4872
|
+
{
|
|
4873
|
+
register: false,
|
|
4874
|
+
isHidden: true
|
|
4875
|
+
}
|
|
4696
4876
|
).doOn("meta.fetch.status_check_requested").emits("meta.fetch.status_checked").emitsOnFail("meta.fetch.status_check_failed");
|
|
4697
|
-
CadenzaService.createEphemeralMetaTask(
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
|
|
4701
|
-
|
|
4702
|
-
|
|
4703
|
-
|
|
4704
|
-
|
|
4705
|
-
|
|
4706
|
-
|
|
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(
|
|
4707
4895
|
`meta.fetch.destroy_requested:${fetchId}`,
|
|
4708
4896
|
`meta.socket_client.disconnected:${fetchId}`,
|
|
4709
4897
|
`meta.fetch.handshake_failed:${fetchId}`
|
|
@@ -6122,7 +6310,11 @@ var SocketController = class _SocketController {
|
|
|
6122
6310
|
}
|
|
6123
6311
|
);
|
|
6124
6312
|
},
|
|
6125
|
-
"Handshakes with socket server"
|
|
6313
|
+
"Handshakes with socket server",
|
|
6314
|
+
{
|
|
6315
|
+
register: false,
|
|
6316
|
+
isHidden: true
|
|
6317
|
+
}
|
|
6126
6318
|
).doOn(`meta.socket_client.connected:${fetchId}`);
|
|
6127
6319
|
runtimeHandle.delegateTask = CadenzaService.createMetaTask(
|
|
6128
6320
|
`Delegate flow to Socket service ${url}`,
|
|
@@ -6200,7 +6392,11 @@ var SocketController = class _SocketController {
|
|
|
6200
6392
|
}
|
|
6201
6393
|
}
|
|
6202
6394
|
},
|
|
6203
|
-
`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
|
+
}
|
|
6204
6400
|
).doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`).attachSignal(
|
|
6205
6401
|
"meta.socket_client.delegated",
|
|
6206
6402
|
"meta.socket_shutdown_requested"
|
|
@@ -6224,7 +6420,11 @@ var SocketController = class _SocketController {
|
|
|
6224
6420
|
}
|
|
6225
6421
|
return response;
|
|
6226
6422
|
},
|
|
6227
|
-
`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
|
+
}
|
|
6228
6428
|
).doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`).attachSignal("meta.socket_client.transmitted");
|
|
6229
6429
|
CadenzaService.createEphemeralMetaTask(
|
|
6230
6430
|
`Shutdown SocketClient ${url}`,
|
|
@@ -6268,7 +6468,11 @@ var SocketController = class _SocketController {
|
|
|
6268
6468
|
fetchId
|
|
6269
6469
|
});
|
|
6270
6470
|
},
|
|
6271
|
-
"Shuts down the socket client"
|
|
6471
|
+
"Shuts down the socket client",
|
|
6472
|
+
{
|
|
6473
|
+
register: false,
|
|
6474
|
+
isHidden: true
|
|
6475
|
+
}
|
|
6272
6476
|
).doOn(
|
|
6273
6477
|
`meta.socket_shutdown_requested:${fetchId}`,
|
|
6274
6478
|
`meta.socket_client.disconnected:${fetchId}`,
|
|
@@ -6532,10 +6736,18 @@ function decomposeSignalName(signalName) {
|
|
|
6532
6736
|
|
|
6533
6737
|
// src/signals/SignalController.ts
|
|
6534
6738
|
function buildSignalDatabaseTriggerContext(data) {
|
|
6739
|
+
const onConflict = {
|
|
6740
|
+
target: ["name"],
|
|
6741
|
+
action: {
|
|
6742
|
+
do: "nothing"
|
|
6743
|
+
}
|
|
6744
|
+
};
|
|
6535
6745
|
return {
|
|
6536
6746
|
data: { ...data },
|
|
6747
|
+
onConflict,
|
|
6537
6748
|
queryData: {
|
|
6538
|
-
data: { ...data }
|
|
6749
|
+
data: { ...data },
|
|
6750
|
+
onConflict
|
|
6539
6751
|
}
|
|
6540
6752
|
};
|
|
6541
6753
|
}
|
|
@@ -6562,16 +6774,28 @@ var SignalController = class _SignalController {
|
|
|
6562
6774
|
CadenzaService.createMetaTask(
|
|
6563
6775
|
"Handle Signal Registration",
|
|
6564
6776
|
(ctx, emit) => {
|
|
6777
|
+
if (!CadenzaService.hasCompletedBootstrapSync()) {
|
|
6778
|
+
return false;
|
|
6779
|
+
}
|
|
6565
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
|
+
}
|
|
6566
6790
|
const { isMeta, isGlobal, domain, action } = decomposeSignalName(signalName);
|
|
6567
6791
|
emit(
|
|
6568
6792
|
"global.meta.signal_controller.signal_added",
|
|
6569
6793
|
buildSignalDatabaseTriggerContext({
|
|
6570
6794
|
name: signalName,
|
|
6571
|
-
isGlobal,
|
|
6795
|
+
is_global: isGlobal,
|
|
6572
6796
|
domain,
|
|
6573
6797
|
action,
|
|
6574
|
-
isMeta
|
|
6798
|
+
is_meta: isMeta
|
|
6575
6799
|
})
|
|
6576
6800
|
);
|
|
6577
6801
|
return ctx;
|
|
@@ -6580,12 +6804,35 @@ var SignalController = class _SignalController {
|
|
|
6580
6804
|
).doOn("meta.signal_broker.added").attachSignal("global.meta.signal_controller.signal_added");
|
|
6581
6805
|
CadenzaService.createMetaTask(
|
|
6582
6806
|
"Add data to signal emission",
|
|
6583
|
-
(ctx) => {
|
|
6807
|
+
(ctx, emit) => {
|
|
6584
6808
|
const signalEmission = ctx.__signalEmission;
|
|
6585
6809
|
delete ctx.__signalEmission;
|
|
6586
6810
|
if (!signalEmission) {
|
|
6587
6811
|
return false;
|
|
6588
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
|
+
}
|
|
6589
6836
|
return {
|
|
6590
6837
|
data: {
|
|
6591
6838
|
uuid: signalEmission.uuid,
|
|
@@ -6940,10 +7187,10 @@ function registerActorSessionPersistenceTasks() {
|
|
|
6940
7187
|
}
|
|
6941
7188
|
|
|
6942
7189
|
// src/graph/controllers/GraphMetadataController.ts
|
|
6943
|
-
function buildDatabaseTriggerContext(data, filter, extra = {}) {
|
|
7190
|
+
function buildDatabaseTriggerContext(data, filter, extra = {}, queryExtra = {}) {
|
|
6944
7191
|
const nextData = data && typeof data === "object" ? { ...data } : void 0;
|
|
6945
7192
|
const nextFilter = filter && typeof filter === "object" ? { ...filter } : void 0;
|
|
6946
|
-
const queryData = {};
|
|
7193
|
+
const queryData = { ...queryExtra };
|
|
6947
7194
|
if (nextData !== void 0) {
|
|
6948
7195
|
queryData.data = nextData;
|
|
6949
7196
|
}
|
|
@@ -6957,19 +7204,108 @@ function buildDatabaseTriggerContext(data, filter, extra = {}) {
|
|
|
6957
7204
|
...Object.keys(queryData).length > 0 ? { queryData } : {}
|
|
6958
7205
|
};
|
|
6959
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
|
+
}
|
|
6960
7262
|
var GraphMetadataController = class _GraphMetadataController {
|
|
6961
7263
|
static get instance() {
|
|
6962
7264
|
if (!this._instance) this._instance = new _GraphMetadataController();
|
|
6963
7265
|
return this._instance;
|
|
6964
7266
|
}
|
|
6965
7267
|
constructor() {
|
|
7268
|
+
const buildOnConflictDoNothing = (target) => ({
|
|
7269
|
+
target,
|
|
7270
|
+
action: {
|
|
7271
|
+
do: "nothing"
|
|
7272
|
+
}
|
|
7273
|
+
});
|
|
6966
7274
|
CadenzaService.createMetaTask("Handle task creation", (ctx) => {
|
|
6967
|
-
|
|
6968
|
-
|
|
6969
|
-
|
|
6970
|
-
|
|
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
|
+
);
|
|
6971
7300
|
}).doOn("meta.task.created").emits("global.meta.graph_metadata.task_created");
|
|
6972
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
|
+
}
|
|
6973
7309
|
return buildDatabaseTriggerContext(
|
|
6974
7310
|
ctx.data ?? void 0,
|
|
6975
7311
|
{
|
|
@@ -6979,11 +7315,14 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6979
7315
|
);
|
|
6980
7316
|
}).doOn("meta.task.layer_index_changed", "meta.task.destroyed").emits("global.meta.graph_metadata.task_updated");
|
|
6981
7317
|
CadenzaService.createMetaTask("Handle task relationship creation", (ctx) => {
|
|
7318
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7319
|
+
return false;
|
|
7320
|
+
}
|
|
6982
7321
|
const taskName = ctx.data?.taskName ?? ctx.data?.task_name;
|
|
6983
7322
|
const predecessorTaskName = ctx.data?.predecessorTaskName ?? ctx.data?.predecessor_task_name;
|
|
6984
7323
|
const task = taskName ? CadenzaService.get(taskName) : void 0;
|
|
6985
7324
|
const predecessorTask = predecessorTaskName ? CadenzaService.get(predecessorTaskName) : void 0;
|
|
6986
|
-
if (!task?.registered || !predecessorTask?.registered) {
|
|
7325
|
+
if (shouldSkipDirectTaskMetadata(task) || shouldSkipDirectTaskMetadata(predecessorTask) || !task?.registered || !predecessorTask?.registered) {
|
|
6987
7326
|
return false;
|
|
6988
7327
|
}
|
|
6989
7328
|
return buildDatabaseTriggerContext({
|
|
@@ -6996,14 +7335,35 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
6996
7335
|
CadenzaService.log(`Error in task ${ctx.data.taskName}`, ctx.data, "error");
|
|
6997
7336
|
}).doOn("meta.node.errored");
|
|
6998
7337
|
CadenzaService.createMetaTask("Handle task signal observation", (ctx) => {
|
|
6999
|
-
|
|
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.");
|
|
7000
7352
|
return buildDatabaseTriggerContext({
|
|
7001
7353
|
...ctx.data,
|
|
7354
|
+
signalName,
|
|
7002
7355
|
isGlobal,
|
|
7003
7356
|
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
7004
7357
|
});
|
|
7005
7358
|
}).doOn("meta.task.observed_signal").emits("global.meta.graph_metadata.task_signal_observed");
|
|
7006
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
|
+
}
|
|
7007
7367
|
return buildDatabaseTriggerContext(
|
|
7008
7368
|
ctx.data ?? void 0,
|
|
7009
7369
|
{
|
|
@@ -7013,12 +7373,33 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
7013
7373
|
);
|
|
7014
7374
|
}).doOn("meta.task.attached_signal").emits("global.meta.graph_metadata.task_attached_signal");
|
|
7015
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
|
+
}
|
|
7016
7389
|
return buildDatabaseTriggerContext({
|
|
7017
7390
|
...ctx.data,
|
|
7391
|
+
intentName,
|
|
7018
7392
|
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
7019
7393
|
});
|
|
7020
7394
|
}).doOn("meta.task.intent_associated").emits("global.meta.graph_metadata.task_intent_associated");
|
|
7021
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
|
+
}
|
|
7022
7403
|
return buildDatabaseTriggerContext(
|
|
7023
7404
|
{
|
|
7024
7405
|
deleted: true
|
|
@@ -7030,6 +7411,13 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
7030
7411
|
);
|
|
7031
7412
|
}).doOn("meta.task.unsubscribed_signal").emits("meta.graph_metadata.task_unsubscribed_signal");
|
|
7032
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
|
+
}
|
|
7033
7421
|
return buildDatabaseTriggerContext(
|
|
7034
7422
|
{
|
|
7035
7423
|
deleted: true
|
|
@@ -7041,12 +7429,18 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
7041
7429
|
);
|
|
7042
7430
|
}).doOn("meta.task.detached_signal").emits("global.meta.graph_metadata.task_detached_signal");
|
|
7043
7431
|
CadenzaService.createMetaTask("Handle routine creation", (ctx) => {
|
|
7432
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7433
|
+
return false;
|
|
7434
|
+
}
|
|
7044
7435
|
return buildDatabaseTriggerContext({
|
|
7045
7436
|
...ctx.data,
|
|
7046
7437
|
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
7047
7438
|
});
|
|
7048
7439
|
}).doAfter(CadenzaService.registry.registerRoutine).emits("global.meta.graph_metadata.routine_created");
|
|
7049
7440
|
CadenzaService.createMetaTask("Handle routine update", (ctx) => {
|
|
7441
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7442
|
+
return false;
|
|
7443
|
+
}
|
|
7050
7444
|
return buildDatabaseTriggerContext(
|
|
7051
7445
|
ctx.data ?? void 0,
|
|
7052
7446
|
{
|
|
@@ -7056,6 +7450,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
7056
7450
|
);
|
|
7057
7451
|
}).doOn("meta.routine.destroyed").emits("global.meta.graph_metadata.routine_updated");
|
|
7058
7452
|
CadenzaService.createMetaTask("Handle adding task to routine", (ctx) => {
|
|
7453
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7454
|
+
return false;
|
|
7455
|
+
}
|
|
7059
7456
|
return buildDatabaseTriggerContext({
|
|
7060
7457
|
...ctx.data,
|
|
7061
7458
|
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
@@ -7071,8 +7468,12 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
7071
7468
|
CadenzaService.createMetaTask(
|
|
7072
7469
|
"Handle routine execution creation",
|
|
7073
7470
|
(ctx) => {
|
|
7471
|
+
if (!shouldPersistRoutineExecution(ctx)) {
|
|
7472
|
+
return false;
|
|
7473
|
+
}
|
|
7074
7474
|
return buildDatabaseTriggerContext({
|
|
7075
7475
|
...ctx.data,
|
|
7476
|
+
previousRoutineExecution: hasInquiryLink(ctx.data) ? null : ctx.data?.previousRoutineExecution ?? ctx.data?.previous_routine_execution ?? null,
|
|
7076
7477
|
serviceName: CadenzaService.serviceRegistry.serviceName,
|
|
7077
7478
|
serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId
|
|
7078
7479
|
});
|
|
@@ -7109,6 +7510,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
7109
7510
|
CadenzaService.createMetaTask(
|
|
7110
7511
|
"Handle task execution creation",
|
|
7111
7512
|
(ctx) => {
|
|
7513
|
+
if (!shouldPersistTaskExecutionMetadata(ctx)) {
|
|
7514
|
+
return false;
|
|
7515
|
+
}
|
|
7112
7516
|
return buildDatabaseTriggerContext({
|
|
7113
7517
|
...ctx.data,
|
|
7114
7518
|
serviceName: CadenzaService.serviceRegistry.serviceName,
|
|
@@ -7121,6 +7525,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
7121
7525
|
CadenzaService.createMetaTask(
|
|
7122
7526
|
"Handle task execution mapped",
|
|
7123
7527
|
(ctx) => {
|
|
7528
|
+
if (!shouldPersistTaskExecutionMap(ctx)) {
|
|
7529
|
+
return false;
|
|
7530
|
+
}
|
|
7124
7531
|
return buildDatabaseTriggerContext(
|
|
7125
7532
|
ctx.data ?? void 0,
|
|
7126
7533
|
ctx.filter ?? void 0
|
|
@@ -7132,6 +7539,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
7132
7539
|
CadenzaService.createMetaTask(
|
|
7133
7540
|
"Handle task execution started",
|
|
7134
7541
|
(ctx) => {
|
|
7542
|
+
if (!shouldPersistTaskExecutionMetadata(ctx)) {
|
|
7543
|
+
return false;
|
|
7544
|
+
}
|
|
7135
7545
|
return buildDatabaseTriggerContext(
|
|
7136
7546
|
ctx.data ?? void 0,
|
|
7137
7547
|
ctx.filter ?? void 0
|
|
@@ -7143,6 +7553,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
7143
7553
|
CadenzaService.createMetaTask(
|
|
7144
7554
|
"Handle task execution ended",
|
|
7145
7555
|
(ctx) => {
|
|
7556
|
+
if (!shouldPersistTaskExecutionMetadata(ctx)) {
|
|
7557
|
+
return false;
|
|
7558
|
+
}
|
|
7146
7559
|
return buildDatabaseTriggerContext(
|
|
7147
7560
|
{
|
|
7148
7561
|
...ctx.data,
|
|
@@ -7155,9 +7568,39 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
7155
7568
|
"Handles task execution ended",
|
|
7156
7569
|
{ concurrency: 100, isSubMeta: true }
|
|
7157
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");
|
|
7158
7598
|
CadenzaService.createMetaTask(
|
|
7159
7599
|
"Handle task execution relationship creation",
|
|
7160
7600
|
(ctx) => {
|
|
7601
|
+
if (!shouldPersistTaskExecutionMap(ctx)) {
|
|
7602
|
+
return false;
|
|
7603
|
+
}
|
|
7161
7604
|
return buildDatabaseTriggerContext(
|
|
7162
7605
|
{
|
|
7163
7606
|
executionCount: "increment",
|
|
@@ -7173,12 +7616,18 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
7173
7616
|
{ concurrency: 100, isSubMeta: true }
|
|
7174
7617
|
).doOn("meta.node.mapped", "meta.node.detected_previous_task_execution").emits("global.meta.graph_metadata.relationship_executed");
|
|
7175
7618
|
CadenzaService.createMetaTask("Handle actor creation", (ctx) => {
|
|
7619
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7620
|
+
return false;
|
|
7621
|
+
}
|
|
7176
7622
|
return buildDatabaseTriggerContext({
|
|
7177
7623
|
...ctx.data,
|
|
7178
7624
|
service_name: CadenzaService.serviceRegistry.serviceName
|
|
7179
7625
|
});
|
|
7180
7626
|
}).doOn("meta.actor.created").emits("global.meta.graph_metadata.actor_created");
|
|
7181
7627
|
CadenzaService.createMetaTask("Handle actor task association", (ctx) => {
|
|
7628
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7629
|
+
return false;
|
|
7630
|
+
}
|
|
7182
7631
|
return buildDatabaseTriggerContext({
|
|
7183
7632
|
...ctx.data,
|
|
7184
7633
|
service_name: CadenzaService.serviceRegistry.serviceName
|
|
@@ -7186,6 +7635,9 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
7186
7635
|
}).doOn("meta.actor.task_associated").emits("global.meta.graph_metadata.actor_task_associated");
|
|
7187
7636
|
registerActorSessionPersistenceTasks();
|
|
7188
7637
|
CadenzaService.createMetaTask("Handle Intent Creation", (ctx) => {
|
|
7638
|
+
if (!shouldEmitDirectPrimitiveMetadata()) {
|
|
7639
|
+
return false;
|
|
7640
|
+
}
|
|
7189
7641
|
const intentName = ctx.data?.name;
|
|
7190
7642
|
return buildDatabaseTriggerContext({
|
|
7191
7643
|
...ctx.data,
|
|
@@ -7236,6 +7688,9 @@ var AUTHORITY_SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
|
|
|
7236
7688
|
]);
|
|
7237
7689
|
var AUTHORITY_SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
|
|
7238
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;
|
|
7239
7694
|
function logAuthoritySyncDebug(event, payload) {
|
|
7240
7695
|
if (!AUTHORITY_SYNC_DEBUG_ENABLED) {
|
|
7241
7696
|
return;
|
|
@@ -7281,6 +7736,12 @@ function logIntentMapSetupDebug(event, payload) {
|
|
|
7281
7736
|
}
|
|
7282
7737
|
console.log("[CADENZA_INTENT_MAP_DEBUG]", event, payload);
|
|
7283
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
|
+
}
|
|
7284
7745
|
function buildAuthoritySyncDebugSummary(payload, context) {
|
|
7285
7746
|
const data = payload.data && typeof payload.data === "object" && !Array.isArray(payload.data) ? payload.data : {};
|
|
7286
7747
|
return {
|
|
@@ -7492,7 +7953,55 @@ function errorMessage(error) {
|
|
|
7492
7953
|
}
|
|
7493
7954
|
return String(error);
|
|
7494
7955
|
}
|
|
7495
|
-
|
|
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) {
|
|
7496
8005
|
if (!error || typeof error !== "object") {
|
|
7497
8006
|
return false;
|
|
7498
8007
|
}
|
|
@@ -7502,7 +8011,10 @@ function isTransientDatabaseError(error) {
|
|
|
7502
8011
|
return true;
|
|
7503
8012
|
}
|
|
7504
8013
|
const message = String(dbError.message ?? "").toLowerCase();
|
|
7505
|
-
|
|
8014
|
+
if (message.includes("timeout") || message.includes("terminating connection") || message.includes("connection reset")) {
|
|
8015
|
+
return true;
|
|
8016
|
+
}
|
|
8017
|
+
return isRetryableExecutionObservabilityForeignKeyError(error, operationLabel);
|
|
7506
8018
|
}
|
|
7507
8019
|
function isSqlIdentifier(value) {
|
|
7508
8020
|
return /^[a-z_][a-z0-9_]*$/.test(value);
|
|
@@ -7536,6 +8048,37 @@ function resolveDataRows(data) {
|
|
|
7536
8048
|
}
|
|
7537
8049
|
return [ensurePlainObject(data, "data")];
|
|
7538
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
|
+
}
|
|
7539
8082
|
function buildAddConstraintIfMissingStatement(tableName, constraintName, constraintDefinition) {
|
|
7540
8083
|
const escapedConstraintName = constraintName.replace(/'/g, "''");
|
|
7541
8084
|
const escapedTableName = tableName.replace(/'/g, "''");
|
|
@@ -7673,9 +8216,19 @@ var DatabaseController = class _DatabaseController {
|
|
|
7673
8216
|
};
|
|
7674
8217
|
const runtimeState = registration.actor.getRuntimeState(registration.actorKey);
|
|
7675
8218
|
if (runtimeState?.ready) {
|
|
8219
|
+
logPostgresSetupDebug("setup_already_ready", {
|
|
8220
|
+
actorName: registration.actorName,
|
|
8221
|
+
databaseName: registration.databaseName
|
|
8222
|
+
});
|
|
7676
8223
|
this.emitSetupDone(registration, payload);
|
|
7677
8224
|
return registration;
|
|
7678
8225
|
}
|
|
8226
|
+
logPostgresSetupDebug("emit_setup_requested", {
|
|
8227
|
+
actorName: registration.actorName,
|
|
8228
|
+
databaseName: registration.databaseName,
|
|
8229
|
+
ownerServiceName: registration.ownerServiceName,
|
|
8230
|
+
payloadKeys: Object.keys(payload)
|
|
8231
|
+
});
|
|
7679
8232
|
CadenzaService.emit(registration.setupSignal, payload);
|
|
7680
8233
|
return registration;
|
|
7681
8234
|
}
|
|
@@ -7727,6 +8280,11 @@ var DatabaseController = class _DatabaseController {
|
|
|
7727
8280
|
`Setup ${registration.actorName}`,
|
|
7728
8281
|
registration.actor.task(
|
|
7729
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
|
+
});
|
|
7730
8288
|
const requestedDatabaseName = String(
|
|
7731
8289
|
input.options?.databaseName ?? input.databaseName ?? registration.databaseName
|
|
7732
8290
|
);
|
|
@@ -7745,11 +8303,19 @@ var DatabaseController = class _DatabaseController {
|
|
|
7745
8303
|
}
|
|
7746
8304
|
try {
|
|
7747
8305
|
await this.createDatabaseIfMissing(requestedDatabaseName);
|
|
8306
|
+
logPostgresSetupDebug("database_ready", {
|
|
8307
|
+
actorName: registration.actorName,
|
|
8308
|
+
databaseName: requestedDatabaseName
|
|
8309
|
+
});
|
|
7748
8310
|
const pool = this.createTargetPool(
|
|
7749
8311
|
requestedDatabaseName,
|
|
7750
8312
|
state.safetyPolicy.statementTimeoutMs
|
|
7751
8313
|
);
|
|
7752
8314
|
await this.checkPoolHealth(pool, state.safetyPolicy);
|
|
8315
|
+
logPostgresSetupDebug("pool_healthy", {
|
|
8316
|
+
actorName: registration.actorName,
|
|
8317
|
+
databaseName: requestedDatabaseName
|
|
8318
|
+
});
|
|
7753
8319
|
this.validateSchema({
|
|
7754
8320
|
schema: registration.schema,
|
|
7755
8321
|
options: registration.options
|
|
@@ -7797,6 +8363,10 @@ var DatabaseController = class _DatabaseController {
|
|
|
7797
8363
|
this.emitSetupDone(registration, {
|
|
7798
8364
|
...input
|
|
7799
8365
|
});
|
|
8366
|
+
logPostgresSetupDebug("setup_task_completed", {
|
|
8367
|
+
actorName: registration.actorName,
|
|
8368
|
+
databaseName: requestedDatabaseName
|
|
8369
|
+
});
|
|
7800
8370
|
return {
|
|
7801
8371
|
...input,
|
|
7802
8372
|
__success: true,
|
|
@@ -7806,6 +8376,11 @@ var DatabaseController = class _DatabaseController {
|
|
|
7806
8376
|
};
|
|
7807
8377
|
} catch (error) {
|
|
7808
8378
|
const message = errorMessage(error);
|
|
8379
|
+
logPostgresSetupDebug("setup_task_failed", {
|
|
8380
|
+
actorName: registration.actorName,
|
|
8381
|
+
databaseName: requestedDatabaseName,
|
|
8382
|
+
error: message
|
|
8383
|
+
});
|
|
7809
8384
|
setRuntimeState({
|
|
7810
8385
|
pool: null,
|
|
7811
8386
|
ready: false,
|
|
@@ -7933,7 +8508,7 @@ var DatabaseController = class _DatabaseController {
|
|
|
7933
8508
|
return await work();
|
|
7934
8509
|
} catch (error) {
|
|
7935
8510
|
lastError = error;
|
|
7936
|
-
const transient = isTransientDatabaseError(error);
|
|
8511
|
+
const transient = isTransientDatabaseError(error, operationLabel);
|
|
7937
8512
|
if (!transient || attempt >= attempts) {
|
|
7938
8513
|
break;
|
|
7939
8514
|
}
|
|
@@ -8599,7 +9174,7 @@ var DatabaseController = class _DatabaseController {
|
|
|
8599
9174
|
description: `Macro upsert operation for table ${tableName}`,
|
|
8600
9175
|
input: insertSchema
|
|
8601
9176
|
});
|
|
8602
|
-
CadenzaService.
|
|
9177
|
+
CadenzaService.createTask(
|
|
8603
9178
|
`UPSERT ${tableName}`,
|
|
8604
9179
|
registration.actor.task(
|
|
8605
9180
|
async ({ input }) => {
|
|
@@ -8620,9 +9195,11 @@ var DatabaseController = class _DatabaseController {
|
|
|
8620
9195
|
},
|
|
8621
9196
|
{ mode: "write" }
|
|
8622
9197
|
),
|
|
8623
|
-
(context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
|
|
8624
9198
|
`Macro upsert task for ${tableName}`,
|
|
8625
9199
|
{
|
|
9200
|
+
concurrency: GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY,
|
|
9201
|
+
timeout: GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS,
|
|
9202
|
+
getTagCallback: () => `upsert:${registration.actorToken}:${tableName}`,
|
|
8626
9203
|
isMeta: registration.options.isMeta,
|
|
8627
9204
|
isSubMeta: registration.options.isMeta,
|
|
8628
9205
|
validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
|
|
@@ -8653,15 +9230,15 @@ var DatabaseController = class _DatabaseController {
|
|
|
8653
9230
|
};
|
|
8654
9231
|
}
|
|
8655
9232
|
if (trigger.queryData) {
|
|
8656
|
-
context.queryData =
|
|
8657
|
-
|
|
8658
|
-
|
|
8659
|
-
|
|
9233
|
+
context.queryData = mergeTriggerQueryData(
|
|
9234
|
+
context,
|
|
9235
|
+
trigger.queryData
|
|
9236
|
+
);
|
|
8660
9237
|
payloadModifiedByTriggers = true;
|
|
8661
9238
|
}
|
|
8662
9239
|
}
|
|
8663
9240
|
}
|
|
8664
|
-
const operationPayload =
|
|
9241
|
+
const operationPayload = resolveOperationPayload(context);
|
|
8665
9242
|
const shouldDebugAuthoritySync = shouldDebugAuthoritySyncPayload(
|
|
8666
9243
|
tableName,
|
|
8667
9244
|
operationPayload
|
|
@@ -8758,18 +9335,29 @@ var DatabaseController = class _DatabaseController {
|
|
|
8758
9335
|
},
|
|
8759
9336
|
{ mode: op === "query" ? "read" : "write" }
|
|
8760
9337
|
);
|
|
8761
|
-
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(
|
|
8762
9345
|
taskName,
|
|
8763
9346
|
databaseTaskFunction,
|
|
8764
|
-
(context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
|
|
8765
9347
|
`Auto-generated ${op} task for ${tableName} (PostgresActor)`,
|
|
8766
9348
|
{
|
|
8767
|
-
|
|
8768
|
-
|
|
8769
|
-
|
|
8770
|
-
|
|
9349
|
+
...taskOptions,
|
|
9350
|
+
concurrency: GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY,
|
|
9351
|
+
timeout: GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS,
|
|
9352
|
+
getTagCallback: () => `insert:${registration.actorToken}:${tableName}`
|
|
8771
9353
|
}
|
|
8772
|
-
).
|
|
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(
|
|
8773
9361
|
...table.customSignals?.triggers?.[op]?.map(
|
|
8774
9362
|
(signal) => typeof signal === "string" ? signal : signal.signal
|
|
8775
9363
|
) ?? []
|
|
@@ -9426,7 +10014,7 @@ function buildIntentRegistryData(intent) {
|
|
|
9426
10014
|
description: typeof intent?.description === "string" ? intent.description : "",
|
|
9427
10015
|
input: intent?.input && typeof intent.input === "object" ? intent.input : { type: "object" },
|
|
9428
10016
|
output: intent?.output && typeof intent.output === "object" ? intent.output : { type: "object" },
|
|
9429
|
-
|
|
10017
|
+
is_meta: isMetaIntentName(name)
|
|
9430
10018
|
};
|
|
9431
10019
|
}
|
|
9432
10020
|
function getJoinedContextValue(ctx, key) {
|
|
@@ -9649,6 +10237,22 @@ var EARLY_SYNC_TICK_DELAYS_MS = [
|
|
|
9649
10237
|
BOOTSTRAP_SYNC_STALE_CYCLE_MS * 2 + 2e3,
|
|
9650
10238
|
BOOTSTRAP_SYNC_STALE_CYCLE_MS * 3 + 3e3
|
|
9651
10239
|
];
|
|
10240
|
+
function shouldTraceSyncPhase(serviceName) {
|
|
10241
|
+
const configured = process.env.CADENZA_SYNC_PHASE_TRACE_SERVICE;
|
|
10242
|
+
if (!configured || !serviceName) {
|
|
10243
|
+
return false;
|
|
10244
|
+
}
|
|
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.");
|
|
10255
|
+
}
|
|
9652
10256
|
function getRegistrableTasks() {
|
|
9653
10257
|
return Array.from(CadenzaService.registry.tasks.values()).filter(
|
|
9654
10258
|
(task) => task.register && !task.isHidden && !task.isDeputy
|
|
@@ -9657,24 +10261,51 @@ function getRegistrableTasks() {
|
|
|
9657
10261
|
function getRegistrableRoutines() {
|
|
9658
10262
|
return Array.from(CadenzaService.registry.routines.values());
|
|
9659
10263
|
}
|
|
9660
|
-
function isAuthoritySyncSignal(signalName) {
|
|
9661
|
-
return decomposeSignalName(signalName).isGlobal;
|
|
9662
|
-
}
|
|
9663
10264
|
function getRegistrableSignalObservers() {
|
|
9664
10265
|
const signalObservers = CadenzaService.signalBroker.signalObservers;
|
|
9665
10266
|
if (!signalObservers) {
|
|
9666
10267
|
return [];
|
|
9667
10268
|
}
|
|
9668
|
-
|
|
9669
|
-
|
|
9670
|
-
|
|
9671
|
-
|
|
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;
|
|
9672
10294
|
}
|
|
9673
10295
|
function getRegistrableIntentNames() {
|
|
9674
10296
|
return Array.from(CadenzaService.inquiryBroker.intents.values()).map((intent) => buildIntentRegistryData(intent)).filter(
|
|
9675
10297
|
(intentDefinition) => intentDefinition !== null
|
|
10298
|
+
).filter(
|
|
10299
|
+
(intentDefinition) => isLocallyHandledIntentName(String(intentDefinition.name))
|
|
9676
10300
|
).map((intentDefinition) => String(intentDefinition.name));
|
|
9677
10301
|
}
|
|
10302
|
+
function isRegistrableLocalIntentDefinition(intent) {
|
|
10303
|
+
const intentData = buildIntentRegistryData(intent);
|
|
10304
|
+
if (!intentData) {
|
|
10305
|
+
return false;
|
|
10306
|
+
}
|
|
10307
|
+
return isLocallyHandledIntentName(String(intentData.name));
|
|
10308
|
+
}
|
|
9678
10309
|
function buildActorRegistrationKey(actor, serviceName) {
|
|
9679
10310
|
const data = buildActorRegistrationData(actor);
|
|
9680
10311
|
const name = typeof data.name === "string" && data.name.trim().length > 0 ? data.name.trim() : "";
|
|
@@ -9809,6 +10440,13 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9809
10440
|
const finalizeTaskSync = (emit, ctx) => {
|
|
9810
10441
|
const pendingTasks = getRegistrableTasks().filter((task) => !task.registered);
|
|
9811
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
|
+
}
|
|
9812
10450
|
if (pendingTasks.length > 0) {
|
|
9813
10451
|
this.tasksSynced = false;
|
|
9814
10452
|
return false;
|
|
@@ -9828,6 +10466,13 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9828
10466
|
(routine) => !routine.registered
|
|
9829
10467
|
);
|
|
9830
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
|
+
}
|
|
9831
10476
|
if (pendingRoutines.length > 0) {
|
|
9832
10477
|
this.routinesSynced = false;
|
|
9833
10478
|
return false;
|
|
@@ -9847,6 +10492,13 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9847
10492
|
(observer) => observer.registered !== true
|
|
9848
10493
|
);
|
|
9849
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
|
+
}
|
|
9850
10502
|
if (pendingSignals.length > 0) {
|
|
9851
10503
|
this.signalsSynced = false;
|
|
9852
10504
|
return false;
|
|
@@ -9866,6 +10518,13 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9866
10518
|
(intentName) => !this.registeredIntentDefinitions.has(intentName)
|
|
9867
10519
|
);
|
|
9868
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
|
+
}
|
|
9869
10528
|
if (pendingIntentNames.length > 0) {
|
|
9870
10529
|
this.intentsSynced = false;
|
|
9871
10530
|
return false;
|
|
@@ -9887,6 +10546,13 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9887
10546
|
return false;
|
|
9888
10547
|
}
|
|
9889
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
|
+
}
|
|
9890
10556
|
if (pendingActorKeys.length > 0) {
|
|
9891
10557
|
this.actorsSynced = false;
|
|
9892
10558
|
return false;
|
|
@@ -9967,8 +10633,8 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9967
10633
|
name: routine.name,
|
|
9968
10634
|
version: routine.version,
|
|
9969
10635
|
description: routine.description,
|
|
9970
|
-
|
|
9971
|
-
|
|
10636
|
+
service_name: serviceName2,
|
|
10637
|
+
is_meta: routine.isMeta
|
|
9972
10638
|
},
|
|
9973
10639
|
__routineName: routine.name
|
|
9974
10640
|
};
|
|
@@ -10031,11 +10697,11 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10031
10697
|
yield {
|
|
10032
10698
|
__syncing: ctx.__syncing,
|
|
10033
10699
|
data: {
|
|
10034
|
-
|
|
10035
|
-
|
|
10036
|
-
|
|
10037
|
-
|
|
10038
|
-
|
|
10700
|
+
task_name: nextTask.name,
|
|
10701
|
+
task_version: nextTask.version,
|
|
10702
|
+
routine_name: routine.name,
|
|
10703
|
+
routine_version: routine.version,
|
|
10704
|
+
service_name: serviceName2
|
|
10039
10705
|
},
|
|
10040
10706
|
__routineName: routine.name,
|
|
10041
10707
|
__taskName: nextTask.name
|
|
@@ -10093,12 +10759,20 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10093
10759
|
});
|
|
10094
10760
|
const { signals } = ctx;
|
|
10095
10761
|
if (!signals) return;
|
|
10096
|
-
const
|
|
10097
|
-
|
|
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)) {
|
|
10098
10771
|
return false;
|
|
10099
10772
|
}
|
|
10100
|
-
|
|
10101
|
-
|
|
10773
|
+
seenSignals.add(signal.signalName);
|
|
10774
|
+
return true;
|
|
10775
|
+
}).map((signal) => signal.signalName);
|
|
10102
10776
|
for (const signal of filteredSignals) {
|
|
10103
10777
|
const { isMeta, isGlobal, domain, action } = decomposeSignalName(signal);
|
|
10104
10778
|
this.signalsSynced = false;
|
|
@@ -10106,10 +10780,10 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10106
10780
|
__syncing: ctx.__syncing,
|
|
10107
10781
|
data: {
|
|
10108
10782
|
name: signal,
|
|
10109
|
-
isGlobal,
|
|
10783
|
+
is_global: isGlobal,
|
|
10110
10784
|
domain,
|
|
10111
10785
|
action,
|
|
10112
|
-
isMeta
|
|
10786
|
+
is_meta: isMeta
|
|
10113
10787
|
},
|
|
10114
10788
|
__signal: signal
|
|
10115
10789
|
};
|
|
@@ -10150,6 +10824,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10150
10824
|
const observer = signalObservers?.get(signalName);
|
|
10151
10825
|
if (observer) {
|
|
10152
10826
|
observer.registered = true;
|
|
10827
|
+
observer.registrationRequested = false;
|
|
10153
10828
|
}
|
|
10154
10829
|
emit(
|
|
10155
10830
|
"meta.sync_controller.signal_registered",
|
|
@@ -10187,25 +10862,25 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10187
10862
|
name: task.name,
|
|
10188
10863
|
version: task.version,
|
|
10189
10864
|
description: task.description,
|
|
10190
|
-
|
|
10191
|
-
|
|
10192
|
-
|
|
10865
|
+
function_string: __functionString,
|
|
10866
|
+
tag_id_getter: __getTagCallback,
|
|
10867
|
+
layer_index: task.layerIndex,
|
|
10193
10868
|
concurrency: task.concurrency,
|
|
10194
10869
|
timeout: task.timeout,
|
|
10195
|
-
|
|
10196
|
-
|
|
10197
|
-
|
|
10198
|
-
|
|
10199
|
-
|
|
10200
|
-
|
|
10201
|
-
|
|
10202
|
-
|
|
10203
|
-
|
|
10204
|
-
|
|
10205
|
-
|
|
10206
|
-
|
|
10207
|
-
|
|
10208
|
-
|
|
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,
|
|
10209
10884
|
service_name: serviceName2,
|
|
10210
10885
|
signals: {
|
|
10211
10886
|
emits: Array.from(task.emitsSignals),
|
|
@@ -10249,6 +10924,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10249
10924
|
return true;
|
|
10250
10925
|
}
|
|
10251
10926
|
task.registered = true;
|
|
10927
|
+
task.registrationRequested = false;
|
|
10252
10928
|
emit(
|
|
10253
10929
|
"meta.sync_controller.task_registered",
|
|
10254
10930
|
buildMinimalSyncSignalContext(ctx, {
|
|
@@ -10436,11 +11112,11 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10436
11112
|
yield {
|
|
10437
11113
|
__syncing: ctx.__syncing,
|
|
10438
11114
|
data: {
|
|
10439
|
-
|
|
10440
|
-
isGlobal,
|
|
10441
|
-
|
|
10442
|
-
|
|
10443
|
-
|
|
11115
|
+
signal_name: _signal,
|
|
11116
|
+
is_global: isGlobal,
|
|
11117
|
+
task_name: task.name,
|
|
11118
|
+
task_version: task.version,
|
|
11119
|
+
service_name: serviceName2
|
|
10444
11120
|
},
|
|
10445
11121
|
__taskName: task.name,
|
|
10446
11122
|
__signal: signal
|
|
@@ -10481,6 +11157,9 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10481
11157
|
});
|
|
10482
11158
|
const intents = Array.isArray(ctx.intents) ? ctx.intents : Array.from(CadenzaService.inquiryBroker.intents.values());
|
|
10483
11159
|
for (const intent of intents) {
|
|
11160
|
+
if (!isRegistrableLocalIntentDefinition(intent)) {
|
|
11161
|
+
continue;
|
|
11162
|
+
}
|
|
10484
11163
|
const intentData = buildIntentRegistryData(intent);
|
|
10485
11164
|
if (!intentData) {
|
|
10486
11165
|
continue;
|
|
@@ -10578,19 +11257,19 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10578
11257
|
yield {
|
|
10579
11258
|
__syncing: ctx.__syncing,
|
|
10580
11259
|
data: {
|
|
10581
|
-
|
|
10582
|
-
|
|
10583
|
-
|
|
10584
|
-
|
|
11260
|
+
intent_name: intent,
|
|
11261
|
+
task_name: task.name,
|
|
11262
|
+
task_version: task.version,
|
|
11263
|
+
service_name: serviceName2
|
|
10585
11264
|
},
|
|
10586
11265
|
__taskName: task.name,
|
|
10587
11266
|
__intent: intent,
|
|
10588
11267
|
__intentDefinition: intentDefinition,
|
|
10589
11268
|
__intentMapData: {
|
|
10590
|
-
|
|
10591
|
-
|
|
10592
|
-
|
|
10593
|
-
|
|
11269
|
+
intent_name: intent,
|
|
11270
|
+
task_name: task.name,
|
|
11271
|
+
task_version: task.version,
|
|
11272
|
+
service_name: serviceName2
|
|
10594
11273
|
}
|
|
10595
11274
|
};
|
|
10596
11275
|
emittedCount += 1;
|
|
@@ -10628,7 +11307,9 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10628
11307
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
10629
11308
|
delayMs: 3e3
|
|
10630
11309
|
});
|
|
10631
|
-
if (task.hidden || !task.register || task.isDeputy)
|
|
11310
|
+
if (task.hidden || !task.register || task.isDeputy || !task.registered) {
|
|
11311
|
+
return;
|
|
11312
|
+
}
|
|
10632
11313
|
const predecessorServiceName = resolveSyncServiceName(task);
|
|
10633
11314
|
if (!predecessorServiceName) {
|
|
10634
11315
|
return;
|
|
@@ -10643,12 +11324,12 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10643
11324
|
}
|
|
10644
11325
|
yield {
|
|
10645
11326
|
data: {
|
|
10646
|
-
|
|
10647
|
-
|
|
10648
|
-
|
|
10649
|
-
|
|
10650
|
-
|
|
10651
|
-
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
|
|
10652
11333
|
},
|
|
10653
11334
|
__taskName: task.name,
|
|
10654
11335
|
__nextTaskName: t.name
|
|
@@ -10695,75 +11376,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10695
11376
|
taskMapRegistrationGraph,
|
|
10696
11377
|
recordTaskMapRegistrationTask
|
|
10697
11378
|
);
|
|
10698
|
-
this.registerDeputyRelationshipTask = CadenzaService.createMetaTask(
|
|
10699
|
-
"Register deputy relationship",
|
|
10700
|
-
(ctx) => {
|
|
10701
|
-
const task = ctx.task;
|
|
10702
|
-
if (task.hidden || !task.register) return;
|
|
10703
|
-
if (task.isDeputy && !task.signalName) {
|
|
10704
|
-
if (task.registeredDeputyMap) return;
|
|
10705
|
-
const serviceName2 = resolveSyncServiceName(task);
|
|
10706
|
-
const predecessorServiceName = resolveSyncServiceName();
|
|
10707
|
-
if (!serviceName2 || !predecessorServiceName) {
|
|
10708
|
-
return;
|
|
10709
|
-
}
|
|
10710
|
-
return {
|
|
10711
|
-
data: {
|
|
10712
|
-
task_name: task.remoteRoutineName,
|
|
10713
|
-
task_version: 1,
|
|
10714
|
-
service_name: serviceName2,
|
|
10715
|
-
predecessor_task_name: task.name,
|
|
10716
|
-
predecessor_task_version: task.version,
|
|
10717
|
-
predecessor_service_name: predecessorServiceName
|
|
10718
|
-
},
|
|
10719
|
-
__taskName: task.name
|
|
10720
|
-
};
|
|
10721
|
-
}
|
|
10722
|
-
}
|
|
10723
|
-
);
|
|
10724
|
-
const deputyRelationshipRegistrationGraph = resolveSyncInsertTask(
|
|
10725
|
-
this.isCadenzaDBReady,
|
|
10726
|
-
"directional_task_graph_map",
|
|
10727
|
-
{
|
|
10728
|
-
onConflict: {
|
|
10729
|
-
target: [
|
|
10730
|
-
"task_name",
|
|
10731
|
-
"predecessor_task_name",
|
|
10732
|
-
"task_version",
|
|
10733
|
-
"predecessor_task_version",
|
|
10734
|
-
"service_name",
|
|
10735
|
-
"predecessor_service_name"
|
|
10736
|
-
],
|
|
10737
|
-
action: {
|
|
10738
|
-
do: "nothing"
|
|
10739
|
-
}
|
|
10740
|
-
}
|
|
10741
|
-
},
|
|
10742
|
-
{ concurrency: 30 }
|
|
10743
|
-
);
|
|
10744
|
-
const recordDeputyRelationshipRegistrationTask = CadenzaService.createMetaTask(
|
|
10745
|
-
"Record deputy relationship registration",
|
|
10746
|
-
(ctx) => {
|
|
10747
|
-
if (!didSyncInsertSucceed(ctx)) {
|
|
10748
|
-
return;
|
|
10749
|
-
}
|
|
10750
|
-
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
10751
|
-
delayMs: 3e3
|
|
10752
|
-
});
|
|
10753
|
-
const task = resolveLocalTaskFromSyncContext(ctx);
|
|
10754
|
-
if (!task) {
|
|
10755
|
-
return true;
|
|
10756
|
-
}
|
|
10757
|
-
task.registeredDeputyMap = true;
|
|
10758
|
-
}
|
|
10759
|
-
);
|
|
10760
|
-
wireSyncTaskGraph(
|
|
10761
|
-
this.registerDeputyRelationshipTask,
|
|
10762
|
-
deputyRelationshipRegistrationGraph,
|
|
10763
|
-
recordDeputyRelationshipRegistrationTask
|
|
10764
|
-
);
|
|
10765
11379
|
const hasPendingDirectionalTaskMaps = () => getRegistrableTasks().some((task) => {
|
|
10766
|
-
const taskWithDeputyState = task;
|
|
10767
11380
|
if (task.isHidden || !task.register || !task.registered) {
|
|
10768
11381
|
return false;
|
|
10769
11382
|
}
|
|
@@ -10779,9 +11392,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10779
11392
|
return true;
|
|
10780
11393
|
}
|
|
10781
11394
|
}
|
|
10782
|
-
if (task.isDeputy && !taskWithDeputyState.signalName && !taskWithDeputyState.registeredDeputyMap) {
|
|
10783
|
-
return Boolean(resolveSyncServiceName(task) && resolveSyncServiceName());
|
|
10784
|
-
}
|
|
10785
11395
|
return false;
|
|
10786
11396
|
});
|
|
10787
11397
|
const hasPendingSignalTaskMaps = () => getRegistrableTasks().some((task) => {
|
|
@@ -10979,6 +11589,18 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10979
11589
|
if (!syncCycleId) {
|
|
10980
11590
|
return false;
|
|
10981
11591
|
}
|
|
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
|
|
11602
|
+
});
|
|
11603
|
+
}
|
|
10982
11604
|
if (!this.directionalTaskMapsSynced || !this.signalTaskMapsSynced || !this.intentTaskMapsSynced || !this.actorTaskMapsSynced || !this.routineTaskMapsSynced) {
|
|
10983
11605
|
return false;
|
|
10984
11606
|
}
|
|
@@ -11046,6 +11668,17 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
11046
11668
|
return false;
|
|
11047
11669
|
}
|
|
11048
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
|
+
}
|
|
11049
11682
|
if (!this.tasksSynced || !this.signalsSynced || !this.intentsSynced || !this.actorsSynced || !this.routinesSynced) {
|
|
11050
11683
|
return false;
|
|
11051
11684
|
}
|
|
@@ -11231,7 +11864,9 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
11231
11864
|
"Get all intents for sync",
|
|
11232
11865
|
(ctx) => ({
|
|
11233
11866
|
...ctx,
|
|
11234
|
-
intents: Array.from(CadenzaService.inquiryBroker.intents.values())
|
|
11867
|
+
intents: Array.from(CadenzaService.inquiryBroker.intents.values()).filter(
|
|
11868
|
+
(intent) => isRegistrableLocalIntentDefinition(intent)
|
|
11869
|
+
)
|
|
11235
11870
|
}),
|
|
11236
11871
|
"Collects local intents for the primitive sync phase.",
|
|
11237
11872
|
{
|
|
@@ -11272,14 +11907,8 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
11272
11907
|
iterateTasksForDirectionalTaskMapSyncTask,
|
|
11273
11908
|
gatherDirectionalTaskMapRegistrationTask
|
|
11274
11909
|
);
|
|
11275
|
-
iterateTasksForDirectionalTaskMapSyncTask.then(
|
|
11276
|
-
this.registerTaskMapTask,
|
|
11277
|
-
this.registerDeputyRelationshipTask
|
|
11278
|
-
);
|
|
11910
|
+
iterateTasksForDirectionalTaskMapSyncTask.then(this.registerTaskMapTask);
|
|
11279
11911
|
recordTaskMapRegistrationTask.then(gatherDirectionalTaskMapRegistrationTask);
|
|
11280
|
-
recordDeputyRelationshipRegistrationTask.then(
|
|
11281
|
-
gatherDirectionalTaskMapRegistrationTask
|
|
11282
|
-
);
|
|
11283
11912
|
gatherDirectionalTaskMapRegistrationTask.then(mapPhaseBarrierTask);
|
|
11284
11913
|
const iterateTasksForSignalTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
|
|
11285
11914
|
startSignalTaskMapSyncTask.then(
|
|
@@ -11512,6 +12141,11 @@ function resolveBootstrapEndpoint(options) {
|
|
|
11512
12141
|
}
|
|
11513
12142
|
|
|
11514
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;
|
|
11515
12149
|
var CadenzaService = class {
|
|
11516
12150
|
static replayRegisteredTaskIntentAssociations() {
|
|
11517
12151
|
for (const task of this.registry.tasks.values()) {
|
|
@@ -11696,6 +12330,12 @@ var CadenzaService = class {
|
|
|
11696
12330
|
static setMode(mode) {
|
|
11697
12331
|
import_core5.default.setMode(mode);
|
|
11698
12332
|
}
|
|
12333
|
+
static hasCompletedBootstrapSync() {
|
|
12334
|
+
return !this.serviceCreated || this.bootstrapSyncCompleted;
|
|
12335
|
+
}
|
|
12336
|
+
static markBootstrapSyncCompleted() {
|
|
12337
|
+
this.bootstrapSyncCompleted = true;
|
|
12338
|
+
}
|
|
11699
12339
|
/**
|
|
11700
12340
|
* Emits a signal with the specified data using the associated broker.
|
|
11701
12341
|
*
|
|
@@ -11783,6 +12423,46 @@ var CadenzaService = class {
|
|
|
11783
12423
|
responders: statuses
|
|
11784
12424
|
};
|
|
11785
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
|
+
}
|
|
11786
12466
|
static async inquire(inquiry, context, options = {}) {
|
|
11787
12467
|
this.bootstrap();
|
|
11788
12468
|
const hydratedResult = this.consumeHydratedInquiryResult(
|
|
@@ -11797,6 +12477,20 @@ var CadenzaService = class {
|
|
|
11797
12477
|
descriptor: this.getInquiryResponderDescriptor(task)
|
|
11798
12478
|
})) : [];
|
|
11799
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
|
+
}
|
|
11800
12494
|
const responders = allResponders.filter(({ task, descriptor }) => {
|
|
11801
12495
|
const shouldExecute = shouldExecuteInquiryResponder(inquiry, task.isMeta);
|
|
11802
12496
|
if (shouldExecute) {
|
|
@@ -11831,6 +12525,21 @@ var CadenzaService = class {
|
|
|
11831
12525
|
durationMs: 0,
|
|
11832
12526
|
responders: []
|
|
11833
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
|
+
}
|
|
11834
12543
|
if (options.requireComplete) {
|
|
11835
12544
|
throw {
|
|
11836
12545
|
__inquiryMeta: inquiryMeta,
|
|
@@ -11846,7 +12555,6 @@ var CadenzaService = class {
|
|
|
11846
12555
|
const overallTimeoutMs = options.overallTimeoutMs ?? options.timeout ?? 0;
|
|
11847
12556
|
const requireComplete = options.requireComplete ?? false;
|
|
11848
12557
|
const perResponderTimeoutMs = options.perResponderTimeoutMs;
|
|
11849
|
-
const startedAt = Date.now();
|
|
11850
12558
|
const statuses = [];
|
|
11851
12559
|
const statusByTask = /* @__PURE__ */ new Map();
|
|
11852
12560
|
for (const responder of responders) {
|
|
@@ -11892,10 +12600,26 @@ var CadenzaService = class {
|
|
|
11892
12600
|
statuses,
|
|
11893
12601
|
allResponders.length
|
|
11894
12602
|
);
|
|
12603
|
+
const finishedAt = Date.now();
|
|
11895
12604
|
const responseContext = {
|
|
11896
12605
|
...mergedContext,
|
|
11897
12606
|
__inquiryMeta: inquiryMeta
|
|
11898
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
|
+
}
|
|
11899
12623
|
if (requireComplete && (timedOut || inquiryMeta.failed > 0 || inquiryMeta.timedOut > 0 || inquiryMeta.pending > 0)) {
|
|
11900
12624
|
reject({
|
|
11901
12625
|
...responseContext,
|
|
@@ -11911,7 +12635,7 @@ var CadenzaService = class {
|
|
|
11911
12635
|
}
|
|
11912
12636
|
for (const responder of responders) {
|
|
11913
12637
|
const { task, descriptor } = responder;
|
|
11914
|
-
const
|
|
12638
|
+
const responderInquiryId = (0, import_uuid6.v4)();
|
|
11915
12639
|
startTimeByTask.set(task, Date.now());
|
|
11916
12640
|
const resolverTask = this.createEphemeralMetaTask(
|
|
11917
12641
|
`Resolve inquiry ${inquiry} for ${descriptor.localTaskName}`,
|
|
@@ -11939,11 +12663,12 @@ var CadenzaService = class {
|
|
|
11939
12663
|
},
|
|
11940
12664
|
"Resolves distributed inquiry responder result",
|
|
11941
12665
|
{ register: false }
|
|
11942
|
-
).doOn(`meta.node.graph_completed:${
|
|
12666
|
+
).doOn(`meta.node.graph_completed:${responderInquiryId}`);
|
|
11943
12667
|
resolverTasks.push(resolverTask);
|
|
11944
12668
|
const executionContext = {
|
|
11945
12669
|
...context,
|
|
11946
|
-
|
|
12670
|
+
...logicalInquiryId ? { __inquiryId: logicalInquiryId } : {},
|
|
12671
|
+
__routineExecId: responderInquiryId,
|
|
11947
12672
|
__isInquiry: true
|
|
11948
12673
|
};
|
|
11949
12674
|
if (perResponderTimeoutMs !== void 0) {
|
|
@@ -12105,8 +12830,8 @@ var CadenzaService = class {
|
|
|
12105
12830
|
this.validateName(routineName);
|
|
12106
12831
|
const name = `${routineName} (Proxy)`;
|
|
12107
12832
|
options = {
|
|
12108
|
-
concurrency:
|
|
12109
|
-
timeout:
|
|
12833
|
+
concurrency: DEFAULT_DEPUTY_TASK_CONCURRENCY,
|
|
12834
|
+
timeout: DEFAULT_DEPUTY_TASK_TIMEOUT_MS,
|
|
12110
12835
|
register: true,
|
|
12111
12836
|
isUnique: false,
|
|
12112
12837
|
isMeta: false,
|
|
@@ -12213,8 +12938,8 @@ var CadenzaService = class {
|
|
|
12213
12938
|
return;
|
|
12214
12939
|
}
|
|
12215
12940
|
options = {
|
|
12216
|
-
concurrency:
|
|
12217
|
-
timeout:
|
|
12941
|
+
concurrency: DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY,
|
|
12942
|
+
timeout: DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS,
|
|
12218
12943
|
register: true,
|
|
12219
12944
|
isUnique: false,
|
|
12220
12945
|
isMeta: true,
|
|
@@ -12275,8 +13000,8 @@ var CadenzaService = class {
|
|
|
12275
13000
|
const description = `Executes a ${operation} on table ${tableName} in ${targetDatabaseServiceName}`;
|
|
12276
13001
|
const taskName = `${operation.charAt(0).toUpperCase() + operation.slice(1)} ${tableName}`;
|
|
12277
13002
|
options = {
|
|
12278
|
-
concurrency:
|
|
12279
|
-
timeout:
|
|
13003
|
+
concurrency: DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY,
|
|
13004
|
+
timeout: DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS,
|
|
12280
13005
|
register: true,
|
|
12281
13006
|
isUnique: false,
|
|
12282
13007
|
isMeta: false,
|
|
@@ -12420,6 +13145,7 @@ var CadenzaService = class {
|
|
|
12420
13145
|
this.validateName(serviceName);
|
|
12421
13146
|
this.validateServiceName(serviceName);
|
|
12422
13147
|
const serviceId = options.customServiceId ?? (0, import_uuid6.v4)();
|
|
13148
|
+
this.bootstrapSyncCompleted = false;
|
|
12423
13149
|
this.serviceRegistry.serviceName = serviceName;
|
|
12424
13150
|
this.serviceRegistry.serviceInstanceId = serviceId;
|
|
12425
13151
|
this.serviceRegistry.connectsToCadenzaDB = !!options.cadenzaDB?.connect;
|
|
@@ -12455,6 +13181,7 @@ var CadenzaService = class {
|
|
|
12455
13181
|
this.createMetaTask(
|
|
12456
13182
|
"Initialize graph metadata controller after initial sync",
|
|
12457
13183
|
() => {
|
|
13184
|
+
this.markBootstrapSyncCompleted();
|
|
12458
13185
|
GraphMetadataController.instance;
|
|
12459
13186
|
return true;
|
|
12460
13187
|
},
|
|
@@ -12540,14 +13267,14 @@ var CadenzaService = class {
|
|
|
12540
13267
|
data: {
|
|
12541
13268
|
name: serviceName,
|
|
12542
13269
|
description,
|
|
12543
|
-
|
|
12544
|
-
|
|
13270
|
+
display_name: options.displayName ?? "",
|
|
13271
|
+
is_meta: options.isMeta
|
|
12545
13272
|
},
|
|
12546
13273
|
__registrationData: {
|
|
12547
13274
|
name: serviceName,
|
|
12548
13275
|
description,
|
|
12549
|
-
|
|
12550
|
-
|
|
13276
|
+
display_name: options.displayName ?? "",
|
|
13277
|
+
is_meta: options.isMeta
|
|
12551
13278
|
},
|
|
12552
13279
|
__serviceName: serviceName,
|
|
12553
13280
|
__serviceInstanceId: serviceId,
|
|
@@ -12738,10 +13465,35 @@ var CadenzaService = class {
|
|
|
12738
13465
|
registration.actorName
|
|
12739
13466
|
);
|
|
12740
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
|
+
}
|
|
12741
13484
|
if (!this.get(createServiceTaskName)) {
|
|
12742
13485
|
this.createMetaTask(
|
|
12743
13486
|
createServiceTaskName,
|
|
12744
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
|
+
}
|
|
12745
13497
|
this.createCadenzaService(name, description, serviceOptions);
|
|
12746
13498
|
return true;
|
|
12747
13499
|
},
|
|
@@ -13273,6 +14025,7 @@ var CadenzaService = class {
|
|
|
13273
14025
|
this.serviceRegistry?.reset();
|
|
13274
14026
|
this.isBootstrapped = false;
|
|
13275
14027
|
this.serviceCreated = false;
|
|
14028
|
+
this.bootstrapSyncCompleted = false;
|
|
13276
14029
|
this.defaultDatabaseServiceName = null;
|
|
13277
14030
|
this.warnedInvalidMetaIntentResponderKeys = /* @__PURE__ */ new Set();
|
|
13278
14031
|
this.hydratedInquiryResults = /* @__PURE__ */ new Map();
|
|
@@ -13281,6 +14034,7 @@ var CadenzaService = class {
|
|
|
13281
14034
|
};
|
|
13282
14035
|
CadenzaService.isBootstrapped = false;
|
|
13283
14036
|
CadenzaService.serviceCreated = false;
|
|
14037
|
+
CadenzaService.bootstrapSyncCompleted = false;
|
|
13284
14038
|
CadenzaService.defaultDatabaseServiceName = null;
|
|
13285
14039
|
CadenzaService.warnedInvalidMetaIntentResponderKeys = /* @__PURE__ */ new Set();
|
|
13286
14040
|
CadenzaService.hydratedInquiryResults = /* @__PURE__ */ new Map();
|