@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
|
@@ -6,6 +6,7 @@ const payload_codec_1 = require("../messaging/payload-codec");
|
|
|
6
6
|
const protocol_1 = require("./protocol");
|
|
7
7
|
const abort_1 = require("../abort");
|
|
8
8
|
const execution_1 = require("../execution");
|
|
9
|
+
const actor_session_binding_registry_1 = require("./actor-session-binding-registry");
|
|
9
10
|
const actor_session_lifecycle_coordinator_1 = require("./actor-session-lifecycle-coordinator");
|
|
10
11
|
const managed_stream_1 = require("./managed-stream");
|
|
11
12
|
class ZLinkBoundActorRelaySender {
|
|
@@ -23,8 +24,7 @@ class ZLinkBoundActorRelaySender {
|
|
|
23
24
|
const header = dispatchHeader === undefined
|
|
24
25
|
? await this.currentHeader(actor)
|
|
25
26
|
: await this.requireDispatchHeader(actor, dispatchHeader);
|
|
26
|
-
if (header.kind === protocol_1.ZLinkStreamMessageKind.Request
|
|
27
|
-
&& header.requestSeq !== undefined) {
|
|
27
|
+
if (header.kind === protocol_1.ZLinkStreamMessageKind.Request && header.requestSeq !== undefined) {
|
|
28
28
|
const operation = async () => {
|
|
29
29
|
const admission = await this.routes.beginAcceptedRequestFrameWhenReady(actor.actorId, actor.bindingToken, signal);
|
|
30
30
|
try {
|
|
@@ -34,13 +34,14 @@ class ZLinkBoundActorRelaySender {
|
|
|
34
34
|
await admission.complete();
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
|
-
if (await this.routes.isSealed(actor.actorId) &&
|
|
37
|
+
if ((await this.routes.isSealed(actor.actorId)) &&
|
|
38
|
+
(0, execution_1.captureZLinkExecutionTurn)() !== undefined) {
|
|
38
39
|
void operation().catch(() => undefined);
|
|
39
40
|
return { status: submission_result_1.ZLinkSubmitStatus.Submitted };
|
|
40
41
|
}
|
|
41
42
|
return await operation();
|
|
42
43
|
}
|
|
43
|
-
if (await this.routes.isSealed(actor.actorId) && (0, execution_1.captureZLinkExecutionTurn)() !== undefined) {
|
|
44
|
+
if ((await this.routes.isSealed(actor.actorId)) && (0, execution_1.captureZLinkExecutionTurn)() !== undefined) {
|
|
44
45
|
// Spec 32:62 — a Send completes once the source outbound queue
|
|
45
46
|
// accepts it; spec 05 — infrastructure send progress must not depend
|
|
46
47
|
// on the application turn. When the CALLER IS an application turn
|
|
@@ -53,17 +54,19 @@ class ZLinkBoundActorRelaySender {
|
|
|
53
54
|
// Non-turn callers (stream ingress relays) keep the waiting
|
|
54
55
|
// semantics so a held frame across a failed rebind still
|
|
55
56
|
// terminalizes to the caller.
|
|
56
|
-
void this.routes
|
|
57
|
+
void this.routes
|
|
58
|
+
.runAcceptedFrameWhenReady(actor.actorId, actor.bindingToken, () => this.relayAcceptedFrame(actor, payload, signal), signal)
|
|
59
|
+
.catch(() => undefined);
|
|
57
60
|
return { status: submission_result_1.ZLinkSubmitStatus.Submitted };
|
|
58
61
|
}
|
|
59
62
|
return this.routes.runAcceptedFrameWhenReady(actor.actorId, actor.bindingToken, () => this.relayAcceptedFrame(actor, payload, signal), signal);
|
|
60
63
|
}
|
|
61
64
|
async relayAcceptedFrame(actor, payload, signal, header, requestAdmission) {
|
|
62
|
-
const activeHeader = header ?? await this.currentHeader(actor);
|
|
65
|
+
const activeHeader = header ?? (await this.currentHeader(actor));
|
|
63
66
|
const started = await this.lifecycle.run(actor.actorId, async () => {
|
|
64
67
|
const completion = this.relayInsideLifecycle(actor, payload, signal, activeHeader, requestAdmission);
|
|
65
|
-
if (activeHeader.kind === protocol_1.ZLinkStreamMessageKind.Request
|
|
66
|
-
|
|
68
|
+
if (activeHeader.kind === protocol_1.ZLinkStreamMessageKind.Request &&
|
|
69
|
+
activeHeader.requestSeq !== undefined) {
|
|
67
70
|
// A routed REQUEST only needs this lane while its ordered submission
|
|
68
71
|
// is started. Its admission acknowledgement can depend on relocation
|
|
69
72
|
// route publication, and command 44 uses the same lane. Keeping the
|
|
@@ -94,7 +97,7 @@ class ZLinkBoundActorRelaySender {
|
|
|
94
97
|
return header;
|
|
95
98
|
}
|
|
96
99
|
async relayInsideLifecycle(actor, payload, signal, currentHeader, requestAdmission) {
|
|
97
|
-
const header = currentHeader ?? await this.currentHeader(actor);
|
|
100
|
+
const header = currentHeader ?? (await this.currentHeader(actor));
|
|
98
101
|
const held = requestAdmission?.beginSubmission(signal);
|
|
99
102
|
if (held !== undefined)
|
|
100
103
|
await held;
|
|
@@ -135,9 +138,9 @@ class ZLinkBoundActorRelaySender {
|
|
|
135
138
|
await this.routes.unbind(actor.actorId, route.context, actor.bindingToken);
|
|
136
139
|
return route;
|
|
137
140
|
});
|
|
138
|
-
if (unbindNative
|
|
139
|
-
|
|
140
|
-
|
|
141
|
+
if (unbindNative &&
|
|
142
|
+
detached.bindingToken === actor.bindingToken &&
|
|
143
|
+
detached.context.stream instanceof managed_stream_1.ZLinkManagedStream) {
|
|
141
144
|
await detached.context.stream.unbindActor(actor.actorId, this.options.actorBindTimeoutMs ?? 2000, signal);
|
|
142
145
|
}
|
|
143
146
|
await this.options.notifyDisconnected?.(actor, signal);
|
|
@@ -148,16 +151,16 @@ class ZLinkBoundActorRelaySender {
|
|
|
148
151
|
await Promise.allSettled(snapshot.map(async (actor) => {
|
|
149
152
|
const detached = await this.lifecycle.run(actor.actorId, async () => {
|
|
150
153
|
const route = await this.routes.route(actor.actorId);
|
|
151
|
-
if (route === undefined
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
154
|
+
if (route === undefined ||
|
|
155
|
+
route.context !== context ||
|
|
156
|
+
route.actor !== actor ||
|
|
157
|
+
route.bindingToken !== actor.bindingToken) {
|
|
155
158
|
return false;
|
|
156
159
|
}
|
|
157
160
|
// The transport is already closed, so remove its exact route before
|
|
158
161
|
// invoking application lifecycle code. A reconnect can then install
|
|
159
162
|
// a successor while this best-effort notification is in flight.
|
|
160
|
-
await this.routes.unbind(actor.actorId, context, actor.bindingToken);
|
|
163
|
+
await this.routes.unbind(actor.actorId, context, actor.bindingToken, actor_session_binding_registry_1.ZLinkActorSessionBindingTermination.PhysicalDisconnect);
|
|
161
164
|
return true;
|
|
162
165
|
});
|
|
163
166
|
if (!detached)
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DefaultZLinkBoundSessionResponseTarget = void 0;
|
|
4
4
|
exports.boundSessionErrorPayload = boundSessionErrorPayload;
|
|
5
|
+
const contracts_1 = require("../../contracts");
|
|
6
|
+
const channel_envelope_1 = require("../channels/channel-envelope");
|
|
7
|
+
const route_disconnected_error_1 = require("../channels/route-disconnected-error");
|
|
5
8
|
const submission_result_1 = require("../messaging/submission-result");
|
|
6
9
|
const protocol_1 = require("./protocol");
|
|
7
10
|
class DefaultZLinkBoundSessionResponseTarget {
|
|
@@ -36,7 +39,11 @@ class DefaultZLinkBoundSessionResponseTarget {
|
|
|
36
39
|
exports.DefaultZLinkBoundSessionResponseTarget = DefaultZLinkBoundSessionResponseTarget;
|
|
37
40
|
function boundSessionErrorPayload(error) {
|
|
38
41
|
return {
|
|
39
|
-
code: error instanceof
|
|
42
|
+
code: (0, channel_envelope_1.channelErrorCodeName)(error instanceof contracts_1.ZLinkFrameworkException
|
|
43
|
+
? error.kind
|
|
44
|
+
: error instanceof route_disconnected_error_1.ZLinkRouteDisconnectedError
|
|
45
|
+
? contracts_1.ZLinkFrameworkErrorKind.Unavailable
|
|
46
|
+
: contracts_1.ZLinkFrameworkErrorKind.InternalFailure),
|
|
40
47
|
message: errorMessage(error)
|
|
41
48
|
};
|
|
42
49
|
}
|
|
@@ -20,7 +20,7 @@ class ZLinkBoundSessionService {
|
|
|
20
20
|
async sendBoundSession(actorId, message, packetName, metadata, signal) {
|
|
21
21
|
(0, abort_1.throwIfAborted)(signal);
|
|
22
22
|
const route = await this.routes.requireRoute(actorId);
|
|
23
|
-
const frame = this.frameMessages.createJsonFrameMessage(protocol_1.ZLinkStreamMessageKind.Send, (0, protocol_1.resolvePacketName)(message, packetName), metadata, false, undefined, message);
|
|
23
|
+
const frame = this.frameMessages.createJsonFrameMessage(protocol_1.ZLinkStreamMessageKind.Send, (0, protocol_1.resolvePacketName)(message, packetName), metadata, false, undefined, message, undefined, this.actorSlot(route));
|
|
24
24
|
try {
|
|
25
25
|
const result = await this.requireTransport().send(actorId, frame, {
|
|
26
26
|
bindingToken: route.bindingToken,
|
|
@@ -40,7 +40,7 @@ class ZLinkBoundSessionService {
|
|
|
40
40
|
if (route === undefined) {
|
|
41
41
|
return { status: submission_result_1.ZLinkSubmitStatus.TargetNotFound };
|
|
42
42
|
}
|
|
43
|
-
const frame = this.frameMessages.createJsonFrameMessage(protocol_1.ZLinkStreamMessageKind.Send, (0, protocol_1.resolvePacketName)(message, packetName), metadata, false, undefined, message);
|
|
43
|
+
const frame = this.frameMessages.createJsonFrameMessage(protocol_1.ZLinkStreamMessageKind.Send, (0, protocol_1.resolvePacketName)(message, packetName), metadata, false, undefined, message, undefined, this.actorSlot(route));
|
|
44
44
|
try {
|
|
45
45
|
(0, abort_1.throwIfAborted)(signal);
|
|
46
46
|
if ((await this.routes.route(actorId))?.bindingToken !== route.bindingToken) {
|
|
@@ -114,7 +114,7 @@ class ZLinkBoundSessionService {
|
|
|
114
114
|
const header = runtime_message_1.ZLinkBufferMessage.fromOwned(Buffer.from(encodedBindHeader.buffer, encodedBindHeader.byteOffset, encodedBindHeader.byteLength));
|
|
115
115
|
const body = runtime_message_1.ZLinkBufferMessage.fromOwned(Buffer.alloc(0));
|
|
116
116
|
try {
|
|
117
|
-
if (!await stream.sendBoundActor(actorRef.actorId, [header, body], 0)) {
|
|
117
|
+
if (!(await stream.sendBoundActor(actorRef.actorId, [header, body], 0))) {
|
|
118
118
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorRouteNotFound, `Actor '${actorRef.actorId}' remote bound session bind relay failed.`);
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -124,7 +124,7 @@ class ZLinkBoundSessionService {
|
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
async writeLocalBoundSessionFrame(actorId, route, kind, packetName, metadata, compressPayload, requestSeq, payload, operationName) {
|
|
127
|
-
const frame = this.frameMessages.createJsonFrameMessage(kind, packetName, metadata, compressPayload, requestSeq, payload);
|
|
127
|
+
const frame = this.frameMessages.createJsonFrameMessage(kind, packetName, metadata, compressPayload, requestSeq, payload, undefined, this.actorSlot(route));
|
|
128
128
|
try {
|
|
129
129
|
if ((await this.routes.route(actorId))?.bindingToken !== route.bindingToken) {
|
|
130
130
|
return false;
|
|
@@ -165,6 +165,9 @@ class ZLinkBoundSessionService {
|
|
|
165
165
|
}
|
|
166
166
|
return this.options.transport;
|
|
167
167
|
}
|
|
168
|
+
actorSlot(route) {
|
|
169
|
+
return route.actorSlot;
|
|
170
|
+
}
|
|
168
171
|
}
|
|
169
172
|
exports.ZLinkBoundSessionService = ZLinkBoundSessionService;
|
|
170
173
|
function requireBoundSessionGeneration(actorRef) {
|
|
@@ -183,14 +186,13 @@ function toBoundSessionSendActorRef(actor) {
|
|
|
183
186
|
}
|
|
184
187
|
function boundSessionSendFence(node, backendActor, actor) {
|
|
185
188
|
const internal = actor;
|
|
186
|
-
const ownerNodeGeneration = internal.ownerNodeGeneration
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|| ownerNodeGeneration <= 0n) {
|
|
189
|
+
const ownerNodeGeneration = internal.ownerNodeGeneration ?? node.actorNodeGeneration?.(backendActor);
|
|
190
|
+
if (internal.ownershipGeneration === undefined ||
|
|
191
|
+
internal.ownershipGeneration <= 0n ||
|
|
192
|
+
internal.ownerLeaseGeneration === undefined ||
|
|
193
|
+
internal.ownerLeaseGeneration <= 0n ||
|
|
194
|
+
ownerNodeGeneration === undefined ||
|
|
195
|
+
ownerNodeGeneration <= 0n) {
|
|
194
196
|
return undefined;
|
|
195
197
|
}
|
|
196
198
|
return Object.freeze({
|
|
@@ -40,8 +40,9 @@ class ZLinkStreamRuntimeManager {
|
|
|
40
40
|
applicationJobQueue;
|
|
41
41
|
constructor(options) {
|
|
42
42
|
this.options = options;
|
|
43
|
-
this.applicationJobQueue =
|
|
44
|
-
|
|
43
|
+
this.applicationJobQueue =
|
|
44
|
+
options.applicationJobQueue ??
|
|
45
|
+
new application_job_queue_1.ApplicationJobQueue((0, application_job_queue_1.resolveApplicationJobQueueConfiguration)());
|
|
45
46
|
}
|
|
46
47
|
start() {
|
|
47
48
|
if (this.options.registration.streamNodes.size === 0) {
|
|
@@ -75,20 +76,19 @@ class ZLinkStreamRuntimeManager {
|
|
|
75
76
|
if (actorDispatchEnabled) {
|
|
76
77
|
for (const [meshName, mesh] of this.options.registration.spotNodes) {
|
|
77
78
|
const isPrimaryMesh = meshName === applicationMeshName;
|
|
78
|
-
if (!isPrimaryMesh
|
|
79
|
-
&& mesh.objectRole !== 'client'
|
|
80
|
-
&& mesh.objectRole !== 'server')
|
|
79
|
+
if (!isPrimaryMesh && mesh.objectRole !== 'client' && mesh.objectRole !== 'server')
|
|
81
80
|
continue;
|
|
82
|
-
const meshNode = this.options.nativeMeshNodeForName?.(meshName)
|
|
83
|
-
|
|
84
|
-
const completions = this.options.meshCompletionsForName?.(meshName)
|
|
85
|
-
|
|
81
|
+
const meshNode = this.options.nativeMeshNodeForName?.(meshName) ??
|
|
82
|
+
(isPrimaryMesh ? nativeMeshNode : undefined);
|
|
83
|
+
const completions = this.options.meshCompletionsForName?.(meshName) ??
|
|
84
|
+
(isPrimaryMesh ? meshCompletions : undefined);
|
|
86
85
|
const createService = meshNode?.createStreamSessionService;
|
|
87
86
|
if (typeof createService !== 'function' || completions === undefined)
|
|
88
87
|
continue;
|
|
89
88
|
const service = createService.call(meshNode, socket.nativeInstance);
|
|
90
89
|
const bindingOwner = (0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwner)(this.options.bindingRuntime);
|
|
91
90
|
(0, service_session_binding_ingress_port_1.registerServiceSessionBindingIngressPort)(service, {
|
|
91
|
+
actorSlot: (actorId, sessionRid) => bindingOwner.actorSlot(actorId, sessionRid),
|
|
92
92
|
retainOutbound: (claim, delivery) => bindingOwner.admitRelocationOutbound(claim, delivery),
|
|
93
93
|
clearOutbound: (actorId, error) => bindingOwner.clearRelocation(actorId, error)
|
|
94
94
|
});
|
|
@@ -112,7 +112,7 @@ class ZLinkStreamRuntimeManager {
|
|
|
112
112
|
applicationJobQueue: this.applicationJobQueue,
|
|
113
113
|
nativeSessionService,
|
|
114
114
|
meshCompletions,
|
|
115
|
-
nativeSessionRouteForMesh: meshName => nativeSessionRoutes.get(meshName),
|
|
115
|
+
nativeSessionRouteForMesh: (meshName) => nativeSessionRoutes.get(meshName),
|
|
116
116
|
monitor,
|
|
117
117
|
bindingRuntime: this.options.bindingRuntime,
|
|
118
118
|
acceptNewSession: () => this.options.acceptNewSession?.(applicationMeshName) !== false,
|
|
@@ -131,7 +131,7 @@ class ZLinkStreamRuntimeManager {
|
|
|
131
131
|
socket,
|
|
132
132
|
monitor,
|
|
133
133
|
nativeSessionService,
|
|
134
|
-
nativeSessionServices: [...nativeSessionRoutes.values()].map(route => route.service)
|
|
134
|
+
nativeSessionServices: [...nativeSessionRoutes.values()].map((route) => route.service)
|
|
135
135
|
});
|
|
136
136
|
}
|
|
137
137
|
}
|
|
@@ -140,8 +140,8 @@ class ZLinkStreamRuntimeManager {
|
|
|
140
140
|
this.nodes.clear();
|
|
141
141
|
for (const node of nodes.reverse()) {
|
|
142
142
|
await node.runtime.dispose();
|
|
143
|
-
const nativeServices = node.nativeSessionServices
|
|
144
|
-
|
|
143
|
+
const nativeServices = node.nativeSessionServices ??
|
|
144
|
+
(node.nativeSessionService === undefined ? [] : [node.nativeSessionService]);
|
|
145
145
|
for (const service of nativeServices) {
|
|
146
146
|
service.shutdown(1000);
|
|
147
147
|
service.close();
|
|
@@ -167,9 +167,10 @@ class ZLinkStreamSessionRuntime extends stream_session_runtime_1.ZLinkStreamSess
|
|
|
167
167
|
// Spec 27 §4: a default-constructed binding runtime must still honor the
|
|
168
168
|
// process diagnostics level, so wire its Off gate to the runtime's
|
|
169
169
|
// dispatch-error flow tracer.
|
|
170
|
-
const bindingRuntime = options.bindingRuntime ??
|
|
171
|
-
|
|
172
|
-
|
|
170
|
+
const bindingRuntime = options.bindingRuntime ??
|
|
171
|
+
new ZLinkStreamBindingRuntime({
|
|
172
|
+
flowCreationEnabled: () => options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
173
|
+
});
|
|
173
174
|
super({
|
|
174
175
|
...options,
|
|
175
176
|
bindingRuntime
|
|
@@ -183,9 +184,10 @@ class ZLinkStreamSessionNodeRuntime extends stream_session_runtime_1.ZLinkStream
|
|
|
183
184
|
constructor(options) {
|
|
184
185
|
// Spec 27 §4: keep the default binding runtime's flow creation behind the
|
|
185
186
|
// process diagnostics Off gate (see ZLinkStreamSessionRuntime above).
|
|
186
|
-
const bindingRuntime = options.bindingRuntime ??
|
|
187
|
-
|
|
188
|
-
|
|
187
|
+
const bindingRuntime = options.bindingRuntime ??
|
|
188
|
+
new ZLinkStreamBindingRuntime({
|
|
189
|
+
flowCreationEnabled: () => options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
190
|
+
});
|
|
189
191
|
super({
|
|
190
192
|
...options,
|
|
191
193
|
bindingRuntime
|
|
@@ -205,7 +207,7 @@ class ZLinkStreamBindingRuntime {
|
|
|
205
207
|
...options,
|
|
206
208
|
actorBindTimeoutMs: options.actorBindTimeoutMs ?? DEFAULT_ACTOR_BIND_TIMEOUT_MS
|
|
207
209
|
};
|
|
208
|
-
this.routes = new actor_session_binding_registry_1.ZLinkActorSessionBindingRegistry(4096, 4096, runtimeOptions.sessionRelocationSealTimeoutMs ?? 3_000);
|
|
210
|
+
this.routes = new actor_session_binding_registry_1.ZLinkActorSessionBindingRegistry(4096, 4096, runtimeOptions.sessionRelocationSealTimeoutMs ?? 3_000, runtimeOptions.errorSink);
|
|
209
211
|
this.compressionCodec = (0, stream_frame_factory_1.resolveStreamCompressionCodec)(runtimeOptions.streamCompression);
|
|
210
212
|
this.frameMessages = new stream_frame_factory_1.ZLinkStreamFrameMessageFactory(runtimeOptions);
|
|
211
213
|
this.boundSessions = new bound_session_service_1.ZLinkBoundSessionService(this.routes, this.frameMessages, runtimeOptions);
|
|
@@ -213,6 +215,12 @@ class ZLinkStreamBindingRuntime {
|
|
|
213
215
|
this.sessionActors = new session_actor_coordinator_1.ZLinkSessionActorCoordinator(this.routes, this, runtimeOptions, actorSessionLifecycle);
|
|
214
216
|
this.boundActorRelay = new bound_actor_relay_sender_1.ZLinkBoundActorRelaySender(this.routes, this.frameMessages, runtimeOptions, actorSessionLifecycle);
|
|
215
217
|
(0, actor_session_binding_runtime_owner_1.registerActorSessionBindingRuntimeOwner)(this, {
|
|
218
|
+
actorSlot: async (actorId, sessionRid) => {
|
|
219
|
+
const route = await this.routes.route(actorId);
|
|
220
|
+
return route !== undefined && route.sessionIdentity === sessionRid
|
|
221
|
+
? route.actorSlot
|
|
222
|
+
: undefined;
|
|
223
|
+
},
|
|
216
224
|
sealRelocation: (claim, expected, signal) => this.routes.sealRelocation(claim, expected, signal),
|
|
217
225
|
relocationSnapshot: (actorId, sealId) => this.routes.relocationSnapshot(actorId, sealId),
|
|
218
226
|
retainRelocationOutbound: (actorId, operation, sealId) => this.routes.retainRelocationOutbound(actorId, operation, sealId),
|
|
@@ -43,6 +43,9 @@ export declare class ZLinkManagedStream implements ZLinkStream {
|
|
|
43
43
|
bindActor(actor: ActorRef, timeoutMs: number, signal?: AbortSignal, onBindingReplaced?: (actor: ServiceActorRef, retiredSession: ServiceRetiredBoundSessionRouteFence) => void, authorityFence?: ZLinkActorSessionAuthorityFence): Promise<void>;
|
|
44
44
|
private ensureNativeActorRoute;
|
|
45
45
|
unbindActor(actorId: string, timeoutMs: number, signal?: AbortSignal): Promise<void>;
|
|
46
|
+
enqueueActorBound(actorSlot: number, actorId: string): Promise<void>;
|
|
47
|
+
enqueueActorUnbound(actorSlot: number): Promise<void>;
|
|
48
|
+
private submitActorBindingControl;
|
|
46
49
|
sendBoundActor(actorId: string, parts: readonly Message[], flags?: ZLinkBackendSendFlags): Promise<boolean>;
|
|
47
50
|
updateAddresses(localAddr: string | undefined, remoteAddr: string | undefined): void;
|
|
48
51
|
private hasNativeBinding;
|
|
@@ -84,7 +84,7 @@ class ZLinkManagedStream {
|
|
|
84
84
|
}
|
|
85
85
|
async submitBoundActor(actorId, parts, signal) {
|
|
86
86
|
(0, abort_1.throwIfAborted)(signal);
|
|
87
|
-
return await this.sendBoundActor(actorId, parts, ZLINK_SEND_DONT_WAIT)
|
|
87
|
+
return (await this.sendBoundActor(actorId, parts, ZLINK_SEND_DONT_WAIT))
|
|
88
88
|
? { status: submission_result_1.ZLinkSubmitStatus.Submitted }
|
|
89
89
|
: { status: submission_result_1.ZLinkSubmitStatus.Backpressured };
|
|
90
90
|
}
|
|
@@ -122,12 +122,12 @@ class ZLinkManagedStream {
|
|
|
122
122
|
if (this.transportClosed) {
|
|
123
123
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `Stream session '${this.sessionId}' is disconnected.`);
|
|
124
124
|
}
|
|
125
|
+
const nativeActor = toNativeActorRef(actor);
|
|
125
126
|
const route = this.nativeRoute(actor.meshName);
|
|
126
127
|
if (route !== undefined) {
|
|
127
128
|
if (route.service.status().state === 1) {
|
|
128
129
|
route.service.start();
|
|
129
130
|
}
|
|
130
|
-
const nativeActor = toNativeActorRef(actor);
|
|
131
131
|
await this.ensureNativeActorRoute(route, actor, timeoutMs, signal);
|
|
132
132
|
if (this.isTransportClosed()) {
|
|
133
133
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `Stream session '${this.sessionId}' is disconnected.`);
|
|
@@ -137,9 +137,10 @@ class ZLinkManagedStream {
|
|
|
137
137
|
: (_actorId, retiredSession, replacedActor) => {
|
|
138
138
|
onBindingReplaced(replacedActor, retiredSession);
|
|
139
139
|
}, toStreamSessionActorAuthorityFence(authorityFence)), signal), `Actor '${actor.actorId}' native session bind`);
|
|
140
|
-
const binding = route.service
|
|
141
|
-
.
|
|
142
|
-
|
|
140
|
+
const binding = route.service
|
|
141
|
+
.bindings(this.backendRoutingId())
|
|
142
|
+
.find((candidate) => candidate.actor.actorId === nativeActor.actorId &&
|
|
143
|
+
candidate.actor.generation === nativeActor.generation);
|
|
143
144
|
if (binding === undefined) {
|
|
144
145
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `Actor '${actor.actorId}' native session bind completed without a binding snapshot.`);
|
|
145
146
|
}
|
|
@@ -162,6 +163,7 @@ class ZLinkManagedStream {
|
|
|
162
163
|
return;
|
|
163
164
|
}
|
|
164
165
|
await this.socket.bindActor(this.backendRoutingId(), toBackendActorRef(actor), timeoutMs, signal);
|
|
166
|
+
this.nativeActorBindings.set(actor.actorId, { actor: nativeActor });
|
|
165
167
|
}
|
|
166
168
|
async ensureNativeActorRoute(route, actor, timeoutMs, signal) {
|
|
167
169
|
const completion = await route.completions.submit(() => route.service.lookupActor(actor.nodeRid, actor.actorId, timeoutMs), signal);
|
|
@@ -169,16 +171,16 @@ class ZLinkManagedStream {
|
|
|
169
171
|
const resolved = completion.kindData?.kind === 'actorLookupCompletion'
|
|
170
172
|
? completion.kindData.location.actor
|
|
171
173
|
: undefined;
|
|
172
|
-
if (completion.terminalResult !== 0
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorRouteNotFound, `Actor '${actor.actorId}' native route fence does not match its ActorRef `
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
174
|
+
if (completion.terminalResult !== 0 ||
|
|
175
|
+
completion.failureErrno !== 0 ||
|
|
176
|
+
resolved === undefined ||
|
|
177
|
+
resolved.actorId !== actor.actorId ||
|
|
178
|
+
resolved.generation !== actor.objectGeneration ||
|
|
179
|
+
String(resolved.nodeRid) !== String(actor.nodeRid)) {
|
|
180
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorRouteNotFound, `Actor '${actor.actorId}' native route fence does not match its ActorRef ` +
|
|
181
|
+
`(expected ${String(actor.nodeRid)}/${actor.objectGeneration}, ` +
|
|
182
|
+
`resolved ${resolved === undefined ? 'none' : `${String(resolved.nodeRid)}/${resolved.generation}`}, ` +
|
|
183
|
+
`terminal=${completion.terminalResult}, failure=${completion.failureErrno}).`);
|
|
182
184
|
}
|
|
183
185
|
}
|
|
184
186
|
finally {
|
|
@@ -222,6 +224,24 @@ class ZLinkManagedStream {
|
|
|
222
224
|
return;
|
|
223
225
|
}
|
|
224
226
|
await this.socket.unbindActor(this.backendRoutingId(), actorId, timeoutMs, signal);
|
|
227
|
+
if (binding !== undefined && this.nativeActorBindings.get(actorId) === binding) {
|
|
228
|
+
this.nativeActorBindings.delete(actorId);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
async enqueueActorBound(actorSlot, actorId) {
|
|
232
|
+
await this.submitActorBindingControl((0, protocol_1.encodeActorBoundFrame)(actorSlot, actorId));
|
|
233
|
+
}
|
|
234
|
+
async enqueueActorUnbound(actorSlot) {
|
|
235
|
+
await this.submitActorBindingControl((0, protocol_1.encodeActorUnboundFrame)(actorSlot));
|
|
236
|
+
}
|
|
237
|
+
async submitActorBindingControl(frame) {
|
|
238
|
+
const message = runtime_message_1.ZLinkBufferMessage.from(frame);
|
|
239
|
+
try {
|
|
240
|
+
await this.socket.submit(this.backendRoutingId(), message);
|
|
241
|
+
}
|
|
242
|
+
finally {
|
|
243
|
+
message.close();
|
|
244
|
+
}
|
|
225
245
|
}
|
|
226
246
|
async sendBoundActor(actorId, parts, flags) {
|
|
227
247
|
if (this.transportClosed) {
|
|
@@ -231,7 +251,7 @@ class ZLinkManagedStream {
|
|
|
231
251
|
if (binding?.route !== undefined) {
|
|
232
252
|
const nativeParts = parts.map((part) => runtime_message_1.ZLinkBufferMessage.from(part.data()));
|
|
233
253
|
try {
|
|
234
|
-
return await binding.route.service.sendToActor(this.backendRoutingId(), binding.actor, nativeParts, { flags: flags ?? 0 }) === 0;
|
|
254
|
+
return ((await binding.route.service.sendToActor(this.backendRoutingId(), binding.actor, nativeParts, { flags: flags ?? 0 })) === 0);
|
|
235
255
|
}
|
|
236
256
|
finally {
|
|
237
257
|
for (const part of nativeParts) {
|
|
@@ -251,8 +271,9 @@ class ZLinkManagedStream {
|
|
|
251
271
|
}
|
|
252
272
|
hasNativeBinding(route, actorId, bindingGeneration) {
|
|
253
273
|
try {
|
|
254
|
-
return route.service
|
|
255
|
-
|
|
274
|
+
return route.service
|
|
275
|
+
.bindings(this.backendRoutingId())
|
|
276
|
+
.some((candidate) => candidate.actor.actorId === actorId && candidate.bindingGeneration === bindingGeneration);
|
|
256
277
|
}
|
|
257
278
|
catch {
|
|
258
279
|
// A closed native service owns the teardown state. Keep the original
|
|
@@ -266,8 +287,8 @@ class ZLinkManagedStream {
|
|
|
266
287
|
async requireSuccessfulCompletion(completionPromise, operationName, acceptedTerminalResults = NO_ACCEPTED_TERMINAL_RESULTS) {
|
|
267
288
|
const completion = await completionPromise;
|
|
268
289
|
try {
|
|
269
|
-
if (completion.terminalResult !== 0
|
|
270
|
-
|
|
290
|
+
if (completion.terminalResult !== 0 &&
|
|
291
|
+
!acceptedTerminalResults.has(completion.terminalResult)) {
|
|
271
292
|
throw (0, framework_errors_internal_1.wireReplyFailureException)(completion.terminalResult, completion.failureErrno, `${operationName} failed with result ${completion.terminalResult} (errno ${completion.failureErrno}).`);
|
|
272
293
|
}
|
|
273
294
|
}
|
|
@@ -276,13 +297,13 @@ class ZLinkManagedStream {
|
|
|
276
297
|
}
|
|
277
298
|
}
|
|
278
299
|
nativeRoute(meshName) {
|
|
279
|
-
return this.nativeSessionRouteForMesh?.(meshName)
|
|
280
|
-
|
|
300
|
+
return (this.nativeSessionRouteForMesh?.(meshName) ??
|
|
301
|
+
(this.nativeSessionService !== undefined && this.meshCompletions !== undefined
|
|
281
302
|
? {
|
|
282
303
|
service: this.nativeSessionService,
|
|
283
304
|
completions: this.meshCompletions
|
|
284
305
|
}
|
|
285
|
-
: undefined);
|
|
306
|
+
: undefined));
|
|
286
307
|
}
|
|
287
308
|
}
|
|
288
309
|
exports.ZLinkManagedStream = ZLinkManagedStream;
|
|
@@ -290,16 +311,16 @@ function streamSessionIdFromRoutingId(routingId) {
|
|
|
290
311
|
if (typeof routingId === 'string') {
|
|
291
312
|
return routingId;
|
|
292
313
|
}
|
|
293
|
-
if (typeof routingId === 'object'
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
314
|
+
if (typeof routingId === 'object' &&
|
|
315
|
+
routingId !== null &&
|
|
316
|
+
'toHex' in routingId &&
|
|
317
|
+
typeof routingId.toHex === 'function') {
|
|
297
318
|
return routingId.toHex();
|
|
298
319
|
}
|
|
299
|
-
if (typeof routingId === 'object'
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
320
|
+
if (typeof routingId === 'object' &&
|
|
321
|
+
routingId !== null &&
|
|
322
|
+
'toString' in routingId &&
|
|
323
|
+
typeof routingId.toString === 'function') {
|
|
303
324
|
return routingId.toString();
|
|
304
325
|
}
|
|
305
326
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, 'Stream session routing id is invalid.');
|
|
@@ -23,7 +23,9 @@ class ZLinkNativeFallbackBoundSession {
|
|
|
23
23
|
async disconnect(signal) {
|
|
24
24
|
const remoteTarget = this.options.remoteBoundSessionTargetProvider();
|
|
25
25
|
if (remoteTarget !== undefined) {
|
|
26
|
-
const spotKind = 'spotKind' in remoteTarget
|
|
26
|
+
const spotKind = 'spotKind' in remoteTarget
|
|
27
|
+
? remoteTarget.spotKind
|
|
28
|
+
: undefined;
|
|
27
29
|
const payload = (0, actor_packet_relay_wire_1.encodeRemoteActorPacketRelayPayload)({
|
|
28
30
|
actorId: this.options.actorId,
|
|
29
31
|
routerChannelId: remoteTarget.routerChannelId,
|
|
@@ -36,17 +38,23 @@ class ZLinkNativeFallbackBoundSession {
|
|
|
36
38
|
spotId: remoteTarget.spotId,
|
|
37
39
|
spotKind: spotKind ?? contracts_1.ZLinkSpotKind.Entry
|
|
38
40
|
};
|
|
39
|
-
if (await (0, actor_routed_json_request_1.tryRequestRoutedJson)(this.options.routedTransport, target, payload, {
|
|
41
|
+
if (await (0, actor_routed_json_request_1.tryRequestRoutedJson)(this.options.routedTransport, target, payload, {
|
|
42
|
+
timeoutMs: this.options.requestTimeoutMs,
|
|
43
|
+
signal
|
|
44
|
+
})) {
|
|
40
45
|
return;
|
|
41
46
|
}
|
|
42
|
-
await this.options.routedTransport.sendToSpot(target, payload, {
|
|
47
|
+
await this.options.routedTransport.sendToSpot(target, payload, {
|
|
48
|
+
packetName: actors_1.ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
|
|
49
|
+
signal
|
|
50
|
+
});
|
|
43
51
|
return;
|
|
44
52
|
}
|
|
45
53
|
const actorRef = this.options.actorRefProvider();
|
|
46
54
|
const node = this.options.nativeActorNodeProvider();
|
|
47
|
-
if (actorRef !== undefined
|
|
48
|
-
|
|
49
|
-
|
|
55
|
+
if (actorRef !== undefined &&
|
|
56
|
+
node !== undefined &&
|
|
57
|
+
currentBindingGeneration(actorRef) !== undefined) {
|
|
50
58
|
await this.options.runtime.disconnectNativeBoundSession(node, actorRef, signal);
|
|
51
59
|
return;
|
|
52
60
|
}
|
|
@@ -106,9 +114,7 @@ class ZLinkNativeFallbackBoundSessionSendCall {
|
|
|
106
114
|
const actorRef = this.options.actorRefProvider();
|
|
107
115
|
const node = this.options.nativeActorNodeProvider();
|
|
108
116
|
const bindingGeneration = currentBindingGeneration(actorRef);
|
|
109
|
-
if (actorRef !== undefined
|
|
110
|
-
&& node !== undefined
|
|
111
|
-
&& bindingGeneration !== undefined) {
|
|
117
|
+
if (actorRef !== undefined && node !== undefined && bindingGeneration !== undefined) {
|
|
112
118
|
nativeAttempted = true;
|
|
113
119
|
const result = await this.options.runtime.sendNativeBoundSession(node, actorRef, this.message, packetName, this.selectedMetadata, signal);
|
|
114
120
|
if (result.status !== submission_result_1.ZLinkSubmitStatus.TargetNotFound) {
|
|
@@ -122,8 +128,7 @@ class ZLinkNativeFallbackBoundSessionSendCall {
|
|
|
122
128
|
}
|
|
123
129
|
if (remoteTarget !== undefined) {
|
|
124
130
|
const actorRef = this.options.actorRefProvider();
|
|
125
|
-
const ownershipGeneration = actorRef
|
|
126
|
-
?.ownershipGeneration;
|
|
131
|
+
const ownershipGeneration = actorRef?.ownershipGeneration;
|
|
127
132
|
const payload = (0, bound_session_wire_1.encodeRemoteBoundSessionSendPayload)({
|
|
128
133
|
actorId: this.options.actorId,
|
|
129
134
|
actorMeshName: actorRef?.meshName,
|
|
@@ -140,8 +145,7 @@ class ZLinkNativeFallbackBoundSessionSendCall {
|
|
|
140
145
|
? (0, flow_context_1.currentOrCreateFlow)('Application')
|
|
141
146
|
: undefined)
|
|
142
147
|
});
|
|
143
|
-
const submit = this.options.routedTransport.submitInfrastructure
|
|
144
|
-
?? this.options.routedTransport.submit;
|
|
148
|
+
const submit = this.options.routedTransport.submitInfrastructure ?? this.options.routedTransport.submit;
|
|
145
149
|
const result = submit === undefined
|
|
146
150
|
? await this.options.routedTransport.sendToSpot({
|
|
147
151
|
routerChannelId: remoteTarget.routerChannelId,
|
|
@@ -161,10 +165,10 @@ class ZLinkNativeFallbackBoundSessionSendCall {
|
|
|
161
165
|
const actorRef = this.options.actorRefProvider();
|
|
162
166
|
const node = this.options.nativeActorNodeProvider();
|
|
163
167
|
const bindingGeneration = currentBindingGeneration(actorRef);
|
|
164
|
-
if (!nativeAttempted
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
+
if (!nativeAttempted &&
|
|
169
|
+
actorRef !== undefined &&
|
|
170
|
+
node !== undefined &&
|
|
171
|
+
bindingGeneration !== undefined) {
|
|
168
172
|
const result = await this.options.runtime.sendNativeBoundSession(node, actorRef, this.message, packetName, this.selectedMetadata, signal);
|
|
169
173
|
this.traceSubmitted(result, packetName);
|
|
170
174
|
return result;
|
|
@@ -22,7 +22,8 @@ export declare enum ZLinkStreamHeaderFlags {
|
|
|
22
22
|
HasMetadata = 2,
|
|
23
23
|
PayloadCompressed = 4,
|
|
24
24
|
HasCorrelationId = 8,
|
|
25
|
-
HasFlowId = 16
|
|
25
|
+
HasFlowId = 16,
|
|
26
|
+
HasActorSlot = 32
|
|
26
27
|
}
|
|
27
28
|
export declare enum ZLinkStreamCloseReasonCode {
|
|
28
29
|
ClientClose = 1,
|
|
@@ -44,6 +45,7 @@ export interface ZLinkStreamFrameHeader {
|
|
|
44
45
|
readonly correlationId?: string;
|
|
45
46
|
readonly flowId?: string;
|
|
46
47
|
readonly flowOrigin?: ZLinkFlowOrigin;
|
|
48
|
+
readonly actorSlot?: number;
|
|
47
49
|
}
|
|
48
50
|
export type ZLinkStreamReplyMessageKind = ZLinkStreamMessageKind.Response | ZLinkStreamMessageKind.Error;
|
|
49
51
|
export interface ZLinkStreamFrame {
|
|
@@ -54,6 +56,8 @@ export declare function resolvePacketName(message: unknown, explicitPacketName:
|
|
|
54
56
|
export declare function ensureSingleSubmit(executed: boolean): void;
|
|
55
57
|
export declare function encodeStreamFrame(header: ZLinkStreamFrameHeader, payload: Uint8Array): Uint8Array;
|
|
56
58
|
export declare function encodeStreamControlFrame(name: string): Uint8Array;
|
|
59
|
+
export declare function encodeActorBoundFrame(actorSlot: number, actorId: string): Uint8Array;
|
|
60
|
+
export declare function encodeActorUnboundFrame(actorSlot: number): Uint8Array;
|
|
57
61
|
export declare function encodeSessionClosingFrame(diagnostic?: string, reason?: ZLinkStreamCloseReasonCode): Uint8Array;
|
|
58
62
|
export declare function decodeStreamFrame(frame: Uint8Array): ZLinkStreamFrame;
|
|
59
63
|
export declare function tryDecodeStreamFrame(frame: Uint8Array): ZLinkStreamFrame | undefined;
|