@zlink-systems/framework 0.30.1 → 0.30.2
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/Common/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
- package/dist/contracts/Common/encoded-payload-storage.js +5 -2
- package/dist/contracts/Configuration/Builders.d.ts +1 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
- package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
- package/dist/contracts/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +4 -0
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- package/dist/runtime/abort.d.ts +5 -0
- package/dist/runtime/abort.js +10 -0
- package/dist/runtime/actors/actor-authority-publication.js +3 -2
- package/dist/runtime/actors/actor-client.d.ts +0 -1
- package/dist/runtime/actors/actor-client.js +38 -45
- package/dist/runtime/actors/actor-context.d.ts +2 -0
- package/dist/runtime/actors/actor-context.js +46 -9
- package/dist/runtime/actors/actor-handoff.d.ts +7 -3
- package/dist/runtime/actors/actor-handoff.js +212 -88
- package/dist/runtime/actors/actor-join-relocation.d.ts +2 -0
- package/dist/runtime/actors/actor-local-native-join.js +4 -0
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-state.js +2 -20
- package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
- package/dist/runtime/actors/index.d.ts +6 -2
- package/dist/runtime/actors/index.js +37 -21
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +55 -32
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +13 -0
- package/dist/runtime/application-jobs/application-job-queue-scope.js +27 -1
- package/dist/runtime/application-jobs/contracts.d.ts +2 -0
- package/dist/runtime/backend/contracts/index.d.ts +19 -3
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.js +5 -0
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +26 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +193 -107
- package/dist/runtime/backend/node/node-raw-binding-port.js +90 -58
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +33 -8
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +142 -143
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +5 -5
- package/dist/runtime/channels/channel-clients.d.ts +1 -0
- package/dist/runtime/channels/channel-clients.js +20 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +22 -3
- package/dist/runtime/channels/channel-dispatch-pipeline.js +103 -57
- package/dist/runtime/channels/channel-dispatchers.d.ts +3 -2
- package/dist/runtime/channels/channel-dispatchers.js +44 -37
- package/dist/runtime/channels/channel-envelope.d.ts +1 -0
- package/dist/runtime/channels/channel-envelope.js +74 -31
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
- package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
- package/dist/runtime/channels/channel-runtime-manager.d.ts +3 -2
- package/dist/runtime/channels/channel-runtime-manager.js +4 -4
- package/dist/runtime/channels/channel-transports.d.ts +0 -1
- package/dist/runtime/channels/channel-transports.js +35 -33
- package/dist/runtime/channels/client-server-location-runtime.js +5 -4
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/fanout-location-runtime.js +3 -3
- package/dist/runtime/diagnostics/flow-context.js +19 -7
- package/dist/runtime/diagnostics/index.js +4 -9
- package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
- package/dist/runtime/diagnostics/message-flow.js +35 -5
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
- package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
- package/dist/runtime/execution/index.d.ts +4 -2
- package/dist/runtime/execution/index.js +33 -10
- package/dist/runtime/execution/serial-execution-queue.d.ts +4 -0
- package/dist/runtime/execution/serial-execution-queue.js +21 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- package/dist/runtime/foundation/operation-registry.d.ts +25 -1
- package/dist/runtime/foundation/operation-registry.js +86 -18
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +39 -3
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +151 -55
- package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
- package/dist/runtime/foundation/service-liveness-registry.js +38 -0
- package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -35
- package/dist/runtime/foundation/service-relocation-runtime.js +7 -3
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +8 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
- package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
- package/dist/runtime/foundation/service-stateful-registry.js +24 -26
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +72 -6
- package/dist/runtime/foundation/service-stateful-runtime.js +444 -117
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -1
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
- package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +10 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +166 -53
- package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
- package/dist/runtime/host/actor-packet-relay.js +59 -72
- package/dist/runtime/host/actor-placement-coordinator.js +25 -8
- package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
- package/dist/runtime/host/actor-transfer-runtime.js +85 -331
- package/dist/runtime/host/application-job-queue.d.ts +24 -3
- package/dist/runtime/host/application-job-queue.js +28 -41
- package/dist/runtime/host/index.d.ts +5 -1
- package/dist/runtime/host/index.js +171 -97
- package/dist/runtime/host/location-runtime-owner.js +2 -6
- package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
- package/dist/runtime/host/mesh-router-resolver.js +14 -6
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
- package/dist/runtime/host/remote-bound-session-relay.js +71 -190
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +5 -3
- package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
- package/dist/runtime/host/runtime-shutdown.js +3 -2
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +17 -7
- package/dist/runtime/host/service-relocation-host-runtime.js +550 -367
- package/dist/runtime/host/spot-runtime-options-factory.js +15 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
- package/dist/runtime/locations/auto-connect-loop.js +22 -14
- package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
- package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
- package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
- package/dist/runtime/locations/descriptor-publication.js +11 -0
- package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
- package/dist/runtime/locations/in-memory-authority-store.js +56 -19
- package/dist/runtime/locations/in-memory-location-store.js +1 -10
- package/dist/runtime/locations/index.d.ts +1 -0
- package/dist/runtime/locations/index.js +1 -0
- package/dist/runtime/locations/lease-tracker.js +1 -6
- package/dist/runtime/locations/location-store-repository.d.ts +51 -1
- package/dist/runtime/locations/location-store-repository.js +363 -139
- package/dist/runtime/locations/relocation-blob.d.ts +18 -1
- package/dist/runtime/locations/relocation-blob.js +52 -1
- package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
- package/dist/runtime/locations/request-source-resolver.js +80 -0
- package/dist/runtime/locations/resolvers.js +1 -1
- package/dist/runtime/locations/runtime.d.ts +6 -2
- package/dist/runtime/locations/runtime.js +37 -30
- package/dist/runtime/messaging/payload-codec.d.ts +7 -1
- package/dist/runtime/messaging/payload-codec.js +7 -6
- package/dist/runtime/messaging/request-result.js +29 -26
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +19 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +85 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +7 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +23 -7
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +3 -2
- package/dist/runtime/spots/index.d.ts +18 -11
- package/dist/runtime/spots/index.js +234 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
- package/dist/runtime/spots/spot-activation-registry.js +21 -11
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +7 -7
- package/dist/runtime/spots/spot-activation.d.ts +6 -3
- package/dist/runtime/spots/spot-activation.js +123 -44
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
- package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-membership.js +0 -8
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
- package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
- package/dist/runtime/spots/spot-entry-activation.js +14 -9
- package/dist/runtime/spots/spot-handler-registry.d.ts +4 -3
- package/dist/runtime/spots/spot-handler-registry.js +6 -2
- package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
- package/dist/runtime/spots/spot-manager-public.js +2 -2
- package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
- package/dist/runtime/spots/spot-node-autoconnect.js +18 -39
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
- package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
- package/dist/runtime/spots/spot-outbound.js +3 -3
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +0 -1
- package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
- package/dist/runtime/spots/spot-serial-executor.js +61 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
- package/dist/runtime/spots/spot-subscription-dispatch.js +1 -1
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +287 -103
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
- package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
- package/dist/runtime/streams/bound-session-service.d.ts +1 -1
- package/dist/runtime/streams/bound-session-service.js +6 -11
- package/dist/runtime/streams/index.d.ts +3 -2
- package/dist/runtime/streams/index.js +6 -4
- package/dist/runtime/streams/managed-stream.js +3 -2
- package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
- package/dist/runtime/streams/session-actor-coordinator.js +15 -32
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
- package/dist/runtime/streams/stream-session-runtime.js +1 -4
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- package/src/contracts/Common/encoded-payload-storage.ts +6 -3
- package/src/contracts/Configuration/Builders.ts +4 -1
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
- package/src/contracts/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +8 -0
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +61 -70
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +282 -106
- package/src/runtime/actors/actor-join-relocation.ts +2 -0
- package/src/runtime/actors/actor-local-native-join.ts +4 -0
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-reply.ts +42 -0
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
- package/src/runtime/actors/actor-runtime-state.ts +2 -20
- package/src/runtime/actors/actor-source-transfer.ts +1 -34
- package/src/runtime/actors/index.ts +41 -27
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/admission.ts +69 -34
- package/src/runtime/application-jobs/application-job-queue-scope.ts +33 -1
- package/src/runtime/application-jobs/contracts.ts +2 -0
- package/src/runtime/backend/contracts/index.ts +39 -4
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +4 -0
- package/src/runtime/backend/mesh-dispatch-pump.ts +223 -124
- package/src/runtime/backend/node/node-raw-binding-port.ts +106 -70
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +221 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -5
- package/src/runtime/channels/channel-clients.ts +49 -24
- package/src/runtime/channels/channel-dispatch-pipeline.ts +173 -124
- package/src/runtime/channels/channel-dispatchers.ts +116 -72
- package/src/runtime/channels/channel-envelope.ts +105 -36
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +12 -5
- package/src/runtime/channels/channel-transports.ts +49 -58
- package/src/runtime/channels/client-server-location-runtime.ts +11 -10
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
- package/src/runtime/channels/fanout-location-runtime.ts +17 -9
- package/src/runtime/diagnostics/flow-context.ts +20 -7
- package/src/runtime/diagnostics/index.ts +1 -7
- package/src/runtime/diagnostics/message-flow.ts +47 -9
- package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
- package/src/runtime/execution/index.ts +40 -14
- package/src/runtime/execution/serial-execution-queue.ts +31 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +244 -67
- package/src/runtime/foundation/service-liveness-registry.ts +39 -0
- package/src/runtime/foundation/service-mailbox.ts +8 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
- package/src/runtime/foundation/service-relocation-object-owner.ts +54 -37
- package/src/runtime/foundation/service-relocation-runtime.ts +7 -3
- package/src/runtime/foundation/service-runtime-contracts.ts +12 -1
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
- package/src/runtime/foundation/service-stateful-registry.ts +38 -35
- package/src/runtime/foundation/service-stateful-runtime.ts +667 -152
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -11
- package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +187 -51
- package/src/runtime/host/actor-packet-relay.ts +113 -94
- package/src/runtime/host/actor-placement-coordinator.ts +31 -8
- package/src/runtime/host/actor-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +29 -44
- package/src/runtime/host/index.ts +286 -129
- package/src/runtime/host/location-runtime-owner.ts +2 -6
- package/src/runtime/host/mesh-router-resolver.ts +13 -5
- package/src/runtime/host/remote-bound-session-relay.ts +86 -248
- package/src/runtime/host/route-mesh-runtime.ts +11 -5
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-host-runtime.ts +784 -475
- package/src/runtime/host/spot-runtime-options-factory.ts +18 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- package/src/runtime/locations/auto-connect-loop.ts +22 -14
- package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
- package/src/runtime/locations/auto-connect-types.ts +0 -1
- package/src/runtime/locations/descriptor-publication.ts +7 -0
- package/src/runtime/locations/domain-store-contract.ts +5 -0
- package/src/runtime/locations/in-memory-authority-store.ts +85 -23
- package/src/runtime/locations/in-memory-location-store.ts +1 -12
- package/src/runtime/locations/index.ts +1 -0
- package/src/runtime/locations/lease-tracker.ts +2 -9
- package/src/runtime/locations/location-store-repository.ts +628 -152
- package/src/runtime/locations/relocation-blob.ts +75 -1
- package/src/runtime/locations/request-source-resolver.ts +138 -0
- package/src/runtime/locations/resolvers.ts +2 -2
- package/src/runtime/locations/runtime.ts +70 -40
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +33 -29
- package/src/runtime/protocol/service_wire_codec.generated.ts +87 -4
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +13 -10
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +3 -2
- package/src/runtime/spots/index.ts +375 -281
- package/src/runtime/spots/spot-activation-registry.ts +25 -13
- package/src/runtime/spots/spot-activation-state.ts +12 -19
- package/src/runtime/spots/spot-activation.ts +170 -86
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
- package/src/runtime/spots/spot-actor-membership.ts +0 -15
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
- package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
- package/src/runtime/spots/spot-entry-activation.ts +24 -19
- package/src/runtime/spots/spot-handler-registry.ts +15 -4
- package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
- package/src/runtime/spots/spot-manager-public.ts +2 -2
- package/src/runtime/spots/spot-node-autoconnect.ts +22 -45
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +3 -3
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-runtime-ports.ts +0 -1
- package/src/runtime/spots/spot-serial-executor.ts +97 -25
- package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
- package/src/runtime/spots/spot-subscription-dispatch.ts +1 -1
- package/src/runtime/spots/spot-timer.ts +413 -157
- package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
- package/src/runtime/streams/bound-session-service.ts +7 -10
- package/src/runtime/streams/index.ts +12 -6
- package/src/runtime/streams/managed-stream.ts +4 -2
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
- package/src/runtime/streams/session-actor-coordinator.ts +39 -88
- package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
- package/src/runtime/streams/stream-session-runtime.ts +1 -5
- package/src/runtime/workers/index.ts +1 -1
|
@@ -30,7 +30,7 @@ export interface ServiceRelocationCaptureUnit {
|
|
|
30
30
|
readonly authorityOwnerGeneration: bigint;
|
|
31
31
|
seal(signal?: AbortSignal): Promise<ServiceRelocationSealedWork>;
|
|
32
32
|
captureApplicationState(signal?: AbortSignal): Promise<Uint8Array>;
|
|
33
|
-
commitSeal(): Promise<void> | void;
|
|
33
|
+
commitSeal(followAuthorities: ReadonlyMap<string, ZLinkAuthoritySnapshot>): Promise<void> | void;
|
|
34
34
|
abortSeal(): Promise<void> | void;
|
|
35
35
|
/** Expired-owner terminal: pending requests fail once and dispatch stays closed. */
|
|
36
36
|
discardSeal?(reason: unknown): Promise<void> | void;
|
|
@@ -44,12 +44,14 @@ export class ServiceCapturedObjectRelocation {
|
|
|
44
44
|
private readonly units: readonly ServiceRelocationCaptureUnit[]
|
|
45
45
|
) {}
|
|
46
46
|
|
|
47
|
-
async commitSource(
|
|
47
|
+
async commitSource(
|
|
48
|
+
followAuthorities: ReadonlyMap<string, ZLinkAuthoritySnapshot>
|
|
49
|
+
): Promise<void> {
|
|
48
50
|
if (this.terminal === 'committed') return;
|
|
49
51
|
if (this.terminal !== 'open') {
|
|
50
52
|
throw new Error(`Relocation source capture was already ${this.terminal}.`);
|
|
51
53
|
}
|
|
52
|
-
for (const unit of this.units) await unit.commitSeal();
|
|
54
|
+
for (const unit of this.units) await unit.commitSeal(followAuthorities);
|
|
53
55
|
this.terminal = 'committed';
|
|
54
56
|
}
|
|
55
57
|
|
|
@@ -58,17 +60,10 @@ export class ServiceCapturedObjectRelocation {
|
|
|
58
60
|
if (this.terminal !== 'open') {
|
|
59
61
|
throw new Error(`A ${this.terminal} relocation source capture cannot be aborted.`);
|
|
60
62
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
} catch (error) {
|
|
66
|
-
failures.push(error);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
this.terminal = 'aborted';
|
|
70
|
-
if (failures.length !== 0) {
|
|
71
|
-
throw new AggregateError(failures, 'Relocation source rollback was incomplete.');
|
|
63
|
+
try {
|
|
64
|
+
await abortSourceSeals(this.units);
|
|
65
|
+
} finally {
|
|
66
|
+
this.terminal = 'aborted';
|
|
72
67
|
}
|
|
73
68
|
}
|
|
74
69
|
|
|
@@ -167,32 +162,37 @@ export class ServiceRelocationObjectCaptureOwner {
|
|
|
167
162
|
): Promise<ServiceCapturedObjectRelocation> {
|
|
168
163
|
const captured: Array<{
|
|
169
164
|
readonly unit: ServiceRelocationCaptureUnit;
|
|
170
|
-
|
|
165
|
+
work?: ServiceRelocationSealedWork;
|
|
171
166
|
}> = [];
|
|
172
167
|
try {
|
|
173
168
|
for (const unit of units) {
|
|
174
169
|
signal?.throwIfAborted();
|
|
175
|
-
const
|
|
176
|
-
captured.push(
|
|
170
|
+
const capture: (typeof captured)[number] = { unit };
|
|
171
|
+
captured.push(capture);
|
|
172
|
+
capture.work = await unit.seal(signal);
|
|
177
173
|
}
|
|
178
174
|
const participants = await mapConcurrentOrdered(
|
|
179
175
|
captured,
|
|
180
176
|
this.maxConcurrentCallbacks,
|
|
181
|
-
async ({ unit, work }) =>
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
177
|
+
async ({ unit, work: sealedWork }) => {
|
|
178
|
+
// Application capture starts only after every seal completed.
|
|
179
|
+
const work = sealedWork!;
|
|
180
|
+
return {
|
|
181
|
+
key: unit.authorityKey,
|
|
182
|
+
objectKind: unit.objectKind,
|
|
183
|
+
stableType: unit.stableType,
|
|
184
|
+
objectGeneration: unit.objectGeneration,
|
|
185
|
+
authorityOwnerGeneration: unit.authorityOwnerGeneration,
|
|
186
|
+
applicationState: Buffer.from(await unit.captureApplicationState(signal)),
|
|
187
|
+
boundSessionState: Buffer.from(work.boundSessionState),
|
|
188
|
+
...(work.sessionBinding === undefined ? {} : { sessionBinding: work.sessionBinding }),
|
|
189
|
+
queuedMessages: work.queuedMessages.map((message) => ({
|
|
190
|
+
sequence: message.sequence,
|
|
191
|
+
payload: Buffer.from(message.payload)
|
|
192
|
+
})),
|
|
193
|
+
timers: work.timers.map((timer) => ({ ...timer }))
|
|
194
|
+
};
|
|
195
|
+
},
|
|
196
196
|
signal
|
|
197
197
|
);
|
|
198
198
|
return new ServiceCapturedObjectRelocation(
|
|
@@ -205,12 +205,33 @@ export class ServiceRelocationObjectCaptureOwner {
|
|
|
205
205
|
units
|
|
206
206
|
);
|
|
207
207
|
} catch (error) {
|
|
208
|
-
|
|
208
|
+
try {
|
|
209
|
+
await abortSourceSeals(captured.map(({ unit }) => unit));
|
|
210
|
+
} catch (rollbackError) {
|
|
211
|
+
throw new AggregateError(
|
|
212
|
+
[error, rollbackError],
|
|
213
|
+
'Relocation capture failed and source rollback was incomplete.'
|
|
214
|
+
);
|
|
215
|
+
}
|
|
209
216
|
throw error;
|
|
210
217
|
}
|
|
211
218
|
}
|
|
212
219
|
}
|
|
213
220
|
|
|
221
|
+
async function abortSourceSeals(units: readonly ServiceRelocationCaptureUnit[]): Promise<void> {
|
|
222
|
+
const failures: unknown[] = [];
|
|
223
|
+
for (const unit of [...units].reverse()) {
|
|
224
|
+
try {
|
|
225
|
+
await unit.abortSeal();
|
|
226
|
+
} catch (error) {
|
|
227
|
+
failures.push(error);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (failures.length !== 0) {
|
|
231
|
+
throw new AggregateError(failures, 'Relocation source rollback was incomplete.');
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
214
235
|
export interface ServiceRelocationHiddenObject {
|
|
215
236
|
readonly authorityKey: string;
|
|
216
237
|
}
|
|
@@ -234,7 +255,6 @@ export interface ServiceRelocationTargetObjectPort<THidden extends ServiceReloca
|
|
|
234
255
|
message: ServiceRelocationQueuedMessage,
|
|
235
256
|
signal?: AbortSignal
|
|
236
257
|
): Promise<void>;
|
|
237
|
-
restoreTimer(hidden: THidden, timer: ServiceRelocationTimer, signal?: AbortSignal): Promise<void>;
|
|
238
258
|
normalize(
|
|
239
259
|
hidden: THidden,
|
|
240
260
|
authority: ZLinkAuthoritySnapshot,
|
|
@@ -333,9 +353,6 @@ export class ServiceRelocationObjectRestoreOwner<
|
|
|
333
353
|
for (const message of participant.queuedMessages) {
|
|
334
354
|
await this.target.replayQueuedMessage(hidden, message, signal);
|
|
335
355
|
}
|
|
336
|
-
for (const timer of participant.timers) {
|
|
337
|
-
await this.target.restoreTimer(hidden, timer, signal);
|
|
338
|
-
}
|
|
339
356
|
}
|
|
340
357
|
}
|
|
341
358
|
|
|
@@ -796,12 +796,16 @@ export function decodeServiceRelocationEnvelope(
|
|
|
796
796
|
});
|
|
797
797
|
}
|
|
798
798
|
for (const timer of generated.timerRegistrations) {
|
|
799
|
+
const dueAtUnixMs = unixMilliseconds(timer.nextScheduledAtUnixMilliseconds);
|
|
800
|
+
const intervalMs = unixMilliseconds(timer.periodMilliseconds);
|
|
799
801
|
byId.get(timer.participantId)!.timers.push({
|
|
800
802
|
timerId: timer.name,
|
|
801
803
|
handlerType: timer.handlerType,
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
804
|
+
// The wire anchors the nominal schedule by its next due time: the next
|
|
805
|
+
// nominal tick after the completed ScheduledIndex (Spot timer §1).
|
|
806
|
+
startedAtUnixMs: dueAtUnixMs - Number(timer.lastCompletedScheduledIndex + 1n) * intervalMs,
|
|
807
|
+
dueAtUnixMs,
|
|
808
|
+
intervalMs,
|
|
805
809
|
overrunPolicy: timerPolicyName(timer.overrunPolicy),
|
|
806
810
|
maxCatchUpTicks: unixMilliseconds(timer.maxCatchUpTicks),
|
|
807
811
|
stopOnUnhandledException: timer.stopOnUnhandledException,
|
|
@@ -243,12 +243,22 @@ export interface ReceiveRequirements {
|
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
export interface ZLinkMessageFollowOrigin {
|
|
246
|
+
readonly requestSource?: import('../locations/request-source-resolver').ZLinkRequestSourceFence;
|
|
246
247
|
readonly sourceNodeRid: RoutingId;
|
|
247
248
|
readonly originalOperation: MeshOperationId;
|
|
248
249
|
readonly originalReplyRouteId: bigint;
|
|
250
|
+
/** The canonical target accepted with the original native Actor frame. */
|
|
251
|
+
readonly target?: import('./service-stateful-wire-codec').ServiceActorRouteFence;
|
|
249
252
|
}
|
|
250
253
|
|
|
251
254
|
export interface ReceiveRecord {
|
|
255
|
+
/** Resolve record prerequisites in owner order, outside an application handler turn. */
|
|
256
|
+
readonly prepareDispatch?: (
|
|
257
|
+
this: ReceiveRecord,
|
|
258
|
+
signal: AbortSignal
|
|
259
|
+
) => boolean | Promise<boolean>;
|
|
260
|
+
readonly statefulMailboxRecord?: import('./service-mailbox').ServiceMailboxRecord;
|
|
261
|
+
readonly requestSource?: import('../locations/request-source-resolver').ZLinkRequestSourceFence;
|
|
252
262
|
readonly kind: number;
|
|
253
263
|
readonly domain: number;
|
|
254
264
|
readonly sourceNodeRid: RoutingId | null;
|
|
@@ -377,7 +387,8 @@ export interface StreamSessionService {
|
|
|
377
387
|
retiredSession: ServiceRetiredBoundSessionRouteFence,
|
|
378
388
|
actor: ServiceActorRef
|
|
379
389
|
) => void,
|
|
380
|
-
actorAuthority?: StreamSessionActorAuthorityFence
|
|
390
|
+
actorAuthority?: StreamSessionActorAuthorityFence,
|
|
391
|
+
close?: () => Promise<void>
|
|
381
392
|
): MeshOperationId;
|
|
382
393
|
unbindActor(
|
|
383
394
|
sessionRid: RoutingId,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { RoutingId } from '../../contracts';
|
|
1
2
|
export interface ServiceSessionBindingIngressPort {
|
|
2
|
-
actorSlot(actorId: string, sessionRid:
|
|
3
|
+
actorSlot(actorId: string, sessionRid: RoutingId): Promise<number | undefined>;
|
|
3
4
|
}
|
|
4
5
|
|
|
5
6
|
const ports = new WeakMap<object, ServiceSessionBindingIngressPort>();
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ZLINK_MAX_IDENTITY_TEXT_BYTES,
|
|
3
|
+
ZLINK_MAX_ROUTING_ID_BYTES
|
|
4
|
+
} from '../../contracts/Common/CoreTypes';
|
|
5
|
+
import { routingIdsEqual } from '../routing-id';
|
|
6
|
+
import { encodeServiceWireRoutingId } from './service-wire-binary-primitives';
|
|
2
7
|
import { OperationRegistry, type PendingOperation } from './operation-registry';
|
|
3
8
|
|
|
4
9
|
export type ServiceSpotKind = 'entry' | 'user' | 'instance';
|
|
@@ -114,7 +119,6 @@ export class ServiceStatefulRegistry {
|
|
|
114
119
|
private readonly reservationAttempts = new Map<string, bigint>();
|
|
115
120
|
private readonly turns = new Map<string, Promise<void>>();
|
|
116
121
|
private nextReservationId = 1n;
|
|
117
|
-
private nextBindingGeneration = 1n;
|
|
118
122
|
|
|
119
123
|
constructor(
|
|
120
124
|
readonly nodeRid: string,
|
|
@@ -392,47 +396,35 @@ export class ServiceStatefulRegistry {
|
|
|
392
396
|
return current;
|
|
393
397
|
}
|
|
394
398
|
|
|
395
|
-
|
|
396
|
-
actor: ServiceActorRef,
|
|
397
|
-
sessionRid: string,
|
|
398
|
-
sessionOwnerNodeRid: string,
|
|
399
|
-
sessionOwnerNodeGeneration?: bigint,
|
|
400
|
-
sessionOwnerId?: string,
|
|
401
|
-
sessionOwnerLeaseGeneration?: bigint
|
|
402
|
-
): ServiceSessionBinding {
|
|
403
|
-
const current = this.requireActorCore(actor);
|
|
404
|
-
requireText(sessionRid, 'sessionRid');
|
|
405
|
-
requireText(sessionOwnerNodeRid, 'sessionOwnerNodeRid');
|
|
406
|
-
const binding: ServiceSessionBinding = Object.freeze({
|
|
407
|
-
actor: Object.freeze({ ...current.ref }),
|
|
408
|
-
sessionRid,
|
|
409
|
-
sessionOwnerNodeRid,
|
|
410
|
-
...(sessionOwnerNodeGeneration === undefined ? {} : { sessionOwnerNodeGeneration }),
|
|
411
|
-
...(sessionOwnerId === undefined ? {} : { sessionOwnerId }),
|
|
412
|
-
...(sessionOwnerLeaseGeneration === undefined ? {} : { sessionOwnerLeaseGeneration }),
|
|
413
|
-
bindingGeneration: this.nextBindingGeneration++,
|
|
414
|
-
membershipEpoch: current.membershipEpoch
|
|
415
|
-
});
|
|
416
|
-
this.bindings.set(actorKey(actor), binding);
|
|
417
|
-
return binding;
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
installSessionBinding(binding: ServiceSessionBinding): void {
|
|
399
|
+
installSessionBinding(binding: ServiceSessionBinding): ServiceSessionBinding {
|
|
421
400
|
this.requireActorCore(binding.actor);
|
|
401
|
+
encodeServiceWireRoutingId(
|
|
402
|
+
binding.sessionRid,
|
|
403
|
+
'sessionRid',
|
|
404
|
+
ZLINK_MAX_ROUTING_ID_BYTES,
|
|
405
|
+
(message) => {
|
|
406
|
+
throw new RangeError(message);
|
|
407
|
+
}
|
|
408
|
+
);
|
|
409
|
+
requireText(binding.sessionOwnerNodeRid, 'sessionOwnerNodeRid');
|
|
422
410
|
requirePositive(binding.bindingGeneration, 'bindingGeneration');
|
|
423
411
|
const current = this.bindings.get(actorKey(binding.actor));
|
|
424
412
|
if (
|
|
425
413
|
current !== undefined &&
|
|
426
414
|
current.sessionOwnerNodeRid === binding.sessionOwnerNodeRid &&
|
|
427
415
|
current.sessionOwnerNodeGeneration === binding.sessionOwnerNodeGeneration &&
|
|
428
|
-
current.sessionOwnerId === binding.sessionOwnerId &&
|
|
429
|
-
current.sessionOwnerLeaseGeneration === binding.sessionOwnerLeaseGeneration &&
|
|
430
416
|
current.bindingGeneration >= binding.bindingGeneration
|
|
431
417
|
) {
|
|
418
|
+
if (
|
|
419
|
+
current.bindingGeneration === binding.bindingGeneration &&
|
|
420
|
+
current.sessionRid === binding.sessionRid
|
|
421
|
+
)
|
|
422
|
+
return current;
|
|
432
423
|
throw new ServiceStaleGenerationError('binding', binding.actor.actorId);
|
|
433
424
|
}
|
|
434
|
-
|
|
435
|
-
this.bindings.set(actorKey(binding.actor),
|
|
425
|
+
const accepted = Object.freeze({ ...binding });
|
|
426
|
+
this.bindings.set(actorKey(binding.actor), accepted);
|
|
427
|
+
return accepted;
|
|
436
428
|
}
|
|
437
429
|
|
|
438
430
|
binding(actor: ServiceActorRef): ServiceSessionBinding | undefined {
|
|
@@ -455,7 +447,8 @@ export class ServiceStatefulRegistry {
|
|
|
455
447
|
if (binding === undefined) return false;
|
|
456
448
|
if (
|
|
457
449
|
binding.bindingGeneration !== expectedBindingGeneration ||
|
|
458
|
-
(expectedSessionRid !== undefined &&
|
|
450
|
+
(expectedSessionRid !== undefined &&
|
|
451
|
+
!routingIdsEqual(binding.sessionRid, expectedSessionRid)) ||
|
|
459
452
|
(expectedSessionOwnerNodeRid !== undefined &&
|
|
460
453
|
binding.sessionOwnerNodeRid !== expectedSessionOwnerNodeRid)
|
|
461
454
|
) {
|
|
@@ -621,6 +614,8 @@ function createSpotState(
|
|
|
621
614
|
}
|
|
622
615
|
}
|
|
623
616
|
|
|
617
|
+
export const RELOCATION_REPLY_RETENTION_MS = 24 * 60 * 60 * 1_000;
|
|
618
|
+
|
|
624
619
|
export class ServiceTerminalOperationRegistry<T, Context = unknown> {
|
|
625
620
|
private readonly operations: OperationRegistry<T, Context>;
|
|
626
621
|
|
|
@@ -636,8 +631,8 @@ export class ServiceTerminalOperationRegistry<T, Context = unknown> {
|
|
|
636
631
|
return this.operations.register(timeoutMs, timeoutOwner, context);
|
|
637
632
|
}
|
|
638
633
|
|
|
639
|
-
reply(id: bigint, value: T): boolean {
|
|
640
|
-
return this.operations.complete(id, value);
|
|
634
|
+
reply(id: bigint, value: T, terminalContextRetentionMs = 0): boolean {
|
|
635
|
+
return this.operations.complete(id, value, terminalContextRetentionMs);
|
|
641
636
|
}
|
|
642
637
|
|
|
643
638
|
fail(id: bigint, error: unknown): boolean {
|
|
@@ -660,6 +655,10 @@ export class ServiceTerminalOperationRegistry<T, Context = unknown> {
|
|
|
660
655
|
return this.operations.size;
|
|
661
656
|
}
|
|
662
657
|
|
|
658
|
+
nextDeadlineMs(): number {
|
|
659
|
+
return this.operations.nextDeadlineMs();
|
|
660
|
+
}
|
|
661
|
+
|
|
663
662
|
expire(nowMs: number, turnDeadlineMs: number): number {
|
|
664
663
|
return this.operations.expire(nowMs, turnDeadlineMs);
|
|
665
664
|
}
|
|
@@ -667,6 +666,10 @@ export class ServiceTerminalOperationRegistry<T, Context = unknown> {
|
|
|
667
666
|
close(): void {
|
|
668
667
|
this.operations.close('Stateful runtime closed.');
|
|
669
668
|
}
|
|
669
|
+
|
|
670
|
+
failAll(reason: unknown): void {
|
|
671
|
+
this.operations.failAll(reason);
|
|
672
|
+
}
|
|
670
673
|
}
|
|
671
674
|
|
|
672
675
|
function actorKey(actor: ServiceActorRef): string {
|