@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
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ZLinkObservationLoss,
|
|
3
|
-
ZLinkObservedStatus
|
|
4
|
-
} from '../../contracts';
|
|
1
|
+
import type { ZLinkObservationLoss, ZLinkObservedStatus } from '../../contracts';
|
|
5
2
|
|
|
6
3
|
export const ZLINK_DEFAULT_TERMINAL_OBSERVATION_CAPACITY = 64;
|
|
7
4
|
export const ZLINK_SIGNED_OBSERVATION_LOSS_MAXIMUM = 9_223_372_036_854_775_807n;
|
|
@@ -55,9 +52,7 @@ class RuntimeObservationLossState {
|
|
|
55
52
|
}
|
|
56
53
|
|
|
57
54
|
recordDiscardedTerminal(): void {
|
|
58
|
-
this.discardedTerminal = saturatingObservationLossIncrement(
|
|
59
|
-
this.discardedTerminal
|
|
60
|
-
);
|
|
55
|
+
this.discardedTerminal = saturatingObservationLossIncrement(this.discardedTerminal);
|
|
61
56
|
}
|
|
62
57
|
|
|
63
58
|
snapshot(): ZLinkObservationLoss {
|
|
@@ -74,8 +69,11 @@ class RuntimeObservationLossState {
|
|
|
74
69
|
* dispatcher; they never invoke an iterator continuation directly.
|
|
75
70
|
*/
|
|
76
71
|
export class RuntimeEventQueue<T>
|
|
77
|
-
implements
|
|
78
|
-
|
|
72
|
+
implements
|
|
73
|
+
AsyncIterable<ZLinkObservedStatus<T>>,
|
|
74
|
+
AsyncIterator<ZLinkObservedStatus<T>>,
|
|
75
|
+
RuntimeObservationDispatchTarget
|
|
76
|
+
{
|
|
79
77
|
private readonly intermediateBySource = new Map<unknown, RetainedObservation<T>>();
|
|
80
78
|
private readonly terminalFifo: Array<RetainedObservation<T> | undefined> = [];
|
|
81
79
|
private readonly terminalCountBySource = new Map<unknown, number>();
|
|
@@ -108,7 +106,9 @@ export class RuntimeEventQueue<T>
|
|
|
108
106
|
}
|
|
109
107
|
}
|
|
110
108
|
|
|
111
|
-
[Symbol.asyncIterator](): AsyncIterator<ZLinkObservedStatus<T>> {
|
|
109
|
+
[Symbol.asyncIterator](): AsyncIterator<ZLinkObservedStatus<T>> {
|
|
110
|
+
return this;
|
|
111
|
+
}
|
|
112
112
|
|
|
113
113
|
next(): Promise<IteratorResult<ZLinkObservedStatus<T>>> {
|
|
114
114
|
if (this.waitersCount === 0) {
|
|
@@ -126,7 +126,7 @@ export class RuntimeEventQueue<T>
|
|
|
126
126
|
return Promise.resolve({ done: true, value: undefined });
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
-
return new Promise(resolve => {
|
|
129
|
+
return new Promise((resolve) => {
|
|
130
130
|
this.waiters.push(resolve);
|
|
131
131
|
this.waitersCount += 1;
|
|
132
132
|
if (this.hasRetained() || this.closed || this.completeWhenDrained) {
|
|
@@ -217,10 +217,7 @@ export class RuntimeEventQueue<T>
|
|
|
217
217
|
}
|
|
218
218
|
this.terminalFifo.push(this.retain(value, source));
|
|
219
219
|
this.terminalCount += 1;
|
|
220
|
-
this.terminalCountBySource.set(
|
|
221
|
-
source,
|
|
222
|
-
(this.terminalCountBySource.get(source) ?? 0) + 1
|
|
223
|
-
);
|
|
220
|
+
this.terminalCountBySource.set(source, (this.terminalCountBySource.get(source) ?? 0) + 1);
|
|
224
221
|
this.signalDispatcher();
|
|
225
222
|
}
|
|
226
223
|
|
|
@@ -236,9 +233,8 @@ export class RuntimeEventQueue<T>
|
|
|
236
233
|
const terminal = this.peekTerminal();
|
|
237
234
|
const intermediate = this.oldestIntermediate();
|
|
238
235
|
if (
|
|
239
|
-
terminal !== undefined
|
|
240
|
-
|
|
241
|
-
|| terminal.publishOrdinal <= intermediate.publishOrdinal)
|
|
236
|
+
terminal !== undefined &&
|
|
237
|
+
(intermediate === undefined || terminal.publishOrdinal <= intermediate.publishOrdinal)
|
|
242
238
|
) {
|
|
243
239
|
return this.takeTerminal();
|
|
244
240
|
}
|
|
@@ -248,9 +244,7 @@ export class RuntimeEventQueue<T>
|
|
|
248
244
|
}
|
|
249
245
|
|
|
250
246
|
private peekTerminal(): RetainedObservation<T> | undefined {
|
|
251
|
-
return this.terminalCount === 0
|
|
252
|
-
? undefined
|
|
253
|
-
: this.terminalFifo[this.terminalHead];
|
|
247
|
+
return this.terminalCount === 0 ? undefined : this.terminalFifo[this.terminalHead];
|
|
254
248
|
}
|
|
255
249
|
|
|
256
250
|
private oldestIntermediate(): RetainedObservation<T> | undefined {
|
|
@@ -297,10 +291,7 @@ export class RuntimeEventQueue<T>
|
|
|
297
291
|
if (this.terminalCount === 0) {
|
|
298
292
|
this.terminalFifo.length = 0;
|
|
299
293
|
this.terminalHead = 0;
|
|
300
|
-
} else if (
|
|
301
|
-
this.terminalHead >= 1024
|
|
302
|
-
&& this.terminalHead * 2 >= this.terminalFifo.length
|
|
303
|
-
) {
|
|
294
|
+
} else if (this.terminalHead >= 1024 && this.terminalHead * 2 >= this.terminalFifo.length) {
|
|
304
295
|
this.terminalFifo.splice(0, this.terminalHead);
|
|
305
296
|
this.terminalHead = 0;
|
|
306
297
|
}
|
|
@@ -333,9 +324,7 @@ export class RuntimeEventQueue<T>
|
|
|
333
324
|
return { status, loss: this.loss.snapshot() };
|
|
334
325
|
}
|
|
335
326
|
|
|
336
|
-
private takeWaiter():
|
|
337
|
-
| ((result: IteratorResult<ZLinkObservedStatus<T>>) => void)
|
|
338
|
-
| undefined {
|
|
327
|
+
private takeWaiter(): ((result: IteratorResult<ZLinkObservedStatus<T>>) => void) | undefined {
|
|
339
328
|
if (this.waitersCount === 0) return undefined;
|
|
340
329
|
const waiter = this.waiters[this.waitersHead];
|
|
341
330
|
this.waiters[this.waitersHead] = undefined;
|
|
@@ -39,8 +39,7 @@ export class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRunt
|
|
|
39
39
|
|
|
40
40
|
constructor(
|
|
41
41
|
private readonly runtime: RuntimeAccessor,
|
|
42
|
-
private readonly hostState: HostStateAccessor =
|
|
43
|
-
() => ZLinkFrameworkRuntimeState.Serving
|
|
42
|
+
private readonly hostState: HostStateAccessor = () => ZLinkFrameworkRuntimeState.Serving
|
|
44
43
|
) {}
|
|
45
44
|
|
|
46
45
|
snapshot(channelName: string): ZLinkClientServerStatus {
|
|
@@ -50,23 +49,30 @@ export class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRunt
|
|
|
50
49
|
private snapshotCore(channelName: string): ZLinkClientServerStatus {
|
|
51
50
|
const topology = this.requireRuntime().clientServerTopology(channelName);
|
|
52
51
|
if (topology.localRole === undefined) {
|
|
53
|
-
throw new ZLinkConfigurationException(
|
|
52
|
+
throw new ZLinkConfigurationException(
|
|
53
|
+
`ClientServer channel '${channelName}' is not registered.`
|
|
54
|
+
);
|
|
54
55
|
}
|
|
55
56
|
const targets = topology.descriptors.map((descriptor): ZLinkClientServerTargetStatus => ({
|
|
56
57
|
nodeRid: descriptor.serverRoutingId,
|
|
57
58
|
weight: descriptor.weight,
|
|
58
|
-
state:
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
59
|
+
state:
|
|
60
|
+
descriptor.state === 'serving'
|
|
61
|
+
? ZLinkPeerState.Ready
|
|
62
|
+
: descriptor.state === 'retiring'
|
|
63
|
+
? ZLinkPeerState.Draining
|
|
64
|
+
: descriptor.state === 'preparing'
|
|
65
|
+
? ZLinkPeerState.Connecting
|
|
66
|
+
: ZLinkPeerState.NotConnected,
|
|
67
|
+
unavailableReason:
|
|
68
|
+
descriptor.state === 'serving' && descriptor.weight > 0
|
|
69
|
+
? undefined
|
|
70
|
+
: descriptor.state === 'retiring'
|
|
71
|
+
? ZLinkTopologyReason.Draining
|
|
72
|
+
: ZLinkTopologyReason.NoReadyTarget
|
|
67
73
|
}));
|
|
68
74
|
const readyTargetCount = targets.filter(
|
|
69
|
-
target => target.state === ZLinkPeerState.Ready && target.weight > 0
|
|
75
|
+
(target) => target.state === ZLinkPeerState.Ready && target.weight > 0
|
|
70
76
|
).length;
|
|
71
77
|
const hostState = this.hostState();
|
|
72
78
|
const isReady = topologyRuntimeIsReady(hostState, readyTargetCount);
|
|
@@ -110,13 +116,16 @@ export class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRunt
|
|
|
110
116
|
} catch {
|
|
111
117
|
// The last complete projection remains valid after native teardown.
|
|
112
118
|
}
|
|
113
|
-
queue.seal(
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
119
|
+
queue.seal(
|
|
120
|
+
{
|
|
121
|
+
...current,
|
|
122
|
+
state: ZLinkTopologyState.Stopped,
|
|
123
|
+
isReady: false,
|
|
124
|
+
sequence: this.sequence,
|
|
125
|
+
observedAt: new Date()
|
|
126
|
+
},
|
|
127
|
+
channelName
|
|
128
|
+
);
|
|
120
129
|
}
|
|
121
130
|
};
|
|
122
131
|
this.hostObservers.add(hostObserver);
|
|
@@ -154,7 +163,8 @@ export class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRunt
|
|
|
154
163
|
|
|
155
164
|
private requireRuntime(): ZLinkChannelRuntimeManager {
|
|
156
165
|
const runtime = this.runtime();
|
|
157
|
-
if (runtime === undefined)
|
|
166
|
+
if (runtime === undefined)
|
|
167
|
+
throw new ZLinkConfigurationException('ClientServer runtime has not started.');
|
|
158
168
|
return runtime;
|
|
159
169
|
}
|
|
160
170
|
}
|
|
@@ -165,8 +175,7 @@ export class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
|
|
|
165
175
|
|
|
166
176
|
constructor(
|
|
167
177
|
private readonly runtime: RuntimeAccessor,
|
|
168
|
-
private readonly hostState: HostStateAccessor =
|
|
169
|
-
() => ZLinkFrameworkRuntimeState.Serving
|
|
178
|
+
private readonly hostState: HostStateAccessor = () => ZLinkFrameworkRuntimeState.Serving
|
|
170
179
|
) {}
|
|
171
180
|
|
|
172
181
|
snapshot(channelName: string): ZLinkFanoutStatus {
|
|
@@ -174,21 +183,27 @@ export class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
|
|
|
174
183
|
}
|
|
175
184
|
|
|
176
185
|
private snapshotCore(channelName: string): ZLinkFanoutStatus {
|
|
177
|
-
const publishers = this.requireRuntime()
|
|
178
|
-
.
|
|
186
|
+
const publishers = this.requireRuntime()
|
|
187
|
+
.fanoutTopology(channelName)
|
|
188
|
+
.descriptors.map((descriptor): ZLinkPeerStatus => ({
|
|
179
189
|
nodeRid: descriptor.publisherRoutingId,
|
|
180
|
-
state:
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
190
|
+
state:
|
|
191
|
+
descriptor.state === 'serving'
|
|
192
|
+
? ZLinkPeerState.Ready
|
|
193
|
+
: descriptor.state === 'retiring'
|
|
194
|
+
? ZLinkPeerState.Draining
|
|
195
|
+
: descriptor.state === 'preparing'
|
|
196
|
+
? ZLinkPeerState.Connecting
|
|
197
|
+
: ZLinkPeerState.NotConnected,
|
|
198
|
+
unavailableReason:
|
|
199
|
+
descriptor.state === 'serving'
|
|
200
|
+
? undefined
|
|
201
|
+
: descriptor.state === 'retiring'
|
|
202
|
+
? ZLinkTopologyReason.Draining
|
|
203
|
+
: ZLinkTopologyReason.NoReadyTarget
|
|
189
204
|
}));
|
|
190
205
|
const readyPublisherCount = publishers.filter(
|
|
191
|
-
publisher => publisher.state === ZLinkPeerState.Ready
|
|
206
|
+
(publisher) => publisher.state === ZLinkPeerState.Ready
|
|
192
207
|
).length;
|
|
193
208
|
const hostState = this.hostState();
|
|
194
209
|
const hostReady = runtimeStateIsReady(hostState);
|
|
@@ -235,13 +250,16 @@ export class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
|
|
|
235
250
|
} catch {
|
|
236
251
|
// The last complete projection remains valid after native teardown.
|
|
237
252
|
}
|
|
238
|
-
queue.seal(
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
253
|
+
queue.seal(
|
|
254
|
+
{
|
|
255
|
+
...current,
|
|
256
|
+
state: ZLinkTopologyState.Stopped,
|
|
257
|
+
isReady: false,
|
|
258
|
+
sequence: this.sequence,
|
|
259
|
+
observedAt: new Date()
|
|
260
|
+
},
|
|
261
|
+
channelName
|
|
262
|
+
);
|
|
245
263
|
}
|
|
246
264
|
};
|
|
247
265
|
this.hostObservers.add(hostObserver);
|
|
@@ -275,7 +293,8 @@ export class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
|
|
|
275
293
|
|
|
276
294
|
private requireRuntime(): ZLinkChannelRuntimeManager {
|
|
277
295
|
const runtime = this.runtime();
|
|
278
|
-
if (runtime === undefined)
|
|
296
|
+
if (runtime === undefined)
|
|
297
|
+
throw new ZLinkConfigurationException('Fanout runtime has not started.');
|
|
279
298
|
return runtime;
|
|
280
299
|
}
|
|
281
300
|
}
|
|
@@ -32,10 +32,7 @@ export type ZLinkExecutionArea = 'application' | 'infrastructure';
|
|
|
32
32
|
|
|
33
33
|
const executionAreaStorage = new AsyncLocalStorage<ZLinkExecutionArea>();
|
|
34
34
|
|
|
35
|
-
export function runZLinkExecutionArea<T>(
|
|
36
|
-
area: ZLinkExecutionArea,
|
|
37
|
-
operation: () => T
|
|
38
|
-
): T {
|
|
35
|
+
export function runZLinkExecutionArea<T>(area: ZLinkExecutionArea, operation: () => T): T {
|
|
39
36
|
return executionAreaStorage.run(area, operation);
|
|
40
37
|
}
|
|
41
38
|
|
|
@@ -140,7 +137,10 @@ export class ZLinkSpotSerialTurn {
|
|
|
140
137
|
return;
|
|
141
138
|
}
|
|
142
139
|
await Promise.race([
|
|
143
|
-
owner.then(
|
|
140
|
+
owner.then(
|
|
141
|
+
() => undefined,
|
|
142
|
+
() => undefined
|
|
143
|
+
),
|
|
144
144
|
this.suspended
|
|
145
145
|
]);
|
|
146
146
|
}
|
|
@@ -169,12 +169,8 @@ export function runZLinkSpotSerialTurn<T>(
|
|
|
169
169
|
turn: ZLinkSpotSerialTurn,
|
|
170
170
|
operation: () => Promise<T> | T
|
|
171
171
|
): Promise<T> {
|
|
172
|
-
return runZLinkExecutionArea(
|
|
173
|
-
|
|
174
|
-
() => spotSerialTurnStorage.run(
|
|
175
|
-
{ executor, turnId, turn },
|
|
176
|
-
async () => operation()
|
|
177
|
-
)
|
|
172
|
+
return runZLinkExecutionArea('application', () =>
|
|
173
|
+
spotSerialTurnStorage.run({ executor, turnId, turn }, async () => operation())
|
|
178
174
|
);
|
|
179
175
|
}
|
|
180
176
|
|
|
@@ -194,18 +190,13 @@ export function captureZLinkSpotSerialTurn(
|
|
|
194
190
|
/** Returns the physical Spot owner only while its captured turn owns the gate. */
|
|
195
191
|
export function currentZLinkSpotSerialSourceId(): unknown {
|
|
196
192
|
const current = spotSerialTurnStorage.getStore();
|
|
197
|
-
if (
|
|
198
|
-
current === undefined
|
|
199
|
-
|| !current.executor.isActiveTurn(current.turn, current.turnId)
|
|
200
|
-
) {
|
|
193
|
+
if (current === undefined || !current.executor.isActiveTurn(current.turn, current.turnId)) {
|
|
201
194
|
return undefined;
|
|
202
195
|
}
|
|
203
196
|
return current.executor.sourceSpotId;
|
|
204
197
|
}
|
|
205
198
|
|
|
206
|
-
export function requireZLinkYieldTurn(
|
|
207
|
-
capturedTurn?: ZLinkSpotSerialTurn
|
|
208
|
-
): ZLinkSpotSerialTurn {
|
|
199
|
+
export function requireZLinkYieldTurn(capturedTurn?: ZLinkSpotSerialTurn): ZLinkSpotSerialTurn {
|
|
209
200
|
const turn = capturedTurn ?? captureZLinkSpotSerialTurn();
|
|
210
201
|
if (turn === undefined || !turn.yieldAllowed) {
|
|
211
202
|
throw new ZLinkConfigurationException(
|
|
@@ -227,15 +218,19 @@ export function captureZLinkExecutionTurn(): ZLinkCapturedExecutionTurn | undefi
|
|
|
227
218
|
}
|
|
228
219
|
return {
|
|
229
220
|
yieldPromise: <T>(pending: Promise<T>) => current.turn.yieldPromise(pending),
|
|
230
|
-
post: (callback: () => void) => {
|
|
221
|
+
post: (callback: () => void) => {
|
|
222
|
+
void current.executor.post(callback);
|
|
223
|
+
}
|
|
231
224
|
};
|
|
232
225
|
}
|
|
233
226
|
|
|
234
227
|
export function isCurrentZLinkSpotSerialTurn(executor: ZLinkSpotSerialTurnExecutorLike): boolean {
|
|
235
228
|
const current = spotSerialTurnStorage.getStore();
|
|
236
|
-
return
|
|
237
|
-
|
|
238
|
-
|
|
229
|
+
return (
|
|
230
|
+
current !== undefined &&
|
|
231
|
+
current.executor === executor &&
|
|
232
|
+
executor.isActiveTurn(current.turn, current.turnId)
|
|
233
|
+
);
|
|
239
234
|
}
|
|
240
235
|
|
|
241
236
|
export interface ZLinkExecutionBarrierSeal {
|
|
@@ -306,10 +301,7 @@ export class ZLinkExecutionBarrier {
|
|
|
306
301
|
return seal;
|
|
307
302
|
}
|
|
308
303
|
|
|
309
|
-
async waitForQuiescence(
|
|
310
|
-
seal: ZLinkExecutionBarrierSeal,
|
|
311
|
-
signal?: AbortSignal
|
|
312
|
-
): Promise<void> {
|
|
304
|
+
async waitForQuiescence(seal: ZLinkExecutionBarrierSeal, signal?: AbortSignal): Promise<void> {
|
|
313
305
|
this.requireCurrent(seal);
|
|
314
306
|
if (this.activeClaims === 0) return;
|
|
315
307
|
if (signal?.aborted === true) throw signal.reason;
|
|
@@ -12,10 +12,11 @@ export interface ZLinkSerialSchedulerOptions {
|
|
|
12
12
|
readonly lifecycleBurstLimit?: number;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export const ZLINK_DEFAULT_SERIAL_SCHEDULER_OPTIONS: Required<ZLinkSerialSchedulerOptions> =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
export const ZLINK_DEFAULT_SERIAL_SCHEDULER_OPTIONS: Required<ZLinkSerialSchedulerOptions> =
|
|
16
|
+
Object.freeze({
|
|
17
|
+
ownerTimeBudget: 10,
|
|
18
|
+
lifecycleBurstLimit: 8
|
|
19
|
+
});
|
|
19
20
|
|
|
20
21
|
export interface ZLinkSerialWorkRecord<T> {
|
|
21
22
|
readonly acceptedSequence: bigint;
|
|
@@ -102,10 +103,7 @@ export class ZLinkSerialExecutionQueue {
|
|
|
102
103
|
/**
|
|
103
104
|
* Enqueues a continuation for an already-admitted owner turn.
|
|
104
105
|
*/
|
|
105
|
-
submitContinuation<T>(
|
|
106
|
-
operation: () => Promise<T> | T,
|
|
107
|
-
context?: unknown
|
|
108
|
-
): Promise<T> {
|
|
106
|
+
submitContinuation<T>(operation: () => Promise<T> | T, context?: unknown): Promise<T> {
|
|
109
107
|
try {
|
|
110
108
|
return this.admit(operation, { lane: 'application' }, context);
|
|
111
109
|
} catch (error) {
|
|
@@ -125,12 +123,7 @@ export class ZLinkSerialExecutionQueue {
|
|
|
125
123
|
context?: unknown,
|
|
126
124
|
preparation?: ZLinkSerialWorkPreparation
|
|
127
125
|
): Promise<T> {
|
|
128
|
-
return this.admit(
|
|
129
|
-
operation,
|
|
130
|
-
{ ...options, lane: 'application' },
|
|
131
|
-
context,
|
|
132
|
-
preparation
|
|
133
|
-
);
|
|
126
|
+
return this.admit(operation, { ...options, lane: 'application' }, context, preparation);
|
|
134
127
|
}
|
|
135
128
|
|
|
136
129
|
/**
|
|
@@ -160,14 +153,14 @@ export class ZLinkSerialExecutionQueue {
|
|
|
160
153
|
}
|
|
161
154
|
|
|
162
155
|
get hasPendingWork(): boolean {
|
|
163
|
-
return
|
|
164
|
-
|| this.application.records.length > 0
|
|
165
|
-
|
|
156
|
+
return (
|
|
157
|
+
this.draining || this.application.records.length > 0 || this.lifecycle.records.length > 0
|
|
158
|
+
);
|
|
166
159
|
}
|
|
167
160
|
|
|
168
161
|
whenIdle(): Promise<void> {
|
|
169
162
|
if (!this.hasPendingWork) return Promise.resolve();
|
|
170
|
-
return new Promise(resolve => this.idleWaiters.push(resolve));
|
|
163
|
+
return new Promise((resolve) => this.idleWaiters.push(resolve));
|
|
171
164
|
}
|
|
172
165
|
|
|
173
166
|
/** Stops new submissions while allowing the accepted FIFO to finish. */
|
|
@@ -257,8 +250,10 @@ export class ZLinkSerialExecutionQueue {
|
|
|
257
250
|
const record = selection.record;
|
|
258
251
|
if (selection.lane === 'lifecycle') {
|
|
259
252
|
const applicationHead = this.application.records[0]!;
|
|
260
|
-
if (
|
|
261
|
-
|
|
253
|
+
if (
|
|
254
|
+
this.application.records.length > 0 &&
|
|
255
|
+
!this.cancelPreparationForRearbitration(applicationHead)
|
|
256
|
+
) {
|
|
262
257
|
waitingForPreparation = true;
|
|
263
258
|
break;
|
|
264
259
|
}
|
|
@@ -268,8 +263,7 @@ export class ZLinkSerialExecutionQueue {
|
|
|
268
263
|
waitingForPreparation = true;
|
|
269
264
|
break;
|
|
270
265
|
}
|
|
271
|
-
if (record.preparationState === 'pending'
|
|
272
|
-
|| record.preparationState === 'canceling') {
|
|
266
|
+
if (record.preparationState === 'pending' || record.preparationState === 'canceling') {
|
|
273
267
|
waitingForPreparation = true;
|
|
274
268
|
break;
|
|
275
269
|
}
|
|
@@ -295,8 +289,10 @@ export class ZLinkSerialExecutionQueue {
|
|
|
295
289
|
} finally {
|
|
296
290
|
this.draining = false;
|
|
297
291
|
this.claimStartedAt = undefined;
|
|
298
|
-
if (
|
|
299
|
-
|
|
292
|
+
if (
|
|
293
|
+
!waitingForPreparation &&
|
|
294
|
+
(this.application.records.length > 0 || this.lifecycle.records.length > 0)
|
|
295
|
+
) {
|
|
300
296
|
this.scheduleDrain();
|
|
301
297
|
} else {
|
|
302
298
|
if (this.application.records.length === 0 && this.lifecycle.records.length === 0) {
|
|
@@ -306,10 +302,12 @@ export class ZLinkSerialExecutionQueue {
|
|
|
306
302
|
}
|
|
307
303
|
}
|
|
308
304
|
|
|
309
|
-
private selectNext():
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
305
|
+
private selectNext():
|
|
306
|
+
| {
|
|
307
|
+
readonly lane: ZLinkSerialWorkLane;
|
|
308
|
+
readonly record: SerialWorkRecord<unknown>;
|
|
309
|
+
}
|
|
310
|
+
| undefined {
|
|
313
311
|
const applicationReady = this.application.records.length > 0;
|
|
314
312
|
const lifecycleReady = this.lifecycle.records.length > 0;
|
|
315
313
|
if (!applicationReady && !lifecycleReady) return undefined;
|
|
@@ -329,9 +327,7 @@ export class ZLinkSerialExecutionQueue {
|
|
|
329
327
|
readonly lane: ZLinkSerialWorkLane;
|
|
330
328
|
readonly record: SerialWorkRecord<unknown>;
|
|
331
329
|
}): ZLinkSerialWorkRecord<unknown> {
|
|
332
|
-
const record = selection.lane === 'lifecycle'
|
|
333
|
-
? this.takeLifecycle()
|
|
334
|
-
: this.takeApplication();
|
|
330
|
+
const record = selection.lane === 'lifecycle' ? this.takeLifecycle() : this.takeApplication();
|
|
335
331
|
if (record !== selection.record) {
|
|
336
332
|
throw new Error('The selected serial work record changed before owner claim.');
|
|
337
333
|
}
|
|
@@ -340,10 +336,7 @@ export class ZLinkSerialExecutionQueue {
|
|
|
340
336
|
|
|
341
337
|
private takeLifecycle(): ZLinkSerialWorkRecord<unknown> {
|
|
342
338
|
this.lifecycleStreak += 1;
|
|
343
|
-
if (
|
|
344
|
-
this.application.records.length > 0
|
|
345
|
-
&& this.lifecycleStreak >= this.lifecycleBurstLimit
|
|
346
|
-
) {
|
|
339
|
+
if (this.application.records.length > 0 && this.lifecycleStreak >= this.lifecycleBurstLimit) {
|
|
347
340
|
this.lifecycleDebt = true;
|
|
348
341
|
}
|
|
349
342
|
return this.lifecycle.records.shift()!;
|
|
@@ -375,7 +368,7 @@ export class ZLinkSerialExecutionQueue {
|
|
|
375
368
|
record.preparationController = undefined;
|
|
376
369
|
this.scheduleDrain();
|
|
377
370
|
},
|
|
378
|
-
error => {
|
|
371
|
+
(error) => {
|
|
379
372
|
if (record.preparationState === 'canceling' || controller.signal.aborted) {
|
|
380
373
|
preparation.cancel();
|
|
381
374
|
record.preparationState = 'idle';
|
|
@@ -390,9 +383,7 @@ export class ZLinkSerialExecutionQueue {
|
|
|
390
383
|
}
|
|
391
384
|
|
|
392
385
|
/** Returns false while an outstanding readiness attempt is being canceled. */
|
|
393
|
-
private cancelPreparationForRearbitration(
|
|
394
|
-
record: SerialWorkRecord<unknown>
|
|
395
|
-
): boolean {
|
|
386
|
+
private cancelPreparationForRearbitration(record: SerialWorkRecord<unknown>): boolean {
|
|
396
387
|
if (record.preparation === undefined || record.preparationState === 'idle') return true;
|
|
397
388
|
if (record.preparationState === 'ready') {
|
|
398
389
|
record.preparation.cancel();
|
|
@@ -438,5 +429,5 @@ function validateNonNegative(value: number, field: string): void {
|
|
|
438
429
|
}
|
|
439
430
|
|
|
440
431
|
function macrotaskBoundary(): Promise<void> {
|
|
441
|
-
return new Promise(resolve => setImmediate(resolve));
|
|
432
|
+
return new Promise((resolve) => setImmediate(resolve));
|
|
442
433
|
}
|
|
@@ -66,8 +66,8 @@ export class ZLinkStateLane {
|
|
|
66
66
|
throwIfReentrant(): void {
|
|
67
67
|
if (this.isOnLane) {
|
|
68
68
|
throw new Error(
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
"This code already runs on the state lane it is trying to enter. Call the component's " +
|
|
70
|
+
'private state method directly instead of re-entering its public surface.'
|
|
71
71
|
);
|
|
72
72
|
}
|
|
73
73
|
}
|