@zlink-systems/framework 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +43 -33
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +244 -227
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +208 -219
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +0 -1
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +138 -130
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +73 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +215 -197
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/flow-context.ts +12 -3
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +95 -76
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +593 -563
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException } from '../framework-errors-internal';
|
|
2
|
-
import type {
|
|
3
|
-
ZLinkMessageSerializer,
|
|
4
|
-
RoutingId,
|
|
5
|
-
ZLinkSession
|
|
6
|
-
} from '../../contracts';
|
|
7
|
-
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
8
1
|
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
} from '
|
|
2
|
+
ZLinkFrameworkInternalErrorKind,
|
|
3
|
+
createInternalFrameworkException
|
|
4
|
+
} from '../framework-errors-internal';
|
|
5
|
+
import type { ZLinkMessageSerializer, RoutingId, ZLinkSession } from '../../contracts';
|
|
6
|
+
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
7
|
+
import { ZLinkFrameworkErrorKind, ZLinkFrameworkException } from '../../contracts';
|
|
12
8
|
import { ZLinkSocketNativeEventType } from '../diagnostics/internal-event-contracts';
|
|
13
9
|
import {
|
|
14
10
|
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
|
|
@@ -130,10 +126,10 @@ export interface ZLinkStreamSessionRuntimeOptions {
|
|
|
130
126
|
readonly socket: ZLinkBackendStreamSocket;
|
|
131
127
|
readonly nativeSessionService?: StreamSessionService;
|
|
132
128
|
readonly meshCompletions?: ZLinkMeshCompletionTable;
|
|
133
|
-
readonly nativeSessionRouteForMesh?: (
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
129
|
+
readonly nativeSessionRouteForMesh?: (meshName: string) => ZLinkNativeSessionRoute | undefined;
|
|
130
|
+
readonly sessionFactory: (
|
|
131
|
+
context: DefaultZLinkSessionContext
|
|
132
|
+
) => ZLinkSession | Promise<ZLinkSession>;
|
|
137
133
|
readonly bindingRuntime: ZLinkStreamSessionContextFactory;
|
|
138
134
|
readonly providerResolver?: ZLinkProviderResolver;
|
|
139
135
|
readonly onError?: (error: unknown) => void;
|
|
@@ -172,7 +168,10 @@ export class ZLinkStreamSessionRuntime {
|
|
|
172
168
|
constructor(
|
|
173
169
|
private readonly options: ZLinkStreamSessionRuntimeOptions & ZLinkStreamLivenessOptions,
|
|
174
170
|
routingId: unknown,
|
|
175
|
-
private readonly removeSession: (
|
|
171
|
+
private readonly removeSession: (
|
|
172
|
+
sessionId: string,
|
|
173
|
+
session: ZLinkStreamSessionRuntime
|
|
174
|
+
) => void = () => {}
|
|
176
175
|
) {
|
|
177
176
|
this.livenessClock = options.livenessClock ?? systemLivenessClock;
|
|
178
177
|
this.stream = new ZLinkManagedStream(
|
|
@@ -198,12 +197,12 @@ export class ZLinkStreamSessionRuntime {
|
|
|
198
197
|
const sessionOrPromise = options.sessionFactory(this.context);
|
|
199
198
|
this.sessionReady = isPromiseLike(sessionOrPromise)
|
|
200
199
|
? sessionOrPromise.then(
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
200
|
+
(session) => this.completeSessionCreation(session),
|
|
201
|
+
(error) => {
|
|
202
|
+
this.context.completeConfiguration();
|
|
203
|
+
throw error;
|
|
204
|
+
}
|
|
205
|
+
)
|
|
207
206
|
: Promise.resolve(this.completeSessionCreation(sessionOrPromise));
|
|
208
207
|
}
|
|
209
208
|
|
|
@@ -252,17 +251,19 @@ export class ZLinkStreamSessionRuntime {
|
|
|
252
251
|
};
|
|
253
252
|
if (decodedHeader.kind === ZLinkStreamMessageKind.Control) {
|
|
254
253
|
if (
|
|
255
|
-
messageToBytes(payload).length === 0
|
|
256
|
-
|
|
257
|
-
|
|
254
|
+
messageToBytes(payload).length === 0 &&
|
|
255
|
+
(decodedHeader.name === ZLINK_STREAM_HEARTBEAT_PONG ||
|
|
256
|
+
decodedHeader.name === ZLINK_STREAM_HEARTBEAT_PING)
|
|
258
257
|
) {
|
|
259
|
-
void this.handleControl(decodedHeader, payload)
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
258
|
+
void this.handleControl(decodedHeader, payload)
|
|
259
|
+
.catch((error) => {
|
|
260
|
+
this.options.onError?.(error);
|
|
261
|
+
})
|
|
262
|
+
.finally(() => {
|
|
263
|
+
applicationJobPermit?.releaseAfterInternalProcessing();
|
|
264
|
+
payload.close();
|
|
265
|
+
releaseTerminal();
|
|
266
|
+
});
|
|
266
267
|
return;
|
|
267
268
|
}
|
|
268
269
|
this.enqueueControl(
|
|
@@ -285,8 +286,8 @@ export class ZLinkStreamSessionRuntime {
|
|
|
285
286
|
return;
|
|
286
287
|
}
|
|
287
288
|
if (
|
|
288
|
-
decodedHeader.kind === ZLinkStreamMessageKind.Response
|
|
289
|
-
|
|
289
|
+
decodedHeader.kind === ZLinkStreamMessageKind.Response ||
|
|
290
|
+
decodedHeader.kind === ZLinkStreamMessageKind.Error
|
|
290
291
|
) {
|
|
291
292
|
this.enqueueInfrastructure(
|
|
292
293
|
async () => {
|
|
@@ -352,13 +353,13 @@ export class ZLinkStreamSessionRuntime {
|
|
|
352
353
|
if (forcedClose) return;
|
|
353
354
|
this.livenessClock.setTimer(() => {
|
|
354
355
|
if (
|
|
355
|
-
this.disposed
|
|
356
|
-
|
|
357
|
-
|
|
356
|
+
this.disposed ||
|
|
357
|
+
this.disconnected ||
|
|
358
|
+
!this.context.isExactRetiredActorBinding(actor, retiredSession)
|
|
358
359
|
) {
|
|
359
360
|
return;
|
|
360
361
|
}
|
|
361
|
-
void this.close().catch(error => this.options.onError?.(error));
|
|
362
|
+
void this.close().catch((error) => this.options.onError?.(error));
|
|
362
363
|
}, ZLINK_STREAM_ACTOR_BINDING_REPLACEMENT_CLOSE_DELAY_MS);
|
|
363
364
|
};
|
|
364
365
|
const completeCallback = (): void => {
|
|
@@ -380,16 +381,15 @@ export class ZLinkStreamSessionRuntime {
|
|
|
380
381
|
};
|
|
381
382
|
callbackDeadlineTimer = this.livenessClock.setTimer(() => {
|
|
382
383
|
if (
|
|
383
|
-
this.disposed
|
|
384
|
-
|
|
385
|
-
|
|
384
|
+
this.disposed ||
|
|
385
|
+
this.disconnected ||
|
|
386
|
+
!this.context.isExactRetiredActorBinding(actor, retiredSession)
|
|
386
387
|
) {
|
|
387
388
|
return;
|
|
388
389
|
}
|
|
389
390
|
forcedClose = true;
|
|
390
|
-
void this.close().catch(error => this.options.onError?.(error));
|
|
391
|
-
}, this.options.replacementCallbackTimeoutMs
|
|
392
|
-
?? ZLINK_STREAM_ACTOR_BINDING_REPLACEMENT_CALLBACK_TIMEOUT_MS);
|
|
391
|
+
void this.close().catch((error) => this.options.onError?.(error));
|
|
392
|
+
}, this.options.replacementCallbackTimeoutMs ?? ZLINK_STREAM_ACTOR_BINDING_REPLACEMENT_CALLBACK_TIMEOUT_MS);
|
|
393
393
|
|
|
394
394
|
const callback = session.onActorBindingReplaced;
|
|
395
395
|
if (callback === undefined) {
|
|
@@ -400,10 +400,7 @@ export class ZLinkStreamSessionRuntime {
|
|
|
400
400
|
// Start the callback on this lifecycle turn, but do not retain the
|
|
401
401
|
// serial lane while application code awaits an unrelated operation.
|
|
402
402
|
const result = callback.call(session, this.context, actor.actorId);
|
|
403
|
-
void Promise.resolve(result).then(
|
|
404
|
-
() => completeCallback(),
|
|
405
|
-
reportCallbackFailure
|
|
406
|
-
);
|
|
403
|
+
void Promise.resolve(result).then(() => completeCallback(), reportCallbackFailure);
|
|
407
404
|
} catch (error) {
|
|
408
405
|
reportCallbackFailure(error);
|
|
409
406
|
}
|
|
@@ -483,73 +480,94 @@ export class ZLinkStreamSessionRuntime {
|
|
|
483
480
|
this.context.enterDispatch(decodedHeader);
|
|
484
481
|
enteredDispatch = true;
|
|
485
482
|
const session = await this.requireSession();
|
|
486
|
-
const streamKind =
|
|
487
|
-
|
|
488
|
-
|
|
483
|
+
const streamKind =
|
|
484
|
+
decodedHeader.kind === ZLinkStreamMessageKind.Request
|
|
485
|
+
? ZLinkDispatchMessageKind.Request
|
|
486
|
+
: ZLinkDispatchMessageKind.Send;
|
|
489
487
|
const streamCorr = decodedHeader.correlationId;
|
|
490
488
|
const inboundHeader = decodedHeader;
|
|
491
|
-
await runWithFlow(
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
streamCodecContentType(inboundHeader.codec),
|
|
527
|
-
inboundHeader.name
|
|
528
|
-
)
|
|
529
|
-
);
|
|
530
|
-
if (streamKind === ZLinkDispatchMessageKind.Send) {
|
|
531
|
-
flowIfEnabled(this.options.dispatchErrors?.flow, ZLinkMessageFlowOutcome.Completed)?.trace({
|
|
532
|
-
outcome: ZLinkMessageFlowOutcome.Completed,
|
|
489
|
+
await runWithFlow(
|
|
490
|
+
createInboundFlow(
|
|
491
|
+
inboundHeader.flowId,
|
|
492
|
+
inboundHeader.flowOrigin,
|
|
493
|
+
this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
494
|
+
),
|
|
495
|
+
async () => {
|
|
496
|
+
flowIfEnabled(this.options.dispatchErrors?.flow, ZLinkMessageFlowOutcome.Received)?.trace(
|
|
497
|
+
{
|
|
498
|
+
outcome: ZLinkMessageFlowOutcome.Received,
|
|
499
|
+
surface: ZLinkDispatchErrorSurface.StreamSession,
|
|
500
|
+
messageKind: streamKind,
|
|
501
|
+
packetName: inboundHeader.name,
|
|
502
|
+
correlationId: streamCorr,
|
|
503
|
+
sourceRid:
|
|
504
|
+
this.context.routingId === undefined ? undefined : String(this.context.routingId)
|
|
505
|
+
}
|
|
506
|
+
);
|
|
507
|
+
flowIfEnabled(this.options.dispatchErrors?.flow, ZLinkMessageFlowOutcome.Admitted)?.trace(
|
|
508
|
+
{
|
|
509
|
+
outcome: ZLinkMessageFlowOutcome.Admitted,
|
|
510
|
+
surface: ZLinkDispatchErrorSurface.StreamSession,
|
|
511
|
+
messageKind: streamKind,
|
|
512
|
+
packetName: inboundHeader.name,
|
|
513
|
+
correlationId: streamCorr,
|
|
514
|
+
sourceRid:
|
|
515
|
+
this.context.routingId === undefined ? undefined : String(this.context.routingId)
|
|
516
|
+
}
|
|
517
|
+
);
|
|
518
|
+
releaseApplicationJobPermitBeforeHandler();
|
|
519
|
+
flowIfEnabled(
|
|
520
|
+
this.options.dispatchErrors?.flow,
|
|
521
|
+
ZLinkMessageFlowOutcome.Dispatched
|
|
522
|
+
)?.trace({
|
|
523
|
+
outcome: ZLinkMessageFlowOutcome.Dispatched,
|
|
533
524
|
surface: ZLinkDispatchErrorSurface.StreamSession,
|
|
534
525
|
messageKind: streamKind,
|
|
535
526
|
packetName: inboundHeader.name,
|
|
536
527
|
correlationId: streamCorr,
|
|
537
|
-
sourceRid:
|
|
528
|
+
sourceRid:
|
|
529
|
+
this.context.routingId === undefined ? undefined : String(this.context.routingId)
|
|
538
530
|
});
|
|
531
|
+
await session.onDispatch?.(
|
|
532
|
+
createSessionDispatchContext(inboundHeader),
|
|
533
|
+
wrapFrameworkPayloadMessage(
|
|
534
|
+
dispatchPayload,
|
|
535
|
+
this.options.messageSerializers,
|
|
536
|
+
streamCodecContentType(inboundHeader.codec),
|
|
537
|
+
inboundHeader.name
|
|
538
|
+
)
|
|
539
|
+
);
|
|
540
|
+
if (streamKind === ZLinkDispatchMessageKind.Send) {
|
|
541
|
+
flowIfEnabled(
|
|
542
|
+
this.options.dispatchErrors?.flow,
|
|
543
|
+
ZLinkMessageFlowOutcome.Completed
|
|
544
|
+
)?.trace({
|
|
545
|
+
outcome: ZLinkMessageFlowOutcome.Completed,
|
|
546
|
+
surface: ZLinkDispatchErrorSurface.StreamSession,
|
|
547
|
+
messageKind: streamKind,
|
|
548
|
+
packetName: inboundHeader.name,
|
|
549
|
+
correlationId: streamCorr,
|
|
550
|
+
sourceRid:
|
|
551
|
+
this.context.routingId === undefined ? undefined : String(this.context.routingId)
|
|
552
|
+
});
|
|
553
|
+
}
|
|
539
554
|
}
|
|
540
|
-
|
|
555
|
+
);
|
|
541
556
|
} catch (error) {
|
|
542
557
|
this.options.dispatchErrors?.report({
|
|
543
558
|
surface: ZLinkDispatchErrorSurface.StreamSession,
|
|
544
|
-
messageKind:
|
|
545
|
-
|
|
546
|
-
|
|
559
|
+
messageKind:
|
|
560
|
+
decodedHeader.kind === ZLinkStreamMessageKind.Request
|
|
561
|
+
? ZLinkDispatchMessageKind.Request
|
|
562
|
+
: ZLinkDispatchMessageKind.Send,
|
|
547
563
|
reason: ZLinkDispatchErrorReason.HandlerException,
|
|
548
|
-
action:
|
|
549
|
-
|
|
550
|
-
|
|
564
|
+
action:
|
|
565
|
+
decodedHeader.requestSeq === undefined
|
|
566
|
+
? ZLinkDispatchErrorAction.Drop
|
|
567
|
+
: ZLinkDispatchErrorAction.ReplyError,
|
|
551
568
|
packetName: decodedHeader.name,
|
|
552
|
-
sourceRid:
|
|
569
|
+
sourceRid:
|
|
570
|
+
this.context.routingId === undefined ? undefined : String(this.context.routingId),
|
|
553
571
|
correlationId: decodedHeader.correlationId,
|
|
554
572
|
flowId: decodedHeader.flowId,
|
|
555
573
|
flowOrigin: decodedHeader.flowOrigin,
|
|
@@ -602,7 +620,9 @@ export class ZLinkStreamSessionRuntime {
|
|
|
602
620
|
this.livenessTimer = this.livenessClock.setTimer(() => {
|
|
603
621
|
this.livenessTimer = undefined;
|
|
604
622
|
this.serial.executeInfrastructure(
|
|
605
|
-
async () => this.runLivenessCheck(),
|
|
623
|
+
async () => this.runLivenessCheck(),
|
|
624
|
+
{},
|
|
625
|
+
(error) => this.options.onError?.(error)
|
|
606
626
|
);
|
|
607
627
|
}, ZLINK_STREAM_HEARTBEAT_INTERVAL_MS);
|
|
608
628
|
}
|
|
@@ -621,8 +641,8 @@ export class ZLinkStreamSessionRuntime {
|
|
|
621
641
|
return;
|
|
622
642
|
}
|
|
623
643
|
if (
|
|
624
|
-
this.awaitingPongSince !== undefined
|
|
625
|
-
|
|
644
|
+
this.awaitingPongSince !== undefined &&
|
|
645
|
+
now - this.awaitingPongSince >= ZLINK_STREAM_HEARTBEAT_TIMEOUT_MS
|
|
626
646
|
) {
|
|
627
647
|
await this.closeForLiveness(
|
|
628
648
|
ZLinkStreamCloseReasonCode.HeartbeatTimeout,
|
|
@@ -675,11 +695,12 @@ export class ZLinkStreamSessionRuntime {
|
|
|
675
695
|
new Map(),
|
|
676
696
|
false,
|
|
677
697
|
{
|
|
678
|
-
code:
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
698
|
+
code:
|
|
699
|
+
error instanceof ZLinkFrameworkException
|
|
700
|
+
? ZLinkFrameworkErrorKind[error.kind]
|
|
701
|
+
: error instanceof Error
|
|
702
|
+
? error.constructor.name
|
|
703
|
+
: 'RemoteError',
|
|
683
704
|
message: error instanceof Error ? error.message : String(error)
|
|
684
705
|
}
|
|
685
706
|
);
|
|
@@ -706,17 +727,17 @@ export class ZLinkStreamSessionRuntime {
|
|
|
706
727
|
packetName: string,
|
|
707
728
|
correlationId: string | undefined
|
|
708
729
|
): void {
|
|
709
|
-
const reply = kind === ZLinkStreamMessageKind.Response
|
|
710
|
-
|| kind === ZLinkStreamMessageKind.Error;
|
|
730
|
+
const reply = kind === ZLinkStreamMessageKind.Response || kind === ZLinkStreamMessageKind.Error;
|
|
711
731
|
const outcome = reply ? ZLinkMessageFlowOutcome.Replied : ZLinkMessageFlowOutcome.Sent;
|
|
712
732
|
flowIfEnabled(this.options.dispatchErrors?.flow, outcome)?.trace({
|
|
713
733
|
outcome,
|
|
714
734
|
surface: ZLinkDispatchErrorSurface.StreamSession,
|
|
715
|
-
messageKind:
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
735
|
+
messageKind:
|
|
736
|
+
kind === ZLinkStreamMessageKind.Response
|
|
737
|
+
? ZLinkDispatchMessageKind.Response
|
|
738
|
+
: kind === ZLinkStreamMessageKind.Error
|
|
739
|
+
? ZLinkDispatchMessageKind.Error
|
|
740
|
+
: ZLinkDispatchMessageKind.Send,
|
|
720
741
|
packetName: packetName.length === 0 ? undefined : packetName,
|
|
721
742
|
correlationId,
|
|
722
743
|
sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId)
|
|
@@ -748,15 +769,17 @@ export class ZLinkStreamSessionRuntime {
|
|
|
748
769
|
if (this.disconnected || this.disconnectQueued) return;
|
|
749
770
|
this.disconnectQueued = true;
|
|
750
771
|
this.stopLivenessChecks();
|
|
751
|
-
void this.serial
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
772
|
+
void this.serial
|
|
773
|
+
.executeFinal(async () => {
|
|
774
|
+
this.disconnectQueued = false;
|
|
775
|
+
if (this.disconnected) return;
|
|
776
|
+
this.stream.markTransportClosed();
|
|
777
|
+
this.disconnected = true;
|
|
778
|
+
await this.complete(error, true);
|
|
779
|
+
})
|
|
780
|
+
.catch(() => {
|
|
781
|
+
this.disconnectQueued = false;
|
|
782
|
+
});
|
|
760
783
|
}
|
|
761
784
|
|
|
762
785
|
private async cleanup(): Promise<void> {
|
|
@@ -808,16 +831,22 @@ export class ZLinkStreamSessionRuntime {
|
|
|
808
831
|
onRejected?.(error);
|
|
809
832
|
return;
|
|
810
833
|
}
|
|
811
|
-
if (
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
834
|
+
if (
|
|
835
|
+
!this.serial.executeApplication(
|
|
836
|
+
async () => {
|
|
837
|
+
try {
|
|
838
|
+
await work();
|
|
839
|
+
} finally {
|
|
840
|
+
claim?.close();
|
|
841
|
+
}
|
|
842
|
+
},
|
|
843
|
+
{},
|
|
844
|
+
() => {
|
|
845
|
+
claim?.close();
|
|
846
|
+
onRejected?.();
|
|
847
|
+
}
|
|
848
|
+
)
|
|
849
|
+
) {
|
|
821
850
|
claim?.close();
|
|
822
851
|
// The serial lane only refuses new work after dispose() closed it.
|
|
823
852
|
onShutdownRejected?.();
|
|
@@ -854,21 +883,29 @@ export class ZLinkStreamSessionRuntime {
|
|
|
854
883
|
|
|
855
884
|
function streamShutdownDropMessageKind(kind: ZLinkStreamMessageKind): ZLinkDispatchMessageKind {
|
|
856
885
|
switch (kind) {
|
|
857
|
-
case ZLinkStreamMessageKind.Request:
|
|
858
|
-
|
|
859
|
-
case ZLinkStreamMessageKind.
|
|
860
|
-
|
|
861
|
-
|
|
886
|
+
case ZLinkStreamMessageKind.Request:
|
|
887
|
+
return ZLinkDispatchMessageKind.Request;
|
|
888
|
+
case ZLinkStreamMessageKind.Response:
|
|
889
|
+
return ZLinkDispatchMessageKind.Response;
|
|
890
|
+
case ZLinkStreamMessageKind.Error:
|
|
891
|
+
return ZLinkDispatchMessageKind.Error;
|
|
892
|
+
case ZLinkStreamMessageKind.Control:
|
|
893
|
+
return ZLinkDispatchMessageKind.Control;
|
|
894
|
+
default:
|
|
895
|
+
return ZLinkDispatchMessageKind.Send;
|
|
862
896
|
}
|
|
863
897
|
}
|
|
864
898
|
|
|
865
899
|
export class ZLinkStreamSessionNodeRuntime {
|
|
866
900
|
private readonly sessions = new Map<string, ZLinkStreamSessionRuntime>();
|
|
867
901
|
private readonly availablePackets: ZLinkBackendStreamPacket[] = [];
|
|
868
|
-
private readonly pendingConnectionMetadata: Array<
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
902
|
+
private readonly pendingConnectionMetadata: Array<
|
|
903
|
+
| {
|
|
904
|
+
readonly localAddr?: string;
|
|
905
|
+
readonly remoteAddr?: string;
|
|
906
|
+
}
|
|
907
|
+
| undefined
|
|
908
|
+
> = [];
|
|
872
909
|
private pendingConnectionMetadataHead = 0;
|
|
873
910
|
private pendingConnectionMetadataCount = 0;
|
|
874
911
|
private readonly unaddressedMonitorSessions: Array<string | undefined> = [];
|
|
@@ -899,21 +936,21 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
899
936
|
return;
|
|
900
937
|
}
|
|
901
938
|
const monitor = this.options.monitor;
|
|
902
|
-
monitor?.onEvent(event => this.onMonitorEvent(event));
|
|
903
|
-
const running = this.runReceiveLoop(this.receiveAbortController.signal)
|
|
904
|
-
.
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
});
|
|
939
|
+
monitor?.onEvent((event) => this.onMonitorEvent(event));
|
|
940
|
+
const running = this.runReceiveLoop(this.receiveAbortController.signal).catch((error) => {
|
|
941
|
+
if (!this.stopped) {
|
|
942
|
+
this.options.onError?.(error);
|
|
943
|
+
}
|
|
944
|
+
});
|
|
909
945
|
this.receiveLoop = running;
|
|
910
946
|
if (monitor !== undefined) {
|
|
911
|
-
this.monitorLoop = this.runMonitorLoop(monitor, this.receiveAbortController.signal)
|
|
912
|
-
|
|
947
|
+
this.monitorLoop = this.runMonitorLoop(monitor, this.receiveAbortController.signal).catch(
|
|
948
|
+
(error) => {
|
|
913
949
|
if (!this.stopped) {
|
|
914
950
|
this.options.onError?.(error);
|
|
915
951
|
}
|
|
916
|
-
}
|
|
952
|
+
}
|
|
953
|
+
);
|
|
917
954
|
}
|
|
918
955
|
}
|
|
919
956
|
|
|
@@ -1046,8 +1083,8 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1046
1083
|
|
|
1047
1084
|
this.receiveWorkSinceYield += 1;
|
|
1048
1085
|
if (
|
|
1049
|
-
this.receiveWorkSinceYield >= ZLINK_STREAM_RECEIVE_FRAME_BATCH_LIMIT
|
|
1050
|
-
|
|
1086
|
+
this.receiveWorkSinceYield >= ZLINK_STREAM_RECEIVE_FRAME_BATCH_LIMIT &&
|
|
1087
|
+
!this.isReceiveStopped(signal)
|
|
1051
1088
|
) {
|
|
1052
1089
|
this.receiveWorkSinceYield = 0;
|
|
1053
1090
|
await new Promise<void>((resolve) => setImmediate(resolve));
|
|
@@ -1055,10 +1092,7 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1055
1092
|
}
|
|
1056
1093
|
}
|
|
1057
1094
|
|
|
1058
|
-
private acceptPacket(
|
|
1059
|
-
packet: ZLinkBackendStreamPacket,
|
|
1060
|
-
permit: ApplicationJobPermitPort
|
|
1061
|
-
): void {
|
|
1095
|
+
private acceptPacket(packet: ZLinkBackendStreamPacket, permit: ApplicationJobPermitPort): void {
|
|
1062
1096
|
const routingId = packet.routingId;
|
|
1063
1097
|
const header = packet.header;
|
|
1064
1098
|
const body = packet.body;
|
|
@@ -1080,16 +1114,17 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1080
1114
|
this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
1081
1115
|
);
|
|
1082
1116
|
payload = ownedMessage(body.data());
|
|
1083
|
-
const terminalCompletion =
|
|
1084
|
-
|
|
1117
|
+
const terminalCompletion =
|
|
1118
|
+
decodedHeader.kind === ZLinkStreamMessageKind.Response ||
|
|
1119
|
+
decodedHeader.kind === ZLinkStreamMessageKind.Error;
|
|
1085
1120
|
const applicationPermit = terminalCompletion ? undefined : permit;
|
|
1086
1121
|
if (terminalCompletion) {
|
|
1087
1122
|
permit.releaseAfterInternalProcessing();
|
|
1088
1123
|
releasePermitOnFailure = false;
|
|
1089
1124
|
} else {
|
|
1090
1125
|
if (
|
|
1091
|
-
decodedHeader.kind === ZLinkStreamMessageKind.Send
|
|
1092
|
-
|
|
1126
|
+
decodedHeader.kind === ZLinkStreamMessageKind.Send ||
|
|
1127
|
+
decodedHeader.kind === ZLinkStreamMessageKind.Request
|
|
1093
1128
|
) {
|
|
1094
1129
|
permit.markApplicationQueued();
|
|
1095
1130
|
}
|
|
@@ -1184,7 +1219,10 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1184
1219
|
this.pendingConnectionMetadataCount += 1;
|
|
1185
1220
|
return;
|
|
1186
1221
|
}
|
|
1187
|
-
this.getOrCreateSession(event.routingId)?.enqueueConnected(
|
|
1222
|
+
this.getOrCreateSession(event.routingId)?.enqueueConnected(
|
|
1223
|
+
event.localAddr,
|
|
1224
|
+
event.remoteAddr
|
|
1225
|
+
);
|
|
1188
1226
|
return;
|
|
1189
1227
|
case ZLinkSocketNativeEventType.Disconnected:
|
|
1190
1228
|
{
|
|
@@ -1197,10 +1235,7 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1197
1235
|
session.enqueueDisconnected(error);
|
|
1198
1236
|
return;
|
|
1199
1237
|
}
|
|
1200
|
-
if (
|
|
1201
|
-
event.routingId === undefined
|
|
1202
|
-
&& !streamMonitorHasEndpoint(event)
|
|
1203
|
-
) {
|
|
1238
|
+
if (event.routingId === undefined && !streamMonitorHasEndpoint(event)) {
|
|
1204
1239
|
this.enqueueEndpointlessDisconnect(error);
|
|
1205
1240
|
}
|
|
1206
1241
|
}
|
|
@@ -1212,37 +1247,47 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1212
1247
|
|
|
1213
1248
|
private applyPendingConnectionMetadata(session: ZLinkStreamSessionRuntime): void {
|
|
1214
1249
|
if (
|
|
1215
|
-
session.stream.localAddr !== undefined
|
|
1216
|
-
|
|
1217
|
-
|
|
1250
|
+
session.stream.localAddr !== undefined ||
|
|
1251
|
+
session.stream.remoteAddr !== undefined ||
|
|
1252
|
+
this.pendingConnectionMetadataCount === 0
|
|
1218
1253
|
) {
|
|
1219
1254
|
return;
|
|
1220
1255
|
}
|
|
1221
1256
|
const metadata = this.takePendingConnectionMetadata();
|
|
1222
1257
|
if (metadata === undefined) return;
|
|
1223
|
-
this.removePendingConnectionMetadata(
|
|
1258
|
+
this.removePendingConnectionMetadata(
|
|
1259
|
+
streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr)
|
|
1260
|
+
);
|
|
1224
1261
|
session.enqueueConnected(metadata.localAddr, metadata.remoteAddr);
|
|
1225
1262
|
this.enqueueUnaddressedMonitorSession(session.stream.sessionId);
|
|
1226
1263
|
}
|
|
1227
1264
|
|
|
1228
1265
|
private hasPendingConnectionMetadata(endpointKey: string): boolean {
|
|
1229
|
-
for (
|
|
1266
|
+
for (
|
|
1267
|
+
let index = this.pendingConnectionMetadataHead;
|
|
1268
|
+
index < this.pendingConnectionMetadata.length;
|
|
1269
|
+
index += 1
|
|
1270
|
+
) {
|
|
1230
1271
|
const metadata = this.pendingConnectionMetadata[index];
|
|
1231
|
-
if (
|
|
1232
|
-
|
|
1272
|
+
if (
|
|
1273
|
+
metadata !== undefined &&
|
|
1274
|
+
streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr) === endpointKey
|
|
1275
|
+
) {
|
|
1233
1276
|
return true;
|
|
1234
1277
|
}
|
|
1235
1278
|
}
|
|
1236
1279
|
return false;
|
|
1237
1280
|
}
|
|
1238
1281
|
|
|
1239
|
-
private takePendingConnectionMetadata():
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1282
|
+
private takePendingConnectionMetadata():
|
|
1283
|
+
| {
|
|
1284
|
+
readonly localAddr?: string;
|
|
1285
|
+
readonly remoteAddr?: string;
|
|
1286
|
+
}
|
|
1287
|
+
| undefined {
|
|
1243
1288
|
while (
|
|
1244
|
-
this.pendingConnectionMetadataHead < this.pendingConnectionMetadata.length
|
|
1245
|
-
|
|
1289
|
+
this.pendingConnectionMetadataHead < this.pendingConnectionMetadata.length &&
|
|
1290
|
+
this.pendingConnectionMetadata[this.pendingConnectionMetadataHead] === undefined
|
|
1246
1291
|
) {
|
|
1247
1292
|
this.pendingConnectionMetadataHead += 1;
|
|
1248
1293
|
}
|
|
@@ -1259,8 +1304,10 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1259
1304
|
if (this.pendingConnectionMetadataCount === 0) {
|
|
1260
1305
|
this.pendingConnectionMetadata.length = 0;
|
|
1261
1306
|
this.pendingConnectionMetadataHead = 0;
|
|
1262
|
-
} else if (
|
|
1263
|
-
|
|
1307
|
+
} else if (
|
|
1308
|
+
this.pendingConnectionMetadataHead >= 1024 &&
|
|
1309
|
+
this.pendingConnectionMetadataHead * 2 >= this.pendingConnectionMetadata.length
|
|
1310
|
+
) {
|
|
1264
1311
|
this.pendingConnectionMetadata.splice(0, this.pendingConnectionMetadataHead);
|
|
1265
1312
|
this.pendingConnectionMetadataHead = 0;
|
|
1266
1313
|
}
|
|
@@ -1273,8 +1320,8 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1273
1320
|
|
|
1274
1321
|
private takeUnaddressedMonitorSession(): string | undefined {
|
|
1275
1322
|
while (
|
|
1276
|
-
this.unaddressedMonitorSessionHead < this.unaddressedMonitorSessions.length
|
|
1277
|
-
|
|
1323
|
+
this.unaddressedMonitorSessionHead < this.unaddressedMonitorSessions.length &&
|
|
1324
|
+
this.unaddressedMonitorSessions[this.unaddressedMonitorSessionHead] === undefined
|
|
1278
1325
|
) {
|
|
1279
1326
|
this.unaddressedMonitorSessionHead += 1;
|
|
1280
1327
|
}
|
|
@@ -1286,8 +1333,10 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1286
1333
|
if (this.unaddressedMonitorSessionCount === 0) {
|
|
1287
1334
|
this.unaddressedMonitorSessions.length = 0;
|
|
1288
1335
|
this.unaddressedMonitorSessionHead = 0;
|
|
1289
|
-
} else if (
|
|
1290
|
-
|
|
1336
|
+
} else if (
|
|
1337
|
+
this.unaddressedMonitorSessionHead >= 1024 &&
|
|
1338
|
+
this.unaddressedMonitorSessionHead * 2 >= this.unaddressedMonitorSessions.length
|
|
1339
|
+
) {
|
|
1291
1340
|
this.unaddressedMonitorSessions.splice(0, this.unaddressedMonitorSessionHead);
|
|
1292
1341
|
this.unaddressedMonitorSessionHead = 0;
|
|
1293
1342
|
}
|
|
@@ -1296,9 +1345,11 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1296
1345
|
|
|
1297
1346
|
private firstUnaddressedSession(): ZLinkStreamSessionRuntime | undefined {
|
|
1298
1347
|
for (const session of this.sessions.values()) {
|
|
1299
|
-
if (
|
|
1300
|
-
|
|
1301
|
-
|
|
1348
|
+
if (
|
|
1349
|
+
!session.isDisconnected &&
|
|
1350
|
+
session.stream.localAddr === undefined &&
|
|
1351
|
+
session.stream.remoteAddr === undefined
|
|
1352
|
+
) {
|
|
1302
1353
|
return session;
|
|
1303
1354
|
}
|
|
1304
1355
|
}
|
|
@@ -1314,7 +1365,11 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1314
1365
|
}
|
|
1315
1366
|
|
|
1316
1367
|
private removePendingConnectionMetadata(endpointKey: string): void {
|
|
1317
|
-
for (
|
|
1368
|
+
for (
|
|
1369
|
+
let index = this.pendingConnectionMetadataHead;
|
|
1370
|
+
index < this.pendingConnectionMetadata.length;
|
|
1371
|
+
index += 1
|
|
1372
|
+
) {
|
|
1318
1373
|
const metadata = this.pendingConnectionMetadata[index];
|
|
1319
1374
|
if (metadata === undefined) continue;
|
|
1320
1375
|
if (streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr) === endpointKey) {
|
|
@@ -1325,7 +1380,9 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1325
1380
|
this.compactPendingConnectionMetadata();
|
|
1326
1381
|
}
|
|
1327
1382
|
|
|
1328
|
-
private resolveMonitorSession(
|
|
1383
|
+
private resolveMonitorSession(
|
|
1384
|
+
event: ZLinkBackendSocketMonitorEvent
|
|
1385
|
+
): ZLinkStreamSessionRuntime | undefined {
|
|
1329
1386
|
if (event.routingId !== undefined) {
|
|
1330
1387
|
const session = this.getActiveSession(streamSessionIdFromRoutingId(event.routingId));
|
|
1331
1388
|
if (session !== undefined) {
|
|
@@ -1336,9 +1393,11 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1336
1393
|
let match: ZLinkStreamSessionRuntime | undefined;
|
|
1337
1394
|
let matchCount = 0;
|
|
1338
1395
|
for (const session of this.sessions.values()) {
|
|
1339
|
-
if (
|
|
1340
|
-
|
|
1341
|
-
|
|
1396
|
+
if (
|
|
1397
|
+
session.isDisconnected ||
|
|
1398
|
+
session.stream.localAddr !== event.localAddr ||
|
|
1399
|
+
session.stream.remoteAddr !== event.remoteAddr
|
|
1400
|
+
) {
|
|
1342
1401
|
continue;
|
|
1343
1402
|
}
|
|
1344
1403
|
match = session;
|
|
@@ -1382,11 +1441,11 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1382
1441
|
this.wakeReceiveLoop();
|
|
1383
1442
|
setImmediate(() => {
|
|
1384
1443
|
if (
|
|
1385
|
-
pending.cancelled
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1444
|
+
pending.cancelled ||
|
|
1445
|
+
this.stopped ||
|
|
1446
|
+
this.pendingEndpointlessDisconnect !== pending ||
|
|
1447
|
+
this.activityVersion !== pending.activityVersion ||
|
|
1448
|
+
this.sessions.get(pending.session.stream.sessionId) !== pending.session
|
|
1390
1449
|
) {
|
|
1391
1450
|
return;
|
|
1392
1451
|
}
|
|
@@ -1425,15 +1484,11 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1425
1484
|
void rejected.closeForDrain().catch((error) => this.options.onError?.(error));
|
|
1426
1485
|
return undefined;
|
|
1427
1486
|
}
|
|
1428
|
-
const created = new ZLinkStreamSessionRuntime(
|
|
1429
|
-
this.
|
|
1430
|
-
|
|
1431
|
-
(sessionId, session) => {
|
|
1432
|
-
if (this.sessions.get(sessionId) === session) {
|
|
1433
|
-
this.sessions.delete(sessionId);
|
|
1434
|
-
}
|
|
1487
|
+
const created = new ZLinkStreamSessionRuntime(this.options, routingId, (sessionId, session) => {
|
|
1488
|
+
if (this.sessions.get(sessionId) === session) {
|
|
1489
|
+
this.sessions.delete(sessionId);
|
|
1435
1490
|
}
|
|
1436
|
-
);
|
|
1491
|
+
});
|
|
1437
1492
|
this.sessions.set(sessionId, created);
|
|
1438
1493
|
return created;
|
|
1439
1494
|
}
|
|
@@ -1444,7 +1499,10 @@ function monitorIdleDelayMs(misses: number): number {
|
|
|
1444
1499
|
return Math.min(scaled, ZLINK_STREAM_MONITOR_IDLE_MAX_DELAY_MS);
|
|
1445
1500
|
}
|
|
1446
1501
|
|
|
1447
|
-
function streamMonitorEndpointKey(
|
|
1502
|
+
function streamMonitorEndpointKey(
|
|
1503
|
+
localAddr: string | undefined,
|
|
1504
|
+
remoteAddr: string | undefined
|
|
1505
|
+
): string {
|
|
1448
1506
|
return `${localAddr ?? ''}\n${remoteAddr ?? ''}`;
|
|
1449
1507
|
}
|
|
1450
1508
|
|