@zlink-systems/framework 0.21.0 → 0.22.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/Common/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +43 -33
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +244 -227
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +208 -219
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +0 -1
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +138 -130
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +73 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +215 -197
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/flow-context.ts +12 -3
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +95 -76
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +593 -563
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ZLinkFrameworkInternalErrorKind,
|
|
3
|
+
createInternalFrameworkException
|
|
4
|
+
} from '../framework-errors-internal';
|
|
2
5
|
import type {
|
|
3
6
|
ActorRef,
|
|
4
7
|
RoutingId,
|
|
@@ -6,14 +9,9 @@ import type {
|
|
|
6
9
|
ZLinkActorContext,
|
|
7
10
|
ZLinkSpot
|
|
8
11
|
} from '../../contracts';
|
|
9
|
-
import {
|
|
10
|
-
ZLinkSpotKind
|
|
11
|
-
} from '../../contracts';
|
|
12
|
+
import { ZLinkSpotKind } from '../../contracts';
|
|
12
13
|
import type { Message } from '../../contracts/Common/Message';
|
|
13
|
-
import type {
|
|
14
|
-
ZLinkBackendActorRef,
|
|
15
|
-
ZLinkBackendMeshNode
|
|
16
|
-
} from '../backend/contracts';
|
|
14
|
+
import type { ZLinkBackendActorRef, ZLinkBackendMeshNode } from '../backend/contracts';
|
|
17
15
|
import { routingIdsEqual } from '../routing-id';
|
|
18
16
|
import { lookupNativeActorRef } from './actor-native-lookup';
|
|
19
17
|
|
|
@@ -64,14 +62,12 @@ export function mergeRemoteBoundSessionTarget(
|
|
|
64
62
|
fallback: ZLinkRemoteBoundSessionTarget | undefined
|
|
65
63
|
): ZLinkRemoteBoundSessionTarget {
|
|
66
64
|
if (
|
|
67
|
-
fallback === undefined
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
!
|
|
72
|
-
|
|
73
|
-
)
|
|
74
|
-
|| isSuccessorSessionBinding(fallback, target)
|
|
65
|
+
fallback === undefined ||
|
|
66
|
+
fallback.routerChannelId !== target.routerChannelId ||
|
|
67
|
+
!routingIdsEqual(fallback.targetNodeRid, target.targetNodeRid) ||
|
|
68
|
+
(!routingIdsEqual(fallback.spotId, target.spotId) &&
|
|
69
|
+
!samePhysicalRemoteSession(fallback, target)) ||
|
|
70
|
+
isSuccessorSessionBinding(fallback, target)
|
|
75
71
|
) {
|
|
76
72
|
return target;
|
|
77
73
|
}
|
|
@@ -91,8 +87,7 @@ export function mergeRemoteBoundSessionTarget(
|
|
|
91
87
|
previousOwnerLeaseGeneration:
|
|
92
88
|
target.previousOwnerLeaseGeneration ?? fallback.previousOwnerLeaseGeneration,
|
|
93
89
|
relocationSealId: target.relocationSealId ?? fallback.relocationSealId,
|
|
94
|
-
serviceWireRelocation:
|
|
95
|
-
target.serviceWireRelocation ?? fallback.serviceWireRelocation
|
|
90
|
+
serviceWireRelocation: target.serviceWireRelocation ?? fallback.serviceWireRelocation
|
|
96
91
|
};
|
|
97
92
|
return merged;
|
|
98
93
|
}
|
|
@@ -120,25 +115,21 @@ function isSuccessorSessionBinding(
|
|
|
120
115
|
target: ZLinkRemoteBoundSessionTarget
|
|
121
116
|
): boolean {
|
|
122
117
|
return (
|
|
123
|
-
fallback.sessionNodeRid !== undefined
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
fallback.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
) || (
|
|
139
|
-
fallback.sessionOwnerLeaseGeneration !== undefined
|
|
140
|
-
&& target.sessionOwnerLeaseGeneration !== undefined
|
|
141
|
-
&& fallback.sessionOwnerLeaseGeneration !== target.sessionOwnerLeaseGeneration
|
|
118
|
+
(fallback.sessionNodeRid !== undefined &&
|
|
119
|
+
target.sessionNodeRid !== undefined &&
|
|
120
|
+
!routingIdsEqual(fallback.sessionNodeRid, target.sessionNodeRid)) ||
|
|
121
|
+
(fallback.sessionRid !== undefined &&
|
|
122
|
+
target.sessionRid !== undefined &&
|
|
123
|
+
!routingIdsEqual(fallback.sessionRid, target.sessionRid)) ||
|
|
124
|
+
(fallback.sessionOwnerNodeGeneration !== undefined &&
|
|
125
|
+
target.sessionOwnerNodeGeneration !== undefined &&
|
|
126
|
+
fallback.sessionOwnerNodeGeneration !== target.sessionOwnerNodeGeneration) ||
|
|
127
|
+
(fallback.sessionOwnerId !== undefined &&
|
|
128
|
+
target.sessionOwnerId !== undefined &&
|
|
129
|
+
fallback.sessionOwnerId !== target.sessionOwnerId) ||
|
|
130
|
+
(fallback.sessionOwnerLeaseGeneration !== undefined &&
|
|
131
|
+
target.sessionOwnerLeaseGeneration !== undefined &&
|
|
132
|
+
fallback.sessionOwnerLeaseGeneration !== target.sessionOwnerLeaseGeneration)
|
|
142
133
|
);
|
|
143
134
|
}
|
|
144
135
|
|
|
@@ -151,65 +142,69 @@ type ZLinkRemoteSessionOwnerIdentity = Pick<
|
|
|
151
142
|
| 'sessionOwnerLeaseGeneration'
|
|
152
143
|
>;
|
|
153
144
|
|
|
154
|
-
type ZLinkRemoteSessionOwnerLifecycle = Omit<
|
|
155
|
-
ZLinkRemoteSessionOwnerIdentity,
|
|
156
|
-
'sessionRid'
|
|
157
|
-
>;
|
|
145
|
+
type ZLinkRemoteSessionOwnerLifecycle = Omit<ZLinkRemoteSessionOwnerIdentity, 'sessionRid'>;
|
|
158
146
|
|
|
159
147
|
function samePhysicalRemoteSession(
|
|
160
148
|
left: ZLinkRemoteBoundSessionTarget,
|
|
161
149
|
right: Pick<ZLinkRemoteBoundSessionTarget, 'sessionNodeRid' | 'sessionRid'>
|
|
162
150
|
): boolean {
|
|
163
|
-
return
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
151
|
+
return (
|
|
152
|
+
left.sessionNodeRid !== undefined &&
|
|
153
|
+
right.sessionNodeRid !== undefined &&
|
|
154
|
+
left.sessionRid !== undefined &&
|
|
155
|
+
right.sessionRid !== undefined &&
|
|
156
|
+
routingIdsEqual(left.sessionNodeRid, right.sessionNodeRid) &&
|
|
157
|
+
routingIdsEqual(left.sessionRid, right.sessionRid)
|
|
158
|
+
);
|
|
169
159
|
}
|
|
170
160
|
|
|
171
161
|
function sameRemoteSessionOwnerLifecycle(
|
|
172
162
|
left: ZLinkRemoteBoundSessionTarget,
|
|
173
163
|
right: ZLinkRemoteSessionOwnerLifecycle
|
|
174
164
|
): boolean {
|
|
175
|
-
return
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
165
|
+
return (
|
|
166
|
+
left.sessionNodeRid !== undefined &&
|
|
167
|
+
right.sessionNodeRid !== undefined &&
|
|
168
|
+
left.sessionOwnerNodeGeneration !== undefined &&
|
|
169
|
+
right.sessionOwnerNodeGeneration !== undefined &&
|
|
170
|
+
left.sessionOwnerId !== undefined &&
|
|
171
|
+
right.sessionOwnerId !== undefined &&
|
|
172
|
+
left.sessionOwnerLeaseGeneration !== undefined &&
|
|
173
|
+
right.sessionOwnerLeaseGeneration !== undefined &&
|
|
174
|
+
routingIdsEqual(left.sessionNodeRid, right.sessionNodeRid) &&
|
|
175
|
+
left.sessionOwnerNodeGeneration === right.sessionOwnerNodeGeneration &&
|
|
176
|
+
left.sessionOwnerId === right.sessionOwnerId &&
|
|
177
|
+
left.sessionOwnerLeaseGeneration === right.sessionOwnerLeaseGeneration
|
|
178
|
+
);
|
|
187
179
|
}
|
|
188
180
|
|
|
189
181
|
function sameRemoteSessionOwner(
|
|
190
182
|
left: ZLinkRemoteBoundSessionTarget,
|
|
191
183
|
right: ZLinkRemoteSessionOwnerIdentity
|
|
192
184
|
): boolean {
|
|
193
|
-
return
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
185
|
+
return (
|
|
186
|
+
left.sessionRid !== undefined &&
|
|
187
|
+
right.sessionRid !== undefined &&
|
|
188
|
+
routingIdsEqual(left.sessionRid, right.sessionRid) &&
|
|
189
|
+
sameRemoteSessionOwnerLifecycle(left, right)
|
|
190
|
+
);
|
|
197
191
|
}
|
|
198
192
|
|
|
199
193
|
type ZLinkBoundSessionBindingIdentity = Pick<
|
|
200
194
|
ZLinkRemoteBoundSessionTarget,
|
|
201
|
-
keyof ZLinkRemoteSessionOwnerIdentity
|
|
202
|
-
| 'bindingGeneration'
|
|
195
|
+
keyof ZLinkRemoteSessionOwnerIdentity | 'bindingGeneration'
|
|
203
196
|
>;
|
|
204
197
|
|
|
205
198
|
function sameRemoteSessionBinding(
|
|
206
199
|
left: ZLinkRemoteBoundSessionTarget,
|
|
207
200
|
right: ZLinkBoundSessionBindingIdentity
|
|
208
201
|
): boolean {
|
|
209
|
-
return
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
202
|
+
return (
|
|
203
|
+
sameRemoteSessionOwner(left, right) &&
|
|
204
|
+
left.bindingGeneration !== undefined &&
|
|
205
|
+
right.bindingGeneration !== undefined &&
|
|
206
|
+
left.bindingGeneration === right.bindingGeneration
|
|
207
|
+
);
|
|
213
208
|
}
|
|
214
209
|
|
|
215
210
|
/**
|
|
@@ -226,8 +221,7 @@ export function preferredRemoteBoundSessionTarget(
|
|
|
226
221
|
}
|
|
227
222
|
|
|
228
223
|
function hasRelocationFence(target: ZLinkRemoteBoundSessionTarget): boolean {
|
|
229
|
-
return target.relocationSealId !== undefined
|
|
230
|
-
|| target.serviceWireRelocation !== undefined;
|
|
224
|
+
return target.relocationSealId !== undefined || target.serviceWireRelocation !== undefined;
|
|
231
225
|
}
|
|
232
226
|
|
|
233
227
|
export interface ZLinkRemoteActorPacketTarget {
|
|
@@ -433,7 +427,10 @@ export class ZLinkActorRuntimeState {
|
|
|
433
427
|
return this.destroyTask;
|
|
434
428
|
}
|
|
435
429
|
const actorRef = this.nativeActorRefValue;
|
|
436
|
-
if (
|
|
430
|
+
if (
|
|
431
|
+
actorRef !== undefined &&
|
|
432
|
+
!routingIdsEqual(toFrameworkRoutingId(actorRef.nodeRid), entryNodeRid)
|
|
433
|
+
) {
|
|
437
434
|
throw createInternalFrameworkException(
|
|
438
435
|
ZLinkFrameworkInternalErrorKind.ActorRouteNotFound,
|
|
439
436
|
`Actor '${this.actorId}' is not owned by this Entry Spot.`
|
|
@@ -541,10 +538,12 @@ export class ZLinkActorRuntimeState {
|
|
|
541
538
|
ensureNativeActorRef(node: ZLinkBackendMeshNode, request?: Message): ZLinkBackendActorRef {
|
|
542
539
|
if (this.nativeActorRefValue === undefined) {
|
|
543
540
|
const existing = lookupNativeActorRef(node, this.actorId);
|
|
544
|
-
const native =
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
541
|
+
const native =
|
|
542
|
+
existing ??
|
|
543
|
+
node.createActor(
|
|
544
|
+
this.actorId,
|
|
545
|
+
request === undefined ? undefined : Buffer.from(request.data())
|
|
546
|
+
);
|
|
548
547
|
this.nativeActorRefValue = {
|
|
549
548
|
nodeRid: native.nodeRid as ZLinkBackendActorRef['nodeRid'],
|
|
550
549
|
actorId: native.actorId,
|
|
@@ -581,14 +580,16 @@ export class ZLinkActorRuntimeState {
|
|
|
581
580
|
/** @internal Installs one authority-confirmed binding inside its Actor owner turn. */
|
|
582
581
|
installBoundSessionBinding(target: ZLinkRemoteBoundSessionTarget): boolean {
|
|
583
582
|
if (
|
|
584
|
-
target.sessionNodeRid === undefined
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
583
|
+
target.sessionNodeRid === undefined ||
|
|
584
|
+
target.sessionRid === undefined ||
|
|
585
|
+
target.sessionOwnerNodeGeneration === undefined ||
|
|
586
|
+
target.sessionOwnerId === undefined ||
|
|
587
|
+
target.sessionOwnerLeaseGeneration === undefined ||
|
|
588
|
+
target.bindingGeneration === undefined
|
|
590
589
|
) {
|
|
591
|
-
throw new TypeError(
|
|
590
|
+
throw new TypeError(
|
|
591
|
+
'An installed bound Session target requires its complete binding identity.'
|
|
592
|
+
);
|
|
592
593
|
}
|
|
593
594
|
const current = preferredRemoteBoundSessionTarget(
|
|
594
595
|
this.remoteBoundSessionTargetValue,
|
|
@@ -600,9 +601,10 @@ export class ZLinkActorRuntimeState {
|
|
|
600
601
|
// lifecycle's generation; a late equal/lower generation is stale.
|
|
601
602
|
if (sameRemoteSessionOwner(current, target)) return true;
|
|
602
603
|
if (
|
|
603
|
-
current.bindingGeneration !== undefined
|
|
604
|
-
|
|
605
|
-
)
|
|
604
|
+
current.bindingGeneration !== undefined &&
|
|
605
|
+
current.bindingGeneration >= target.bindingGeneration
|
|
606
|
+
)
|
|
607
|
+
return false;
|
|
606
608
|
}
|
|
607
609
|
const installed = mergeRemoteBoundSessionTarget(target, current);
|
|
608
610
|
// Binding generations are scoped to a Session-owner lifecycle. A restarted
|
|
@@ -619,35 +621,36 @@ export class ZLinkActorRuntimeState {
|
|
|
619
621
|
/** @internal Removes only the exact authority-confirmed Session incarnation. */
|
|
620
622
|
retireBoundSessionBinding(target: ZLinkBoundSessionBindingIdentity): boolean {
|
|
621
623
|
if (
|
|
622
|
-
target.sessionNodeRid === undefined
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
624
|
+
target.sessionNodeRid === undefined ||
|
|
625
|
+
target.sessionRid === undefined ||
|
|
626
|
+
target.sessionOwnerNodeGeneration === undefined ||
|
|
627
|
+
target.sessionOwnerId === undefined ||
|
|
628
|
+
target.sessionOwnerLeaseGeneration === undefined ||
|
|
629
|
+
target.bindingGeneration === undefined
|
|
628
630
|
) {
|
|
629
631
|
throw new TypeError('A retired bound Session target requires its complete binding identity.');
|
|
630
632
|
}
|
|
631
633
|
let retired = false;
|
|
632
634
|
if (
|
|
633
|
-
this.remoteBoundSessionTargetValue !== undefined
|
|
634
|
-
|
|
635
|
+
this.remoteBoundSessionTargetValue !== undefined &&
|
|
636
|
+
sameRemoteSessionBinding(this.remoteBoundSessionTargetValue, target)
|
|
635
637
|
) {
|
|
636
638
|
this.remoteBoundSessionTargetValue = undefined;
|
|
637
639
|
retired = true;
|
|
638
640
|
}
|
|
639
641
|
if (
|
|
640
|
-
this.boundSessionTransferTargetValue !== undefined
|
|
641
|
-
|
|
642
|
+
this.boundSessionTransferTargetValue !== undefined &&
|
|
643
|
+
sameRemoteSessionBinding(this.boundSessionTransferTargetValue, target)
|
|
642
644
|
) {
|
|
643
645
|
this.boundSessionTransferTargetValue = undefined;
|
|
644
646
|
retired = true;
|
|
645
647
|
}
|
|
646
648
|
if (retired) {
|
|
647
|
-
this.boundSessionBindingGenerationValue =
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
649
|
+
this.boundSessionBindingGenerationValue =
|
|
650
|
+
preferredRemoteBoundSessionTarget(
|
|
651
|
+
this.remoteBoundSessionTargetValue,
|
|
652
|
+
this.boundSessionTransferTargetValue
|
|
653
|
+
)?.bindingGeneration ?? 0n;
|
|
651
654
|
}
|
|
652
655
|
return retired;
|
|
653
656
|
}
|
|
@@ -661,35 +664,37 @@ export class ZLinkActorRuntimeState {
|
|
|
661
664
|
this.remoteBoundSessionTargetValue,
|
|
662
665
|
this.boundSessionTransferTargetValue
|
|
663
666
|
);
|
|
664
|
-
const merged =
|
|
665
|
-
? undefined
|
|
666
|
-
: mergeRemoteBoundSessionTarget(target, current);
|
|
667
|
+
const merged =
|
|
668
|
+
target === undefined ? undefined : mergeRemoteBoundSessionTarget(target, current);
|
|
667
669
|
const bindingGeneration = maxBindingGeneration(
|
|
668
670
|
merged?.bindingGeneration,
|
|
669
671
|
this.remoteBoundSessionTargetValue?.bindingGeneration,
|
|
670
672
|
this.boundSessionBindingGenerationValue
|
|
671
673
|
);
|
|
672
|
-
this.remoteBoundSessionTargetValue =
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
674
|
+
this.remoteBoundSessionTargetValue =
|
|
675
|
+
merged === undefined
|
|
676
|
+
? undefined
|
|
677
|
+
: bindingGeneration === undefined
|
|
678
|
+
? merged
|
|
679
|
+
: { ...merged, bindingGeneration };
|
|
677
680
|
}
|
|
678
681
|
|
|
679
682
|
setBoundSessionTransferTarget(target: ZLinkRemoteBoundSessionTarget | undefined): void {
|
|
680
|
-
const merged =
|
|
681
|
-
|
|
682
|
-
|
|
683
|
+
const merged =
|
|
684
|
+
target === undefined
|
|
685
|
+
? undefined
|
|
686
|
+
: mergeRemoteBoundSessionTarget(target, this.boundSessionTransferTargetValue);
|
|
683
687
|
const bindingGeneration = maxBindingGeneration(
|
|
684
688
|
merged?.bindingGeneration,
|
|
685
689
|
this.boundSessionTransferTargetValue?.bindingGeneration,
|
|
686
690
|
this.boundSessionBindingGenerationValue
|
|
687
691
|
);
|
|
688
|
-
this.boundSessionTransferTargetValue =
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
692
|
+
this.boundSessionTransferTargetValue =
|
|
693
|
+
merged === undefined
|
|
694
|
+
? undefined
|
|
695
|
+
: bindingGeneration === undefined
|
|
696
|
+
? merged
|
|
697
|
+
: { ...merged, bindingGeneration };
|
|
693
698
|
}
|
|
694
699
|
|
|
695
700
|
setRemoteActorPacketTarget(target: ZLinkRemoteActorPacketTarget | undefined): void {
|
|
@@ -748,10 +753,11 @@ export class ZLinkActorRuntimeState {
|
|
|
748
753
|
|
|
749
754
|
prepareForRemoteReentry(): void {
|
|
750
755
|
if (this.remoteActorPacketTargetValue === undefined) return;
|
|
751
|
-
const relocationTransferTarget =
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
756
|
+
const relocationTransferTarget =
|
|
757
|
+
this.boundSessionTransferTargetValue !== undefined &&
|
|
758
|
+
hasRelocationFence(this.boundSessionTransferTargetValue)
|
|
759
|
+
? this.boundSessionTransferTargetValue
|
|
760
|
+
: undefined;
|
|
755
761
|
this.creationTask = undefined;
|
|
756
762
|
this.configured = false;
|
|
757
763
|
this.context = undefined;
|
|
@@ -790,10 +796,7 @@ export function toFrameworkRoutingId(routingId: unknown): RoutingId {
|
|
|
790
796
|
return routingId as unknown as RoutingId;
|
|
791
797
|
}
|
|
792
798
|
|
|
793
|
-
export function toFrameworkActorRef(
|
|
794
|
-
actor: ZLinkBackendActorRef,
|
|
795
|
-
meshName: string
|
|
796
|
-
): ActorRef {
|
|
799
|
+
export function toFrameworkActorRef(actor: ZLinkBackendActorRef, meshName: string): ActorRef {
|
|
797
800
|
const actorRef = {
|
|
798
801
|
actorId: actor.actorId,
|
|
799
802
|
objectGeneration: actor.generation,
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
Type,
|
|
3
|
-
ZLinkActor,
|
|
4
|
-
ZLinkMessageSerializer,
|
|
5
|
-
} from '../../contracts';
|
|
1
|
+
import type { Type, ZLinkActor, ZLinkMessageSerializer } from '../../contracts';
|
|
6
2
|
import type { ZLinkActorRelocationAdapter } from '../../contracts/Configuration/ObjectRoles';
|
|
7
3
|
import type { ZLinkSpotNodeOptions } from '../../contracts/Configuration/RegistrationTypes';
|
|
8
4
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
@@ -45,17 +41,14 @@ export class ZLinkActorTransferRegistry {
|
|
|
45
41
|
signal?: AbortSignal
|
|
46
42
|
): Promise<ZLinkActorTransferPayloadState> {
|
|
47
43
|
throwIfAborted(signal);
|
|
48
|
-
const adapterType = actorType === undefined
|
|
49
|
-
? undefined
|
|
50
|
-
: this.byKey.get(actorType);
|
|
44
|
+
const adapterType = actorType === undefined ? undefined : this.byKey.get(actorType);
|
|
51
45
|
if (adapterType === undefined) {
|
|
52
46
|
return { state: emptyTransferState(this.messageSerializers) };
|
|
53
47
|
}
|
|
54
|
-
const adapter = await this.createAdapter(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
);
|
|
48
|
+
const adapter = (await this.createAdapter(
|
|
49
|
+
adapterType
|
|
50
|
+
)) as ZLinkActorRelocationAdapter<ZLinkActor>;
|
|
51
|
+
const state = await adapter.capture(actor, signal ?? new AbortController().signal);
|
|
59
52
|
if (!(state instanceof Uint8Array)) {
|
|
60
53
|
throw new Error(
|
|
61
54
|
`Actor relocation adapter '${adapterType.name}' returned invalid state bytes.`
|
|
@@ -84,7 +77,9 @@ export class ZLinkActorTransferRegistry {
|
|
|
84
77
|
`Actor relocation adapter for stable type '${adapterKey}' is not registered on the target node.`
|
|
85
78
|
);
|
|
86
79
|
}
|
|
87
|
-
const adapter = await this.createAdapter(
|
|
80
|
+
const adapter = (await this.createAdapter(
|
|
81
|
+
adapterType
|
|
82
|
+
)) as ZLinkActorRelocationAdapter<ZLinkActor>;
|
|
88
83
|
await adapter.restore(
|
|
89
84
|
actor,
|
|
90
85
|
state.toEncodedPayload().toBytes(),
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ZLinkActorMessageFollowContext } from './actor-message-follow-context';
|
|
2
2
|
|
|
3
|
-
export const ZLINK_INTERNAL_ACTOR_TRANSPORT_DELIVERY_GATE =
|
|
4
|
-
|
|
3
|
+
export const ZLINK_INTERNAL_ACTOR_TRANSPORT_DELIVERY_GATE = Symbol.for(
|
|
4
|
+
'zlink.internal.actor.transport-delivery-gate'
|
|
5
|
+
);
|
|
5
6
|
|
|
6
7
|
export interface ZLinkInternalActorTransportDeliveryGate {
|
|
7
8
|
waitBeforeSubmit(
|
|
@@ -10,8 +11,5 @@ export interface ZLinkInternalActorTransportDeliveryGate {
|
|
|
10
11
|
signal?: AbortSignal
|
|
11
12
|
): Promise<number | void>;
|
|
12
13
|
|
|
13
|
-
recordMessageFollowRelay?(
|
|
14
|
-
actorId: string,
|
|
15
|
-
context: ZLinkActorMessageFollowContext
|
|
16
|
-
): void;
|
|
14
|
+
recordMessageFollowRelay?(actorId: string, context: ZLinkActorMessageFollowContext): void;
|
|
17
15
|
}
|
|
@@ -17,12 +17,15 @@ export class ZLinkRemoteBoundSessionFenceError extends Error {
|
|
|
17
17
|
export function isRemoteBoundSessionFenceError(error: unknown): boolean {
|
|
18
18
|
if (error instanceof ZLinkRemoteBoundSessionFenceError) return true;
|
|
19
19
|
if (!(error instanceof Error)) return false;
|
|
20
|
-
if ((error as { code?: unknown }).code === ZLINK_REMOTE_BOUND_SESSION_FENCE_NACK_CODE)
|
|
20
|
+
if ((error as { code?: unknown }).code === ZLINK_REMOTE_BOUND_SESSION_FENCE_NACK_CODE)
|
|
21
|
+
return true;
|
|
21
22
|
// Fallback for transports that only surface the session owner's message.
|
|
22
|
-
return
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
return (
|
|
24
|
+
error.message.includes('did not match its command 42 Session seal') ||
|
|
25
|
+
error.message.includes('released Session seal cannot publish a different route') ||
|
|
26
|
+
error.message.includes('was fenced by its binding identity') ||
|
|
27
|
+
error.message.includes('session route seal abort was fenced')
|
|
28
|
+
);
|
|
26
29
|
}
|
|
27
30
|
|
|
28
31
|
/** Encodes a request/reply nack for the command 42/44/45 packet family. */
|
|
@@ -108,9 +111,10 @@ export function encodeRemoteBoundSessionErrorPayload(input: {
|
|
|
108
111
|
packetName: ZLINK_REMOTE_BOUND_SESSION_ERROR_PACKET,
|
|
109
112
|
...input,
|
|
110
113
|
requestSeq: input.requestSeq.toString(),
|
|
111
|
-
error:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
+
error:
|
|
115
|
+
input.error instanceof Error
|
|
116
|
+
? { code: input.error.constructor.name, message: input.error.message }
|
|
117
|
+
: input.error,
|
|
114
118
|
metadata: Object.fromEntries(input.metadata)
|
|
115
119
|
};
|
|
116
120
|
}
|
|
@@ -155,16 +159,23 @@ export function decodeRemoteBoundSessionSendPayload(payload: unknown): {
|
|
|
155
159
|
};
|
|
156
160
|
}
|
|
157
161
|
|
|
158
|
-
function optionalFlowOrigin(
|
|
162
|
+
function optionalFlowOrigin(
|
|
163
|
+
payload: object
|
|
164
|
+
): import('../../contracts').ZLinkFlowOrigin | undefined {
|
|
159
165
|
// Spec 27 §3 wire spelling (lowercase). This relay JSON is a Node<->Node
|
|
160
166
|
// internal wire deployed atomically with this repository, so the decoder
|
|
161
167
|
// accepts only the spec spelling.
|
|
162
168
|
switch ((payload as { flowOrigin?: unknown }).flowOrigin) {
|
|
163
|
-
case 'inbound':
|
|
164
|
-
|
|
165
|
-
case '
|
|
166
|
-
|
|
167
|
-
|
|
169
|
+
case 'inbound':
|
|
170
|
+
return 'Inbound';
|
|
171
|
+
case 'timer':
|
|
172
|
+
return 'Timer';
|
|
173
|
+
case 'application':
|
|
174
|
+
return 'Application';
|
|
175
|
+
case 'lifecycle':
|
|
176
|
+
return 'Lifecycle';
|
|
177
|
+
default:
|
|
178
|
+
return undefined;
|
|
168
179
|
}
|
|
169
180
|
}
|
|
170
181
|
|
|
@@ -177,7 +188,10 @@ export function decodeRemoteBoundSessionResponsePayload(payload: unknown): {
|
|
|
177
188
|
readonly compressPayload: boolean;
|
|
178
189
|
readonly actorPacketTarget?: unknown;
|
|
179
190
|
} {
|
|
180
|
-
const decoded = decodeRemoteBoundSessionControlPayload(
|
|
191
|
+
const decoded = decodeRemoteBoundSessionControlPayload(
|
|
192
|
+
payload,
|
|
193
|
+
ZLINK_REMOTE_BOUND_SESSION_RESPONSE_PACKET
|
|
194
|
+
);
|
|
181
195
|
return { ...decoded, message: (payload as { message?: unknown }).message };
|
|
182
196
|
}
|
|
183
197
|
|
|
@@ -189,7 +203,10 @@ export function decodeRemoteBoundSessionErrorPayload(payload: unknown): {
|
|
|
189
203
|
readonly metadata?: Record<string, string>;
|
|
190
204
|
readonly actorPacketTarget?: unknown;
|
|
191
205
|
} {
|
|
192
|
-
const decoded = decodeRemoteBoundSessionControlPayload(
|
|
206
|
+
const decoded = decodeRemoteBoundSessionControlPayload(
|
|
207
|
+
payload,
|
|
208
|
+
ZLINK_REMOTE_BOUND_SESSION_ERROR_PACKET
|
|
209
|
+
);
|
|
193
210
|
return {
|
|
194
211
|
actorId: decoded.actorId,
|
|
195
212
|
error: (payload as { error?: unknown }).error,
|
|
@@ -211,7 +228,10 @@ export function streamMetadataMap(metadata: unknown): ReadonlyMap<string, string
|
|
|
211
228
|
return new Map();
|
|
212
229
|
}
|
|
213
230
|
|
|
214
|
-
function decodeRemoteBoundSessionControlPayload(
|
|
231
|
+
function decodeRemoteBoundSessionControlPayload(
|
|
232
|
+
payload: unknown,
|
|
233
|
+
packetName: string
|
|
234
|
+
): {
|
|
215
235
|
readonly actorId: string;
|
|
216
236
|
readonly boundPacketName: string;
|
|
217
237
|
readonly requestSeq: bigint;
|