@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
|
@@ -1,10 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkRouteReceiveLoop = exports.ZLinkSubscriberReceiveLoop = exports.ZLinkChannelReceiveLoop = exports.ZLINK_CHANNEL_RAW_RECEIVE_RESERVATION_LIMIT = exports.ZLinkReceiveRoundRobinCoordinator = void 0;
|
|
4
|
+
exports.createChannelApplicationDispatchQueue = createChannelApplicationDispatchQueue;
|
|
4
5
|
const channel_envelope_1 = require("./channel-envelope");
|
|
5
6
|
const channel_envelope_inspection_1 = require("./channel-envelope-inspection");
|
|
6
7
|
const channel_receive_task_tracker_1 = require("./channel-receive-task-tracker");
|
|
7
8
|
const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
|
|
9
|
+
const serial_execution_queue_1 = require("../execution/serial-execution-queue");
|
|
10
|
+
function createChannelApplicationDispatchQueue() {
|
|
11
|
+
return new serial_execution_queue_1.ZLinkSerialExecutionQueue(async (record) => {
|
|
12
|
+
try {
|
|
13
|
+
record.resolve(await record.operation());
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
record.reject(error);
|
|
17
|
+
}
|
|
18
|
+
finally {
|
|
19
|
+
record.release();
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
8
23
|
// The loop awaits between reads and the signal can abort in that gap. Reading
|
|
9
24
|
// through a function keeps the later check honest; an inline read stays
|
|
10
25
|
// narrowed by the loop condition and the comparison is rejected as dead.
|
|
@@ -102,6 +117,7 @@ class ZLinkChannelReceiveLoop {
|
|
|
102
117
|
poller;
|
|
103
118
|
applicationJobQueue;
|
|
104
119
|
roundRobin;
|
|
120
|
+
applicationDispatchQueue;
|
|
105
121
|
// The loop awaits between the two reads and stop() can land in that gap.
|
|
106
122
|
// Reading through a method keeps the second check honest; a field read stays
|
|
107
123
|
// narrowed to false across the await and is treated as dead code.
|
|
@@ -114,7 +130,7 @@ class ZLinkChannelReceiveLoop {
|
|
|
114
130
|
receiveOwner;
|
|
115
131
|
rawReceiveReservations;
|
|
116
132
|
capacityStop = new AbortController();
|
|
117
|
-
constructor(channelName, router, dispatcher, spotRouteBridge, infrastructureHandler, poller, applicationJobQueue, reportError, roundRobin) {
|
|
133
|
+
constructor(channelName, router, dispatcher, spotRouteBridge, infrastructureHandler, poller, applicationJobQueue, reportError, roundRobin, applicationDispatchQueue = createChannelApplicationDispatchQueue()) {
|
|
118
134
|
this.channelName = channelName;
|
|
119
135
|
this.router = router;
|
|
120
136
|
this.dispatcher = dispatcher;
|
|
@@ -123,6 +139,7 @@ class ZLinkChannelReceiveLoop {
|
|
|
123
139
|
this.poller = poller;
|
|
124
140
|
this.applicationJobQueue = applicationJobQueue;
|
|
125
141
|
this.roundRobin = roundRobin;
|
|
142
|
+
this.applicationDispatchQueue = applicationDispatchQueue;
|
|
126
143
|
this.inFlight = new channel_receive_task_tracker_1.ZLinkReceiveTaskTracker(reportError);
|
|
127
144
|
this.receiveOwner = roundRobin?.register() ?? Symbol('channel-receive-owner');
|
|
128
145
|
this.rawReceiveReservations = new ZLinkRawReceiveReservationPool(exports.ZLINK_CHANNEL_RAW_RECEIVE_RESERVATION_LIMIT);
|
|
@@ -218,7 +235,7 @@ class ZLinkChannelReceiveLoop {
|
|
|
218
235
|
break;
|
|
219
236
|
}
|
|
220
237
|
applicationJobPermit.markApplicationQueued();
|
|
221
|
-
const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.dispatchAndClose(received, signal, classification.decodedHeader, true));
|
|
238
|
+
const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.applicationDispatchQueue.submitPreAdmitted((0, application_job_queue_scope_1.bindApplicationJobPermit)(() => this.dispatchAndClose(received, signal, classification.decodedHeader, true))));
|
|
222
239
|
releaseRawReceive();
|
|
223
240
|
this.inFlight.track(task);
|
|
224
241
|
if (batch.record(receivedBytes)) {
|
|
@@ -292,6 +309,7 @@ class ZLinkSubscriberReceiveLoop {
|
|
|
292
309
|
applicationJobQueue;
|
|
293
310
|
infrastructureHandler;
|
|
294
311
|
roundRobin;
|
|
312
|
+
applicationDispatchQueue;
|
|
295
313
|
// The loop awaits between the two reads and stop() can land in that gap.
|
|
296
314
|
// Reading through a method keeps the second check honest; a field read stays
|
|
297
315
|
// narrowed to false across the await and is treated as dead code.
|
|
@@ -304,13 +322,14 @@ class ZLinkSubscriberReceiveLoop {
|
|
|
304
322
|
receiveOwner;
|
|
305
323
|
rawReceiveReservations;
|
|
306
324
|
capacityStop = new AbortController();
|
|
307
|
-
constructor(adapter, subscriber, dispatcher, applicationJobQueue, infrastructureHandler, roundRobin, reportError) {
|
|
325
|
+
constructor(adapter, subscriber, dispatcher, applicationJobQueue, infrastructureHandler, roundRobin, reportError, applicationDispatchQueue = createChannelApplicationDispatchQueue()) {
|
|
308
326
|
this.adapter = adapter;
|
|
309
327
|
this.subscriber = subscriber;
|
|
310
328
|
this.dispatcher = dispatcher;
|
|
311
329
|
this.applicationJobQueue = applicationJobQueue;
|
|
312
330
|
this.infrastructureHandler = infrastructureHandler;
|
|
313
331
|
this.roundRobin = roundRobin;
|
|
332
|
+
this.applicationDispatchQueue = applicationDispatchQueue;
|
|
314
333
|
this.inFlight = new channel_receive_task_tracker_1.ZLinkReceiveTaskTracker(reportError);
|
|
315
334
|
this.poller = adapter.createReadablePoller(subscriber);
|
|
316
335
|
this.receiveOwner = roundRobin?.register() ?? Symbol('subscriber-receive-owner');
|
|
@@ -406,7 +425,7 @@ class ZLinkSubscriberReceiveLoop {
|
|
|
406
425
|
break;
|
|
407
426
|
}
|
|
408
427
|
applicationJobPermit.markApplicationQueued();
|
|
409
|
-
const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.dispatchAndClose(topicMessage, signal, classification.decodedHeader, true));
|
|
428
|
+
const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.applicationDispatchQueue.submitPreAdmitted((0, application_job_queue_scope_1.bindApplicationJobPermit)(() => this.dispatchAndClose(topicMessage, signal, classification.decodedHeader, true))));
|
|
410
429
|
releaseRawReceive();
|
|
411
430
|
this.inFlight.track(task);
|
|
412
431
|
if (batch.record(receivedBytes)) {
|
|
@@ -469,6 +488,7 @@ class ZLinkRouteReceiveLoop {
|
|
|
469
488
|
poller;
|
|
470
489
|
applicationJobQueue;
|
|
471
490
|
roundRobin;
|
|
491
|
+
applicationDispatchQueue;
|
|
472
492
|
// The loop awaits between the two reads and stop() can land in that gap.
|
|
473
493
|
// Reading through a method keeps the second check honest; a field read stays
|
|
474
494
|
// narrowed to false across the await and is treated as dead code.
|
|
@@ -481,12 +501,13 @@ class ZLinkRouteReceiveLoop {
|
|
|
481
501
|
receiveOwner;
|
|
482
502
|
rawReceiveReservations;
|
|
483
503
|
capacityStop = new AbortController();
|
|
484
|
-
constructor(router, dispatcher, poller, applicationJobQueue, roundRobin, reportError) {
|
|
504
|
+
constructor(router, dispatcher, poller, applicationJobQueue, roundRobin, reportError, applicationDispatchQueue = createChannelApplicationDispatchQueue()) {
|
|
485
505
|
this.router = router;
|
|
486
506
|
this.dispatcher = dispatcher;
|
|
487
507
|
this.poller = poller;
|
|
488
508
|
this.applicationJobQueue = applicationJobQueue;
|
|
489
509
|
this.roundRobin = roundRobin;
|
|
510
|
+
this.applicationDispatchQueue = applicationDispatchQueue;
|
|
490
511
|
this.inFlight = new channel_receive_task_tracker_1.ZLinkReceiveTaskTracker(reportError);
|
|
491
512
|
this.receiveOwner = roundRobin?.register() ?? Symbol('route-receive-owner');
|
|
492
513
|
this.rawReceiveReservations = new ZLinkRawReceiveReservationPool(exports.ZLINK_CHANNEL_RAW_RECEIVE_RESERVATION_LIMIT);
|
|
@@ -596,7 +617,7 @@ class ZLinkRouteReceiveLoop {
|
|
|
596
617
|
break;
|
|
597
618
|
}
|
|
598
619
|
applicationJobPermit.markApplicationQueued();
|
|
599
|
-
const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.dispatchAndClose(received, signal, true));
|
|
620
|
+
const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.applicationDispatchQueue.submitPreAdmitted((0, application_job_queue_scope_1.bindApplicationJobPermit)(() => this.dispatchAndClose(received, signal, true))));
|
|
600
621
|
releaseRawReceive();
|
|
601
622
|
this.inFlight.track(task);
|
|
602
623
|
if (batch.record(receivedBytes)) {
|
|
@@ -33,15 +33,24 @@ export declare class ZLinkChannelRuntimeLifecycle {
|
|
|
33
33
|
private readonly manualFanoutSubscribers;
|
|
34
34
|
private readonly manualFanoutSubscriberOwners;
|
|
35
35
|
private readonly routeReceiveLoops;
|
|
36
|
+
private readonly applicationDispatchQueues;
|
|
36
37
|
private readonly meshChannelDispatchers;
|
|
37
38
|
private readonly meshRouteDispatchers;
|
|
38
39
|
private nextManualFanoutIndex;
|
|
39
|
-
private
|
|
40
|
+
private readonly disposal;
|
|
40
41
|
private locationAutoConnect?;
|
|
41
42
|
private clientServerLocation?;
|
|
42
43
|
private fanoutLocation?;
|
|
43
44
|
private taskRunner?;
|
|
44
45
|
constructor(options: ZLinkChannelRuntimeLifecycleOptions);
|
|
46
|
+
fanoutTopologyTargets(channelName: string): {
|
|
47
|
+
channelName: string;
|
|
48
|
+
publisherRoutingId: string;
|
|
49
|
+
lifecycleGeneration: bigint;
|
|
50
|
+
descriptorRevision: bigint;
|
|
51
|
+
advertisedEndpoint: string;
|
|
52
|
+
state: "error" | "preparing" | "serving" | "retiring" | "stopped";
|
|
53
|
+
}[] | undefined;
|
|
45
54
|
configureLocationAutoConnect(runtime: ZLinkLocationRuntime, stores: ZLinkLocationRuntimeStores, options: ZLinkLocationOptionOverrides, events?: ZLinkLocationEventSink): void;
|
|
46
55
|
private beginLocationAutoConnectCore;
|
|
47
56
|
private beginFanoutLocationAutoConnectCore;
|
|
@@ -56,7 +65,9 @@ export declare class ZLinkChannelRuntimeLifecycle {
|
|
|
56
65
|
dispatchLocalMeshRoute(meshName: string, sourceNodeRid: RoutingId, parts: readonly Message[], signal?: AbortSignal): Promise<void>;
|
|
57
66
|
canDispatchLocalMeshRoute(meshName: string): boolean;
|
|
58
67
|
dispose(signal?: AbortSignal): Promise<void>;
|
|
68
|
+
private disposeCore;
|
|
59
69
|
private beginDisposeCore;
|
|
70
|
+
private applicationDispatchQueue;
|
|
60
71
|
private openOutboundSockets;
|
|
61
72
|
private startChannelReceivers;
|
|
62
73
|
private startSubscriberReceivers;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkChannelRuntimeLifecycle = void 0;
|
|
4
|
+
const disposal_1 = require("../disposal");
|
|
4
5
|
const configuration_1 = require("../configuration");
|
|
5
6
|
const contracts_1 = require("../backend/contracts");
|
|
6
7
|
const channel_autoconnect_1 = require("./channel-autoconnect");
|
|
@@ -21,10 +22,11 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
21
22
|
manualFanoutSubscribers = new Map();
|
|
22
23
|
manualFanoutSubscriberOwners = new Set();
|
|
23
24
|
routeReceiveLoops = [];
|
|
25
|
+
applicationDispatchQueues = new Map();
|
|
24
26
|
meshChannelDispatchers = new Map();
|
|
25
27
|
meshRouteDispatchers = new Map();
|
|
26
28
|
nextManualFanoutIndex = 0;
|
|
27
|
-
|
|
29
|
+
disposal = new disposal_1.RuntimeDisposal();
|
|
28
30
|
locationAutoConnect;
|
|
29
31
|
clientServerLocation;
|
|
30
32
|
fanoutLocation;
|
|
@@ -32,6 +34,9 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
32
34
|
constructor(options) {
|
|
33
35
|
this.options = options;
|
|
34
36
|
}
|
|
37
|
+
fanoutTopologyTargets(channelName) {
|
|
38
|
+
return this.fanoutLocation?.topologyTargets(channelName);
|
|
39
|
+
}
|
|
35
40
|
configureLocationAutoConnect(runtime, stores, options, events) {
|
|
36
41
|
this.locationAutoConnect = (0, channel_autoconnect_1.createChannelLocationAutoConnectContext)(runtime, stores, options, events);
|
|
37
42
|
}
|
|
@@ -201,7 +206,10 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
201
206
|
canDispatchLocalMeshRoute(meshName) {
|
|
202
207
|
return this.meshRouteDispatchers.has(meshName);
|
|
203
208
|
}
|
|
204
|
-
|
|
209
|
+
dispose(signal) {
|
|
210
|
+
return this.disposal.run(() => this.disposeCore(signal));
|
|
211
|
+
}
|
|
212
|
+
async disposeCore(signal) {
|
|
205
213
|
const work = await this.lane.run(() => this.beginDisposeCore());
|
|
206
214
|
const transportStopped = await startOutsideStateLane(() => Promise.allSettled([
|
|
207
215
|
...work.channelLoops.map((loop) => loop.stop()),
|
|
@@ -209,6 +217,7 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
209
217
|
...work.routeLoops.map((loop) => loop.stop()),
|
|
210
218
|
...work.manualTransitions
|
|
211
219
|
]));
|
|
220
|
+
const applicationStopped = await startOutsideStateLane(() => Promise.allSettled(work.applicationDispatchQueues.map((queue) => queue.close())));
|
|
212
221
|
const descriptorStopped = work.clientServerLocation === undefined
|
|
213
222
|
? []
|
|
214
223
|
: await startOutsideStateLane(() => Promise.allSettled([work.clientServerLocation?.stop(signal)]));
|
|
@@ -221,6 +230,7 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
221
230
|
]));
|
|
222
231
|
const errors = [
|
|
223
232
|
...transportStopped,
|
|
233
|
+
...applicationStopped,
|
|
224
234
|
...descriptorStopped,
|
|
225
235
|
...fanoutDescriptorStopped,
|
|
226
236
|
...cleanup
|
|
@@ -231,46 +241,58 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
231
241
|
throw errors[0];
|
|
232
242
|
if (errors.length > 1)
|
|
233
243
|
throw new AggregateError(errors, 'Channel runtime cleanup failed.');
|
|
244
|
+
await this.lane.run(() => {
|
|
245
|
+
this.manualFanoutSubscriberOwners.clear();
|
|
246
|
+
this.manualFanoutSubscribers.clear();
|
|
247
|
+
this.channelReceiveLoops.length = 0;
|
|
248
|
+
this.subscriberReceiveLoops.length = 0;
|
|
249
|
+
this.routeReceiveLoops.length = 0;
|
|
250
|
+
this.applicationDispatchQueues.clear();
|
|
251
|
+
this.clientServerLocation = undefined;
|
|
252
|
+
this.fanoutLocation = undefined;
|
|
253
|
+
this.taskRunner = undefined;
|
|
254
|
+
this.meshChannelDispatchers.clear();
|
|
255
|
+
this.meshRouteDispatchers.clear();
|
|
256
|
+
this.options.spotRouteBridges.clear();
|
|
257
|
+
});
|
|
234
258
|
}
|
|
235
259
|
beginDisposeCore() {
|
|
236
260
|
const channelLoops = [...this.channelReceiveLoops];
|
|
237
261
|
const manualStates = [...this.manualFanoutSubscribers.values()];
|
|
238
|
-
this.disposed = true;
|
|
239
262
|
for (const state of manualStates)
|
|
240
263
|
state.desired = false;
|
|
241
264
|
for (const owner of this.manualFanoutSubscriberOwners) {
|
|
242
265
|
(0, RuntimeEndpointConnections_1.detachEndpointConnections)(owner);
|
|
243
266
|
}
|
|
244
|
-
this.manualFanoutSubscriberOwners.clear();
|
|
245
|
-
this.manualFanoutSubscribers.clear();
|
|
246
267
|
const manualLoops = new Set(manualStates
|
|
247
268
|
.map((state) => state.active?.loop ?? state.stopping?.loop)
|
|
248
269
|
.filter((loop) => loop !== undefined));
|
|
249
270
|
const subscriberLoops = [...this.subscriberReceiveLoops].filter((loop) => !manualLoops.has(loop));
|
|
250
271
|
const manualTransitions = manualStates.map((state) => this.drainManualFanoutSubscriberCore(state));
|
|
251
272
|
const routeLoops = [...this.routeReceiveLoops];
|
|
273
|
+
const applicationDispatchQueues = [...this.applicationDispatchQueues.values()];
|
|
252
274
|
const clientServerLocation = this.clientServerLocation;
|
|
253
275
|
const fanoutLocation = this.fanoutLocation;
|
|
254
276
|
const spotRouteBridges = [...this.options.spotRouteBridges.values()];
|
|
255
|
-
this.channelReceiveLoops.length = 0;
|
|
256
|
-
this.subscriberReceiveLoops.length = 0;
|
|
257
|
-
this.routeReceiveLoops.length = 0;
|
|
258
|
-
this.clientServerLocation = undefined;
|
|
259
|
-
this.fanoutLocation = undefined;
|
|
260
|
-
this.taskRunner = undefined;
|
|
261
|
-
this.meshChannelDispatchers.clear();
|
|
262
|
-
this.meshRouteDispatchers.clear();
|
|
263
|
-
this.options.spotRouteBridges.clear();
|
|
264
277
|
return {
|
|
265
278
|
channelLoops,
|
|
266
279
|
subscriberLoops,
|
|
267
280
|
manualTransitions,
|
|
268
281
|
routeLoops,
|
|
282
|
+
applicationDispatchQueues,
|
|
269
283
|
clientServerLocation,
|
|
270
284
|
fanoutLocation,
|
|
271
285
|
spotRouteBridges
|
|
272
286
|
};
|
|
273
287
|
}
|
|
288
|
+
applicationDispatchQueue(channelName) {
|
|
289
|
+
let queue = this.applicationDispatchQueues.get(channelName);
|
|
290
|
+
if (queue === undefined) {
|
|
291
|
+
queue = (0, channel_receive_loops_1.createChannelApplicationDispatchQueue)();
|
|
292
|
+
this.applicationDispatchQueues.set(channelName, queue);
|
|
293
|
+
}
|
|
294
|
+
return queue;
|
|
295
|
+
}
|
|
274
296
|
openOutboundSockets() {
|
|
275
297
|
// The process-local Server is an independent peer source. Location Store
|
|
276
298
|
// discovery may later alias the same admitted identity, but startup and
|
|
@@ -310,7 +332,7 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
310
332
|
unhandled: this.options.registration.dispatch?.unhandled
|
|
311
333
|
});
|
|
312
334
|
const spotRouteBridge = this.createSpotRouteBridgeForRouter(channelName, router);
|
|
313
|
-
const loop = new channel_receive_loops_1.ZLinkChannelReceiveLoop(channelName, router, dispatcher, spotRouteBridge, (received, socket) => this.options.sockets.tryHandleClientServerControl(channelName, received, socket), this.options.adapter.createReadablePoller(router), this.options.applicationJobQueue, (error) => taskRunner.errorSink.reportRuntimeTaskException(`channel:${channelName}:dispatch`, error), this.receiveRoundRobin);
|
|
335
|
+
const loop = new channel_receive_loops_1.ZLinkChannelReceiveLoop(channelName, router, dispatcher, spotRouteBridge, (received, socket) => this.options.sockets.tryHandleClientServerControl(channelName, received, socket), this.options.adapter.createReadablePoller(router), this.options.applicationJobQueue, (error) => taskRunner.errorSink.reportRuntimeTaskException(`channel:${channelName}:dispatch`, error), this.receiveRoundRobin, this.applicationDispatchQueue(channelName));
|
|
314
336
|
this.channelReceiveLoops.push(loop);
|
|
315
337
|
tasks.push(taskRunner.run(`channel:${channelName}`, (signal) => loop.run(signal)));
|
|
316
338
|
}
|
|
@@ -369,7 +391,7 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
369
391
|
return state;
|
|
370
392
|
}
|
|
371
393
|
requestManualFanoutConnect(channelName, endpoint, taskRunner, dispatcher) {
|
|
372
|
-
if (this.
|
|
394
|
+
if (this.disposal.started)
|
|
373
395
|
return;
|
|
374
396
|
const state = this.getOrCreateManualFanoutSubscriber(channelName, endpoint, this.nextManualFanoutIndex++, taskRunner, dispatcher);
|
|
375
397
|
state.desired = true;
|
|
@@ -403,7 +425,7 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
403
425
|
}
|
|
404
426
|
openManualFanoutSubscriber(state) {
|
|
405
427
|
const { channelName, endpoint, connectionId, taskRunner, dispatcher } = state;
|
|
406
|
-
if (this.
|
|
428
|
+
if (this.disposal.started || !state.desired || this.taskRunner !== taskRunner) {
|
|
407
429
|
return Promise.resolve();
|
|
408
430
|
}
|
|
409
431
|
const token = Symbol(`manual-fanout:${channelName}:${endpoint}`);
|
|
@@ -414,20 +436,20 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
414
436
|
const subscriber = this.options.sockets.openFanoutSubscriberConnection(channelName, connectionId, endpoint, {
|
|
415
437
|
onReady() { },
|
|
416
438
|
onTerminated: () => {
|
|
417
|
-
if (this.
|
|
439
|
+
if (this.disposal.started ||
|
|
418
440
|
(state.active?.token !== token && state.openingToken !== token) ||
|
|
419
441
|
reconnecting)
|
|
420
442
|
return;
|
|
421
443
|
reconnecting = true;
|
|
422
444
|
setImmediate(() => {
|
|
423
|
-
if (this.
|
|
445
|
+
if (this.disposal.started ||
|
|
424
446
|
(state.active?.token !== token && state.openingToken !== token)) {
|
|
425
447
|
reconnecting = false;
|
|
426
448
|
return;
|
|
427
449
|
}
|
|
428
450
|
this.enqueueManualFanoutTransition(state, async () => {
|
|
429
451
|
reconnecting = false;
|
|
430
|
-
if (this.
|
|
452
|
+
if (this.disposal.started || state.active?.token !== token)
|
|
431
453
|
return;
|
|
432
454
|
try {
|
|
433
455
|
await this.closeManualFanoutSubscriber(state, token);
|
|
@@ -442,7 +464,7 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
442
464
|
});
|
|
443
465
|
}
|
|
444
466
|
});
|
|
445
|
-
loop = new channel_receive_loops_1.ZLinkSubscriberReceiveLoop(this.options.adapter, subscriber, dispatcher, this.options.applicationJobQueue, (message) => this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber), this.receiveRoundRobin, (error) => taskRunner.errorSink.reportRuntimeTaskException(`subscriber:${state.channelName}:manual:${state.index}:dispatch`, error));
|
|
467
|
+
loop = new channel_receive_loops_1.ZLinkSubscriberReceiveLoop(this.options.adapter, subscriber, dispatcher, this.options.applicationJobQueue, (message) => this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber), this.receiveRoundRobin, (error) => taskRunner.errorSink.reportRuntimeTaskException(`subscriber:${state.channelName}:manual:${state.index}:dispatch`, error), this.applicationDispatchQueue(channelName));
|
|
446
468
|
state.openingToken = undefined;
|
|
447
469
|
state.active = { token, loop };
|
|
448
470
|
this.subscriberReceiveLoops.push(loop);
|
|
@@ -471,9 +493,6 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
471
493
|
catch (error) {
|
|
472
494
|
errors.push(error);
|
|
473
495
|
}
|
|
474
|
-
finally {
|
|
475
|
-
await this.lane.run(() => this.finishCloseManualFanoutSubscriberCore(state, active));
|
|
476
|
-
}
|
|
477
496
|
try {
|
|
478
497
|
await startOutsideStateLane(() => this.options.sockets.closeFanoutSubscriberConnection(state.connectionId));
|
|
479
498
|
}
|
|
@@ -485,12 +504,13 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
485
504
|
if (errors.length > 1) {
|
|
486
505
|
throw new AggregateError(errors, `Fanout subscriber '${state.connectionId}' cleanup failed.`);
|
|
487
506
|
}
|
|
507
|
+
await this.lane.run(() => this.finishCloseManualFanoutSubscriberCore(state, active));
|
|
488
508
|
}
|
|
489
509
|
shouldReconnectManualFanoutSubscriber(state) {
|
|
490
|
-
return !this.
|
|
510
|
+
return !this.disposal.started && state.desired;
|
|
491
511
|
}
|
|
492
512
|
beginCloseManualFanoutSubscriberCore(state, expectedToken) {
|
|
493
|
-
const active = state.active;
|
|
513
|
+
const active = state.active ?? state.stopping;
|
|
494
514
|
if (active === undefined || (expectedToken !== undefined && active.token !== expectedToken)) {
|
|
495
515
|
return undefined;
|
|
496
516
|
}
|
|
@@ -521,7 +541,7 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
521
541
|
unhandled: this.options.registration.dispatch?.unhandled,
|
|
522
542
|
metrics: this.options.dispatchServices.metrics()
|
|
523
543
|
});
|
|
524
|
-
const loop = new channel_receive_loops_1.ZLinkSubscriberReceiveLoop(this.options.adapter, subscriber, dispatcher, this.options.applicationJobQueue, (message) => this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber), undefined, (error) => taskRunner.errorSink.reportRuntimeTaskException(`subscriber:${channelName}:automatic:${connectionId}:dispatch`, error));
|
|
544
|
+
const loop = new channel_receive_loops_1.ZLinkSubscriberReceiveLoop(this.options.adapter, subscriber, dispatcher, this.options.applicationJobQueue, (message) => this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber), undefined, (error) => taskRunner.errorSink.reportRuntimeTaskException(`subscriber:${channelName}:automatic:${connectionId}:dispatch`, error), this.applicationDispatchQueue(channelName));
|
|
525
545
|
this.subscriberReceiveLoops.push(loop);
|
|
526
546
|
void taskRunner.run(`subscriber:${channelName}:automatic:${connectionId}`, (signal) => loop.run(signal));
|
|
527
547
|
return async () => {
|
|
@@ -567,7 +587,7 @@ class ZLinkChannelRuntimeLifecycle {
|
|
|
567
587
|
unhandled: this.options.registration.dispatch?.unhandled,
|
|
568
588
|
spotRouteBridge
|
|
569
589
|
});
|
|
570
|
-
const loop = new channel_receive_loops_1.ZLinkRouteReceiveLoop(router, dispatcher, this.options.adapter.createReadablePoller(router), this.options.applicationJobQueue, this.receiveRoundRobin, (error) => taskRunner.errorSink.reportRuntimeTaskException(`route:${routeChannel.routerChannelId}:dispatch`, error));
|
|
590
|
+
const loop = new channel_receive_loops_1.ZLinkRouteReceiveLoop(router, dispatcher, this.options.adapter.createReadablePoller(router), this.options.applicationJobQueue, this.receiveRoundRobin, (error) => taskRunner.errorSink.reportRuntimeTaskException(`route:${routeChannel.routerChannelId}:dispatch`, error), this.applicationDispatchQueue(routeChannel.routerChannelId));
|
|
571
591
|
this.routeReceiveLoops.push(loop);
|
|
572
592
|
tasks.push(taskRunner.run(`route:${routeChannel.routerChannelId}`, (signal) => loop.run(signal)));
|
|
573
593
|
}
|
|
@@ -63,11 +63,14 @@ class ZLinkChannelRuntimeManager {
|
|
|
63
63
|
};
|
|
64
64
|
}
|
|
65
65
|
fanoutTopology(channelName) {
|
|
66
|
-
return {
|
|
66
|
+
return {
|
|
67
|
+
descriptors: this.lifecycle.fanoutTopologyTargets(channelName) ??
|
|
68
|
+
this.sockets.fanoutActiveTargets(channelName)
|
|
69
|
+
};
|
|
67
70
|
}
|
|
68
71
|
observeClientServerTopology(channelName, changed) {
|
|
69
72
|
const monitor = this.sockets.clientServerMonitoringSource(channelName);
|
|
70
|
-
monitor.
|
|
73
|
+
monitor.onChange(changed);
|
|
71
74
|
return () => {
|
|
72
75
|
void monitor.dispose();
|
|
73
76
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DefaultZLinkChannelRuntimeOptions = void 0;
|
|
4
|
+
const RegistrationBuilderPolicy_1 = require("../../contracts/Configuration/RegistrationBuilderPolicy");
|
|
4
5
|
const configuration_1 = require("../configuration");
|
|
5
6
|
const SendTimeoutValidation_1 = require("../../contracts/Configuration/SendTimeoutValidation");
|
|
6
7
|
class ZLinkLiveSocketConfig {
|
|
@@ -112,8 +113,8 @@ function requireChannelName(channelName) {
|
|
|
112
113
|
}
|
|
113
114
|
}
|
|
114
115
|
function validatePublicWeight(value) {
|
|
115
|
-
if (!
|
|
116
|
-
throw new configuration_1.ZLinkConfigurationException(
|
|
116
|
+
if (!(0, RegistrationBuilderPolicy_1.isValidPublicWeight)(value)) {
|
|
117
|
+
throw new configuration_1.ZLinkConfigurationException(`Weight must be an integer in 0..${RegistrationBuilderPolicy_1.ZLINK_MAX_PUBLIC_WEIGHT}.`);
|
|
117
118
|
}
|
|
118
119
|
}
|
|
119
120
|
function validateHighWaterMark(value, label) {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { ZLinkListenerRecords } from '../foundation/listener-records';
|
|
2
1
|
import { type ZLinkClientServerServerDescriptor, type ZLinkFanoutPublisherDescriptor } from '../../contracts';
|
|
3
|
-
import { type ZLinkFrameworkRegistration } from '../configuration';
|
|
4
|
-
import type { ZLinkBackendContext, ZLinkBackendDealerSocket, ZLinkBackendPublisherSocket, ZLinkBackendRouterSocket, ZLinkBackendSocketMonitor, ZLinkBackendSubscriberSocket, ZLinkChannelBackendAdapter, ZLinkMonitoringBackendAdapter } from '../backend/contracts';
|
|
5
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
3
|
+
import type { ZLinkBackendContext, ZLinkBackendDealerSocket, ZLinkBackendPublisherSocket, ZLinkBackendRouterSocket, ZLinkBackendSocketMonitor, ZLinkBackendSubscriberSocket, ZLinkChannelBackendAdapter, ZLinkMonitoringBackendAdapter } from '../backend/contracts';
|
|
4
|
+
import { type ZLinkFrameworkRegistration } from '../configuration';
|
|
5
|
+
import { ZLinkListenerRecords } from '../foundation/listener-records';
|
|
6
6
|
import { ServiceDiscoveryRegistry } from '../foundation/service-discovery-registry';
|
|
7
|
-
import type { ZLinkChannelEnvelopeHeader } from './channel-envelope';
|
|
8
7
|
import type { ApplicationJobQueue } from '../host/application-job-queue';
|
|
8
|
+
import type { ZLinkChannelEnvelopeHeader } from './channel-envelope';
|
|
9
9
|
export interface ZLinkClientServerServerSocketIdentity {
|
|
10
10
|
readonly serverRid: string;
|
|
11
11
|
readonly lifecycleGeneration: bigint;
|
|
@@ -41,7 +41,8 @@ export declare class ZLinkChannelSocketRegistry {
|
|
|
41
41
|
private readonly routeMeshPublicWeights;
|
|
42
42
|
private readonly clientServerAdmittedClients;
|
|
43
43
|
private readonly clientServerServerPeers;
|
|
44
|
-
private readonly
|
|
44
|
+
private readonly disposal;
|
|
45
|
+
private readonly ownedResources;
|
|
45
46
|
private readonly fanoutConnections;
|
|
46
47
|
private readonly fanoutPublisherNextBeacon;
|
|
47
48
|
private clientServerLivenessTimer?;
|
|
@@ -52,6 +53,7 @@ export declare class ZLinkChannelSocketRegistry {
|
|
|
52
53
|
private readonly listenerRecords;
|
|
53
54
|
constructor(registration: ZLinkFrameworkRegistration, adapter: ZLinkChannelBackendAdapter, context: ZLinkBackendContext, monitoringAdapter?: ZLinkMonitoringBackendAdapter | undefined, oneWayFailureSink?: ((error: unknown) => void) | undefined, applicationJobQueue?: ApplicationJobQueue | undefined, listenerRecords?: ZLinkListenerRecords);
|
|
54
55
|
dispose(): Promise<void>;
|
|
56
|
+
private disposeCore;
|
|
55
57
|
clientDealer(channelName: string): ZLinkBackendDealerSocket;
|
|
56
58
|
channelRouter(channelName: string): ZLinkBackendRouterSocket;
|
|
57
59
|
clientServerServerIdentity(channelName: string): ZLinkClientServerServerSocketIdentity;
|
|
@@ -68,36 +70,19 @@ export declare class ZLinkChannelSocketRegistry {
|
|
|
68
70
|
selectClientServerDealer(channelName: string): ZLinkBackendDealerSocket | undefined;
|
|
69
71
|
clientDealerForOutbound(channelName: string): ZLinkBackendDealerSocket | undefined;
|
|
70
72
|
selectedClientServerRid(channelName: string, dealer: ZLinkBackendDealerSocket): string | undefined;
|
|
71
|
-
/**
|
|
72
|
-
|
|
73
|
-
* `framework/doc/framework/common/spec/server/02-channel-transport/02-channel-messaging.ko.md` §3.2 requires: the call waits
|
|
74
|
-
* at call time for a bounded period and then fails with no-target. The bound is the shorter of
|
|
75
|
-
* the call's remaining deadline and five seconds, mirroring the .NET reference
|
|
76
|
-
* `ZLinkClientServerClientRuntime.WaitForReadyAsync`. The wait lives here because this registry
|
|
77
|
-
* owns ClientServer connections, admission and weighted selection. Sends have no per-call
|
|
78
|
-
* timeout, so they use the Channel's request timeout.
|
|
79
|
-
*
|
|
80
|
-
* The wait only observes admission that is already in flight: it never opens or reconnects a
|
|
81
|
-
* connection, so it cannot trigger the admission it waits for, and Framework startup keeps not
|
|
82
|
-
* waiting for local ClientServer admission. It applies whenever nothing is selectable, including
|
|
83
|
-
* candidate sets excluded by weight 0 or drain, because `selectClientServerDealer` filters the
|
|
84
|
-
* same way the reference `SelectReady()` does.
|
|
85
|
-
*
|
|
86
|
-
* Every attempt yields to the event loop between polls. ClientServer admission completes on the
|
|
87
|
-
* monitor drains that the backend poll timer pumps, so a synchronous wait would starve the
|
|
88
|
-
* admission it is waiting for and burn the whole bound before failing anyway. That is this
|
|
89
|
-
* execution model's form of the hazard the JVM mirror avoids by not holding the admission
|
|
90
|
-
* monitor across its sleep.
|
|
91
|
-
*/
|
|
92
|
-
awaitClientDealerForOutbound(channelName: string, signal?: AbortSignal, deadlineAtMs?: number): Promise<ZLinkBackendDealerSocket | undefined>;
|
|
73
|
+
/** Observes discovery changes until the client DEALER admission deadline. */
|
|
74
|
+
awaitClientDealerForOutbound(channelName: string, signal?: AbortSignal): Promise<ZLinkBackendDealerSocket | undefined>;
|
|
93
75
|
startManualClientServerConnections(): void;
|
|
94
76
|
startLocalClientServerConnections(): void;
|
|
95
|
-
clientServerMonitoringSource(channelName: string): ZLinkBackendSocketMonitor
|
|
77
|
+
clientServerMonitoringSource(channelName: string): ZLinkBackendSocketMonitor & {
|
|
78
|
+
onChange(handler: () => void): void;
|
|
79
|
+
};
|
|
96
80
|
clientServerActiveTargets(channelName: string): readonly Pick<ClientServerDiscoveryDescriptor, 'serverRoutingId' | 'weight' | 'state'>[];
|
|
97
81
|
fanoutActiveTargets(channelName: string): readonly import("../foundation/service-discovery-registry").FanoutPublisherDescriptor[];
|
|
98
82
|
admitFanoutPublisher(descriptor: ZLinkFanoutPublisherDescriptor, connectionId: string): boolean;
|
|
99
83
|
removeFanoutPublisher(descriptor: ZLinkFanoutPublisherDescriptor, connectionId: string): boolean;
|
|
100
84
|
setClientServerServerDescriptor(descriptor: ZLinkClientServerServerDescriptor | undefined, channelName: string): void;
|
|
85
|
+
private notifyClientServerTopology;
|
|
101
86
|
tryHandleClientServerControl(channelName: string, received: {
|
|
102
87
|
readonly parts: readonly Message[];
|
|
103
88
|
readonly replyToken: unknown | null;
|
|
@@ -127,7 +112,7 @@ export declare class ZLinkChannelSocketRegistry {
|
|
|
127
112
|
onChange(handler: () => void): void;
|
|
128
113
|
dispose(): Promise<void>;
|
|
129
114
|
};
|
|
130
|
-
|
|
115
|
+
notifyFanoutTopology(channelName: string): void;
|
|
131
116
|
private tickFanoutLiveness;
|
|
132
117
|
private openManualClientServerConnection;
|
|
133
118
|
private openConfiguredClientServerConnection;
|