@zlink-systems/framework 0.26.0 → 0.27.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/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +83 -105
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +2 -0
- package/dist/runtime/admission.js +7 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +6 -23
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -8
- package/dist/runtime/channels/channel-clients.js +68 -52
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -10
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.js +5 -2
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +248 -174
- package/dist/runtime/channels/channel-transports.d.ts +11 -17
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +130 -72
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +14 -13
- package/dist/runtime/host/index.js +190 -157
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +7 -20
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +9 -8
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +11 -1
- package/dist/runtime/streams/index.d.ts +14 -15
- package/dist/runtime/streams/index.js +20 -21
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +13 -29
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -85
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -23
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +6 -2
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +301 -192
- package/src/runtime/channels/channel-transports.ts +161 -112
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +172 -91
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +180 -260
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +327 -296
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +8 -41
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +45 -23
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +21 -1
- package/src/runtime/streams/index.ts +76 -64
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -18,7 +18,26 @@ import {
|
|
|
18
18
|
type ZLinkReceiveTaskErrorReporter
|
|
19
19
|
} from './channel-receive-task-tracker';
|
|
20
20
|
import { ApplicationJobQueue, type ApplicationJobQueuePermit } from '../host/application-job-queue';
|
|
21
|
-
import {
|
|
21
|
+
import {
|
|
22
|
+
bindApplicationJobPermit,
|
|
23
|
+
runWithApplicationJobPermit
|
|
24
|
+
} from '../application-jobs/application-job-queue-scope';
|
|
25
|
+
import {
|
|
26
|
+
ZLinkSerialExecutionQueue,
|
|
27
|
+
type ZLinkSerialWorkRecord
|
|
28
|
+
} from '../execution/serial-execution-queue';
|
|
29
|
+
|
|
30
|
+
export function createChannelApplicationDispatchQueue(): ZLinkSerialExecutionQueue {
|
|
31
|
+
return new ZLinkSerialExecutionQueue(async (record: ZLinkSerialWorkRecord<unknown>) => {
|
|
32
|
+
try {
|
|
33
|
+
record.resolve(await record.operation());
|
|
34
|
+
} catch (error) {
|
|
35
|
+
record.reject(error);
|
|
36
|
+
} finally {
|
|
37
|
+
record.release();
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
22
41
|
|
|
23
42
|
// The loop awaits between reads and the signal can abort in that gap. Reading
|
|
24
43
|
// through a function keeps the later check honest; an inline read stays
|
|
@@ -212,7 +231,8 @@ export class ZLinkChannelReceiveLoop {
|
|
|
212
231
|
private readonly poller: ZLinkBackendReadablePoller,
|
|
213
232
|
private readonly applicationJobQueue: ApplicationJobQueue,
|
|
214
233
|
reportError?: ZLinkReceiveTaskErrorReporter,
|
|
215
|
-
private readonly roundRobin?: ZLinkReceiveRoundRobinCoordinator
|
|
234
|
+
private readonly roundRobin?: ZLinkReceiveRoundRobinCoordinator,
|
|
235
|
+
private readonly applicationDispatchQueue = createChannelApplicationDispatchQueue()
|
|
216
236
|
) {
|
|
217
237
|
this.inFlight = new ZLinkReceiveTaskTracker(reportError);
|
|
218
238
|
this.receiveOwner = roundRobin?.register() ?? Symbol('channel-receive-owner');
|
|
@@ -310,7 +330,11 @@ export class ZLinkChannelReceiveLoop {
|
|
|
310
330
|
}
|
|
311
331
|
applicationJobPermit.markApplicationQueued();
|
|
312
332
|
const task = runWithApplicationJobPermit(applicationJobPermit, () =>
|
|
313
|
-
this.
|
|
333
|
+
this.applicationDispatchQueue.submitPreAdmitted(
|
|
334
|
+
bindApplicationJobPermit(() =>
|
|
335
|
+
this.dispatchAndClose(received, signal, classification.decodedHeader, true)
|
|
336
|
+
)
|
|
337
|
+
)
|
|
314
338
|
);
|
|
315
339
|
releaseRawReceive();
|
|
316
340
|
this.inFlight.track(task);
|
|
@@ -431,7 +455,8 @@ export class ZLinkSubscriberReceiveLoop {
|
|
|
431
455
|
topicMessage: ReturnType<ZLinkChannelBackendAdapter['createTopicMessage']>
|
|
432
456
|
) => boolean | ZLinkSubscriberInfrastructureResult,
|
|
433
457
|
private readonly roundRobin?: ZLinkReceiveRoundRobinCoordinator,
|
|
434
|
-
reportError?: ZLinkReceiveTaskErrorReporter
|
|
458
|
+
reportError?: ZLinkReceiveTaskErrorReporter,
|
|
459
|
+
private readonly applicationDispatchQueue = createChannelApplicationDispatchQueue()
|
|
435
460
|
) {
|
|
436
461
|
this.inFlight = new ZLinkReceiveTaskTracker(reportError);
|
|
437
462
|
this.poller = adapter.createReadablePoller(subscriber);
|
|
@@ -531,7 +556,11 @@ export class ZLinkSubscriberReceiveLoop {
|
|
|
531
556
|
}
|
|
532
557
|
applicationJobPermit.markApplicationQueued();
|
|
533
558
|
const task = runWithApplicationJobPermit(applicationJobPermit, () =>
|
|
534
|
-
this.
|
|
559
|
+
this.applicationDispatchQueue.submitPreAdmitted(
|
|
560
|
+
bindApplicationJobPermit(() =>
|
|
561
|
+
this.dispatchAndClose(topicMessage, signal, classification.decodedHeader, true)
|
|
562
|
+
)
|
|
563
|
+
)
|
|
535
564
|
);
|
|
536
565
|
releaseRawReceive();
|
|
537
566
|
this.inFlight.track(task);
|
|
@@ -624,7 +653,8 @@ export class ZLinkRouteReceiveLoop {
|
|
|
624
653
|
private readonly poller: ZLinkBackendReadablePoller,
|
|
625
654
|
private readonly applicationJobQueue: ApplicationJobQueue,
|
|
626
655
|
private readonly roundRobin?: ZLinkReceiveRoundRobinCoordinator,
|
|
627
|
-
reportError?: ZLinkReceiveTaskErrorReporter
|
|
656
|
+
reportError?: ZLinkReceiveTaskErrorReporter,
|
|
657
|
+
private readonly applicationDispatchQueue = createChannelApplicationDispatchQueue()
|
|
628
658
|
) {
|
|
629
659
|
this.inFlight = new ZLinkReceiveTaskTracker(reportError);
|
|
630
660
|
this.receiveOwner = roundRobin?.register() ?? Symbol('route-receive-owner');
|
|
@@ -738,7 +768,9 @@ export class ZLinkRouteReceiveLoop {
|
|
|
738
768
|
}
|
|
739
769
|
applicationJobPermit.markApplicationQueued();
|
|
740
770
|
const task = runWithApplicationJobPermit(applicationJobPermit, () =>
|
|
741
|
-
this.
|
|
771
|
+
this.applicationDispatchQueue.submitPreAdmitted(
|
|
772
|
+
bindApplicationJobPermit(() => this.dispatchAndClose(received, signal, true))
|
|
773
|
+
)
|
|
742
774
|
);
|
|
743
775
|
releaseRawReceive();
|
|
744
776
|
this.inFlight.track(task);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RuntimeDisposal } from '../disposal';
|
|
1
2
|
import type { ZLinkLocationOptionOverrides } from '../../contracts/Locations/Options';
|
|
2
3
|
import type { ZLinkRequestHandler, ZLinkSendHandler } from '../../contracts/Handlers';
|
|
3
4
|
import { ZLinkConfigurationException } from '../configuration';
|
|
@@ -31,6 +32,7 @@ import {
|
|
|
31
32
|
type ZLinkRouteRuntimeSendHandler
|
|
32
33
|
} from './channel-dispatchers';
|
|
33
34
|
import {
|
|
35
|
+
createChannelApplicationDispatchQueue,
|
|
34
36
|
ZLinkChannelReceiveLoop,
|
|
35
37
|
ZLinkReceiveRoundRobinCoordinator,
|
|
36
38
|
ZLinkRouteReceiveLoop,
|
|
@@ -50,6 +52,7 @@ import {
|
|
|
50
52
|
import type { ApplicationJobQueue } from '../host/application-job-queue';
|
|
51
53
|
import { AsyncResource } from 'node:async_hooks';
|
|
52
54
|
import { ZLinkStateLane } from '../execution/state-lane';
|
|
55
|
+
import { ZLinkSerialExecutionQueue } from '../execution/serial-execution-queue';
|
|
53
56
|
|
|
54
57
|
const detachedStateLaneResource = new AsyncResource('zlink:channel-runtime-lifecycle');
|
|
55
58
|
|
|
@@ -82,6 +85,7 @@ interface ChannelRuntimeDisposeWork {
|
|
|
82
85
|
readonly subscriberLoops: readonly ZLinkSubscriberReceiveLoop[];
|
|
83
86
|
readonly manualTransitions: readonly Promise<void>[];
|
|
84
87
|
readonly routeLoops: readonly { stop(): Promise<void> }[];
|
|
88
|
+
readonly applicationDispatchQueues: readonly ZLinkSerialExecutionQueue[];
|
|
85
89
|
readonly clientServerLocation?: ZLinkClientServerLocationRuntime;
|
|
86
90
|
readonly fanoutLocation?: ZLinkFanoutLocationRuntime;
|
|
87
91
|
readonly spotRouteBridges: readonly ZLinkBackendSpotRouteBridge[];
|
|
@@ -108,10 +112,11 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
108
112
|
private readonly manualFanoutSubscribers = new Map<string, ManualFanoutSubscriberState>();
|
|
109
113
|
private readonly manualFanoutSubscriberOwners = new Set<object>();
|
|
110
114
|
private readonly routeReceiveLoops: Array<{ stop(): Promise<void> }> = [];
|
|
115
|
+
private readonly applicationDispatchQueues = new Map<string, ZLinkSerialExecutionQueue>();
|
|
111
116
|
private readonly meshChannelDispatchers = new Map<string, ZLinkChannelRequestDispatcher>();
|
|
112
117
|
private readonly meshRouteDispatchers = new Map<string, ZLinkRoutePacketDispatcher>();
|
|
113
118
|
private nextManualFanoutIndex = 0;
|
|
114
|
-
private
|
|
119
|
+
private readonly disposal = new RuntimeDisposal();
|
|
115
120
|
private locationAutoConnect?: ZLinkChannelLocationAutoConnectContext;
|
|
116
121
|
private clientServerLocation?: ZLinkClientServerLocationRuntime;
|
|
117
122
|
private fanoutLocation?: ZLinkFanoutLocationRuntime;
|
|
@@ -119,6 +124,10 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
119
124
|
|
|
120
125
|
constructor(private readonly options: ZLinkChannelRuntimeLifecycleOptions) {}
|
|
121
126
|
|
|
127
|
+
fanoutTopologyTargets(channelName: string) {
|
|
128
|
+
return this.fanoutLocation?.topologyTargets(channelName);
|
|
129
|
+
}
|
|
130
|
+
|
|
122
131
|
configureLocationAutoConnect(
|
|
123
132
|
runtime: ZLinkLocationRuntime,
|
|
124
133
|
stores: ZLinkLocationRuntimeStores,
|
|
@@ -384,7 +393,11 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
384
393
|
return this.meshRouteDispatchers.has(meshName);
|
|
385
394
|
}
|
|
386
395
|
|
|
387
|
-
|
|
396
|
+
dispose(signal?: AbortSignal): Promise<void> {
|
|
397
|
+
return this.disposal.run(() => this.disposeCore(signal));
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
private async disposeCore(signal?: AbortSignal): Promise<void> {
|
|
388
401
|
const work = await this.lane.run(() => this.beginDisposeCore());
|
|
389
402
|
const transportStopped = await startOutsideStateLane(() =>
|
|
390
403
|
Promise.allSettled([
|
|
@@ -394,6 +407,9 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
394
407
|
...work.manualTransitions
|
|
395
408
|
])
|
|
396
409
|
);
|
|
410
|
+
const applicationStopped = await startOutsideStateLane(() =>
|
|
411
|
+
Promise.allSettled(work.applicationDispatchQueues.map((queue) => queue.close()))
|
|
412
|
+
);
|
|
397
413
|
const descriptorStopped =
|
|
398
414
|
work.clientServerLocation === undefined
|
|
399
415
|
? []
|
|
@@ -414,6 +430,7 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
414
430
|
);
|
|
415
431
|
const errors = [
|
|
416
432
|
...transportStopped,
|
|
433
|
+
...applicationStopped,
|
|
417
434
|
...descriptorStopped,
|
|
418
435
|
...fanoutDescriptorStopped,
|
|
419
436
|
...cleanup
|
|
@@ -422,18 +439,29 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
422
439
|
.map((result) => result.reason);
|
|
423
440
|
if (errors.length === 1) throw errors[0];
|
|
424
441
|
if (errors.length > 1) throw new AggregateError(errors, 'Channel runtime cleanup failed.');
|
|
442
|
+
await this.lane.run(() => {
|
|
443
|
+
this.manualFanoutSubscriberOwners.clear();
|
|
444
|
+
this.manualFanoutSubscribers.clear();
|
|
445
|
+
this.channelReceiveLoops.length = 0;
|
|
446
|
+
this.subscriberReceiveLoops.length = 0;
|
|
447
|
+
this.routeReceiveLoops.length = 0;
|
|
448
|
+
this.applicationDispatchQueues.clear();
|
|
449
|
+
this.clientServerLocation = undefined;
|
|
450
|
+
this.fanoutLocation = undefined;
|
|
451
|
+
this.taskRunner = undefined;
|
|
452
|
+
this.meshChannelDispatchers.clear();
|
|
453
|
+
this.meshRouteDispatchers.clear();
|
|
454
|
+
this.options.spotRouteBridges.clear();
|
|
455
|
+
});
|
|
425
456
|
}
|
|
426
457
|
|
|
427
458
|
private beginDisposeCore(): ChannelRuntimeDisposeWork {
|
|
428
459
|
const channelLoops = [...this.channelReceiveLoops];
|
|
429
460
|
const manualStates = [...this.manualFanoutSubscribers.values()];
|
|
430
|
-
this.disposed = true;
|
|
431
461
|
for (const state of manualStates) state.desired = false;
|
|
432
462
|
for (const owner of this.manualFanoutSubscriberOwners) {
|
|
433
463
|
detachEndpointConnections(owner);
|
|
434
464
|
}
|
|
435
|
-
this.manualFanoutSubscriberOwners.clear();
|
|
436
|
-
this.manualFanoutSubscribers.clear();
|
|
437
465
|
const manualLoops = new Set(
|
|
438
466
|
manualStates
|
|
439
467
|
.map((state) => state.active?.loop ?? state.stopping?.loop)
|
|
@@ -446,29 +474,31 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
446
474
|
this.drainManualFanoutSubscriberCore(state)
|
|
447
475
|
);
|
|
448
476
|
const routeLoops = [...this.routeReceiveLoops];
|
|
477
|
+
const applicationDispatchQueues = [...this.applicationDispatchQueues.values()];
|
|
449
478
|
const clientServerLocation = this.clientServerLocation;
|
|
450
479
|
const fanoutLocation = this.fanoutLocation;
|
|
451
480
|
const spotRouteBridges = [...this.options.spotRouteBridges.values()];
|
|
452
|
-
this.channelReceiveLoops.length = 0;
|
|
453
|
-
this.subscriberReceiveLoops.length = 0;
|
|
454
|
-
this.routeReceiveLoops.length = 0;
|
|
455
|
-
this.clientServerLocation = undefined;
|
|
456
|
-
this.fanoutLocation = undefined;
|
|
457
|
-
this.taskRunner = undefined;
|
|
458
|
-
this.meshChannelDispatchers.clear();
|
|
459
|
-
this.meshRouteDispatchers.clear();
|
|
460
|
-
this.options.spotRouteBridges.clear();
|
|
461
481
|
return {
|
|
462
482
|
channelLoops,
|
|
463
483
|
subscriberLoops,
|
|
464
484
|
manualTransitions,
|
|
465
485
|
routeLoops,
|
|
486
|
+
applicationDispatchQueues,
|
|
466
487
|
clientServerLocation,
|
|
467
488
|
fanoutLocation,
|
|
468
489
|
spotRouteBridges
|
|
469
490
|
};
|
|
470
491
|
}
|
|
471
492
|
|
|
493
|
+
private applicationDispatchQueue(channelName: string): ZLinkSerialExecutionQueue {
|
|
494
|
+
let queue = this.applicationDispatchQueues.get(channelName);
|
|
495
|
+
if (queue === undefined) {
|
|
496
|
+
queue = createChannelApplicationDispatchQueue();
|
|
497
|
+
this.applicationDispatchQueues.set(channelName, queue);
|
|
498
|
+
}
|
|
499
|
+
return queue;
|
|
500
|
+
}
|
|
501
|
+
|
|
472
502
|
private openOutboundSockets(): void {
|
|
473
503
|
// The process-local Server is an independent peer source. Location Store
|
|
474
504
|
// discovery may later alias the same admitted identity, but startup and
|
|
@@ -532,7 +562,8 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
532
562
|
this.options.applicationJobQueue,
|
|
533
563
|
(error) =>
|
|
534
564
|
taskRunner.errorSink.reportRuntimeTaskException(`channel:${channelName}:dispatch`, error),
|
|
535
|
-
this.receiveRoundRobin
|
|
565
|
+
this.receiveRoundRobin,
|
|
566
|
+
this.applicationDispatchQueue(channelName)
|
|
536
567
|
);
|
|
537
568
|
this.channelReceiveLoops.push(loop);
|
|
538
569
|
tasks.push(taskRunner.run(`channel:${channelName}`, (signal) => loop.run(signal)));
|
|
@@ -622,7 +653,7 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
622
653
|
taskRunner: ZLinkRuntimeTaskRunner,
|
|
623
654
|
dispatcher: ZLinkChannelPublishDispatcher
|
|
624
655
|
): void {
|
|
625
|
-
if (this.
|
|
656
|
+
if (this.disposal.started) return;
|
|
626
657
|
const state = this.getOrCreateManualFanoutSubscriber(
|
|
627
658
|
channelName,
|
|
628
659
|
endpoint,
|
|
@@ -678,7 +709,7 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
678
709
|
|
|
679
710
|
private openManualFanoutSubscriber(state: ManualFanoutSubscriberState): Promise<void> {
|
|
680
711
|
const { channelName, endpoint, connectionId, taskRunner, dispatcher } = state;
|
|
681
|
-
if (this.
|
|
712
|
+
if (this.disposal.started || !state.desired || this.taskRunner !== taskRunner) {
|
|
682
713
|
return Promise.resolve();
|
|
683
714
|
}
|
|
684
715
|
const token = Symbol(`manual-fanout:${channelName}:${endpoint}`);
|
|
@@ -694,7 +725,7 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
694
725
|
onReady() {},
|
|
695
726
|
onTerminated: () => {
|
|
696
727
|
if (
|
|
697
|
-
this.
|
|
728
|
+
this.disposal.started ||
|
|
698
729
|
(state.active?.token !== token && state.openingToken !== token) ||
|
|
699
730
|
reconnecting
|
|
700
731
|
)
|
|
@@ -702,7 +733,7 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
702
733
|
reconnecting = true;
|
|
703
734
|
setImmediate(() => {
|
|
704
735
|
if (
|
|
705
|
-
this.
|
|
736
|
+
this.disposal.started ||
|
|
706
737
|
(state.active?.token !== token && state.openingToken !== token)
|
|
707
738
|
) {
|
|
708
739
|
reconnecting = false;
|
|
@@ -710,7 +741,7 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
710
741
|
}
|
|
711
742
|
this.enqueueManualFanoutTransition(state, async () => {
|
|
712
743
|
reconnecting = false;
|
|
713
|
-
if (this.
|
|
744
|
+
if (this.disposal.started || state.active?.token !== token) return;
|
|
714
745
|
try {
|
|
715
746
|
await this.closeManualFanoutSubscriber(state, token);
|
|
716
747
|
} catch (error) {
|
|
@@ -744,7 +775,8 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
744
775
|
taskRunner.errorSink.reportRuntimeTaskException(
|
|
745
776
|
`subscriber:${state.channelName}:manual:${state.index}:dispatch`,
|
|
746
777
|
error
|
|
747
|
-
)
|
|
778
|
+
),
|
|
779
|
+
this.applicationDispatchQueue(channelName)
|
|
748
780
|
);
|
|
749
781
|
state.openingToken = undefined;
|
|
750
782
|
state.active = { token, loop };
|
|
@@ -780,8 +812,6 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
780
812
|
await startOutsideStateLane(() => active.loop.stop());
|
|
781
813
|
} catch (error) {
|
|
782
814
|
errors.push(error);
|
|
783
|
-
} finally {
|
|
784
|
-
await this.lane.run(() => this.finishCloseManualFanoutSubscriberCore(state, active));
|
|
785
815
|
}
|
|
786
816
|
try {
|
|
787
817
|
await startOutsideStateLane(() =>
|
|
@@ -794,17 +824,18 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
794
824
|
if (errors.length > 1) {
|
|
795
825
|
throw new AggregateError(errors, `Fanout subscriber '${state.connectionId}' cleanup failed.`);
|
|
796
826
|
}
|
|
827
|
+
await this.lane.run(() => this.finishCloseManualFanoutSubscriberCore(state, active));
|
|
797
828
|
}
|
|
798
829
|
|
|
799
830
|
private shouldReconnectManualFanoutSubscriber(state: ManualFanoutSubscriberState): boolean {
|
|
800
|
-
return !this.
|
|
831
|
+
return !this.disposal.started && state.desired;
|
|
801
832
|
}
|
|
802
833
|
|
|
803
834
|
private beginCloseManualFanoutSubscriberCore(
|
|
804
835
|
state: ManualFanoutSubscriberState,
|
|
805
836
|
expectedToken?: symbol
|
|
806
837
|
): ManualFanoutSubscriberActive | undefined {
|
|
807
|
-
const active = state.active;
|
|
838
|
+
const active = state.active ?? state.stopping;
|
|
808
839
|
if (active === undefined || (expectedToken !== undefined && active.token !== expectedToken)) {
|
|
809
840
|
return undefined;
|
|
810
841
|
}
|
|
@@ -864,7 +895,8 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
864
895
|
taskRunner.errorSink.reportRuntimeTaskException(
|
|
865
896
|
`subscriber:${channelName}:automatic:${connectionId}:dispatch`,
|
|
866
897
|
error
|
|
867
|
-
)
|
|
898
|
+
),
|
|
899
|
+
this.applicationDispatchQueue(channelName)
|
|
868
900
|
);
|
|
869
901
|
this.subscriberReceiveLoops.push(loop);
|
|
870
902
|
void taskRunner.run(`subscriber:${channelName}:automatic:${connectionId}`, (signal) =>
|
|
@@ -933,7 +965,8 @@ export class ZLinkChannelRuntimeLifecycle {
|
|
|
933
965
|
taskRunner.errorSink.reportRuntimeTaskException(
|
|
934
966
|
`route:${routeChannel.routerChannelId}:dispatch`,
|
|
935
967
|
error
|
|
936
|
-
)
|
|
968
|
+
),
|
|
969
|
+
this.applicationDispatchQueue(routeChannel.routerChannelId)
|
|
937
970
|
);
|
|
938
971
|
this.routeReceiveLoops.push(loop);
|
|
939
972
|
tasks.push(
|
|
@@ -117,12 +117,16 @@ export class ZLinkChannelRuntimeManager {
|
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
fanoutTopology(channelName: string) {
|
|
120
|
-
return {
|
|
120
|
+
return {
|
|
121
|
+
descriptors:
|
|
122
|
+
this.lifecycle.fanoutTopologyTargets(channelName) ??
|
|
123
|
+
this.sockets.fanoutActiveTargets(channelName)
|
|
124
|
+
};
|
|
121
125
|
}
|
|
122
126
|
|
|
123
127
|
observeClientServerTopology(channelName: string, changed: () => void): () => void {
|
|
124
128
|
const monitor = this.sockets.clientServerMonitoringSource(channelName);
|
|
125
|
-
monitor.
|
|
129
|
+
monitor.onChange(changed);
|
|
126
130
|
return () => {
|
|
127
131
|
void monitor.dispose();
|
|
128
132
|
};
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ZLINK_MAX_PUBLIC_WEIGHT,
|
|
3
|
+
isValidPublicWeight
|
|
4
|
+
} from '../../contracts/Configuration/RegistrationBuilderPolicy';
|
|
1
5
|
import type { ZLinkSocketConfig } from '../../contracts';
|
|
2
6
|
import type { ZLinkSocketConfig as ZLinkRuntimeSocketConfig } from '../../contracts/Configuration';
|
|
3
7
|
import { ZLinkConfigurationException } from '../configuration';
|
|
@@ -139,8 +143,10 @@ function requireChannelName(channelName: string): void {
|
|
|
139
143
|
}
|
|
140
144
|
|
|
141
145
|
function validatePublicWeight(value: number): void {
|
|
142
|
-
if (!
|
|
143
|
-
throw new ZLinkConfigurationException(
|
|
146
|
+
if (!isValidPublicWeight(value)) {
|
|
147
|
+
throw new ZLinkConfigurationException(
|
|
148
|
+
`Weight must be an integer in 0..${ZLINK_MAX_PUBLIC_WEIGHT}.`
|
|
149
|
+
);
|
|
144
150
|
}
|
|
145
151
|
}
|
|
146
152
|
|