@zlink-systems/framework 0.21.0 → 0.23.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/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
- 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 +28 -22
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
- package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
- 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 +160 -130
- 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/contracts/index.d.ts +1 -0
- 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.d.ts +3 -0
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
- 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 +12 -20
- 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 +46 -42
- 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.d.ts +1 -0
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
- 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/dispatch-error-details.d.ts +6 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
- package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
- package/dist/runtime/diagnostics/flow-context.js +2 -2
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +58 -42
- 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 -27
- 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.d.ts +4 -2
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
- 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-session-binding-ingress-port.d.ts +1 -0
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
- package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
- package/dist/runtime/foundation/service-topology-registry.js +105 -96
- 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 +245 -228
- 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/protocol/service_wire_pilot_codec.generated.js +20 -18
- 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 +209 -220
- 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.d.ts +2 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
- package/dist/runtime/spots/spot-actor-packet-drain.js +14 -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 +79 -86
- 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 +17 -15
- 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 +2 -3
- 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 +6 -6
- package/dist/runtime/spots/spot-timer.js +26 -30
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
- package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
- package/dist/runtime/streams/bound-session-response-target.js +8 -1
- package/dist/runtime/streams/bound-session-service.d.ts +1 -0
- package/dist/runtime/streams/bound-session-service.js +14 -12
- package/dist/runtime/streams/index.js +28 -20
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +52 -31
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.d.ts +5 -1
- package/dist/runtime/streams/protocol.js +68 -20
- package/dist/runtime/streams/session-actor-coordinator.js +37 -41
- package/dist/runtime/streams/session-context.d.ts +9 -2
- package/dist/runtime/streams/session-context.js +50 -32
- package/dist/runtime/streams/session-local-actors.d.ts +3 -1
- package/dist/runtime/streams/session-local-actors.js +17 -2
- 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.d.ts +1 -1
- package/dist/runtime/streams/stream-frame-factory.js +14 -7
- package/dist/runtime/streams/stream-session-runtime.js +112 -78
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +3 -3
- 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 +2 -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 +2 -2
- 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 +142 -134
- 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 +1 -32
- 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 +353 -326
- 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 +77 -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 +370 -390
- 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 +44 -44
- 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 +218 -206
- 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 +12 -47
- 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/dispatch-error-details.ts +62 -0
- package/src/runtime/diagnostics/flow-context.ts +18 -7
- 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 +107 -79
- 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 -55
- 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 +364 -396
- 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 +2 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +170 -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 +19 -18
- 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 +595 -564
- 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 +196 -148
- package/src/runtime/spots/spot-actor-packet-drain.ts +56 -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 +235 -222
- 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 +129 -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 +13 -18
- 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 +58 -47
- package/src/runtime/spots/spot-timer.ts +103 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
- package/src/runtime/streams/bound-session-response-target.ts +39 -9
- package/src/runtime/streams/bound-session-service.ts +52 -42
- package/src/runtime/streams/index.ts +183 -100
- package/src/runtime/streams/managed-stream.ts +123 -90
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +115 -46
- package/src/runtime/streams/session-actor-coordinator.ts +109 -93
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +96 -51
- package/src/runtime/streams/session-local-actors.ts +19 -3
- 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 +59 -40
- package/src/runtime/streams/stream-session-runtime.ts +317 -214
- package/src/runtime/workers/index.ts +68 -29
|
@@ -13,6 +13,7 @@ import type {
|
|
|
13
13
|
} from './actor-session-binding-registry';
|
|
14
14
|
|
|
15
15
|
export interface ZLinkActorSessionBindingRuntimeOwner {
|
|
16
|
+
actorSlot(actorId: string, sessionRid: string): Promise<number | undefined>;
|
|
16
17
|
sealRelocation(
|
|
17
18
|
claim: ZLinkActorSessionRelocationClaim,
|
|
18
19
|
expected: ZLinkActorSessionRouteFence,
|
|
@@ -46,10 +47,13 @@ export interface ZLinkActorSessionBindingRuntimeOwner {
|
|
|
46
47
|
applyFingerprint: string
|
|
47
48
|
): Promise<void>;
|
|
48
49
|
clearRelocation(actorId: string, error: unknown): Promise<void>;
|
|
49
|
-
committedRoute(actorId: string): Promise<
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
committedRoute(actorId: string): Promise<
|
|
51
|
+
| {
|
|
52
|
+
readonly actor: ActorRef;
|
|
53
|
+
readonly authorityFence?: ZLinkActorSessionAuthorityFence;
|
|
54
|
+
}
|
|
55
|
+
| undefined
|
|
56
|
+
>;
|
|
53
57
|
}
|
|
54
58
|
|
|
55
59
|
const owners = new WeakMap<object, ZLinkActorSessionBindingRuntimeOwner>();
|
|
@@ -4,7 +4,9 @@ export class ZLinkActorSessionLifecycleCoordinator {
|
|
|
4
4
|
async run<T>(actorId: string, operation: () => Promise<T>): Promise<T> {
|
|
5
5
|
const previous = this.tails.get(actorId) ?? Promise.resolve();
|
|
6
6
|
let release!: () => void;
|
|
7
|
-
const current = new Promise<void>((resolve) => {
|
|
7
|
+
const current = new Promise<void>((resolve) => {
|
|
8
|
+
release = resolve;
|
|
9
|
+
});
|
|
8
10
|
const tail = previous.catch(() => undefined).then(() => current);
|
|
9
11
|
this.tails.set(actorId, tail);
|
|
10
12
|
await previous.catch(() => undefined);
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
ZLinkMessageSerializer,
|
|
4
|
-
ZLinkSessionActor
|
|
5
|
-
} from '../../contracts';
|
|
6
|
-
import {
|
|
7
|
-
ZLinkSubmitStatus,
|
|
8
|
-
type ZLinkSubmitResult
|
|
9
|
-
} from '../messaging/submission-result';
|
|
1
|
+
import type { ZLinkMessage, ZLinkMessageSerializer, ZLinkSessionActor } from '../../contracts';
|
|
2
|
+
import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
10
3
|
import type { Message } from '../../contracts/Common/Message';
|
|
11
4
|
import { encodeFrameworkPayloadMessage } from '../messaging/payload-codec';
|
|
12
5
|
import {
|
|
@@ -18,28 +11,32 @@ import {
|
|
|
18
11
|
import { throwIfAborted } from '../abort';
|
|
19
12
|
import { captureZLinkExecutionTurn } from '../execution';
|
|
20
13
|
import {
|
|
21
|
-
ZLinkActorSessionBindingRegistry
|
|
14
|
+
ZLinkActorSessionBindingRegistry,
|
|
15
|
+
ZLinkActorSessionBindingTermination
|
|
22
16
|
} from './actor-session-binding-registry';
|
|
23
17
|
import { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
|
|
24
18
|
import { ZLinkManagedStream } from './managed-stream';
|
|
25
|
-
import {
|
|
26
|
-
|
|
27
|
-
DefaultZLinkSessionContext
|
|
28
|
-
} from './session-context';
|
|
29
|
-
import {
|
|
30
|
-
ZLinkStreamFrameMessageFactory
|
|
31
|
-
} from './stream-frame-factory';
|
|
19
|
+
import { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './session-context';
|
|
20
|
+
import { ZLinkStreamFrameMessageFactory } from './stream-frame-factory';
|
|
32
21
|
|
|
33
22
|
export interface ZLinkBoundActorRelaySenderOptions {
|
|
34
23
|
readonly actorBindTimeoutMs?: number;
|
|
35
24
|
readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
|
|
36
|
-
readonly relay?: (
|
|
25
|
+
readonly relay?: (
|
|
26
|
+
actor: ZLinkSessionActor,
|
|
27
|
+
header: ZLinkStreamFrameHeader,
|
|
28
|
+
payload: Message,
|
|
29
|
+
signal?: AbortSignal
|
|
30
|
+
) => Promise<boolean>;
|
|
37
31
|
readonly notifyDisconnected?: (actor: ZLinkSessionActor, signal?: AbortSignal) => Promise<void>;
|
|
38
32
|
}
|
|
39
33
|
|
|
40
34
|
export class ZLinkBoundActorRelaySender {
|
|
41
35
|
constructor(
|
|
42
|
-
private readonly routes: ZLinkActorSessionBindingRegistry<
|
|
36
|
+
private readonly routes: ZLinkActorSessionBindingRegistry<
|
|
37
|
+
DefaultZLinkSessionContext,
|
|
38
|
+
DefaultZLinkSessionActor
|
|
39
|
+
>,
|
|
43
40
|
private readonly frameMessages: ZLinkStreamFrameMessageFactory,
|
|
44
41
|
private readonly options: ZLinkBoundActorRelaySenderOptions = {},
|
|
45
42
|
private readonly lifecycle = new ZLinkActorSessionLifecycleCoordinator()
|
|
@@ -51,13 +48,11 @@ export class ZLinkBoundActorRelaySender {
|
|
|
51
48
|
signal?: AbortSignal,
|
|
52
49
|
dispatchHeader?: ZLinkStreamFrameHeader
|
|
53
50
|
): Promise<ZLinkSubmitResult> {
|
|
54
|
-
const header =
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
&& header.requestSeq !== undefined
|
|
60
|
-
) {
|
|
51
|
+
const header =
|
|
52
|
+
dispatchHeader === undefined
|
|
53
|
+
? await this.currentHeader(actor)
|
|
54
|
+
: await this.requireDispatchHeader(actor, dispatchHeader);
|
|
55
|
+
if (header.kind === ZLinkStreamMessageKind.Request && header.requestSeq !== undefined) {
|
|
61
56
|
const operation = async (): Promise<ZLinkSubmitResult> => {
|
|
62
57
|
const admission = await this.routes.beginAcceptedRequestFrameWhenReady(
|
|
63
58
|
actor.actorId,
|
|
@@ -70,13 +65,16 @@ export class ZLinkBoundActorRelaySender {
|
|
|
70
65
|
await admission.complete();
|
|
71
66
|
}
|
|
72
67
|
};
|
|
73
|
-
if (
|
|
68
|
+
if (
|
|
69
|
+
(await this.routes.isSealed(actor.actorId)) &&
|
|
70
|
+
captureZLinkExecutionTurn() !== undefined
|
|
71
|
+
) {
|
|
74
72
|
void operation().catch(() => undefined);
|
|
75
73
|
return { status: ZLinkSubmitStatus.Submitted };
|
|
76
74
|
}
|
|
77
75
|
return await operation();
|
|
78
76
|
}
|
|
79
|
-
if (await this.routes.isSealed(actor.actorId) && captureZLinkExecutionTurn() !== undefined) {
|
|
77
|
+
if ((await this.routes.isSealed(actor.actorId)) && captureZLinkExecutionTurn() !== undefined) {
|
|
80
78
|
// Spec 32:62 — a Send completes once the source outbound queue
|
|
81
79
|
// accepts it; spec 05 — infrastructure send progress must not depend
|
|
82
80
|
// on the application turn. When the CALLER IS an application turn
|
|
@@ -89,12 +87,14 @@ export class ZLinkBoundActorRelaySender {
|
|
|
89
87
|
// Non-turn callers (stream ingress relays) keep the waiting
|
|
90
88
|
// semantics so a held frame across a failed rebind still
|
|
91
89
|
// terminalizes to the caller.
|
|
92
|
-
void this.routes
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
90
|
+
void this.routes
|
|
91
|
+
.runAcceptedFrameWhenReady(
|
|
92
|
+
actor.actorId,
|
|
93
|
+
actor.bindingToken,
|
|
94
|
+
() => this.relayAcceptedFrame(actor, payload, signal),
|
|
95
|
+
signal
|
|
96
|
+
)
|
|
97
|
+
.catch(() => undefined);
|
|
98
98
|
return { status: ZLinkSubmitStatus.Submitted };
|
|
99
99
|
}
|
|
100
100
|
return this.routes.runAcceptedFrameWhenReady(
|
|
@@ -112,7 +112,7 @@ export class ZLinkBoundActorRelaySender {
|
|
|
112
112
|
header?: ZLinkStreamFrameHeader,
|
|
113
113
|
requestAdmission?: { beginSubmission(signal?: AbortSignal): Promise<void> | undefined }
|
|
114
114
|
): Promise<ZLinkSubmitResult> {
|
|
115
|
-
const activeHeader = header ?? await this.currentHeader(actor);
|
|
115
|
+
const activeHeader = header ?? (await this.currentHeader(actor));
|
|
116
116
|
const started = await this.lifecycle.run(actor.actorId, async () => {
|
|
117
117
|
const completion = this.relayInsideLifecycle(
|
|
118
118
|
actor,
|
|
@@ -122,8 +122,8 @@ export class ZLinkBoundActorRelaySender {
|
|
|
122
122
|
requestAdmission
|
|
123
123
|
);
|
|
124
124
|
if (
|
|
125
|
-
activeHeader.kind === ZLinkStreamMessageKind.Request
|
|
126
|
-
|
|
125
|
+
activeHeader.kind === ZLinkStreamMessageKind.Request &&
|
|
126
|
+
activeHeader.requestSeq !== undefined
|
|
127
127
|
) {
|
|
128
128
|
// A routed REQUEST only needs this lane while its ordered submission
|
|
129
129
|
// is started. Its admission acknowledgement can depend on relocation
|
|
@@ -167,7 +167,7 @@ export class ZLinkBoundActorRelaySender {
|
|
|
167
167
|
currentHeader?: ZLinkStreamFrameHeader,
|
|
168
168
|
requestAdmission?: { beginSubmission(signal?: AbortSignal): Promise<void> | undefined }
|
|
169
169
|
): Promise<ZLinkSubmitResult> {
|
|
170
|
-
const header = currentHeader ?? await this.currentHeader(actor);
|
|
170
|
+
const header = currentHeader ?? (await this.currentHeader(actor));
|
|
171
171
|
const held = requestAdmission?.beginSubmission(signal);
|
|
172
172
|
if (held !== undefined) await held;
|
|
173
173
|
throwIfAborted(signal);
|
|
@@ -184,7 +184,9 @@ export class ZLinkBoundActorRelaySender {
|
|
|
184
184
|
return { status: ZLinkSubmitStatus.TargetNotFound };
|
|
185
185
|
}
|
|
186
186
|
const headerMessage = this.frameMessages.createBinaryMessage(encodeStreamHeader(header));
|
|
187
|
-
const framePayloadMessage = this.frameMessages.createBinaryMessage(
|
|
187
|
+
const framePayloadMessage = this.frameMessages.createBinaryMessage(
|
|
188
|
+
messageToBytes(payloadMessage)
|
|
189
|
+
);
|
|
188
190
|
try {
|
|
189
191
|
return await route.context.stream.submitBoundActor(
|
|
190
192
|
actor.actorId,
|
|
@@ -216,9 +218,9 @@ export class ZLinkBoundActorRelaySender {
|
|
|
216
218
|
return route;
|
|
217
219
|
});
|
|
218
220
|
if (
|
|
219
|
-
unbindNative
|
|
220
|
-
|
|
221
|
-
|
|
221
|
+
unbindNative &&
|
|
222
|
+
detached.bindingToken === actor.bindingToken &&
|
|
223
|
+
detached.context.stream instanceof ZLinkManagedStream
|
|
222
224
|
) {
|
|
223
225
|
await detached.context.stream.unbindActor(
|
|
224
226
|
actor.actorId,
|
|
@@ -237,17 +239,22 @@ export class ZLinkBoundActorRelaySender {
|
|
|
237
239
|
const detached = await this.lifecycle.run(actor.actorId, async () => {
|
|
238
240
|
const route = await this.routes.route(actor.actorId);
|
|
239
241
|
if (
|
|
240
|
-
route === undefined
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
242
|
+
route === undefined ||
|
|
243
|
+
route.context !== context ||
|
|
244
|
+
route.actor !== actor ||
|
|
245
|
+
route.bindingToken !== actor.bindingToken
|
|
244
246
|
) {
|
|
245
247
|
return false;
|
|
246
248
|
}
|
|
247
249
|
// The transport is already closed, so remove its exact route before
|
|
248
250
|
// invoking application lifecycle code. A reconnect can then install
|
|
249
251
|
// a successor while this best-effort notification is in flight.
|
|
250
|
-
await this.routes.unbind(
|
|
252
|
+
await this.routes.unbind(
|
|
253
|
+
actor.actorId,
|
|
254
|
+
context,
|
|
255
|
+
actor.bindingToken,
|
|
256
|
+
ZLinkActorSessionBindingTermination.PhysicalDisconnect
|
|
257
|
+
);
|
|
251
258
|
return true;
|
|
252
259
|
});
|
|
253
260
|
if (!detached) return;
|
|
@@ -259,9 +266,12 @@ export class ZLinkBoundActorRelaySender {
|
|
|
259
266
|
new Promise<never>((_, reject) => {
|
|
260
267
|
controller.signal.addEventListener(
|
|
261
268
|
'abort',
|
|
262
|
-
() =>
|
|
263
|
-
|
|
264
|
-
|
|
269
|
+
() =>
|
|
270
|
+
reject(
|
|
271
|
+
new Error(
|
|
272
|
+
`Actor '${actor.actorId}' disconnect notification exceeded ${timeoutMs} ms.`
|
|
273
|
+
)
|
|
274
|
+
),
|
|
265
275
|
{ once: true }
|
|
266
276
|
);
|
|
267
277
|
})
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Message } from '../../contracts/Common/Message';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} from '../messaging/submission-result';
|
|
2
|
+
import { ZLinkFrameworkErrorKind, ZLinkFrameworkException } from '../../contracts';
|
|
3
|
+
import { channelErrorCodeName } from '../channels/channel-envelope';
|
|
4
|
+
import { ZLinkRouteDisconnectedError } from '../channels/route-disconnected-error';
|
|
5
|
+
import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
6
6
|
import { ZLinkStreamMessageKind } from './protocol';
|
|
7
7
|
import type { ZLinkStreamFrameMessageFactory } from './stream-frame-factory';
|
|
8
8
|
|
|
@@ -40,7 +40,14 @@ export class DefaultZLinkBoundSessionResponseTarget implements ZLinkBoundSession
|
|
|
40
40
|
message: unknown,
|
|
41
41
|
metadata: ReadonlyMap<string, string>
|
|
42
42
|
): Promise<boolean> {
|
|
43
|
-
return this.send(
|
|
43
|
+
return this.send(
|
|
44
|
+
ZLinkStreamMessageKind.Response,
|
|
45
|
+
packetName,
|
|
46
|
+
requestSeq,
|
|
47
|
+
message,
|
|
48
|
+
metadata,
|
|
49
|
+
'response'
|
|
50
|
+
);
|
|
44
51
|
}
|
|
45
52
|
|
|
46
53
|
sendError(
|
|
@@ -49,7 +56,14 @@ export class DefaultZLinkBoundSessionResponseTarget implements ZLinkBoundSession
|
|
|
49
56
|
error: unknown,
|
|
50
57
|
metadata: ReadonlyMap<string, string>
|
|
51
58
|
): Promise<boolean> {
|
|
52
|
-
return this.send(
|
|
59
|
+
return this.send(
|
|
60
|
+
ZLinkStreamMessageKind.Error,
|
|
61
|
+
packetName,
|
|
62
|
+
requestSeq,
|
|
63
|
+
boundSessionErrorPayload(error),
|
|
64
|
+
metadata,
|
|
65
|
+
'error response'
|
|
66
|
+
);
|
|
53
67
|
}
|
|
54
68
|
|
|
55
69
|
private async send(
|
|
@@ -60,7 +74,14 @@ export class DefaultZLinkBoundSessionResponseTarget implements ZLinkBoundSession
|
|
|
60
74
|
metadata: ReadonlyMap<string, string>,
|
|
61
75
|
operationName: string
|
|
62
76
|
): Promise<boolean> {
|
|
63
|
-
const frame = this.frameMessages.createJsonFrameMessage(
|
|
77
|
+
const frame = this.frameMessages.createJsonFrameMessage(
|
|
78
|
+
kind,
|
|
79
|
+
packetName,
|
|
80
|
+
metadata,
|
|
81
|
+
false,
|
|
82
|
+
requestSeq,
|
|
83
|
+
payload
|
|
84
|
+
);
|
|
64
85
|
try {
|
|
65
86
|
const result = await this.context.stream.submitRaw(frame);
|
|
66
87
|
if (result.status !== ZLinkSubmitStatus.Submitted) {
|
|
@@ -73,9 +94,18 @@ export class DefaultZLinkBoundSessionResponseTarget implements ZLinkBoundSession
|
|
|
73
94
|
}
|
|
74
95
|
}
|
|
75
96
|
|
|
76
|
-
export function boundSessionErrorPayload(error: unknown): {
|
|
97
|
+
export function boundSessionErrorPayload(error: unknown): {
|
|
98
|
+
readonly code: string;
|
|
99
|
+
readonly message: string;
|
|
100
|
+
} {
|
|
77
101
|
return {
|
|
78
|
-
code:
|
|
102
|
+
code: channelErrorCodeName(
|
|
103
|
+
error instanceof ZLinkFrameworkException
|
|
104
|
+
? error.kind
|
|
105
|
+
: error instanceof ZLinkRouteDisconnectedError
|
|
106
|
+
? ZLinkFrameworkErrorKind.Unavailable
|
|
107
|
+
: ZLinkFrameworkErrorKind.InternalFailure
|
|
108
|
+
),
|
|
79
109
|
message: errorMessage(error)
|
|
80
110
|
};
|
|
81
111
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ZLinkFrameworkInternalErrorKind,
|
|
3
|
+
createInternalFrameworkException
|
|
4
|
+
} from '../framework-errors-internal';
|
|
2
5
|
import { ZLinkBufferMessage as ZLinkBindingMessage } from '../backend/runtime-message';
|
|
3
6
|
import type { ActorRef } from '../../contracts';
|
|
4
|
-
import {
|
|
5
|
-
ZLinkSubmitStatus,
|
|
6
|
-
type ZLinkSubmitResult
|
|
7
|
-
} from '../messaging/submission-result';
|
|
7
|
+
import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
8
8
|
import type { Message } from '../../contracts/Common/Message';
|
|
9
9
|
import { throwIfAborted } from '../abort';
|
|
10
10
|
import type {
|
|
@@ -23,26 +23,24 @@ import {
|
|
|
23
23
|
ZLinkActorSessionBindingRegistry,
|
|
24
24
|
type ZLinkActorSessionRoute
|
|
25
25
|
} from './actor-session-binding-registry';
|
|
26
|
-
import type {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
} from './
|
|
30
|
-
import {
|
|
31
|
-
boundSessionErrorPayload
|
|
32
|
-
} from './bound-session-response-target';
|
|
33
|
-
import {
|
|
34
|
-
ZLinkStreamFrameMessageFactory
|
|
35
|
-
} from './stream-frame-factory';
|
|
36
|
-
import {
|
|
37
|
-
ZLinkManagedStream
|
|
38
|
-
} from './managed-stream';
|
|
26
|
+
import type { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './session-context';
|
|
27
|
+
import { boundSessionErrorPayload } from './bound-session-response-target';
|
|
28
|
+
import { ZLinkStreamFrameMessageFactory } from './stream-frame-factory';
|
|
29
|
+
import { ZLinkManagedStream } from './managed-stream';
|
|
39
30
|
|
|
40
31
|
const ZLINK_SEND_DONT_WAIT = 1;
|
|
41
32
|
|
|
42
|
-
type ZLinkStreamActorSessionRoute = ZLinkActorSessionRoute<
|
|
33
|
+
type ZLinkStreamActorSessionRoute = ZLinkActorSessionRoute<
|
|
34
|
+
DefaultZLinkSessionContext,
|
|
35
|
+
DefaultZLinkSessionActor
|
|
36
|
+
>;
|
|
43
37
|
|
|
44
38
|
export interface ZLinkBoundSessionTransport {
|
|
45
|
-
send(
|
|
39
|
+
send(
|
|
40
|
+
actorId: string,
|
|
41
|
+
message: unknown,
|
|
42
|
+
options: ZLinkBoundSessionSendOptions
|
|
43
|
+
): Promise<ZLinkSubmitResult>;
|
|
46
44
|
disconnect(actorId: string, options: ZLinkBoundSessionDisconnectOptions): Promise<void>;
|
|
47
45
|
}
|
|
48
46
|
|
|
@@ -66,7 +64,10 @@ export interface ZLinkBoundSessionServiceOptions {
|
|
|
66
64
|
|
|
67
65
|
export class ZLinkBoundSessionService {
|
|
68
66
|
constructor(
|
|
69
|
-
private readonly routes: ZLinkActorSessionBindingRegistry<
|
|
67
|
+
private readonly routes: ZLinkActorSessionBindingRegistry<
|
|
68
|
+
DefaultZLinkSessionContext,
|
|
69
|
+
DefaultZLinkSessionActor
|
|
70
|
+
>,
|
|
70
71
|
private readonly frameMessages: ZLinkStreamFrameMessageFactory,
|
|
71
72
|
private readonly options: ZLinkBoundSessionServiceOptions
|
|
72
73
|
) {}
|
|
@@ -86,7 +87,9 @@ export class ZLinkBoundSessionService {
|
|
|
86
87
|
metadata,
|
|
87
88
|
false,
|
|
88
89
|
undefined,
|
|
89
|
-
message
|
|
90
|
+
message,
|
|
91
|
+
undefined,
|
|
92
|
+
this.actorSlot(route)
|
|
90
93
|
);
|
|
91
94
|
try {
|
|
92
95
|
const result = await this.requireTransport().send(actorId, frame, {
|
|
@@ -119,7 +122,9 @@ export class ZLinkBoundSessionService {
|
|
|
119
122
|
metadata,
|
|
120
123
|
false,
|
|
121
124
|
undefined,
|
|
122
|
-
message
|
|
125
|
+
message,
|
|
126
|
+
undefined,
|
|
127
|
+
this.actorSlot(route)
|
|
123
128
|
);
|
|
124
129
|
try {
|
|
125
130
|
throwIfAborted(signal);
|
|
@@ -300,10 +305,7 @@ export class ZLinkBoundSessionService {
|
|
|
300
305
|
}
|
|
301
306
|
}
|
|
302
307
|
|
|
303
|
-
async relayRemoteBoundSessionBind(
|
|
304
|
-
stream: ZLinkManagedStream,
|
|
305
|
-
actorRef: ActorRef
|
|
306
|
-
): Promise<void> {
|
|
308
|
+
async relayRemoteBoundSessionBind(stream: ZLinkManagedStream, actorRef: ActorRef): Promise<void> {
|
|
307
309
|
const encodedBindHeader = encodeStreamHeader({
|
|
308
310
|
kind: ZLinkStreamMessageKind.Send,
|
|
309
311
|
codec: ZLinkStreamCodec.Raw,
|
|
@@ -312,14 +314,16 @@ export class ZLinkBoundSessionService {
|
|
|
312
314
|
metadata: new Map()
|
|
313
315
|
});
|
|
314
316
|
// encodeStreamHeader returns a fresh, unaliased array; view it without re-copying.
|
|
315
|
-
const header = ZLinkBindingMessage.fromOwned(
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
317
|
+
const header = ZLinkBindingMessage.fromOwned(
|
|
318
|
+
Buffer.from(
|
|
319
|
+
encodedBindHeader.buffer,
|
|
320
|
+
encodedBindHeader.byteOffset,
|
|
321
|
+
encodedBindHeader.byteLength
|
|
322
|
+
)
|
|
323
|
+
);
|
|
320
324
|
const body = ZLinkBindingMessage.fromOwned(Buffer.alloc(0));
|
|
321
325
|
try {
|
|
322
|
-
if (!await stream.sendBoundActor(actorRef.actorId, [header, body], 0)) {
|
|
326
|
+
if (!(await stream.sendBoundActor(actorRef.actorId, [header, body], 0))) {
|
|
323
327
|
throw createInternalFrameworkException(
|
|
324
328
|
ZLinkFrameworkInternalErrorKind.ActorRouteNotFound,
|
|
325
329
|
`Actor '${actorRef.actorId}' remote bound session bind relay failed.`
|
|
@@ -348,7 +352,9 @@ export class ZLinkBoundSessionService {
|
|
|
348
352
|
metadata,
|
|
349
353
|
compressPayload,
|
|
350
354
|
requestSeq,
|
|
351
|
-
payload
|
|
355
|
+
payload,
|
|
356
|
+
undefined,
|
|
357
|
+
this.actorSlot(route)
|
|
352
358
|
);
|
|
353
359
|
try {
|
|
354
360
|
if ((await this.routes.route(actorId))?.bindingToken !== route.bindingToken) {
|
|
@@ -448,6 +454,10 @@ export class ZLinkBoundSessionService {
|
|
|
448
454
|
}
|
|
449
455
|
return this.options.transport;
|
|
450
456
|
}
|
|
457
|
+
|
|
458
|
+
private actorSlot(route: ZLinkStreamActorSessionRoute): number | undefined {
|
|
459
|
+
return route.actorSlot;
|
|
460
|
+
}
|
|
451
461
|
}
|
|
452
462
|
|
|
453
463
|
function requireBoundSessionGeneration(actorRef: ActorRef): bigint {
|
|
@@ -480,15 +490,15 @@ function boundSessionSendFence(
|
|
|
480
490
|
readonly ownerLeaseGeneration?: bigint;
|
|
481
491
|
readonly ownerNodeGeneration?: bigint;
|
|
482
492
|
};
|
|
483
|
-
const ownerNodeGeneration =
|
|
484
|
-
?? node.actorNodeGeneration?.(backendActor);
|
|
493
|
+
const ownerNodeGeneration =
|
|
494
|
+
internal.ownerNodeGeneration ?? node.actorNodeGeneration?.(backendActor);
|
|
485
495
|
if (
|
|
486
|
-
internal.ownershipGeneration === undefined
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
496
|
+
internal.ownershipGeneration === undefined ||
|
|
497
|
+
internal.ownershipGeneration <= 0n ||
|
|
498
|
+
internal.ownerLeaseGeneration === undefined ||
|
|
499
|
+
internal.ownerLeaseGeneration <= 0n ||
|
|
500
|
+
ownerNodeGeneration === undefined ||
|
|
501
|
+
ownerNodeGeneration <= 0n
|
|
492
502
|
) {
|
|
493
503
|
return undefined;
|
|
494
504
|
}
|