@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,10 +6,7 @@ import {
|
|
|
6
6
|
} from '../framework-errors-internal';
|
|
7
7
|
import { isZLinkBackendResultError } from '../backend/runtime-values';
|
|
8
8
|
import type { Message } from '../../contracts/Common/Message';
|
|
9
|
-
import {
|
|
10
|
-
ZLinkSubmitStatus,
|
|
11
|
-
type ZLinkSubmitResult
|
|
12
|
-
} from '../messaging/submission-result';
|
|
9
|
+
import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
13
10
|
import {
|
|
14
11
|
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
|
|
15
12
|
type ZLinkRuntimeMessageFlowResult,
|
|
@@ -60,9 +57,8 @@ export class ZLinkChannelOutboundOperations {
|
|
|
60
57
|
): Promise<ZLinkSubmitResult> {
|
|
61
58
|
// Call-scoped flow (spec 27 §4): the envelope encoder and the trace
|
|
62
59
|
// points below share one ambient flow that does not outlive this call.
|
|
63
|
-
return runWithOutboundFlow(
|
|
64
|
-
this.
|
|
65
|
-
() => this.sendScoped(channelName, packetName, message, signal, metadata)
|
|
60
|
+
return runWithOutboundFlow(this.dispatchServices.flowCreationEnabled(), () =>
|
|
61
|
+
this.sendScoped(channelName, packetName, message, signal, metadata)
|
|
66
62
|
);
|
|
67
63
|
}
|
|
68
64
|
|
|
@@ -132,7 +128,7 @@ export class ZLinkChannelOutboundOperations {
|
|
|
132
128
|
channelRouteKind: 'client_server',
|
|
133
129
|
serverRid,
|
|
134
130
|
packetName,
|
|
135
|
-
correlationId: undefined
|
|
131
|
+
correlationId: undefined
|
|
136
132
|
});
|
|
137
133
|
}
|
|
138
134
|
|
|
@@ -144,10 +140,11 @@ export class ZLinkChannelOutboundOperations {
|
|
|
144
140
|
signal?: AbortSignal,
|
|
145
141
|
metadata?: ReadonlyMap<string, string>
|
|
146
142
|
): Promise<TReply> {
|
|
147
|
-
return keepChannelRequestAlive(
|
|
148
|
-
this.dispatchServices.flowCreationEnabled(),
|
|
149
|
-
|
|
150
|
-
|
|
143
|
+
return keepChannelRequestAlive(
|
|
144
|
+
runWithOutboundFlow(this.dispatchServices.flowCreationEnabled(), () =>
|
|
145
|
+
this.requestScoped<TReply>(channelName, packetName, request, timeoutMs, signal, metadata)
|
|
146
|
+
)
|
|
147
|
+
);
|
|
151
148
|
}
|
|
152
149
|
|
|
153
150
|
private async requestScoped<TReply>(
|
|
@@ -165,10 +162,7 @@ export class ZLinkChannelOutboundOperations {
|
|
|
165
162
|
const traceTerminal = (result: ZLinkRuntimeMessageFlowResult): void => {
|
|
166
163
|
if (terminalRecorded) return;
|
|
167
164
|
terminalRecorded = true;
|
|
168
|
-
this.dispatchServices.beginOutbound(
|
|
169
|
-
ZLinkMessageFlowOutcome.ReplyReceived,
|
|
170
|
-
result
|
|
171
|
-
)?.trace({
|
|
165
|
+
this.dispatchServices.beginOutbound(ZLinkMessageFlowOutcome.ReplyReceived, result)?.trace({
|
|
172
166
|
surface: ZLinkDispatchErrorSurface.Channel,
|
|
173
167
|
messageKind: ZLinkDispatchMessageKind.Request,
|
|
174
168
|
channelName,
|
|
@@ -181,9 +175,14 @@ export class ZLinkChannelOutboundOperations {
|
|
|
181
175
|
};
|
|
182
176
|
try {
|
|
183
177
|
throwIfAborted(signal);
|
|
184
|
-
const dealer = await this.sockets.awaitClientDealerForOutbound(
|
|
178
|
+
const dealer = await this.sockets.awaitClientDealerForOutbound(
|
|
179
|
+
channelName,
|
|
180
|
+
signal,
|
|
181
|
+
deadlineAtMs
|
|
182
|
+
);
|
|
185
183
|
// Binding timeouts are whole milliseconds; rounding down keeps the call's deadline.
|
|
186
|
-
const remainingMs =
|
|
184
|
+
const remainingMs =
|
|
185
|
+
deadlineAtMs === undefined ? undefined : Math.floor(deadlineAtMs - performance.now());
|
|
187
186
|
if (dealer === undefined || (remainingMs !== undefined && remainingMs <= 0)) {
|
|
188
187
|
throw createInternalFrameworkException(
|
|
189
188
|
this.sockets.hasKnownClientServerTargets(channelName)
|
|
@@ -267,9 +266,8 @@ export class ZLinkChannelOutboundOperations {
|
|
|
267
266
|
event: unknown,
|
|
268
267
|
metadata: ReadonlyMap<string, string> = EMPTY_OUTBOUND_METADATA
|
|
269
268
|
): ZLinkSubmitResult {
|
|
270
|
-
return runWithOutboundFlow(
|
|
271
|
-
this.
|
|
272
|
-
() => this.tryPublishScoped(channelName, topic, packetName, event, metadata)
|
|
269
|
+
return runWithOutboundFlow(this.dispatchServices.flowCreationEnabled(), () =>
|
|
270
|
+
this.tryPublishScoped(channelName, topic, packetName, event, metadata)
|
|
273
271
|
);
|
|
274
272
|
}
|
|
275
273
|
|
|
@@ -308,9 +306,8 @@ export class ZLinkChannelOutboundOperations {
|
|
|
308
306
|
signal?: AbortSignal,
|
|
309
307
|
metadata: ReadonlyMap<string, string> = EMPTY_OUTBOUND_METADATA
|
|
310
308
|
): Promise<ZLinkSubmitResult> {
|
|
311
|
-
return runWithOutboundFlow(
|
|
312
|
-
this.
|
|
313
|
-
() => this.publishScoped(channelName, topic, packetName, event, signal, metadata)
|
|
309
|
+
return runWithOutboundFlow(this.dispatchServices.flowCreationEnabled(), () =>
|
|
310
|
+
this.publishScoped(channelName, topic, packetName, event, signal, metadata)
|
|
314
311
|
);
|
|
315
312
|
}
|
|
316
313
|
|
|
@@ -352,9 +349,8 @@ export class ZLinkChannelOutboundOperations {
|
|
|
352
349
|
signal?: AbortSignal,
|
|
353
350
|
metadata: ReadonlyMap<string, string> = EMPTY_OUTBOUND_METADATA
|
|
354
351
|
): Promise<ZLinkSubmitResult> {
|
|
355
|
-
return runWithOutboundFlow(
|
|
356
|
-
this.
|
|
357
|
-
() => this.routeSubmitScoped(routerChannelId, targetNodeRid, packetName, message, signal, metadata)
|
|
352
|
+
return runWithOutboundFlow(this.dispatchServices.flowCreationEnabled(), () =>
|
|
353
|
+
this.routeSubmitScoped(routerChannelId, targetNodeRid, packetName, message, signal, metadata)
|
|
358
354
|
);
|
|
359
355
|
}
|
|
360
356
|
|
|
@@ -426,9 +422,8 @@ export class ZLinkChannelOutboundOperations {
|
|
|
426
422
|
signal?: AbortSignal,
|
|
427
423
|
metadata?: ReadonlyMap<string, string>
|
|
428
424
|
): Promise<TReply> {
|
|
429
|
-
return runWithOutboundFlow(
|
|
430
|
-
this.
|
|
431
|
-
() => this.routeRequestScoped<TReply>(
|
|
425
|
+
return runWithOutboundFlow(this.dispatchServices.flowCreationEnabled(), () =>
|
|
426
|
+
this.routeRequestScoped<TReply>(
|
|
432
427
|
routerChannelId,
|
|
433
428
|
targetNodeRid,
|
|
434
429
|
packetName,
|
|
@@ -455,10 +450,7 @@ export class ZLinkChannelOutboundOperations {
|
|
|
455
450
|
const traceTerminal = (result: ZLinkRuntimeMessageFlowResult): void => {
|
|
456
451
|
if (terminalRecorded) return;
|
|
457
452
|
terminalRecorded = true;
|
|
458
|
-
this.dispatchServices.beginOutbound(
|
|
459
|
-
ZLinkMessageFlowOutcome.ReplyReceived,
|
|
460
|
-
result
|
|
461
|
-
)?.trace({
|
|
453
|
+
this.dispatchServices.beginOutbound(ZLinkMessageFlowOutcome.ReplyReceived, result)?.trace({
|
|
462
454
|
surface: ZLinkDispatchErrorSurface.RouteMeshChannel,
|
|
463
455
|
messageKind: ZLinkDispatchMessageKind.Request,
|
|
464
456
|
channelName: routerChannelId,
|
|
@@ -520,8 +512,8 @@ export class ZLinkChannelOutboundOperations {
|
|
|
520
512
|
traceTerminal(requestTerminalResult(error, signal));
|
|
521
513
|
}
|
|
522
514
|
if (
|
|
523
|
-
this.sockets.routeMemberStatus(routerChannelId, targetNodeRid) === 'disconnected'
|
|
524
|
-
|
|
515
|
+
this.sockets.routeMemberStatus(routerChannelId, targetNodeRid) === 'disconnected' &&
|
|
516
|
+
(isSubmitDeadline(error) || error instanceof ZLinkRouteDisconnectedError)
|
|
525
517
|
) {
|
|
526
518
|
throw createInternalFrameworkException(
|
|
527
519
|
ZLinkFrameworkInternalErrorKind.RouteNotConnected,
|
|
@@ -557,8 +549,10 @@ export function keepChannelRequestAlive<T>(request: Promise<T>): Promise<T> {
|
|
|
557
549
|
}
|
|
558
550
|
|
|
559
551
|
function isSubmitDeadline(error: unknown): boolean {
|
|
560
|
-
return
|
|
561
|
-
|
|
552
|
+
return (
|
|
553
|
+
error instanceof ZLinkFrameworkException &&
|
|
554
|
+
internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.DeadlineExceeded
|
|
555
|
+
);
|
|
562
556
|
}
|
|
563
557
|
|
|
564
558
|
function publishResult(status: ZLinkSubmitStatus): ZLinkSubmitResult {
|
|
@@ -577,7 +571,9 @@ function requestTerminalResult(
|
|
|
577
571
|
}
|
|
578
572
|
|
|
579
573
|
function isRemoteChannelErrorReply(error: unknown): boolean {
|
|
580
|
-
return
|
|
581
|
-
|
|
582
|
-
|
|
574
|
+
return (
|
|
575
|
+
error instanceof ZLinkFrameworkException &&
|
|
576
|
+
'origin' in error &&
|
|
577
|
+
(error as { readonly origin?: unknown }).origin !== undefined
|
|
578
|
+
);
|
|
583
579
|
}
|
|
@@ -8,9 +8,7 @@ import type {
|
|
|
8
8
|
ZLinkBackendReadablePoller,
|
|
9
9
|
ZLinkChannelBackendAdapter
|
|
10
10
|
} from '../backend/contracts';
|
|
11
|
-
import {
|
|
12
|
-
closeMessages
|
|
13
|
-
} from './channel-envelope';
|
|
11
|
+
import { closeMessages } from './channel-envelope';
|
|
14
12
|
import { tryDecodeChannelHeader } from './channel-envelope-inspection';
|
|
15
13
|
// 같은 계약을 두 곳에 두지 않는다 — channel-multipart가 소유한다.
|
|
16
14
|
import type { ZLinkMultipartAsyncSubmitOperation } from './channel-multipart';
|
|
@@ -19,10 +17,7 @@ import {
|
|
|
19
17
|
ZLinkReceiveTaskTracker,
|
|
20
18
|
type ZLinkReceiveTaskErrorReporter
|
|
21
19
|
} from './channel-receive-task-tracker';
|
|
22
|
-
import {
|
|
23
|
-
ApplicationJobQueue,
|
|
24
|
-
type ApplicationJobQueuePermit
|
|
25
|
-
} from '../host/application-job-queue';
|
|
20
|
+
import { ApplicationJobQueue, type ApplicationJobQueuePermit } from '../host/application-job-queue';
|
|
26
21
|
import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
|
|
27
22
|
|
|
28
23
|
// The loop awaits between reads and the signal can abort in that gap. Reading
|
|
@@ -32,7 +27,6 @@ function signalAborted(signal?: AbortSignal): boolean {
|
|
|
32
27
|
return signal?.aborted === true;
|
|
33
28
|
}
|
|
34
29
|
|
|
35
|
-
|
|
36
30
|
interface ZLinkMultipartOperation<TNext> {
|
|
37
31
|
message(message: MessageLike): TNext;
|
|
38
32
|
}
|
|
@@ -127,7 +121,7 @@ export class ZLinkReceiveRoundRobinCoordinator {
|
|
|
127
121
|
}
|
|
128
122
|
|
|
129
123
|
setReady(token: symbol, ready: boolean): void {
|
|
130
|
-
const owner = this.owners.find(candidate => candidate.token === token);
|
|
124
|
+
const owner = this.owners.find((candidate) => candidate.token === token);
|
|
131
125
|
if (owner !== undefined) owner.ready = ready;
|
|
132
126
|
}
|
|
133
127
|
|
|
@@ -141,7 +135,7 @@ export class ZLinkReceiveRoundRobinCoordinator {
|
|
|
141
135
|
|
|
142
136
|
release(token: symbol): void {
|
|
143
137
|
if (this.active !== token) return;
|
|
144
|
-
const index = this.owners.findIndex(owner => owner.token === token);
|
|
138
|
+
const index = this.owners.findIndex((owner) => owner.token === token);
|
|
145
139
|
this.active = undefined;
|
|
146
140
|
if (this.owners.length > 0) this.cursor = (index + 1) % this.owners.length;
|
|
147
141
|
}
|
|
@@ -151,7 +145,7 @@ export class ZLinkReceiveRoundRobinCoordinator {
|
|
|
151
145
|
}
|
|
152
146
|
|
|
153
147
|
unregister(token: symbol): void {
|
|
154
|
-
const index = this.owners.findIndex(owner => owner.token === token);
|
|
148
|
+
const index = this.owners.findIndex((owner) => owner.token === token);
|
|
155
149
|
if (index < 0) return;
|
|
156
150
|
if (this.active === token) this.active = undefined;
|
|
157
151
|
this.owners.splice(index, 1);
|
|
@@ -244,15 +238,16 @@ export class ZLinkChannelReceiveLoop {
|
|
|
244
238
|
|
|
245
239
|
private async runLoop(signal?: AbortSignal): Promise<void> {
|
|
246
240
|
const batch = new ZLinkReceiveBatchBudget();
|
|
247
|
-
const capacitySignal =
|
|
248
|
-
|
|
249
|
-
|
|
241
|
+
const capacitySignal =
|
|
242
|
+
signal === undefined
|
|
243
|
+
? this.capacityStop.signal
|
|
244
|
+
: AbortSignal.any([signal, this.capacityStop.signal]);
|
|
250
245
|
while (!this.isStopped() && signal?.aborted !== true) {
|
|
251
246
|
if (!this.poller.wait(0)) {
|
|
252
247
|
this.roundRobin?.setReady(this.receiveOwner, false);
|
|
253
248
|
this.roundRobin?.release(this.receiveOwner);
|
|
254
249
|
batch.reset();
|
|
255
|
-
if (!await this.poller.waitForReadable(capacitySignal)) break;
|
|
250
|
+
if (!(await this.poller.waitForReadable(capacitySignal))) break;
|
|
256
251
|
continue;
|
|
257
252
|
}
|
|
258
253
|
const applicationJobPermit = await this.acquirePermit(capacitySignal);
|
|
@@ -265,9 +260,10 @@ export class ZLinkChannelReceiveLoop {
|
|
|
265
260
|
await waitReceiveLoopTurn();
|
|
266
261
|
continue;
|
|
267
262
|
}
|
|
268
|
-
const releaseRawReceive =
|
|
269
|
-
|
|
270
|
-
|
|
263
|
+
const releaseRawReceive =
|
|
264
|
+
this.roundRobin === undefined
|
|
265
|
+
? this.rawReceiveReservations.tryAcquire()
|
|
266
|
+
: this.roundRobin.tryAcquireRawReceiveReservation();
|
|
271
267
|
if (releaseRawReceive === undefined) {
|
|
272
268
|
applicationJobPermit.releaseAfterInternalProcessing();
|
|
273
269
|
this.roundRobin?.release(this.receiveOwner);
|
|
@@ -282,7 +278,7 @@ export class ZLinkChannelReceiveLoop {
|
|
|
282
278
|
this.roundRobin?.setReady(this.receiveOwner, false);
|
|
283
279
|
this.roundRobin?.release(this.receiveOwner);
|
|
284
280
|
batch.reset();
|
|
285
|
-
if (!await this.poller.waitForReadable(capacitySignal)) break;
|
|
281
|
+
if (!(await this.poller.waitForReadable(capacitySignal))) break;
|
|
286
282
|
continue;
|
|
287
283
|
}
|
|
288
284
|
const receivedBytes = messageBytes(received.parts);
|
|
@@ -314,12 +310,8 @@ export class ZLinkChannelReceiveLoop {
|
|
|
314
310
|
}
|
|
315
311
|
applicationJobPermit.markApplicationQueued();
|
|
316
312
|
const task = runWithApplicationJobPermit(applicationJobPermit, () =>
|
|
317
|
-
this.dispatchAndClose(
|
|
318
|
-
|
|
319
|
-
signal,
|
|
320
|
-
classification.decodedHeader,
|
|
321
|
-
true
|
|
322
|
-
));
|
|
313
|
+
this.dispatchAndClose(received, signal, classification.decodedHeader, true)
|
|
314
|
+
);
|
|
323
315
|
releaseRawReceive();
|
|
324
316
|
this.inFlight.track(task);
|
|
325
317
|
if (batch.record(receivedBytes)) {
|
|
@@ -350,14 +342,20 @@ export class ZLinkChannelReceiveLoop {
|
|
|
350
342
|
}
|
|
351
343
|
}
|
|
352
344
|
|
|
353
|
-
private async dispatchAndClose(
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
345
|
+
private async dispatchAndClose(
|
|
346
|
+
received: {
|
|
347
|
+
parts: readonly Message[];
|
|
348
|
+
routingId: unknown;
|
|
349
|
+
spotId?: unknown;
|
|
350
|
+
replyToken: unknown | null;
|
|
351
|
+
send?: () => ZLinkMultipartOperation<ZLinkMultipartAsyncSubmitOperation>;
|
|
352
|
+
close(): void;
|
|
353
|
+
},
|
|
354
|
+
signal?: AbortSignal,
|
|
355
|
+
decodedHeader?: ZLinkChannelEnvelopeHeader,
|
|
356
|
+
infrastructureChecked = false,
|
|
357
|
+
releaseRawReceive?: () => void
|
|
358
|
+
): Promise<void> {
|
|
361
359
|
let closeReceived = true;
|
|
362
360
|
try {
|
|
363
361
|
if (!infrastructureChecked) {
|
|
@@ -368,15 +366,10 @@ export class ZLinkChannelReceiveLoop {
|
|
|
368
366
|
}
|
|
369
367
|
decodedHeader = classification.decodedHeader;
|
|
370
368
|
}
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
decodedHeader
|
|
376
|
-
);
|
|
377
|
-
if (consumed === true) {
|
|
378
|
-
closeReceived = false;
|
|
379
|
-
}
|
|
369
|
+
const consumed = await this.dispatcher.dispatch(received, this.router, signal, decodedHeader);
|
|
370
|
+
if (consumed === true) {
|
|
371
|
+
closeReceived = false;
|
|
372
|
+
}
|
|
380
373
|
} finally {
|
|
381
374
|
releaseRawReceive?.();
|
|
382
375
|
if (closeReceived) {
|
|
@@ -395,10 +388,13 @@ export class ZLinkChannelReceiveLoop {
|
|
|
395
388
|
if (this.infrastructureHandler?.(received, this.router) === true) {
|
|
396
389
|
return { kind: 'consumed', closeReceived: true };
|
|
397
390
|
}
|
|
398
|
-
const decodedHeader = tryDecodeChannelHeader(
|
|
391
|
+
const decodedHeader = tryDecodeChannelHeader(
|
|
392
|
+
received.parts,
|
|
393
|
+
this.dispatcher.flowEnabled?.() ?? true
|
|
394
|
+
);
|
|
399
395
|
if (
|
|
400
|
-
decodedHeader === undefined
|
|
401
|
-
|
|
396
|
+
decodedHeader === undefined &&
|
|
397
|
+
this.spotRouteBridge?.handleRouterReceived(
|
|
402
398
|
this.channelName,
|
|
403
399
|
received.routingId as RoutingId,
|
|
404
400
|
0n,
|
|
@@ -464,15 +460,16 @@ export class ZLinkSubscriberReceiveLoop {
|
|
|
464
460
|
|
|
465
461
|
private async runLoop(signal?: AbortSignal): Promise<void> {
|
|
466
462
|
const batch = new ZLinkReceiveBatchBudget();
|
|
467
|
-
const capacitySignal =
|
|
468
|
-
|
|
469
|
-
|
|
463
|
+
const capacitySignal =
|
|
464
|
+
signal === undefined
|
|
465
|
+
? this.capacityStop.signal
|
|
466
|
+
: AbortSignal.any([signal, this.capacityStop.signal]);
|
|
470
467
|
while (!this.isStopped() && signal?.aborted !== true) {
|
|
471
468
|
if (!this.poller.wait(0)) {
|
|
472
469
|
this.roundRobin?.setReady(this.receiveOwner, false);
|
|
473
470
|
this.roundRobin?.release(this.receiveOwner);
|
|
474
471
|
batch.reset();
|
|
475
|
-
if (!await this.poller.waitForReadable(capacitySignal)) break;
|
|
472
|
+
if (!(await this.poller.waitForReadable(capacitySignal))) break;
|
|
476
473
|
continue;
|
|
477
474
|
}
|
|
478
475
|
const applicationJobPermit = await this.acquirePermit(capacitySignal);
|
|
@@ -483,9 +480,10 @@ export class ZLinkSubscriberReceiveLoop {
|
|
|
483
480
|
await waitReceiveLoopTurn();
|
|
484
481
|
continue;
|
|
485
482
|
}
|
|
486
|
-
const releaseRawReceive =
|
|
487
|
-
|
|
488
|
-
|
|
483
|
+
const releaseRawReceive =
|
|
484
|
+
this.roundRobin === undefined
|
|
485
|
+
? this.rawReceiveReservations.tryAcquire()
|
|
486
|
+
: this.roundRobin.tryAcquireRawReceiveReservation();
|
|
489
487
|
if (releaseRawReceive === undefined) {
|
|
490
488
|
applicationJobPermit.releaseAfterInternalProcessing();
|
|
491
489
|
this.roundRobin?.release(this.receiveOwner);
|
|
@@ -501,7 +499,7 @@ export class ZLinkSubscriberReceiveLoop {
|
|
|
501
499
|
this.roundRobin?.setReady(this.receiveOwner, false);
|
|
502
500
|
this.roundRobin?.release(this.receiveOwner);
|
|
503
501
|
batch.reset();
|
|
504
|
-
if (!await this.poller.waitForReadable(capacitySignal)) break;
|
|
502
|
+
if (!(await this.poller.waitForReadable(capacitySignal))) break;
|
|
505
503
|
continue;
|
|
506
504
|
}
|
|
507
505
|
const receivedBytes = messageBytes(topicMessage.parts as readonly Message[]);
|
|
@@ -533,12 +531,8 @@ export class ZLinkSubscriberReceiveLoop {
|
|
|
533
531
|
}
|
|
534
532
|
applicationJobPermit.markApplicationQueued();
|
|
535
533
|
const task = runWithApplicationJobPermit(applicationJobPermit, () =>
|
|
536
|
-
this.dispatchAndClose(
|
|
537
|
-
|
|
538
|
-
signal,
|
|
539
|
-
classification.decodedHeader,
|
|
540
|
-
true
|
|
541
|
-
));
|
|
534
|
+
this.dispatchAndClose(topicMessage, signal, classification.decodedHeader, true)
|
|
535
|
+
);
|
|
542
536
|
releaseRawReceive();
|
|
543
537
|
this.inFlight.track(task);
|
|
544
538
|
if (batch.record(receivedBytes)) {
|
|
@@ -582,7 +576,7 @@ export class ZLinkSubscriberReceiveLoop {
|
|
|
582
576
|
if (classification.kind === 'consumed') return;
|
|
583
577
|
decodedHeader = classification.decodedHeader;
|
|
584
578
|
}
|
|
585
|
-
|
|
579
|
+
await this.dispatcher.dispatch(topicMessage, signal, decodedHeader);
|
|
586
580
|
} finally {
|
|
587
581
|
releaseRawReceive?.();
|
|
588
582
|
closeMessages(topicMessage.parts as readonly Message[]);
|
|
@@ -595,12 +589,11 @@ export class ZLinkSubscriberReceiveLoop {
|
|
|
595
589
|
| { readonly kind: 'consumed' }
|
|
596
590
|
| { readonly kind: 'application'; readonly decodedHeader?: ZLinkChannelEnvelopeHeader } {
|
|
597
591
|
const infrastructureResult = this.infrastructureHandler?.(topicMessage);
|
|
598
|
-
const decodedHeader =
|
|
599
|
-
? infrastructureResult.decodedHeader
|
|
600
|
-
: undefined;
|
|
592
|
+
const decodedHeader =
|
|
593
|
+
typeof infrastructureResult === 'object' ? infrastructureResult.decodedHeader : undefined;
|
|
601
594
|
if (
|
|
602
|
-
infrastructureResult === true
|
|
603
|
-
|
|
595
|
+
infrastructureResult === true ||
|
|
596
|
+
(typeof infrastructureResult === 'object' && infrastructureResult.consumed)
|
|
604
597
|
) {
|
|
605
598
|
return { kind: 'consumed' };
|
|
606
599
|
}
|
|
@@ -657,15 +650,16 @@ export class ZLinkRouteReceiveLoop {
|
|
|
657
650
|
|
|
658
651
|
private async runLoop(signal?: AbortSignal): Promise<void> {
|
|
659
652
|
const batch = new ZLinkReceiveBatchBudget();
|
|
660
|
-
const capacitySignal =
|
|
661
|
-
|
|
662
|
-
|
|
653
|
+
const capacitySignal =
|
|
654
|
+
signal === undefined
|
|
655
|
+
? this.capacityStop.signal
|
|
656
|
+
: AbortSignal.any([signal, this.capacityStop.signal]);
|
|
663
657
|
while (!this.isStopped() && signal?.aborted !== true) {
|
|
664
658
|
if (!this.poller.wait(0)) {
|
|
665
659
|
this.roundRobin?.setReady(this.receiveOwner, false);
|
|
666
660
|
this.roundRobin?.release(this.receiveOwner);
|
|
667
661
|
batch.reset();
|
|
668
|
-
if (!await this.poller.waitForReadable(capacitySignal)) break;
|
|
662
|
+
if (!(await this.poller.waitForReadable(capacitySignal))) break;
|
|
669
663
|
continue;
|
|
670
664
|
}
|
|
671
665
|
this.roundRobin?.setReady(this.receiveOwner, true);
|
|
@@ -673,9 +667,10 @@ export class ZLinkRouteReceiveLoop {
|
|
|
673
667
|
await waitReceiveLoopTurn();
|
|
674
668
|
continue;
|
|
675
669
|
}
|
|
676
|
-
const releaseRawReceive =
|
|
677
|
-
|
|
678
|
-
|
|
670
|
+
const releaseRawReceive =
|
|
671
|
+
this.roundRobin === undefined
|
|
672
|
+
? this.rawReceiveReservations.tryAcquire()
|
|
673
|
+
: this.roundRobin.tryAcquireRawReceiveReservation();
|
|
679
674
|
if (releaseRawReceive === undefined) {
|
|
680
675
|
this.roundRobin?.release(this.receiveOwner);
|
|
681
676
|
await waitReceiveLoopTurn();
|
|
@@ -688,7 +683,7 @@ export class ZLinkRouteReceiveLoop {
|
|
|
688
683
|
this.roundRobin?.setReady(this.receiveOwner, false);
|
|
689
684
|
this.roundRobin?.release(this.receiveOwner);
|
|
690
685
|
batch.reset();
|
|
691
|
-
if (!await this.poller.waitForReadable(capacitySignal)) break;
|
|
686
|
+
if (!(await this.poller.waitForReadable(capacitySignal))) break;
|
|
692
687
|
continue;
|
|
693
688
|
}
|
|
694
689
|
const receivedBytes = messageBytes(received.parts);
|
|
@@ -708,12 +703,14 @@ export class ZLinkRouteReceiveLoop {
|
|
|
708
703
|
// submit() transfers the parts to Core before returning its admission
|
|
709
704
|
// Promise. Track that terminal without serializing the single route
|
|
710
705
|
// receiver; the held reservation bounds pending infrastructure sends.
|
|
711
|
-
this.inFlight.track(
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
706
|
+
this.inFlight.track(
|
|
707
|
+
infrastructure
|
|
708
|
+
.catch((error) => {
|
|
709
|
+
received.close();
|
|
710
|
+
throw error;
|
|
711
|
+
})
|
|
712
|
+
.finally(releaseRawReceive)
|
|
713
|
+
);
|
|
717
714
|
}
|
|
718
715
|
if (batch.record(receivedBytes)) {
|
|
719
716
|
this.roundRobin?.release(this.receiveOwner);
|
|
@@ -741,7 +738,8 @@ export class ZLinkRouteReceiveLoop {
|
|
|
741
738
|
}
|
|
742
739
|
applicationJobPermit.markApplicationQueued();
|
|
743
740
|
const task = runWithApplicationJobPermit(applicationJobPermit, () =>
|
|
744
|
-
this.dispatchAndClose(received, signal, true)
|
|
741
|
+
this.dispatchAndClose(received, signal, true)
|
|
742
|
+
);
|
|
745
743
|
releaseRawReceive();
|
|
746
744
|
this.inFlight.track(task);
|
|
747
745
|
if (batch.record(receivedBytes)) {
|
|
@@ -772,16 +770,21 @@ export class ZLinkRouteReceiveLoop {
|
|
|
772
770
|
}
|
|
773
771
|
}
|
|
774
772
|
|
|
775
|
-
private async dispatchAndClose(
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
773
|
+
private async dispatchAndClose(
|
|
774
|
+
received: {
|
|
775
|
+
parts: readonly Message[];
|
|
776
|
+
routingId: unknown;
|
|
777
|
+
spotId?: unknown;
|
|
778
|
+
replyToken: unknown | null;
|
|
779
|
+
close(): void;
|
|
780
|
+
},
|
|
781
|
+
signal?: AbortSignal,
|
|
782
|
+
infrastructureChecked = false,
|
|
783
|
+
releaseRawReceive?: () => void
|
|
784
|
+
): Promise<void> {
|
|
782
785
|
let closeReceived = true;
|
|
783
|
-
|
|
784
|
-
|
|
786
|
+
try {
|
|
787
|
+
const consumed = await this.dispatcher.dispatch(
|
|
785
788
|
received,
|
|
786
789
|
this.router,
|
|
787
790
|
signal,
|
|
@@ -791,9 +794,9 @@ export class ZLinkRouteReceiveLoop {
|
|
|
791
794
|
if (consumed === true) {
|
|
792
795
|
closeReceived = false;
|
|
793
796
|
}
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
+
} finally {
|
|
798
|
+
releaseRawReceive?.();
|
|
799
|
+
if (closeReceived) {
|
|
797
800
|
received.close();
|
|
798
801
|
}
|
|
799
802
|
}
|
|
@@ -812,13 +815,15 @@ class ZLinkReceiveBatchBudget {
|
|
|
812
815
|
record(bytes: number): boolean {
|
|
813
816
|
this.messages += 1;
|
|
814
817
|
this.bytes += bytes;
|
|
815
|
-
return
|
|
816
|
-
|
|
817
|
-
|
|
818
|
+
return (
|
|
819
|
+
this.messages >= RECEIVE_BATCH_MESSAGE_LIMIT ||
|
|
820
|
+
this.bytes >= RECEIVE_BATCH_BYTE_LIMIT ||
|
|
821
|
+
performance.now() - this.startedAt >= RECEIVE_BATCH_TIME_LIMIT_MS
|
|
822
|
+
);
|
|
818
823
|
}
|
|
819
824
|
|
|
820
825
|
async yieldAndReset(): Promise<void> {
|
|
821
|
-
await new Promise<void>(resolve => setImmediate(resolve));
|
|
826
|
+
await new Promise<void>((resolve) => setImmediate(resolve));
|
|
822
827
|
this.reset();
|
|
823
828
|
}
|
|
824
829
|
|
|
@@ -830,10 +835,9 @@ class ZLinkReceiveBatchBudget {
|
|
|
830
835
|
}
|
|
831
836
|
|
|
832
837
|
function waitReceiveLoopTurn(): Promise<void> {
|
|
833
|
-
return new Promise<void>(resolve => setImmediate(resolve));
|
|
838
|
+
return new Promise<void>((resolve) => setImmediate(resolve));
|
|
834
839
|
}
|
|
835
840
|
|
|
836
|
-
|
|
837
841
|
function messageBytes(parts: readonly Message[]): number {
|
|
838
842
|
return parts.reduce((sum, part) => sum + messagePartBytes(part), 0);
|
|
839
843
|
}
|