@zlink-systems/framework 0.31.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActor.d.ts +2 -0
- package/dist/contracts/Actors/ZLinkSessionBindingIdentity.d.ts +6 -0
- package/dist/contracts/Actors/ZLinkSessionBindingIdentity.js +2 -0
- package/dist/contracts/Actors/index.d.ts +1 -0
- package/dist/contracts/Actors/index.js +1 -0
- package/dist/contracts/Common/payload-slab.d.ts +4 -0
- package/dist/contracts/Common/payload-slab.js +30 -0
- package/dist/contracts/Handlers/Contexts.d.ts +1 -0
- package/dist/internal.d.ts +9 -0
- package/dist/internal.js +23 -1
- package/dist/runtime/actors/actor-client.d.ts +1 -1
- package/dist/runtime/actors/actor-client.js +32 -23
- package/dist/runtime/actors/actor-mailbox.d.ts +1 -1
- package/dist/runtime/actors/actor-runtime-state.d.ts +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +4 -2
- package/dist/runtime/actors/spot-actor-dispatch.js +2 -1
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +1 -0
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +3 -0
- package/dist/runtime/backend/contracts/index.d.ts +2 -0
- package/dist/runtime/backend/mesh-completion-table.d.ts +1 -0
- package/dist/runtime/backend/mesh-completion-table.js +1 -0
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +5 -1
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +7 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +17 -11
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +2 -2
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +15 -8
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +7 -6
- package/dist/runtime/channels/channel-dispatch-pipeline.js +1 -0
- package/dist/runtime/channels/channel-dispatchers.d.ts +7 -3
- package/dist/runtime/channels/channel-dispatchers.js +27 -19
- package/dist/runtime/channels/channel-envelope.js +543 -23
- package/dist/runtime/channels/channel-receive-loops.d.ts +9 -6
- package/dist/runtime/channels/channel-receive-loops.js +59 -18
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +22 -3
- package/dist/runtime/channels/channel-socket-registry.d.ts +22 -4
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +1 -1
- package/dist/runtime/diagnostics/runtime-metrics.js +2 -1
- package/dist/runtime/execution/serial-execution-queue.d.ts +26 -13
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +27 -11
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +29 -25
- package/dist/runtime/foundation/service-liveness-registry.d.ts +1 -1
- package/dist/runtime/foundation/service-mailbox.d.ts +3 -1
- package/dist/runtime/foundation/service-mailbox.js +4 -1
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +3 -1
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +28 -12
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +51 -19
- package/dist/runtime/foundation/service-stateful-runtime.js +54 -5
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -0
- package/dist/runtime/foundation/service-stateful-wire-codec.js +15 -0
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +12 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +17 -7
- package/dist/runtime/host/actor-placement-coordinator.d.ts +1 -1
- package/dist/runtime/host/actor-transfer-runtime.d.ts +3 -3
- package/dist/runtime/host/application-job-queue.d.ts +1 -1
- package/dist/runtime/host/index.d.ts +89 -36
- package/dist/runtime/host/index.js +101 -7
- package/dist/runtime/host/location-runtime-owner.d.ts +2 -2
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +181 -44
- package/dist/runtime/host/service-relocation-host-runtime.js +47 -13
- package/dist/runtime/host/spot-address-transport.js +50 -42
- package/dist/runtime/locations/auto-connect-loop.d.ts +0 -1
- package/dist/runtime/locations/auto-connect-loop.js +25 -19
- package/dist/runtime/locations/auto-connect-planner.js +2 -5
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +1 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +35 -23
- package/dist/runtime/locations/in-memory-location-store.d.ts +0 -2
- package/dist/runtime/locations/in-memory-location-store.js +1 -38
- package/dist/runtime/locations/location-store-repository.d.ts +0 -1
- package/dist/runtime/locations/location-store-repository.js +13 -115
- package/dist/runtime/locations/runtime.d.ts +3 -3
- package/dist/runtime/locations/runtime.js +12 -16
- package/dist/runtime/messaging/creation-payload-codec.js +2 -2
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +4 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -7
- package/dist/runtime/spots/index.d.ts +20 -5
- package/dist/runtime/spots/index.js +14 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +3 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +13 -7
- package/dist/runtime/spots/spot-actor-packet-drain.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -5
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -1
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +8 -6
- package/dist/runtime/spots/spot-node-runtime-manager.js +2 -0
- package/dist/runtime/spots/spot-route-packet-dispatch.js +7 -4
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +3 -1
- package/dist/runtime/spots/spot-serial-executor.d.ts +2 -1
- package/dist/runtime/spots/spot-subscription-dispatch.js +3 -1
- package/dist/runtime/spots/spot-timer.d.ts +1 -1
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +9 -3
- package/dist/runtime/streams/actor-session-binding-registry.js +17 -0
- package/dist/runtime/streams/index.d.ts +3 -3
- package/dist/runtime/streams/index.js +22 -2
- package/dist/runtime/streams/managed-stream.js +2 -1
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +3 -9
- package/dist/runtime/streams/session-context.d.ts +2 -2
- package/dist/runtime/streams/session-context.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -0
- package/dist/runtime/streams/stream-session-runtime.js +37 -12
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActor.ts +6 -0
- package/src/contracts/Actors/ZLinkSessionBindingIdentity.ts +7 -0
- package/src/contracts/Actors/index.ts +1 -0
- package/src/contracts/Common/payload-slab.ts +29 -0
- package/src/contracts/Handlers/Contexts.ts +1 -0
- package/src/internal.ts +17 -0
- package/src/runtime/actors/actor-client.ts +48 -23
- package/src/runtime/actors/actor-mailbox.ts +1 -1
- package/src/runtime/actors/actor-runtime-state.ts +1 -1
- package/src/runtime/actors/spot-actor-dispatch.ts +4 -3
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +4 -0
- package/src/runtime/backend/contracts/index.ts +2 -0
- package/src/runtime/backend/mesh-completion-table.ts +2 -0
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +5 -1
- package/src/runtime/backend/node/node-raw-binding-port.ts +20 -7
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +18 -10
- package/src/runtime/channels/channel-dispatch-pipeline.ts +6 -5
- package/src/runtime/channels/channel-dispatchers.ts +39 -19
- package/src/runtime/channels/channel-envelope.ts +547 -20
- package/src/runtime/channels/channel-receive-loops.ts +93 -36
- package/src/runtime/channels/channel-runtime-lifecycle.ts +2 -2
- package/src/runtime/channels/channel-socket-registry.ts +3 -3
- package/src/runtime/diagnostics/runtime-metrics.ts +3 -1
- package/src/runtime/execution/serial-execution-queue.ts +13 -13
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +40 -39
- package/src/runtime/foundation/service-liveness-registry.ts +1 -1
- package/src/runtime/foundation/service-mailbox.ts +6 -1
- package/src/runtime/foundation/service-runtime-contracts.ts +7 -1
- package/src/runtime/foundation/service-stateful-registry.ts +39 -14
- package/src/runtime/foundation/service-stateful-runtime.ts +87 -21
- package/src/runtime/foundation/service-stateful-wire-codec.ts +18 -0
- package/src/runtime/foundation/service-wire-constants.generated.ts +10 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -7
- package/src/runtime/host/actor-placement-coordinator.ts +1 -1
- package/src/runtime/host/actor-transfer-runtime.ts +3 -3
- package/src/runtime/host/application-job-queue.ts +1 -1
- package/src/runtime/host/index.ts +183 -44
- package/src/runtime/host/location-runtime-owner.ts +2 -2
- package/src/runtime/host/service-relocation-host-runtime.ts +101 -65
- package/src/runtime/host/spot-address-transport.ts +67 -61
- package/src/runtime/locations/auto-connect-loop.ts +24 -16
- package/src/runtime/locations/auto-connect-planner.ts +2 -5
- package/src/runtime/locations/auto-connect-reconciler.ts +37 -24
- package/src/runtime/locations/in-memory-location-store.ts +1 -74
- package/src/runtime/locations/location-store-repository.ts +32 -153
- package/src/runtime/locations/runtime.ts +16 -28
- package/src/runtime/messaging/creation-payload-codec.ts +3 -3
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/index.ts +28 -4
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +1 -1
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +16 -6
- package/src/runtime/spots/spot-actor-packet-drain.ts +21 -6
- package/src/runtime/spots/spot-entry-activation.ts +1 -1
- package/src/runtime/spots/spot-node-runtime-manager.ts +8 -6
- package/src/runtime/spots/spot-route-packet-dispatch.ts +8 -4
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +3 -1
- package/src/runtime/spots/spot-serial-executor.ts +1 -1
- package/src/runtime/spots/spot-subscription-dispatch.ts +3 -1
- package/src/runtime/spots/spot-timer.ts +1 -1
- package/src/runtime/streams/actor-session-binding-registry.ts +30 -3
- package/src/runtime/streams/index.ts +30 -4
- package/src/runtime/streams/managed-stream.ts +2 -1
- package/src/runtime/streams/session-calls.ts +9 -14
- package/src/runtime/streams/session-context.ts +6 -11
- package/src/runtime/streams/stream-session-runtime.ts +49 -20
|
@@ -11,6 +11,7 @@ exports.decodeChannelRequestHeader = decodeChannelRequestHeader;
|
|
|
11
11
|
exports.encodeReplyHeader = encodeReplyHeader;
|
|
12
12
|
exports.decodeReplyHeader = decodeReplyHeader;
|
|
13
13
|
exports.encodeApplicationPayload = encodeApplicationPayload;
|
|
14
|
+
exports.encodeOwnedApplicationPayload = encodeOwnedApplicationPayload;
|
|
14
15
|
exports.encodeMultipartApplicationPayload = encodeMultipartApplicationPayload;
|
|
15
16
|
exports.encodeMultipartPayload = encodeMultipartPayload;
|
|
16
17
|
exports.decodeApplicationPayload = decodeApplicationPayload;
|
|
@@ -25,6 +26,7 @@ exports.encodeReject = encodeReject;
|
|
|
25
26
|
exports.decodeReject = decodeReject;
|
|
26
27
|
exports.decodeHeader = decodeHeader;
|
|
27
28
|
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
29
|
+
const payload_slab_1 = require("../../contracts/Common/payload-slab");
|
|
28
30
|
const EndpointNotation_1 = require("../../contracts/Configuration/EndpointNotation");
|
|
29
31
|
const service_topology_registry_1 = require("./service-topology-registry");
|
|
30
32
|
const service_wire_binary_primitives_1 = require("./service-wire-binary-primitives");
|
|
@@ -142,7 +144,14 @@ function decodeReplyHeader(frame) {
|
|
|
142
144
|
return result;
|
|
143
145
|
}
|
|
144
146
|
function encodeApplicationPayload(payload) {
|
|
145
|
-
|
|
147
|
+
return encodeApplicationPayloadWith(payload, payload_slab_1.allocatePayloadBytes);
|
|
148
|
+
}
|
|
149
|
+
/** Encodes a retained internal application frame with its own backing store. */
|
|
150
|
+
function encodeOwnedApplicationPayload(payload) {
|
|
151
|
+
return encodeApplicationPayloadWith(payload, allocateOwnedPayloadBytes);
|
|
152
|
+
}
|
|
153
|
+
function encodeApplicationPayloadWith(payload, allocate) {
|
|
154
|
+
const result = allocateApplicationPayload(payload.packetName, payload.contentType, payload.payload.byteLength, allocate);
|
|
146
155
|
result.set(payload.payload, result.byteLength - payload.payload.byteLength);
|
|
147
156
|
return result;
|
|
148
157
|
}
|
|
@@ -153,7 +162,7 @@ function encodeApplicationPayload(payload) {
|
|
|
153
162
|
*/
|
|
154
163
|
function encodeMultipartApplicationPayload(parts, packetName, contentType) {
|
|
155
164
|
const multipartLength = multipartPayloadLength(parts);
|
|
156
|
-
const result = allocateApplicationPayload(packetName, contentType, multipartLength);
|
|
165
|
+
const result = allocateApplicationPayload(packetName, contentType, multipartLength, payload_slab_1.allocatePayloadBytes);
|
|
157
166
|
writeMultipartPayload(result, result.byteLength - multipartLength, parts);
|
|
158
167
|
return result;
|
|
159
168
|
}
|
|
@@ -197,7 +206,7 @@ function writeMultipartPayload(result, offset, parts) {
|
|
|
197
206
|
offset += length;
|
|
198
207
|
}
|
|
199
208
|
}
|
|
200
|
-
function allocateApplicationPayload(packetName, contentType, payloadLength) {
|
|
209
|
+
function allocateApplicationPayload(packetName, contentType, payloadLength, allocate) {
|
|
201
210
|
const packetNameLength = (0, service_wire_binary_primitives_1.canonicalServiceWireTextLength)(packetName, 'packetName', service_wire_binary_primitives_1.SERVICE_WIRE_TEXT8_MAX_BYTES, fail);
|
|
202
211
|
const contentTypeLength = (0, service_wire_binary_primitives_1.canonicalServiceWireTextLength)(contentType, 'contentType', service_wire_binary_primitives_1.SERVICE_WIRE_TEXT8_MAX_BYTES, fail);
|
|
203
212
|
if (payloadLength > MAX_U32)
|
|
@@ -207,10 +216,8 @@ function allocateApplicationPayload(packetName, contentType, payloadLength) {
|
|
|
207
216
|
const bodyLength = frameLength - prefixLength;
|
|
208
217
|
if (bodyLength > MAX_U32)
|
|
209
218
|
fail('Application payload body exceeds u32.');
|
|
210
|
-
// Both callers write every payload byte after these header fields
|
|
211
|
-
|
|
212
|
-
// instead of its own backing store.
|
|
213
|
-
const result = Buffer.allocUnsafe(frameLength);
|
|
219
|
+
// Both callers write every payload byte after these header fields.
|
|
220
|
+
const result = allocate(frameLength);
|
|
214
221
|
result[0] = exports.APPLICATION_PAYLOAD_VERSION;
|
|
215
222
|
result.writeUInt32BE(bodyLength, 1);
|
|
216
223
|
let offset = writeText8(result, prefixLength, packetName, packetNameLength);
|
|
@@ -218,6 +225,9 @@ function allocateApplicationPayload(packetName, contentType, payloadLength) {
|
|
|
218
225
|
result.writeUInt32BE(payloadLength, offset);
|
|
219
226
|
return result;
|
|
220
227
|
}
|
|
228
|
+
function allocateOwnedPayloadBytes(length) {
|
|
229
|
+
return Buffer.allocUnsafeSlow(length);
|
|
230
|
+
}
|
|
221
231
|
function decodeApplicationPayload(frame) {
|
|
222
232
|
const decoded = decodeApplicationPayloadView(frame);
|
|
223
233
|
return {
|
|
@@ -21,7 +21,7 @@ export interface ZLinkActorPlacementCoordinatorOptions {
|
|
|
21
21
|
readonly decodeRemoteReply?: (payload: Uint8Array) => unknown;
|
|
22
22
|
}
|
|
23
23
|
export declare class ZLinkActorPlacementCoordinator {
|
|
24
|
-
|
|
24
|
+
readonly options: ZLinkActorPlacementCoordinatorOptions;
|
|
25
25
|
constructor(options: ZLinkActorPlacementCoordinatorOptions);
|
|
26
26
|
create(actorId: string, stableType: string, createOnly: boolean, meshName: string | undefined, requestPayload: Uint8Array, timeoutMs: number, signal?: AbortSignal): Promise<ZLinkActorCreateResult>;
|
|
27
27
|
handleRemoteCreate(record: ServiceActorCreateRecord, materialize: (requestPayload: Uint8Array, authority: ZLinkAuthoritySnapshot, signal: AbortSignal) => Promise<{
|
|
@@ -90,8 +90,8 @@ export declare class ZLinkActorTransferRuntime {
|
|
|
90
90
|
completeRelocationSourceLeave(actor: ZLinkActor, sourceSpotId: RoutingId | undefined, signal?: AbortSignal): Promise<void>;
|
|
91
91
|
relayMaintenanceTerminal(actorId: string, packet: ZLinkActorHandoffPacket, result: ZLinkActorHandoffResult, sourceNodeRid: RoutingId, targetAuthorityOwnerGeneration?: bigint): ZLinkActorHandoffTerminalAck;
|
|
92
92
|
relayCanonicalMaintenanceTerminal(operationId: string, replyRouteId: string, result: ZLinkActorHandoffResult, sourceNodeRid: RoutingId, targetAuthorityOwnerGeneration?: bigint): ZLinkActorHandoffTerminalAcceptance;
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
sealBoundSessionRoute(actor: ZLinkActor, state: ZLinkActorRuntimeState, signal?: AbortSignal, relocation?: ServiceWireOperationId, relocationTarget?: Pick<ZLinkMeshNodeDescriptor, 'rid' | 'lifecycleGeneration'>): Promise<ZLinkRemoteBoundSessionTarget | undefined>;
|
|
94
|
+
abortBoundSessionRouteSeal(actor: ZLinkActor, state: ZLinkActorRuntimeState, target: ZLinkRemoteBoundSessionTarget): Promise<void>;
|
|
95
95
|
private observeBoundSessionSealAbort;
|
|
96
96
|
getOrCreateRoutedActor(actorId: string, actorType: string, actorRef?: ActorRef, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, actorCreateRequest?: Message, signal?: AbortSignal): Promise<{
|
|
97
97
|
readonly actor: ZLinkActor;
|
|
@@ -120,6 +120,6 @@ export declare class ZLinkActorTransferRuntime {
|
|
|
120
120
|
rollbackRoutedActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
|
|
121
121
|
actorEntryNodeRid(actor: ZLinkActor): RoutingId | undefined;
|
|
122
122
|
private requireActorManager;
|
|
123
|
-
|
|
123
|
+
publishBoundSessionOwnership(actorId: string, actorRef: ZLinkBackendActorRef, ownershipGeneration: bigint, target: ZLinkRemoteBoundSessionTarget | undefined, targetOwnerLeaseGeneration: bigint | undefined): Promise<void>;
|
|
124
124
|
}
|
|
125
125
|
export {};
|
|
@@ -133,7 +133,7 @@ export declare class ApplicationJobQueue implements ApplicationJobQueuePort {
|
|
|
133
133
|
private recordCompletedWait;
|
|
134
134
|
private updateLocalWaiters;
|
|
135
135
|
private logLocalBacklog;
|
|
136
|
-
|
|
136
|
+
evaluatePressure(): void;
|
|
137
137
|
private pauseDurationAt;
|
|
138
138
|
private cumulativePauseDurationAt;
|
|
139
139
|
}
|
|
@@ -1,17 +1,33 @@
|
|
|
1
|
+
import { RequestRuntime } from '../foundation/request-runtime';
|
|
1
2
|
import { inspectRuntime } from '../internal-observation';
|
|
2
|
-
import
|
|
3
|
+
import type { ApplicationJobOrigin } from '../application-jobs/contracts';
|
|
4
|
+
import { type ZLinkClientServerRuntime, type ZLinkFanoutRuntime, type ZLinkFrameworkLifecycleOptions, type ZLinkFrameworkRelocationOptions, type ZLinkFrameworkRelocationResult, type ZLinkFrameworkRuntime, type ZLinkFrameworkRuntimeStatus, type ZLinkFrameworkTerminationResult, type ZLinkListenerKind, type ZLinkListenerStatus, type ZLinkMeshNodeDescriptor, type ZLinkMessageFlowControl, type ZLinkMessageFlowLogMode, type ZLinkObservedStatus, type ZLinkRouteMeshRuntime, ZLinkFrameworkRelocationReason, ZLinkFrameworkRuntimeState } from '../../contracts';
|
|
3
5
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
4
6
|
import { type ZLinkLocationRuntimeQuery } from '../../contracts/Locations';
|
|
5
7
|
import { type DefaultZLinkActorManager, type ZLinkActorManagerOptions, DefaultZLinkActorClient } from '../actors';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
+
import { ZLinkRuntimeAdmissionGate, type ZLinkMeshDispatchAdmission } from '../admission';
|
|
9
|
+
import { type ZLinkBackendAdapterFactory, type ZLinkBackendContext, type ZLinkBackendMeshNode } from '../backend';
|
|
10
|
+
import { type ZLinkBackendMessageLike as MessageLike } from '../backend/runtime-values';
|
|
11
|
+
import { DefaultZLinkChannelRuntimeOptions, ZLinkChannelRuntimeManager, ZLinkDispatchErrorReporter, ZLinkRuntimeRouteTransport, type ZLinkDispatchErrorSink } from '../channels';
|
|
8
12
|
import type { ZLinkFrameworkRegistration } from '../configuration';
|
|
9
|
-
import { type ZLinkRuntimeEventPublisher } from '../diagnostics';
|
|
13
|
+
import { type ZLinkRuntimeEventPublisher, ZLinkRuntimeMetrics, type ZLinkRuntimeMetricMeshSnapshot } from '../diagnostics';
|
|
10
14
|
import { ZLinkFrameworkExecutionState } from '../execution';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
15
|
+
import { ZLinkListenerRecords } from '../foundation/listener-records';
|
|
16
|
+
import { type ReadyRecord, type ReceiveRecord } from '../foundation/service-runtime-contracts';
|
|
17
|
+
import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
|
|
18
|
+
import { type ZLinkLocationRuntime, type ZLinkStoreLocationResolvers } from '../locations';
|
|
19
|
+
import { ZLinkSubmitStatus } from '../messaging/submission-result';
|
|
20
|
+
import { DefaultZLinkSpotManager, ZLinkRuntimeSpotPublisherTransport, ZLinkSpotNodeRuntimeManager, type ZLinkDetachedTaskRunner, type ZLinkSpotManagerOptions } from '../spots';
|
|
21
|
+
import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
|
|
13
22
|
import { DefaultZLinkBoundSessionFactory, ZLinkStreamBindingRuntime } from '../streams';
|
|
23
|
+
import { ZLinkActorPlacementCoordinator } from './actor-placement-coordinator';
|
|
24
|
+
import { ApplicationJobQueue } from './application-job-queue';
|
|
25
|
+
import { ZLinkBoundSessionRelay } from './bound-session-relay';
|
|
26
|
+
import { ZLinkEntryActorRuntimeService } from './entry-actor-runtime';
|
|
27
|
+
import { ZLinkLocationRuntimeOwner } from './location-runtime-owner';
|
|
28
|
+
import { ZLinkRouteMeshRuntimeCoordinator } from './route-mesh-runtime';
|
|
14
29
|
import { DefaultZLinkRouteMeshRuntimeOptions } from './route-mesh-runtime-options';
|
|
30
|
+
import { ZLinkHostServiceRelocationRuntime } from './service-relocation-host-runtime';
|
|
15
31
|
import { ZLinkHostSpotAddressTransport } from './spot-address-transport';
|
|
16
32
|
export interface ZLinkFrameworkRuntimeLifecycle {
|
|
17
33
|
readonly isStarted: boolean;
|
|
@@ -42,8 +58,8 @@ export declare class ZLinkFrameworkRuntimeHost implements ZLinkFrameworkRuntimeL
|
|
|
42
58
|
}>;
|
|
43
59
|
private readonly backendAdapterFactory;
|
|
44
60
|
private readonly lifecycleSink?;
|
|
45
|
-
|
|
46
|
-
|
|
61
|
+
executionState?: ZLinkFrameworkExecutionState;
|
|
62
|
+
runtimeState: ZLinkFrameworkRuntimeState;
|
|
47
63
|
private runtimeStatus?;
|
|
48
64
|
private readonly runtimeObservationSource;
|
|
49
65
|
private runtimeDeadline?;
|
|
@@ -58,21 +74,21 @@ export declare class ZLinkFrameworkRuntimeHost implements ZLinkFrameworkRuntimeL
|
|
|
58
74
|
private shutdownOperationStartedAt?;
|
|
59
75
|
private relocationTargetApplicationVersion?;
|
|
60
76
|
private readonly runtimeObservers;
|
|
61
|
-
|
|
62
|
-
|
|
77
|
+
channelRuntime?: ZLinkChannelRuntimeManager;
|
|
78
|
+
spotNodeRuntime?: ZLinkSpotNodeRuntimeManager;
|
|
63
79
|
private streamRuntime?;
|
|
64
80
|
private statefulAuthorityRoutes?;
|
|
65
|
-
|
|
81
|
+
readonly locationOwner: ZLinkLocationRuntimeOwner;
|
|
66
82
|
private readonly meshRouters;
|
|
67
|
-
|
|
83
|
+
readonly boundSessionRelay: ZLinkBoundSessionRelay;
|
|
68
84
|
private readonly actorHandoff;
|
|
69
85
|
private readonly actorTransferRegistry;
|
|
70
86
|
private readonly actorTransferRuntime;
|
|
71
87
|
private readonly actorTransferAuthorityRuntime;
|
|
72
|
-
|
|
73
|
-
|
|
88
|
+
readonly serviceRelocation: ZLinkHostServiceRelocationRuntime;
|
|
89
|
+
readonly entryActorRuntime: ZLinkEntryActorRuntimeService;
|
|
74
90
|
private actorManager?;
|
|
75
|
-
|
|
91
|
+
actorPlacement?: ZLinkActorPlacementCoordinator;
|
|
76
92
|
private spotManager?;
|
|
77
93
|
private userSpotCoordinator?;
|
|
78
94
|
private ownerLeaseRecoveryRuntime?;
|
|
@@ -81,17 +97,17 @@ export declare class ZLinkFrameworkRuntimeHost implements ZLinkFrameworkRuntimeL
|
|
|
81
97
|
private readonly destroyedActorRefs;
|
|
82
98
|
private readonly runtimeEventPublisher;
|
|
83
99
|
private readonly metrics;
|
|
84
|
-
|
|
100
|
+
readonly applicationJobQueue: ApplicationJobQueue;
|
|
85
101
|
private readonly capacityStatus;
|
|
86
102
|
private readonly metricRegistrations;
|
|
87
|
-
|
|
103
|
+
readonly admission: ZLinkRuntimeAdmissionGate;
|
|
88
104
|
private readonly activationAdmission;
|
|
89
105
|
private cachedLocationSpotRouteResolver?;
|
|
90
106
|
private actorClientLocationResolver?;
|
|
91
107
|
private readonly messageFlowModeCell;
|
|
92
108
|
private telemetryLease;
|
|
93
109
|
private dispatchErrorReporters;
|
|
94
|
-
|
|
110
|
+
readonly runtimeOrPreStartErrorSink: ZLinkDispatchErrorSink;
|
|
95
111
|
private cachedDiagnosticsContext?;
|
|
96
112
|
private readonly preStartErrorSink;
|
|
97
113
|
readonly channelTransport: () => ZLinkChannelRuntimeManager | undefined;
|
|
@@ -108,7 +124,7 @@ export declare class ZLinkFrameworkRuntimeHost implements ZLinkFrameworkRuntimeL
|
|
|
108
124
|
readonly clientServerRuntime: ZLinkClientServerRuntime;
|
|
109
125
|
readonly fanoutRuntime: ZLinkFanoutRuntime;
|
|
110
126
|
private readonly relocationStore?;
|
|
111
|
-
|
|
127
|
+
readonly routeMeshCoordinator: ZLinkRouteMeshRuntimeCoordinator;
|
|
112
128
|
constructor(options: ZLinkFrameworkRuntimeHostOptions, internalOptions?: unknown);
|
|
113
129
|
get isStarted(): boolean;
|
|
114
130
|
get status(): ZLinkFrameworkRuntimeStatus;
|
|
@@ -148,17 +164,17 @@ export declare class ZLinkFrameworkRuntimeHost implements ZLinkFrameworkRuntimeL
|
|
|
148
164
|
start(): Promise<void>;
|
|
149
165
|
private startCore;
|
|
150
166
|
stop(): Promise<void>;
|
|
151
|
-
|
|
167
|
+
runtimeMetricMeshSnapshots(): readonly ZLinkRuntimeMetricMeshSnapshot[];
|
|
152
168
|
private stopCore;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
169
|
+
installOwnerLeaseRecoveryPublication(runtime: ZLinkLocationRuntime, spotNodeRuntime: ZLinkSpotNodeRuntimeManager, channelRuntime: ZLinkChannelRuntimeManager): void;
|
|
170
|
+
resumeOwnerLeaseOwnedWork(runtime: ZLinkLocationRuntime, spotNodeRuntime: ZLinkSpotNodeRuntimeManager, channelRuntime: ZLinkChannelRuntimeManager): Promise<void>;
|
|
171
|
+
enterServing(spotNodeRuntime: ZLinkSpotNodeRuntimeManager, signal: AbortSignal | undefined): Promise<void>;
|
|
156
172
|
private publishOrStayPreparing;
|
|
157
|
-
|
|
173
|
+
startStatefulAuthority(locationStore: import('../locations/domain-store-contract').ZLinkDomainLocationStore, spotNodeRuntime: ZLinkSpotNodeRuntimeManager, signal: AbortSignal | undefined): Promise<void>;
|
|
158
174
|
private createStatefulAuthorityRoutes;
|
|
159
175
|
private requiresStatefulAuthorityRuntime;
|
|
160
176
|
private installLocationBackedAuthorities;
|
|
161
|
-
|
|
177
|
+
removeOwnerLeaseRecoveryPublication(): void;
|
|
162
178
|
private ownerAdmissionOpen;
|
|
163
179
|
onApplicationBootstrap(): Promise<void>;
|
|
164
180
|
onApplicationShutdown(): Promise<void>;
|
|
@@ -167,10 +183,10 @@ export declare class ZLinkFrameworkRuntimeHost implements ZLinkFrameworkRuntimeL
|
|
|
167
183
|
private publishMeshRetiring;
|
|
168
184
|
private publishMeshServing;
|
|
169
185
|
private publishMeshDraining;
|
|
170
|
-
|
|
186
|
+
preflightAutomaticPeerReadiness(deadlineAt: number, targetApplicationVersion: bigint): Promise<ZLinkFrameworkRelocationReason | undefined>;
|
|
171
187
|
private hasLocalStatefulRelocationWork;
|
|
172
188
|
private hasExactAutomaticPeerReadiness;
|
|
173
|
-
|
|
189
|
+
publishHostRelocated(): Promise<void>;
|
|
174
190
|
private publishHostDraining;
|
|
175
191
|
private cleanupOwnerForDrain;
|
|
176
192
|
private registerInstanceApplicationLifecycle;
|
|
@@ -183,24 +199,61 @@ export declare class ZLinkFrameworkRuntimeHost implements ZLinkFrameworkRuntimeL
|
|
|
183
199
|
createPublicSpotManager(local: DefaultZLinkSpotManager): import('../../contracts').ZLinkSpotManager;
|
|
184
200
|
private actorRuntimeOptionsFactory;
|
|
185
201
|
private createChannelRuntimeOptions;
|
|
186
|
-
|
|
202
|
+
createSpotNodeRuntimeOptions(context: ZLinkBackendContext, dispatchErrors: ZLinkDispatchErrorReporter): {
|
|
203
|
+
admission: ZLinkRuntimeAdmissionGate;
|
|
204
|
+
errorSink: ZLinkDispatchErrorSink;
|
|
205
|
+
peerAdmissionSealed: (meshName: string) => boolean;
|
|
206
|
+
messageFollowReceiver: (record: ServiceMessageFollowRecord) => void;
|
|
207
|
+
meshRecordDispatcher: (meshName: string, owner: ReadyRecord, record: ReceiveRecord) => void | Promise<void>;
|
|
208
|
+
activationConcurrency: (meshName: string) => import("../activation-admission").ZLinkActivationConcurrency;
|
|
209
|
+
context: ZLinkBackendContext;
|
|
210
|
+
applicationJobQueue?: ApplicationJobQueue;
|
|
211
|
+
registration: ZLinkFrameworkRegistration;
|
|
212
|
+
messageSerializers?: ReadonlyMap<string, import("../../contracts").ZLinkMessageSerializer>;
|
|
213
|
+
providerResolver?: ZLinkProviderResolver;
|
|
214
|
+
metrics?: import("../diagnostics").ZLinkRuntimeMetrics;
|
|
215
|
+
spotRouterChannelIdForMesh?: (meshName: string) => string;
|
|
216
|
+
runtimeEventPublisher?: ZLinkRuntimeEventPublisher;
|
|
217
|
+
actorHandoffRuntime?: import("../spots/spot-runtime-ports").ZLinkSpotActorHandoffRuntime;
|
|
218
|
+
actorTransferRuntime?: import("../spots/spot-runtime-ports").ZLinkSpotActorTransferRuntime;
|
|
219
|
+
boundSessionRuntime?: import("../spots/spot-runtime-ports").ZLinkSpotBoundSessionRuntime;
|
|
220
|
+
detachedTaskRunner: ZLinkDetachedTaskRunner;
|
|
221
|
+
dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
222
|
+
channelClient?: import("../../contracts").ZLinkChannelClient;
|
|
223
|
+
fanoutClient?: import("../../contracts").ZLinkFanoutClient;
|
|
224
|
+
spotPublisherClient?: import("../../contracts").ZLinkSpotPublisherClient;
|
|
225
|
+
routedTransport?: import("../spots").ZLinkSpotRoutedTransport;
|
|
226
|
+
requests?: RequestRuntime;
|
|
227
|
+
listenerRecords?: ZLinkListenerRecords;
|
|
228
|
+
primaryMeshName?: string;
|
|
229
|
+
backendAdapterFactory: ZLinkBackendAdapterFactory;
|
|
230
|
+
spotRouteResolver?: ZLinkSpotRouteResolver;
|
|
231
|
+
entryActorRuntime?: import("../spots/spot-runtime-ports").ZLinkEntryActorRuntime;
|
|
232
|
+
applicationJobReceiveFlowFailureSink?: (error: unknown) => void;
|
|
233
|
+
};
|
|
187
234
|
private dispatchMeshNodeRecord;
|
|
188
235
|
private dispatchMeshNodePayload;
|
|
189
236
|
private completeFormalSourceLeave;
|
|
190
|
-
|
|
237
|
+
dispatchMeshRecord(applicationJobOrigin: () => ApplicationJobOrigin, meshName: string, owner: ReadyRecord, record: ReceiveRecord, signal?: AbortSignal): void | Promise<void>;
|
|
191
238
|
private admitMeshDispatch;
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
239
|
+
dispatchMeshActorBinding(meshName: string, record: ReceiveRecord, signal?: AbortSignal): Promise<void>;
|
|
240
|
+
submitLocalMeshRoute(meshName: string, sourceNodeRid: string, parts: readonly MessageLike[]): {
|
|
241
|
+
readonly status: ZLinkSubmitStatus.Shutdown;
|
|
242
|
+
} | {
|
|
243
|
+
readonly status: ZLinkSubmitStatus.TargetNotFound;
|
|
244
|
+
} | {
|
|
245
|
+
readonly status: ZLinkSubmitStatus.Submitted;
|
|
246
|
+
};
|
|
247
|
+
dispatchMeshSpotRecord(meshName: string, owner: ReadyRecord, record: ReceiveRecord, admit?: ZLinkMeshDispatchAdmission): Promise<void>;
|
|
248
|
+
createDispatchErrorReporter(errorSink: ZLinkDispatchErrorSink): ZLinkDispatchErrorReporter;
|
|
196
249
|
detachedTaskRunner(): ZLinkDetachedTaskRunner;
|
|
197
250
|
private diagnosticsContext;
|
|
198
|
-
|
|
251
|
+
flowCreationEnabled(): boolean;
|
|
199
252
|
private runLifecycle;
|
|
200
253
|
requirePrimaryMeshNode(): ZLinkBackendMeshNode;
|
|
201
254
|
private ensureLocationRuntime;
|
|
202
|
-
|
|
203
|
-
|
|
255
|
+
createLocationSpotRouteResolver(): ZLinkSpotRouteResolver | undefined;
|
|
256
|
+
createActorLocationResolver(): ZLinkStoreLocationResolvers | undefined;
|
|
204
257
|
}
|
|
205
258
|
export declare function hasUnsupportedManualTopology(registration: ZLinkFrameworkRegistration): boolean;
|
|
206
259
|
export declare function hasExactPeerReadiness(descriptors: readonly ZLinkMeshNodeDescriptor[], local: {
|
|
@@ -559,7 +559,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
559
559
|
clear: () => this.boundSessionRelay.boundSessions.clearServiceWireSessionRelocations()
|
|
560
560
|
},
|
|
561
561
|
trackInstanceSpot: (input) => this.locationOwner.currentLifecycle?.trackInstanceSpot(input),
|
|
562
|
-
|
|
562
|
+
observeActorAuthorityVersion: (actorId, storeVersion) => this.actorClientLocationResolver?.observeActorAuthorityVersion(actorId, storeVersion),
|
|
563
563
|
reconcileStatefulAuthorityRoutes: (signal) => this.statefulAuthorityRoutes?.reconcile(signal) ?? Promise.resolve(),
|
|
564
564
|
runtimeEventPublisher: this.runtimeEventPublisher,
|
|
565
565
|
metrics: this.metrics,
|
|
@@ -1998,7 +1998,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
1998
1998
|
if (entrySpotId === undefined) {
|
|
1999
1999
|
throw new ConfigurationException_1.ZLinkConfigurationException(`Actor '${actorRef.actorId}' authority requires its RouteMesh Entry Spot.`);
|
|
2000
2000
|
}
|
|
2001
|
-
await (0, actors_1.publishInitialActorAuthority)(store, {
|
|
2001
|
+
const authority = await (0, actors_1.publishInitialActorAuthority)(store, {
|
|
2002
2002
|
actorType,
|
|
2003
2003
|
actor: actorRef,
|
|
2004
2004
|
meshName,
|
|
@@ -2008,7 +2008,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
2008
2008
|
spotGeneration: ownerNodeGeneration,
|
|
2009
2009
|
spotKind: contracts_2.ZLinkSpotKind.Entry
|
|
2010
2010
|
}, signal);
|
|
2011
|
-
this.actorClientLocationResolver?.
|
|
2011
|
+
this.actorClientLocationResolver?.observeActorAuthorityVersion(actorRef.actorId, authority.storeVersion.value);
|
|
2012
2012
|
},
|
|
2013
2013
|
reportPostCommitError: (error) => this.runtimeOrPreStartErrorSink.reportRuntimeTaskException('post-commit actor binding', error),
|
|
2014
2014
|
reportBoundSessionSendError: (error) => this.runtimeOrPreStartErrorSink.reportRuntimeTaskException('bound session one-way submit', error),
|
|
@@ -2260,8 +2260,7 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
2260
2260
|
replyBindingFailure(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2261
2261
|
return;
|
|
2262
2262
|
}
|
|
2263
|
-
|
|
2264
|
-
state.installBoundSessionBinding({
|
|
2263
|
+
const incomingTarget = {
|
|
2265
2264
|
...target,
|
|
2266
2265
|
sessionNodeRid: binding.sessionNodeRid,
|
|
2267
2266
|
sessionRid: binding.sessionRid,
|
|
@@ -2269,8 +2268,79 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
2269
2268
|
sessionOwnerId: binding.sessionOwnerId,
|
|
2270
2269
|
sessionOwnerLeaseGeneration: binding.sessionOwnerLeaseGeneration,
|
|
2271
2270
|
bindingGeneration: binding.bindingGeneration
|
|
2271
|
+
};
|
|
2272
|
+
const currentBinding = state.boundSession;
|
|
2273
|
+
const currentActor = state.actor;
|
|
2274
|
+
if (currentBinding === undefined ||
|
|
2275
|
+
currentActor?.onDuplicateBind === undefined ||
|
|
2276
|
+
samePhysicalSession(currentBinding, incomingTarget)) {
|
|
2277
|
+
state.installBoundSessionBinding(incomingTarget);
|
|
2278
|
+
replyBindingSuccess();
|
|
2279
|
+
return;
|
|
2280
|
+
}
|
|
2281
|
+
const spotManager = this.spotManager;
|
|
2282
|
+
if (spotManager === undefined || state.meshName === undefined) {
|
|
2283
|
+
replyBindingFailure(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2284
|
+
return;
|
|
2285
|
+
}
|
|
2286
|
+
let callbackStarted;
|
|
2287
|
+
const started = new Promise((resolve) => {
|
|
2288
|
+
callbackStarted = resolve;
|
|
2272
2289
|
});
|
|
2273
|
-
|
|
2290
|
+
let callbackTimedOut = false;
|
|
2291
|
+
let timeoutHandle;
|
|
2292
|
+
const cancellation = new AbortController();
|
|
2293
|
+
const callbackSignal = signal === undefined ? cancellation.signal : AbortSignal.any([signal, cancellation.signal]);
|
|
2294
|
+
const turn = spotManager.executeActorTurn(state.meshName, state.actor?.context.spotId, state.actorId, async () => {
|
|
2295
|
+
const current = state.boundSession;
|
|
2296
|
+
const actor = state.actor;
|
|
2297
|
+
const duplicateCallback = current !== undefined && !samePhysicalSession(current, incomingTarget)
|
|
2298
|
+
? actor?.onDuplicateBind
|
|
2299
|
+
: undefined;
|
|
2300
|
+
if (duplicateCallback === undefined || actor === undefined || current === undefined) {
|
|
2301
|
+
state.installBoundSessionBinding(incomingTarget);
|
|
2302
|
+
replyBindingSuccess();
|
|
2303
|
+
return;
|
|
2304
|
+
}
|
|
2305
|
+
callbackStarted();
|
|
2306
|
+
const decision = await duplicateCallback.call(actor, sessionBindingIdentity(current), sessionBindingIdentity(incomingTarget), callbackSignal);
|
|
2307
|
+
if (callbackTimedOut)
|
|
2308
|
+
return;
|
|
2309
|
+
if (decision !== undefined && decision.length > 0) {
|
|
2310
|
+
if (Buffer.byteLength(decision, 'utf8') > 0xffff) {
|
|
2311
|
+
throw new RangeError('Duplicate bind rejection message exceeds Text16 capacity.');
|
|
2312
|
+
}
|
|
2313
|
+
if (record.replyFailure?.(runtime_values_1.RequestResult.Rejected, 0, {
|
|
2314
|
+
kind: 'streamBindRejected',
|
|
2315
|
+
rejectionMessage: decision
|
|
2316
|
+
}) !== runtime_values_1.SubmitResult.Ok) {
|
|
2317
|
+
throw new ConfigurationException_1.ZLinkConfigurationException(`MeshNode Actor binding target '${binding.actor.actorId}' rejection acknowledgement failed.`);
|
|
2318
|
+
}
|
|
2319
|
+
return;
|
|
2320
|
+
}
|
|
2321
|
+
state.installBoundSessionBinding(incomingTarget);
|
|
2322
|
+
replyBindingSuccess();
|
|
2323
|
+
});
|
|
2324
|
+
const timeout = started.then(() => new Promise((resolve) => {
|
|
2325
|
+
timeoutHandle = setTimeout(() => {
|
|
2326
|
+
callbackTimedOut = true;
|
|
2327
|
+
resolve('timedOut');
|
|
2328
|
+
}, this.options.registration.sessionReplacementCallbackTimeoutMs);
|
|
2329
|
+
}));
|
|
2330
|
+
try {
|
|
2331
|
+
const outcome = await Promise.race([turn.then(() => 'completed'), timeout]);
|
|
2332
|
+
if (outcome === 'timedOut') {
|
|
2333
|
+
cancellation.abort((0, abort_1.createDeadlineExceededError)('Duplicate bind callback timed out.'));
|
|
2334
|
+
if (record.replyFailure?.(runtime_values_1.RequestResult.TimedOut, 0) !== runtime_values_1.SubmitResult.Ok) {
|
|
2335
|
+
throw new ConfigurationException_1.ZLinkConfigurationException(`MeshNode Actor binding target '${binding.actor.actorId}' timeout acknowledgement failed.`);
|
|
2336
|
+
}
|
|
2337
|
+
void turn.catch((error) => this.runtimeOrPreStartErrorSink.reportRuntimeTaskException(`duplicate bind callback '${binding.actor.actorId}'`, error));
|
|
2338
|
+
}
|
|
2339
|
+
}
|
|
2340
|
+
finally {
|
|
2341
|
+
if (timeoutHandle !== undefined)
|
|
2342
|
+
clearTimeout(timeoutHandle);
|
|
2343
|
+
}
|
|
2274
2344
|
}
|
|
2275
2345
|
submitLocalMeshRoute(meshName, sourceNodeRid, parts) {
|
|
2276
2346
|
const state = this.executionState;
|
|
@@ -2332,7 +2402,8 @@ class ZLinkFrameworkRuntimeHost {
|
|
|
2332
2402
|
contentType: envelope.header.contentType,
|
|
2333
2403
|
sourceNodeRid: String(record.sourceNodeRid ?? ''),
|
|
2334
2404
|
metadata: (0, contracts_2.zlinkMessageMetadata)(envelope.header.metadata),
|
|
2335
|
-
correlationId: envelope.header.correlationId ?? undefined
|
|
2405
|
+
correlationId: envelope.header.correlationId ?? undefined,
|
|
2406
|
+
receivedAt: record.receivedAt ?? new Date()
|
|
2336
2407
|
};
|
|
2337
2408
|
try {
|
|
2338
2409
|
const dispatch = async () => {
|
|
@@ -2452,6 +2523,29 @@ function hasUnsupportedManualTopology(registration) {
|
|
|
2452
2523
|
}
|
|
2453
2524
|
return false;
|
|
2454
2525
|
}
|
|
2526
|
+
function samePhysicalSession(left, right) {
|
|
2527
|
+
return (left.sessionNodeRid !== undefined &&
|
|
2528
|
+
left.sessionRid !== undefined &&
|
|
2529
|
+
left.sessionOwnerNodeGeneration !== undefined &&
|
|
2530
|
+
right.sessionNodeRid !== undefined &&
|
|
2531
|
+
right.sessionRid !== undefined &&
|
|
2532
|
+
right.sessionOwnerNodeGeneration !== undefined &&
|
|
2533
|
+
(0, routing_id_1.routingIdsEqual)(left.sessionNodeRid, right.sessionNodeRid) &&
|
|
2534
|
+
left.sessionRid === right.sessionRid &&
|
|
2535
|
+
left.sessionOwnerNodeGeneration === right.sessionOwnerNodeGeneration);
|
|
2536
|
+
}
|
|
2537
|
+
function sessionBindingIdentity(value) {
|
|
2538
|
+
if (value.sessionNodeRid === undefined ||
|
|
2539
|
+
value.sessionOwnerNodeGeneration === undefined ||
|
|
2540
|
+
value.bindingGeneration === undefined) {
|
|
2541
|
+
throw new ConfigurationException_1.ZLinkConfigurationException('Duplicate bind callback requires a complete identity.');
|
|
2542
|
+
}
|
|
2543
|
+
return {
|
|
2544
|
+
sessionOwnerNodeRid: value.sessionNodeRid,
|
|
2545
|
+
sessionOwnerNodeGeneration: value.sessionOwnerNodeGeneration,
|
|
2546
|
+
bindingGeneration: value.bindingGeneration
|
|
2547
|
+
};
|
|
2548
|
+
}
|
|
2455
2549
|
function hasConfiguredLocationStore(registration) {
|
|
2456
2550
|
return (registration.locations.useInMemoryStores || registration.locations.storeInstance !== undefined);
|
|
2457
2551
|
}
|
|
@@ -19,8 +19,8 @@ export interface ZLinkLocationRuntimeStopSnapshot {
|
|
|
19
19
|
}
|
|
20
20
|
export declare class ZLinkLocationRuntimeOwner {
|
|
21
21
|
private readonly options;
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
stores?: ZLinkLocationRuntimeStores;
|
|
23
|
+
runtime?: ZLinkLocationRuntime;
|
|
24
24
|
private lifecycle?;
|
|
25
25
|
private events?;
|
|
26
26
|
private leaseTrackerState?;
|