@zlink-systems/framework 0.25.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/Channels/IZLinkFanoutClient.d.ts +0 -6
- 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/RouteMesh/RuntimeTopology.d.ts +8 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.js +16 -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 +28 -0
- package/dist/runtime/activation-admission.js +57 -0
- 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 +19 -17
- package/dist/runtime/actors/actor-handoff.d.ts +13 -7
- package/dist/runtime/actors/actor-handoff.js +36 -25
- 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 +85 -123
- 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 +3 -3
- package/dist/runtime/actors/actor-remote-joiner.js +11 -17
- 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-contracts.d.ts +4 -2
- 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/actor-source-transfer.d.ts +5 -5
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
- package/dist/runtime/actors/deferred-join-completion.js +21 -0
- package/dist/runtime/actors/index.d.ts +10 -8
- package/dist/runtime/actors/index.js +101 -73
- 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 +7 -1
- package/dist/runtime/admission.js +11 -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 +8 -33
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
- 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-factory.d.ts +1 -2
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
- package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +13 -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 -9
- package/dist/runtime/channels/channel-clients.js +68 -60
- 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 -18
- 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.d.ts +2 -5
- package/dist/runtime/channels/channel-runtime-manager.js +4 -12
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
- package/dist/runtime/channels/channel-socket-registry.js +296 -235
- package/dist/runtime/channels/channel-transports.d.ts +11 -20
- 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 +133 -81
- 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 +22 -9
- package/dist/runtime/execution/index.js +107 -37
- package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
- package/dist/runtime/execution/serial-execution-queue.js +99 -26
- 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/listener-records.d.ts +11 -0
- package/dist/runtime/foundation/listener-records.js +20 -0
- 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 +18 -26
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
- 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.d.ts +1 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +30 -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 +23 -8
- 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-coordinator.d.ts +9 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
- 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 -19
- 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 +28 -24
- package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
- package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
- package/dist/runtime/foundation/service-topology-registry.js +22 -61
- 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 +28 -28
- package/dist/runtime/host/actor-transfer-runtime.js +210 -256
- 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 +19 -14
- package/dist/runtime/host/index.js +234 -175
- 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 +11 -23
- package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
- package/dist/runtime/host/route-mesh-runtime.js +178 -257
- 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 +71 -38
- package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
- 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 -7
- package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
- package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
- package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
- 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 +79 -27
- 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 +5 -10
- package/dist/runtime/locations/lifecycle.js +4 -33
- 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 +44 -30
- 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 +8 -2
- package/dist/runtime/locations/spot-location-claims.js +40 -23
- 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 +2 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
- package/dist/runtime/spots/index.d.ts +29 -29
- package/dist/runtime/spots/index.js +441 -313
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
- package/dist/runtime/spots/spot-activation-registry.js +27 -60
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
- package/dist/runtime/spots/spot-activation-state.js +4 -17
- package/dist/runtime/spots/spot-activation.d.ts +10 -9
- package/dist/runtime/spots/spot-activation.js +103 -81
- 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 +5 -55
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
- package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
- package/dist/runtime/spots/spot-actor-membership.js +44 -53
- 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 +3 -4
- package/dist/runtime/spots/spot-entry-activation.js +9 -21
- 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 +6 -5
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
- package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +10 -37
- 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 -2
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
- 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 +4 -20
- package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
- package/dist/runtime/spots/spot-serial-executor.js +9 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
- package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
- package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
- 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 +12 -19
- package/dist/runtime/streams/index.d.ts +15 -14
- package/dist/runtime/streams/index.js +38 -39
- 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/session-serial-executor.js +2 -2
- 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/Channels/IZLinkFanoutClient.ts +0 -7
- 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/RouteMesh/RuntimeTopology.ts +10 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +15 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +72 -0
- 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 +45 -39
- package/src/runtime/actors/actor-handoff.ts +55 -45
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +174 -215
- 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 +15 -36
- 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-contracts.ts +4 -10
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/actor-source-transfer.ts +5 -18
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +44 -0
- package/src/runtime/actors/index.ts +122 -88
- 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 +13 -2
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +15 -42
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
- package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
- package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
- package/src/runtime/backend/raw-binding-port.ts +14 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -96
- 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 -31
- 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 +8 -15
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +369 -262
- package/src/runtime/channels/channel-transports.ts +161 -115
- 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 +175 -106
- 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 +116 -38
- package/src/runtime/execution/serial-execution-queue.ts +179 -34
- 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/listener-records.ts +21 -0
- 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 +170 -571
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +41 -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 +30 -19
- 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-coordinator.ts +13 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
- 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 -25
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
- package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
- package/src/runtime/foundation/service-topology-registry.ts +30 -79
- 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 +266 -418
- 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 +408 -312
- 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 +12 -44
- package/src/runtime/host/route-mesh-runtime.ts +236 -275
- 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 +1161 -904
- 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 +92 -30
- package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
- package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
- 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 +110 -31
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +16 -45
- 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 +90 -58
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +54 -26
- 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 +27 -10
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
- package/src/runtime/spots/index.ts +687 -437
- package/src/runtime/spots/spot-activation-registry.ts +42 -71
- package/src/runtime/spots/spot-activation-state.ts +4 -16
- package/src/runtime/spots/spot-activation.ts +167 -115
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
- package/src/runtime/spots/spot-actor-membership.ts +107 -75
- 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 -33
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +29 -21
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
- package/src/runtime/spots/spot-outbound.ts +47 -68
- 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 -6
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +10 -43
- package/src/runtime/spots/spot-serial-executor.ts +10 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +23 -37
- package/src/runtime/streams/index.ts +102 -88
- 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/session-serial-executor.ts +2 -2
- 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/deferred-join-accepted-journal.d.ts +0 -47
- package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
- 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/deferred-join-accepted-journal.ts +0 -1346
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,78 +1,98 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
createInternalFrameworkException,
|
|
4
|
-
internalFrameworkWireReply
|
|
5
|
-
} from '../framework-errors-internal';
|
|
1
|
+
import { listAllMeshNodeDescriptors } from '../locations/location-store-pages';
|
|
2
|
+
import { ZlinkStreamContentType } from '@zlink-systems/stream-wire';
|
|
6
3
|
import { randomBytes, randomUUID } from 'node:crypto';
|
|
7
|
-
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
8
|
-
import {
|
|
9
|
-
RequestResult,
|
|
10
|
-
SubmitResult,
|
|
11
|
-
type ZLinkBackendMessageLike as MessageLike
|
|
12
|
-
} from '../backend/runtime-values';
|
|
13
|
-
import {
|
|
14
|
-
OperationKind,
|
|
15
|
-
ReceiveKind,
|
|
16
|
-
type ReadyRecord,
|
|
17
|
-
type ReceiveRecord
|
|
18
|
-
} from '../foundation/service-runtime-contracts';
|
|
19
|
-
import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
|
|
20
|
-
import { runtimeAcceptsWork, runtimeStateIsReady } from '../foundation/runtime-state-projections';
|
|
21
|
-
import { createDeadlineExceededError, isDeadlineExceededError } from '../abort';
|
|
22
|
-
import { meshActorSessionNodeAdapter, ZLinkNodeBackendAdapterFactory } from '../backend';
|
|
23
|
-
import type {
|
|
24
|
-
ZLinkBackendAdapterFactory,
|
|
25
|
-
ZLinkBackendContext,
|
|
26
|
-
ZLinkBackendMeshNode
|
|
27
|
-
} from '../backend';
|
|
28
|
-
|
|
29
|
-
const LEGACY_MESH_SEND_TIMEOUT_MS = 1000;
|
|
30
|
-
import type { ZLinkFrameworkRegistration } from '../configuration';
|
|
31
|
-
import type {
|
|
32
|
-
ActorRef,
|
|
33
|
-
RoutingId,
|
|
34
|
-
ZLinkMeshNodeDescriptor,
|
|
35
|
-
ZLinkClientServerRuntime,
|
|
36
|
-
ZLinkFanoutRuntime,
|
|
37
|
-
ZLinkFrameworkRuntime,
|
|
38
|
-
ZLinkFrameworkLifecycleOptions,
|
|
39
|
-
ZLinkFrameworkRelocationOptions,
|
|
40
|
-
ZLinkFrameworkRelocationResult,
|
|
41
|
-
ZLinkObservedStatus,
|
|
42
|
-
ZLinkFrameworkRuntimeStatus,
|
|
43
|
-
ZLinkFrameworkTerminationResult,
|
|
44
|
-
ZLinkRouteMeshRuntime
|
|
45
|
-
} from '../../contracts';
|
|
46
|
-
import type { ZLinkLocationOwnerToken } from '../../contracts/Locations';
|
|
47
|
-
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
48
|
-
import type { Type } from '../../contracts/Common/CoreTypes';
|
|
49
|
-
import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
|
|
50
|
-
import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
|
|
51
4
|
import {
|
|
5
|
+
type ActorRef,
|
|
6
|
+
type RoutingId,
|
|
7
|
+
type ZLinkClientServerRuntime,
|
|
8
|
+
type ZLinkFanoutRuntime,
|
|
9
|
+
type ZLinkFrameworkLifecycleOptions,
|
|
10
|
+
type ZLinkFrameworkRelocationOptions,
|
|
11
|
+
type ZLinkFrameworkRelocationResult,
|
|
12
|
+
type ZLinkFrameworkRuntime,
|
|
13
|
+
type ZLinkFrameworkRuntimeStatus,
|
|
14
|
+
type ZLinkFrameworkTerminationResult,
|
|
15
|
+
type ZLinkListenerKind,
|
|
16
|
+
type ZLinkListenerStatus,
|
|
17
|
+
type ZLinkMeshNodeDescriptor,
|
|
18
|
+
type ZLinkMessageFlowControl,
|
|
19
|
+
type ZLinkMessageFlowLogMode,
|
|
20
|
+
type ZLinkObservedStatus,
|
|
21
|
+
type ZLinkRouteMeshRuntime,
|
|
52
22
|
ZLinkFrameworkRelocationMode,
|
|
53
23
|
ZLinkFrameworkRelocationOutcome,
|
|
54
24
|
ZLinkFrameworkRelocationReason,
|
|
55
25
|
ZLinkFrameworkRuntimeState,
|
|
56
26
|
ZLinkFrameworkTerminationOutcome,
|
|
57
27
|
ZLinkFrameworkTerminationReason,
|
|
28
|
+
zlinkMessageMetadata,
|
|
58
29
|
ZLinkObjectRole,
|
|
59
30
|
ZLinkPeerState,
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
ZLinkSpotCreateState
|
|
31
|
+
ZLinkSpotCreateState,
|
|
32
|
+
ZLinkSpotKind
|
|
63
33
|
} from '../../contracts';
|
|
64
|
-
import {
|
|
34
|
+
import type { Type } from '../../contracts/Common/CoreTypes';
|
|
35
|
+
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
36
|
+
import { ZLinkConfigurationException } from '../../contracts/Configuration/ConfigurationException';
|
|
37
|
+
import { requireMessageFlowLogMode } from '../../contracts/Configuration/DiagnosticsValidation';
|
|
38
|
+
import { DEFAULT_ACTIVATION_CONCURRENCY_LIMIT } from '../../contracts/Configuration/InternalDefaults';
|
|
39
|
+
import { DEFAULT_REQUEST_TIMEOUT_MS } from '../../contracts/Configuration/Registration';
|
|
65
40
|
import {
|
|
66
|
-
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
|
|
67
41
|
ZLinkDispatchErrorSurface,
|
|
68
|
-
ZLinkDispatchMessageKind
|
|
42
|
+
ZLinkDispatchMessageKind,
|
|
43
|
+
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome
|
|
69
44
|
} from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
70
|
-
import
|
|
71
|
-
|
|
45
|
+
import {
|
|
46
|
+
type ZLinkLocationOwnerToken,
|
|
47
|
+
zlinkDefaultLocationOptions,
|
|
48
|
+
type ZLinkLocationRuntimeQuery
|
|
49
|
+
} from '../../contracts/Locations';
|
|
50
|
+
import { ZLINK_PROVIDER_MAX_PAGE_SIZE } from '../../contracts/Locations/Stores';
|
|
51
|
+
import { createDeadlineExceededError, isAbortError, isDeadlineExceededError } from '../abort';
|
|
52
|
+
import { ZLinkActivationAdmission } from '../activation-admission';
|
|
53
|
+
import {
|
|
54
|
+
type DefaultZLinkActorManager,
|
|
55
|
+
type ZLinkActorManagerOptions,
|
|
56
|
+
decodeRemoteActorSourceLeaveTerminal,
|
|
57
|
+
DefaultZLinkActorClient,
|
|
58
|
+
isActorAuthorityPayload,
|
|
59
|
+
publishInitialActorAuthority,
|
|
60
|
+
rewriteActorAuthorityOwner,
|
|
61
|
+
ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
|
|
62
|
+
ZLinkActorHandoffCoordinator,
|
|
63
|
+
ZLinkActorTransferRegistry
|
|
64
|
+
} from '../actors';
|
|
65
|
+
import { messageFollowOwnerNodeRid, ownerFence } from '../actors/actor-message-follow-context';
|
|
66
|
+
import {
|
|
67
|
+
ZLINK_INTERNAL_ACTOR_TRANSPORT_DELIVERY_GATE,
|
|
68
|
+
type ZLinkInternalActorTransportDeliveryGate
|
|
69
|
+
} from '../actors/actor-transport-delivery-gate';
|
|
70
|
+
import { ZLinkRuntimeAdmissionGate } from '../admission';
|
|
71
|
+
import {
|
|
72
|
+
ZLINK_INTERNAL_APPLICATION_JOB_QUEUE_HANDLER_START_GATE,
|
|
73
|
+
type ZLinkInternalApplicationJobQueueHandlerStartGate
|
|
74
|
+
} from '../application-jobs/application-job-queue-handler-start-gate';
|
|
75
|
+
import {
|
|
76
|
+
releaseApplicationJobPermitBeforeHandler,
|
|
77
|
+
runWithApplicationJobPermit
|
|
78
|
+
} from '../application-jobs/application-job-queue-scope';
|
|
79
|
+
import {
|
|
80
|
+
type ZLinkBackendAdapterFactory,
|
|
81
|
+
type ZLinkBackendContext,
|
|
82
|
+
type ZLinkBackendMeshNode,
|
|
83
|
+
meshActorSessionNodeAdapter,
|
|
84
|
+
ZLinkNodeBackendAdapterFactory
|
|
85
|
+
} from '../backend';
|
|
86
|
+
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
87
|
+
import {
|
|
88
|
+
RequestResult,
|
|
89
|
+
SubmitResult,
|
|
90
|
+
type ZLinkBackendMessageLike as MessageLike
|
|
91
|
+
} from '../backend/runtime-values';
|
|
72
92
|
import {
|
|
73
93
|
DefaultZLinkChannelRuntimeOptions,
|
|
74
|
-
ZLinkDispatchErrorReporter,
|
|
75
94
|
ZLinkChannelRuntimeManager,
|
|
95
|
+
ZLinkDispatchErrorReporter,
|
|
76
96
|
ZLinkRuntimeRouteTransport,
|
|
77
97
|
type ZLinkDispatchErrorSink
|
|
78
98
|
} from '../channels';
|
|
@@ -82,33 +102,72 @@ import {
|
|
|
82
102
|
encodeChannelErrorReplyParts,
|
|
83
103
|
encodeChannelReplyParts
|
|
84
104
|
} from '../channels/channel-envelope';
|
|
85
|
-
import {
|
|
86
|
-
import {
|
|
87
|
-
ZLINK_INTERNAL_ACTOR_TRANSPORT_DELIVERY_GATE,
|
|
88
|
-
type ZLinkInternalActorTransportDeliveryGate
|
|
89
|
-
} from '../actors/actor-transport-delivery-gate';
|
|
90
|
-
import {
|
|
91
|
-
ZLINK_INTERNAL_APPLICATION_JOB_QUEUE_HANDLER_START_GATE,
|
|
92
|
-
type ZLinkInternalApplicationJobQueueHandlerStartGate
|
|
93
|
-
} from '../application-jobs/application-job-queue-handler-start-gate';
|
|
94
|
-
import { ZLinkFrameworkExecutionState, ZLinkRuntimeTaskErrorSink } from '../execution';
|
|
105
|
+
import type { ZLinkFrameworkRegistration } from '../configuration';
|
|
95
106
|
import {
|
|
107
|
+
type ZLinkRuntimeEventPublisher,
|
|
96
108
|
createDiagnosticsContext,
|
|
97
109
|
createInboundFlow,
|
|
98
110
|
currentOrCreateFlow,
|
|
99
111
|
DefaultZLinkRuntimeEventPublisher,
|
|
100
112
|
flowIfEnabled,
|
|
101
113
|
runWithFlow,
|
|
114
|
+
ZLinkRuntimeMetrics,
|
|
102
115
|
type ZLinkDiagnosticsContext,
|
|
103
116
|
type ZLinkMessageFlowModeCell,
|
|
104
|
-
type ZLinkRuntimeMetricMeshSnapshot
|
|
105
|
-
ZLinkRuntimeMetrics
|
|
117
|
+
type ZLinkRuntimeMetricMeshSnapshot
|
|
106
118
|
} from '../diagnostics';
|
|
119
|
+
import { METRIC_NAMES, MILLISECONDS_PER_SECOND } from '../diagnostics/runtime-metrics';
|
|
120
|
+
import { RuntimeEventQueue } from '../diagnostics/runtime-observation-queue';
|
|
107
121
|
import {
|
|
108
122
|
ZLinkClientServerRuntimeProjection,
|
|
109
123
|
ZLinkFanoutRuntimeProjection
|
|
110
124
|
} from '../diagnostics/topology-runtime-projections';
|
|
111
|
-
import {
|
|
125
|
+
import { ZLinkFrameworkExecutionState, ZLinkRuntimeTaskErrorSink } from '../execution';
|
|
126
|
+
import { ZLinkListenerRecords } from '../foundation/listener-records';
|
|
127
|
+
import {
|
|
128
|
+
runtimeAcceptsWork,
|
|
129
|
+
runtimeObservationIsTerminal,
|
|
130
|
+
runtimeStateIsReady
|
|
131
|
+
} from '../foundation/runtime-state-projections';
|
|
132
|
+
import { rewriteServiceAuthorityOwner } from '../foundation/service-authority-payload-codec';
|
|
133
|
+
import { ServiceRelocationAuthorityError } from '../foundation/service-relocation-coordinator';
|
|
134
|
+
import {
|
|
135
|
+
replaceServiceRelocationAuthorityApplicationPayload,
|
|
136
|
+
serviceRelocationAuthorityApplicationPayload
|
|
137
|
+
} from '../foundation/service-relocation-runtime';
|
|
138
|
+
import {
|
|
139
|
+
MeshPeerRuntimeState,
|
|
140
|
+
OperationKind,
|
|
141
|
+
ReceiveKind,
|
|
142
|
+
type ReadyRecord,
|
|
143
|
+
type ReceiveRecord
|
|
144
|
+
} from '../foundation/service-runtime-contracts';
|
|
145
|
+
import type {
|
|
146
|
+
ServiceAsyncInstanceActivationAuthority,
|
|
147
|
+
ServiceInstanceApplicationLifecycle
|
|
148
|
+
} from '../foundation/service-stateful-runtime';
|
|
149
|
+
import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
|
|
150
|
+
import {
|
|
151
|
+
createInternalFrameworkException,
|
|
152
|
+
internalFrameworkWireReply,
|
|
153
|
+
ZLinkFrameworkInternalErrorKind
|
|
154
|
+
} from '../framework-errors-internal';
|
|
155
|
+
import {
|
|
156
|
+
ZLinkAuthoritySpotRouteResolver,
|
|
157
|
+
ZLinkOwnerCleanupError,
|
|
158
|
+
type ZLinkLocationRuntime,
|
|
159
|
+
type ZLinkStoreLocationResolvers
|
|
160
|
+
} from '../locations';
|
|
161
|
+
import {
|
|
162
|
+
decodeFrameworkCreationPayload,
|
|
163
|
+
encodeFrameworkCreationPayload
|
|
164
|
+
} from '../messaging/creation-payload-codec';
|
|
165
|
+
import {
|
|
166
|
+
decodeFrameworkPayloadMessage,
|
|
167
|
+
encodeFrameworkPayloadMessage
|
|
168
|
+
} from '../messaging/payload-codec';
|
|
169
|
+
import { ZLinkSubmitStatus } from '../messaging/submission-result';
|
|
170
|
+
import { decodeRoutingId, encodeRoutingIdStorageHex, routingIdsEqual } from '../routing-id';
|
|
112
171
|
import {
|
|
113
172
|
DefaultZLinkSpotManager,
|
|
114
173
|
ZLinkPublicSpotManager,
|
|
@@ -117,83 +176,52 @@ import {
|
|
|
117
176
|
type ZLinkDetachedTaskRunner,
|
|
118
177
|
type ZLinkSpotManagerOptions
|
|
119
178
|
} from '../spots';
|
|
120
|
-
import type {
|
|
121
|
-
import { messageFollowOwnerNodeRid, ownerFence } from '../actors/actor-message-follow-context';
|
|
122
|
-
import {
|
|
123
|
-
DefaultZLinkActorClient,
|
|
124
|
-
ZLinkActorHandoffCoordinator,
|
|
125
|
-
ZLinkActorTransferRegistry,
|
|
126
|
-
decodeRemoteActorSourceLeaveTerminal,
|
|
127
|
-
isActorAuthorityPayload,
|
|
128
|
-
publishInitialActorAuthority,
|
|
129
|
-
rewriteActorAuthorityOwner
|
|
130
|
-
} from '../actors';
|
|
179
|
+
import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
|
|
131
180
|
import {
|
|
132
181
|
DefaultZLinkBoundSessionFactory,
|
|
133
|
-
type DefaultZLinkBoundSession,
|
|
134
|
-
type ZLinkStreamPayloadCodec,
|
|
135
182
|
ZLinkStreamBindingRuntime,
|
|
136
|
-
ZLinkStreamRuntimeManager
|
|
183
|
+
ZLinkStreamRuntimeManager,
|
|
184
|
+
type DefaultZLinkBoundSession,
|
|
185
|
+
type ZLinkStreamPayloadCodec
|
|
137
186
|
} from '../streams';
|
|
138
|
-
import {
|
|
139
|
-
ZLinkOwnerCleanupError,
|
|
140
|
-
ZLinkAuthoritySpotRouteResolver,
|
|
141
|
-
type ZLinkLocationRuntime,
|
|
142
|
-
type ZLinkStoreLocationResolvers
|
|
143
|
-
} from '../locations';
|
|
144
|
-
import {
|
|
145
|
-
zlinkDefaultLocationOptions,
|
|
146
|
-
type ZLinkLocationRuntimeQuery
|
|
147
|
-
} from '../../contracts/Locations';
|
|
187
|
+
import { ZLinkActorPlacementCoordinator } from './actor-placement-coordinator';
|
|
148
188
|
import { ZLinkActorRuntimeOptionsFactory } from './actor-runtime-options-factory';
|
|
149
|
-
import { ZLinkActorTransferRuntime } from './actor-transfer-runtime';
|
|
150
189
|
import { ZLinkActorTransferAuthorityRuntime } from './actor-transfer-authority-runtime';
|
|
151
|
-
import {
|
|
152
|
-
import { ZLinkLocationRuntimeOwner } from './location-runtime-owner';
|
|
153
|
-
import { MeshRouterResolver } from './mesh-router-resolver';
|
|
154
|
-
import { ZLinkBoundSessionRelay } from './bound-session-relay';
|
|
155
|
-
import { decodeRoutingId, encodeRoutingIdStorageHex, routingIdsEqual } from '../routing-id';
|
|
156
|
-
import { rewriteServiceAuthorityOwner } from '../foundation/service-authority-payload-codec';
|
|
190
|
+
import { ZLinkActorTransferRuntime } from './actor-transfer-runtime';
|
|
157
191
|
import {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
192
|
+
ApplicationJobQueue,
|
|
193
|
+
nodeEffectiveProcessorCount,
|
|
194
|
+
resolveApplicationJobQueueConfiguration
|
|
195
|
+
} from './application-job-queue';
|
|
196
|
+
import { ZLinkBoundSessionRelay } from './bound-session-relay';
|
|
162
197
|
import { ZLinkChannelRuntimeOptionsFactory } from './channel-runtime-options-factory';
|
|
163
|
-
import {
|
|
164
|
-
import {
|
|
165
|
-
import { ZLinkRuntimeAdmissionGate } from '../admission';
|
|
166
|
-
import { ZLinkRetiringRollbackError, ZLinkRouteMeshRuntimeCoordinator } from './route-mesh-runtime';
|
|
167
|
-
import { ZLinkConfigurationException } from '../../contracts/Configuration/ConfigurationException';
|
|
168
|
-
import { ZLinkStatefulAuthorityRouteRuntime } from './stateful-authority-route-runtime';
|
|
198
|
+
import { ZLinkEntryActorRuntimeService } from './entry-actor-runtime';
|
|
199
|
+
import { HostCapacityStatusProjection } from './host-capacity-status';
|
|
169
200
|
import { ZLinkInstanceActivationAuthority } from './instance-activation-authority';
|
|
170
|
-
import
|
|
171
|
-
|
|
172
|
-
ServiceInstanceApplicationLifecycle
|
|
173
|
-
} from '../foundation/service-stateful-runtime';
|
|
174
|
-
import { hasObjectClientCapability, ZLinkHostSpotAddressTransport } from './spot-address-transport';
|
|
175
|
-
import { ZLinkUserSpotCreationCoordinator } from './user-spot-creation-coordinator';
|
|
176
|
-
import { ZLinkActorPlacementCoordinator } from './actor-placement-coordinator';
|
|
177
|
-
import {
|
|
178
|
-
decodeFrameworkPayloadMessage,
|
|
179
|
-
encodeFrameworkPayloadMessage
|
|
180
|
-
} from '../messaging/payload-codec';
|
|
201
|
+
import { ZLinkLocationRuntimeOwner } from './location-runtime-owner';
|
|
202
|
+
import { MeshRouterResolver } from './mesh-router-resolver';
|
|
181
203
|
import {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
204
|
+
ZLinkDrainingStatePublishError,
|
|
205
|
+
ZLinkRetiringRollbackError,
|
|
206
|
+
ZLinkRouteMeshRuntimeCoordinator
|
|
207
|
+
} from './route-mesh-runtime';
|
|
185
208
|
import { DefaultZLinkRouteMeshRuntimeOptions } from './route-mesh-runtime-options';
|
|
209
|
+
import { rollbackRuntimeStart, stopRuntimeParts } from './runtime-shutdown';
|
|
186
210
|
import {
|
|
187
211
|
ZLinkHostServiceRelocationRuntime,
|
|
188
212
|
ZLinkRelocationStateIncompatibleError
|
|
189
213
|
} from './service-relocation-host-runtime';
|
|
190
|
-
import {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
} from './
|
|
195
|
-
|
|
196
|
-
|
|
214
|
+
import { hasObjectClientCapability, ZLinkHostSpotAddressTransport } from './spot-address-transport';
|
|
215
|
+
import { ZLinkSpotNodeRuntimeOptionsFactory } from './spot-node-runtime-options-factory';
|
|
216
|
+
import { ZLinkSpotRuntimeOptionsFactory } from './spot-runtime-options-factory';
|
|
217
|
+
import { ZLinkStatefulAuthorityRouteRuntime } from './stateful-authority-route-runtime';
|
|
218
|
+
import { ZLinkUserSpotCreationCoordinator } from './user-spot-creation-coordinator';
|
|
219
|
+
|
|
220
|
+
const HOST_SHUTDOWN_POLL_INTERVAL_MS = 100;
|
|
221
|
+
const HANDOFF_ACCEPTANCE_POLL_INTERVAL_MS = 10;
|
|
222
|
+
const DEFAULT_HOST_CONTROL_TIMEOUT_MS = 30_000;
|
|
223
|
+
|
|
224
|
+
const LEGACY_MESH_SEND_TIMEOUT_MS = 1000;
|
|
197
225
|
|
|
198
226
|
export interface ZLinkFrameworkRuntimeLifecycle {
|
|
199
227
|
readonly isStarted: boolean;
|
|
@@ -219,6 +247,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
219
247
|
private runtimeSequence = 0n;
|
|
220
248
|
private readonly runtimeObservationSource = Symbol('zlink.framework-runtime');
|
|
221
249
|
private runtimeDeadline?: Date;
|
|
250
|
+
private shutdownDeadline?: AbortController;
|
|
222
251
|
private runtimeRelocationResult?: ZLinkFrameworkRelocationResult;
|
|
223
252
|
private runtimeTerminationResult?: ZLinkFrameworkTerminationResult;
|
|
224
253
|
private relocationOperation?: Promise<ZLinkFrameworkRelocationResult>;
|
|
@@ -245,6 +274,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
245
274
|
private actorManager?: DefaultZLinkActorManager;
|
|
246
275
|
private actorPlacement?: ZLinkActorPlacementCoordinator;
|
|
247
276
|
private spotManager?: DefaultZLinkSpotManager;
|
|
277
|
+
private userSpotCoordinator?: ZLinkUserSpotCreationCoordinator;
|
|
248
278
|
private ownerLeaseRecoveryRuntime?: ZLinkLocationRuntime;
|
|
249
279
|
private ownerLeaseRecoveryHandler?: () => void;
|
|
250
280
|
private registerUserSpotHandlers?: (runtime: ZLinkSpotNodeRuntimeManager) => void;
|
|
@@ -256,6 +286,11 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
256
286
|
private readonly metricRegistrations: import('../diagnostics').ZLinkRuntimeMetricRegistration[] =
|
|
257
287
|
[];
|
|
258
288
|
private readonly admission = new ZLinkRuntimeAdmissionGate(() => this.ownerAdmissionOpen());
|
|
289
|
+
private readonly activationAdmission = new ZLinkActivationAdmission(
|
|
290
|
+
(meshName) =>
|
|
291
|
+
this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ??
|
|
292
|
+
DEFAULT_ACTIVATION_CONCURRENCY_LIMIT
|
|
293
|
+
);
|
|
259
294
|
private cachedLocationSpotRouteResolver?: ZLinkSpotRouteResolver;
|
|
260
295
|
private actorClientLocationResolver?: ZLinkStoreLocationResolvers;
|
|
261
296
|
// Shared, runtime-mutable message-flow mode cell — installed once so
|
|
@@ -360,7 +395,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
360
395
|
this.meshRouters.classifyManualNodeTarget(meshName, targetNodeRid),
|
|
361
396
|
(meshName, sourceNodeRid, parts) => this.submitLocalMeshRoute(meshName, sourceNodeRid, parts),
|
|
362
397
|
this.metrics,
|
|
363
|
-
() => this.flowCreationEnabled()
|
|
398
|
+
() => this.flowCreationEnabled(),
|
|
399
|
+
() => this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink).flow
|
|
364
400
|
);
|
|
365
401
|
this.spotAddressTransport = new ZLinkHostSpotAddressTransport({
|
|
366
402
|
resolver: () => this.createLocationSpotRouteResolver(),
|
|
@@ -373,7 +409,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
373
409
|
meshNode: (meshName) => this.spotNodeRuntime?.meshNode(meshName),
|
|
374
410
|
completions: (meshName) => this.spotNodeRuntime?.meshCompletionTable(meshName),
|
|
375
411
|
codecs: { serializers: options.registration.messageSerializers },
|
|
376
|
-
defaultRequestTimeoutMs: options.registration.requestTimeoutMs ??
|
|
412
|
+
defaultRequestTimeoutMs: options.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
|
|
377
413
|
defaultSendTimeoutMs: defaultSpotSendTimeoutMs,
|
|
378
414
|
sendTimeoutMsForMesh: sendTimeoutMsForSpotMesh,
|
|
379
415
|
sendTimeoutMsForRouteChannel: sendTimeoutMsForSpotRouteChannel,
|
|
@@ -387,6 +423,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
387
423
|
rewriteAuthorityPayloadForOwner
|
|
388
424
|
});
|
|
389
425
|
this.streamBindingRuntime = new ZLinkStreamBindingRuntime({
|
|
426
|
+
dispatchErrors: this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink),
|
|
390
427
|
streamPayloadCodec: resolveStreamPayloadCodec(options.registration),
|
|
391
428
|
streamCompression: options.registration.streamCompression,
|
|
392
429
|
messageSerializers: options.registration.messageSerializers,
|
|
@@ -698,7 +735,6 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
698
735
|
actorTransferRegistry: this.actorTransferRegistry,
|
|
699
736
|
authorityStore: () => this.locationOwner.currentStores?.locationStore,
|
|
700
737
|
currentOwner: () => this.locationOwner.currentRuntime?.currentOwnerToken,
|
|
701
|
-
relocationStore: () => this.options.registration.locations.relocationStoreInstance,
|
|
702
738
|
liveDescriptors: (meshName, signal) => {
|
|
703
739
|
const runtime = this.locationOwner.currentRuntime;
|
|
704
740
|
if (runtime === undefined) {
|
|
@@ -766,6 +802,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
766
802
|
});
|
|
767
803
|
this.serviceRelocation = new ZLinkHostServiceRelocationRuntime({
|
|
768
804
|
registration: options.registration,
|
|
805
|
+
targetAdmissionSealed: () => this.shutdownOperationStartedAt !== undefined,
|
|
769
806
|
providerResolver: options.providerResolver,
|
|
770
807
|
locationStore: () => this.locationOwner.currentStores?.locationStore,
|
|
771
808
|
currentOwner: () => this.locationOwner.currentRuntime?.currentOwnerToken,
|
|
@@ -795,7 +832,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
795
832
|
reconcileStatefulAuthorityRoutes: (signal) =>
|
|
796
833
|
this.statefulAuthorityRoutes?.reconcile(signal) ?? Promise.resolve(),
|
|
797
834
|
runtimeEventPublisher: this.runtimeEventPublisher,
|
|
798
|
-
metrics: this.metrics
|
|
835
|
+
metrics: this.metrics,
|
|
836
|
+
activationAdmission: this.activationAdmission
|
|
799
837
|
});
|
|
800
838
|
this.actorTransferAuthorityRuntime = new ZLinkActorTransferAuthorityRuntime({
|
|
801
839
|
store: () => this.locationOwner.actorTransferStore() as never,
|
|
@@ -828,6 +866,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
828
866
|
},
|
|
829
867
|
hostState: () => this.runtimeState,
|
|
830
868
|
admission: this.admission,
|
|
869
|
+
activationAdmission: this.activationAdmission,
|
|
831
870
|
publishRetiring: (meshName, signal) => this.publishMeshRetiring(meshName, signal),
|
|
832
871
|
rollbackRetiring: (meshName, signal) => this.publishMeshServing(meshName, signal),
|
|
833
872
|
publishDraining: (meshName, signal) => this.publishMeshDraining(meshName, signal),
|
|
@@ -850,7 +889,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
850
889
|
}
|
|
851
890
|
|
|
852
891
|
get isStarted(): boolean {
|
|
853
|
-
return this.executionState !== undefined;
|
|
892
|
+
return this.executionState !== undefined && !this.executionState.abortController.signal.aborted;
|
|
854
893
|
}
|
|
855
894
|
|
|
856
895
|
get status(): ZLinkFrameworkRuntimeStatus {
|
|
@@ -868,10 +907,24 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
868
907
|
};
|
|
869
908
|
}
|
|
870
909
|
|
|
910
|
+
// Bound listener records of the current runtime generation.
|
|
911
|
+
private listenerRecords = new ZLinkListenerRecords();
|
|
912
|
+
|
|
913
|
+
getListenerStatus(kind: ZLinkListenerKind, name: string): ZLinkListenerStatus {
|
|
914
|
+
const endpoint = this.listenerRecords.endpoint(kind, name);
|
|
915
|
+
if (endpoint === undefined || endpoint.length === 0) {
|
|
916
|
+
throw new ZLinkConfigurationException(
|
|
917
|
+
`Listener '${kind}:${name}' is not configured or has not bound.`
|
|
918
|
+
);
|
|
919
|
+
}
|
|
920
|
+
return { kind, name, endpoint, observedAt: new Date() };
|
|
921
|
+
}
|
|
922
|
+
|
|
871
923
|
observe(signal?: AbortSignal): AsyncIterable<ZLinkObservedStatus<ZLinkFrameworkRuntimeStatus>> {
|
|
872
924
|
const queue = new RuntimeEventQueue<ZLinkFrameworkRuntimeStatus>(undefined, signal);
|
|
873
925
|
this.runtimeObservers.add(queue);
|
|
874
926
|
queue.onClose(() => this.runtimeObservers.delete(queue));
|
|
927
|
+
this.publishRuntimeStatus(queue, this.status);
|
|
875
928
|
return queue;
|
|
876
929
|
}
|
|
877
930
|
|
|
@@ -888,7 +941,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
888
941
|
options,
|
|
889
942
|
this.options.registration.applicationVersion
|
|
890
943
|
);
|
|
891
|
-
const deadlineMs = options.deadlineMs ??
|
|
944
|
+
const deadlineMs = options.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
|
|
892
945
|
if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
|
|
893
946
|
return Promise.reject(new RangeError('Relocation deadlineMs must be greater than zero.'));
|
|
894
947
|
}
|
|
@@ -957,7 +1010,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
957
1010
|
}
|
|
958
1011
|
|
|
959
1012
|
shutdown(options?: ZLinkFrameworkLifecycleOptions): Promise<ZLinkFrameworkTerminationResult> {
|
|
960
|
-
const deadlineMs = options?.deadlineMs ??
|
|
1013
|
+
const deadlineMs = options?.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
|
|
961
1014
|
if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
|
|
962
1015
|
return Promise.reject(new RangeError('Shutdown deadlineMs must be greater than zero.'));
|
|
963
1016
|
}
|
|
@@ -1021,6 +1074,17 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1021
1074
|
stopStartingSignal
|
|
1022
1075
|
);
|
|
1023
1076
|
if (drained.kind === 'forceStopped') {
|
|
1077
|
+
// Settled authority on both sides or an expired source owner lease
|
|
1078
|
+
// ends the host in Error (spec 30 §13).
|
|
1079
|
+
if (drained.error instanceof ServiceRelocationAuthorityError) {
|
|
1080
|
+
return this.completeRelocation(
|
|
1081
|
+
blockedRelocation(
|
|
1082
|
+
mode,
|
|
1083
|
+
effectiveTargetApplicationVersion,
|
|
1084
|
+
ZLinkFrameworkRelocationReason.RelocationFailed
|
|
1085
|
+
)
|
|
1086
|
+
);
|
|
1087
|
+
}
|
|
1024
1088
|
return this.resetBlockedRelocation(
|
|
1025
1089
|
blockedRelocation(
|
|
1026
1090
|
mode,
|
|
@@ -1059,52 +1123,78 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1059
1123
|
}
|
|
1060
1124
|
|
|
1061
1125
|
private async runShutdown(deadlineMs: number): Promise<ZLinkFrameworkTerminationResult> {
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1126
|
+
return await this.runWithShutdownDeadline(deadlineMs, async () => {
|
|
1127
|
+
const deadlineAtMs = performance.now() + deadlineMs;
|
|
1128
|
+
try {
|
|
1129
|
+
this.admission.close();
|
|
1130
|
+
if (this.runtimeState === ZLinkFrameworkRuntimeState.Preparing) {
|
|
1131
|
+
this.executionState?.abortController.abort();
|
|
1132
|
+
}
|
|
1133
|
+
this.setRuntimeState(ZLinkFrameworkRuntimeState.Draining);
|
|
1134
|
+
if (
|
|
1135
|
+
this.relocationOperation !== undefined &&
|
|
1136
|
+
this.relocationStopStarting?.signal.aborted === true
|
|
1137
|
+
) {
|
|
1138
|
+
await this.relocationOperation;
|
|
1139
|
+
}
|
|
1140
|
+
// Seal application admission before the public status reports that the
|
|
1141
|
+
// host no longer accepts work. This prevents status polling from racing
|
|
1142
|
+
// with the coordinator's synchronous seal step.
|
|
1143
|
+
const unscopedStreamDrain = this.streamRuntime?.notifyUnscopedServerDrain();
|
|
1144
|
+
const shutdown = this.routeMeshCoordinator.shutdownHost(
|
|
1145
|
+
this.runtimeDeadline!,
|
|
1146
|
+
this.shutdownDeadline!.signal
|
|
1147
|
+
);
|
|
1148
|
+
const drain = await shutdown;
|
|
1149
|
+
await unscopedStreamDrain;
|
|
1150
|
+
await this.stop();
|
|
1151
|
+
if (drain.kind === 'forceStopped') {
|
|
1152
|
+
return this.completeTermination({
|
|
1153
|
+
outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
|
|
1154
|
+
reason:
|
|
1155
|
+
drain.reason === 'deadline_exceeded'
|
|
1156
|
+
? ZLinkFrameworkTerminationReason.DeadlineExceeded
|
|
1157
|
+
: ZLinkFrameworkTerminationReason.TeardownFailed
|
|
1158
|
+
});
|
|
1159
|
+
}
|
|
1160
|
+
if (performance.now() >= deadlineAtMs) {
|
|
1161
|
+
throw createDeadlineExceededError('Shutdown resource cleanup exceeded its deadline.');
|
|
1162
|
+
}
|
|
1163
|
+
return this.completeTermination({
|
|
1164
|
+
outcome: ZLinkFrameworkTerminationOutcome.Stopped,
|
|
1165
|
+
reason: ZLinkFrameworkTerminationReason.None
|
|
1166
|
+
});
|
|
1167
|
+
} catch (error) {
|
|
1168
|
+
await this.stop().catch(() => undefined);
|
|
1085
1169
|
return this.completeTermination({
|
|
1086
1170
|
outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
|
|
1087
|
-
reason:
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
: ZLinkFrameworkTerminationReason.TeardownFailed
|
|
1171
|
+
reason: isDeadlineExceededError(error)
|
|
1172
|
+
? ZLinkFrameworkTerminationReason.DeadlineExceeded
|
|
1173
|
+
: ZLinkFrameworkTerminationReason.TeardownFailed
|
|
1091
1174
|
});
|
|
1092
1175
|
}
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1176
|
+
});
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
private async runWithShutdownDeadline<T>(
|
|
1180
|
+
deadlineMs: number,
|
|
1181
|
+
operation: () => Promise<T>
|
|
1182
|
+
): Promise<T> {
|
|
1183
|
+
if (this.shutdownDeadline !== undefined) return await operation();
|
|
1184
|
+
const deadline = new AbortController();
|
|
1185
|
+
this.shutdownDeadline = deadline;
|
|
1186
|
+
const ownsRuntimeDeadline = this.runtimeDeadline === undefined;
|
|
1187
|
+
this.runtimeDeadline ??= new Date(Date.now() + deadlineMs);
|
|
1188
|
+
const timer = setTimeout(
|
|
1189
|
+
() => deadline.abort(createDeadlineExceededError('Shutdown deadline exceeded.')),
|
|
1190
|
+
Math.max(0, this.runtimeDeadline.getTime() - Date.now())
|
|
1191
|
+
);
|
|
1192
|
+
try {
|
|
1193
|
+
return await operation();
|
|
1194
|
+
} finally {
|
|
1195
|
+
clearTimeout(timer);
|
|
1196
|
+
this.shutdownDeadline = undefined;
|
|
1197
|
+
if (ownsRuntimeDeadline) this.runtimeDeadline = undefined;
|
|
1108
1198
|
}
|
|
1109
1199
|
}
|
|
1110
1200
|
|
|
@@ -1141,8 +1231,9 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1141
1231
|
private recordRelocationResult(result: ZLinkFrameworkRelocationResult): void {
|
|
1142
1232
|
if (this.relocationOperationStartedAt !== undefined) {
|
|
1143
1233
|
this.metrics.duration(
|
|
1144
|
-
|
|
1145
|
-
Math.max(0, performance.now() - this.relocationOperationStartedAt) /
|
|
1234
|
+
METRIC_NAMES.HostRelocationDuration,
|
|
1235
|
+
Math.max(0, performance.now() - this.relocationOperationStartedAt) /
|
|
1236
|
+
MILLISECONDS_PER_SECOND,
|
|
1146
1237
|
{
|
|
1147
1238
|
mode: relocationModeMetricName(result.mode),
|
|
1148
1239
|
outcome:
|
|
@@ -1151,7 +1242,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1151
1242
|
);
|
|
1152
1243
|
}
|
|
1153
1244
|
if (result.outcome === ZLinkFrameworkRelocationOutcome.Blocked) {
|
|
1154
|
-
this.metrics.count(
|
|
1245
|
+
this.metrics.count(METRIC_NAMES.HostRelocationBlocked, 1, {
|
|
1155
1246
|
mode: relocationModeMetricName(result.mode),
|
|
1156
1247
|
reason: relocationReasonMetricName(result.reason)
|
|
1157
1248
|
});
|
|
@@ -1174,8 +1265,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1174
1265
|
this.runtimeDeadline = undefined;
|
|
1175
1266
|
if (this.shutdownOperationStartedAt !== undefined) {
|
|
1176
1267
|
this.metrics.duration(
|
|
1177
|
-
|
|
1178
|
-
Math.max(0, performance.now() - this.shutdownOperationStartedAt) /
|
|
1268
|
+
METRIC_NAMES.HostShutdownDuration,
|
|
1269
|
+
Math.max(0, performance.now() - this.shutdownOperationStartedAt) / MILLISECONDS_PER_SECOND,
|
|
1179
1270
|
{
|
|
1180
1271
|
outcome:
|
|
1181
1272
|
result.outcome === ZLinkFrameworkTerminationOutcome.Stopped
|
|
@@ -1185,7 +1276,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1185
1276
|
);
|
|
1186
1277
|
}
|
|
1187
1278
|
if (result.outcome === ZLinkFrameworkTerminationOutcome.ForceStopped) {
|
|
1188
|
-
this.metrics.count(
|
|
1279
|
+
this.metrics.count(METRIC_NAMES.HostShutdownForced, 1, {
|
|
1189
1280
|
reason: terminationReasonMetricName(result.reason)
|
|
1190
1281
|
});
|
|
1191
1282
|
}
|
|
@@ -1207,14 +1298,18 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1207
1298
|
this.notifyTopologyHostStateChanged();
|
|
1208
1299
|
const status = this.status;
|
|
1209
1300
|
for (const observer of this.runtimeObservers) {
|
|
1210
|
-
|
|
1211
|
-
observer.seal(status, this.runtimeObservationSource);
|
|
1212
|
-
} else {
|
|
1213
|
-
observer.push(status, this.runtimeObservationSource);
|
|
1214
|
-
}
|
|
1301
|
+
this.publishRuntimeStatus(observer, status);
|
|
1215
1302
|
}
|
|
1216
|
-
|
|
1217
|
-
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
private publishRuntimeStatus(
|
|
1306
|
+
observer: RuntimeEventQueue<ZLinkFrameworkRuntimeStatus>,
|
|
1307
|
+
status: ZLinkFrameworkRuntimeStatus
|
|
1308
|
+
): void {
|
|
1309
|
+
if (runtimeObservationIsTerminal(status.state)) {
|
|
1310
|
+
observer.complete(status, this.runtimeObservationSource);
|
|
1311
|
+
} else {
|
|
1312
|
+
observer.push(status, this.runtimeObservationSource);
|
|
1218
1313
|
}
|
|
1219
1314
|
}
|
|
1220
1315
|
|
|
@@ -1322,6 +1417,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1322
1417
|
|
|
1323
1418
|
this.setRuntimeState(ZLinkFrameworkRuntimeState.Preparing);
|
|
1324
1419
|
this.lifecycleSink?.push('framework:start');
|
|
1420
|
+
const listenerRecords = new ZLinkListenerRecords();
|
|
1421
|
+
this.listenerRecords = listenerRecords;
|
|
1325
1422
|
const channelAdapter = this.backendAdapterFactory.createChannelAdapter();
|
|
1326
1423
|
const context = channelAdapter.createContext();
|
|
1327
1424
|
const coreHwm = this.options.registration.coreHwm;
|
|
@@ -1344,13 +1441,14 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1344
1441
|
channelAdapter,
|
|
1345
1442
|
context,
|
|
1346
1443
|
this.options.providerResolver,
|
|
1347
|
-
this.createChannelRuntimeOptions()
|
|
1444
|
+
{ ...this.createChannelRuntimeOptions(), listenerRecords }
|
|
1348
1445
|
);
|
|
1349
1446
|
this.channelRuntime = channelRuntime;
|
|
1350
1447
|
channelRuntime.prepareMeshDispatch(this.executionState.taskRunner);
|
|
1351
|
-
spotNodeRuntime = new ZLinkSpotNodeRuntimeManager(
|
|
1352
|
-
this.createSpotNodeRuntimeOptions(context, dispatchErrors)
|
|
1353
|
-
|
|
1448
|
+
spotNodeRuntime = new ZLinkSpotNodeRuntimeManager({
|
|
1449
|
+
...this.createSpotNodeRuntimeOptions(context, dispatchErrors),
|
|
1450
|
+
listenerRecords
|
|
1451
|
+
});
|
|
1354
1452
|
await spotNodeRuntime.start();
|
|
1355
1453
|
this.spotNodeRuntime = spotNodeRuntime;
|
|
1356
1454
|
this.registerUserSpotHandlers?.(spotNodeRuntime);
|
|
@@ -1363,7 +1461,9 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1363
1461
|
const locationRuntime = await this.locationOwner.startForRuntime(
|
|
1364
1462
|
this.meshRouters.primaryMeshName(),
|
|
1365
1463
|
spotNodeRuntime,
|
|
1366
|
-
channelRuntime
|
|
1464
|
+
channelRuntime,
|
|
1465
|
+
this.executionState.abortController.signal,
|
|
1466
|
+
() => this.shutdownDeadline!.signal
|
|
1367
1467
|
);
|
|
1368
1468
|
startedLocationRuntime = locationRuntime;
|
|
1369
1469
|
if (locationRuntime !== undefined) {
|
|
@@ -1386,6 +1486,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1386
1486
|
}
|
|
1387
1487
|
}
|
|
1388
1488
|
streamRuntime = new ZLinkStreamRuntimeManager({
|
|
1489
|
+
listenerRecords,
|
|
1389
1490
|
registration: this.options.registration,
|
|
1390
1491
|
backendAdapterFactory: this.backendAdapterFactory,
|
|
1391
1492
|
context,
|
|
@@ -1414,15 +1515,27 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1414
1515
|
this.setRuntimeState(ZLinkFrameworkRuntimeState.Serving);
|
|
1415
1516
|
this.lifecycleSink?.push('framework:started');
|
|
1416
1517
|
} catch (error) {
|
|
1518
|
+
if (this.shutdownDeadline !== undefined && isAbortError(error)) throw error;
|
|
1417
1519
|
await statefulAuthorityRoutes?.stop();
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1520
|
+
try {
|
|
1521
|
+
await this.runWithShutdownDeadline(DEFAULT_HOST_CONTROL_TIMEOUT_MS, async () =>
|
|
1522
|
+
rollbackRuntimeStart({
|
|
1523
|
+
context,
|
|
1524
|
+
startedLocationRuntime: startedLocationRuntime ?? this.locationOwner.currentRuntime,
|
|
1525
|
+
shutdownSignal: this.shutdownDeadline!.signal,
|
|
1526
|
+
streamRuntime,
|
|
1527
|
+
spotNodeRuntime,
|
|
1528
|
+
channelRuntime,
|
|
1529
|
+
ownedStores: registeredRuntimeStores(this.options.registration)
|
|
1530
|
+
})
|
|
1531
|
+
);
|
|
1532
|
+
} catch (cleanupError) {
|
|
1533
|
+
this.runtimeOrPreStartErrorSink.reportRuntimeTaskException(
|
|
1534
|
+
'framework start rollback',
|
|
1535
|
+
cleanupError
|
|
1536
|
+
);
|
|
1537
|
+
throw new AggregateError([error, cleanupError], 'Framework start and rollback failed.');
|
|
1538
|
+
}
|
|
1426
1539
|
this.executionState = undefined;
|
|
1427
1540
|
this.channelRuntime = undefined;
|
|
1428
1541
|
this.spotNodeRuntime = undefined;
|
|
@@ -1436,7 +1549,9 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1436
1549
|
}
|
|
1437
1550
|
|
|
1438
1551
|
async stop(): Promise<void> {
|
|
1439
|
-
await this.
|
|
1552
|
+
await this.runWithShutdownDeadline(DEFAULT_HOST_CONTROL_TIMEOUT_MS, async () =>
|
|
1553
|
+
this.runLifecycle(() => this.stopCore())
|
|
1554
|
+
);
|
|
1440
1555
|
}
|
|
1441
1556
|
|
|
1442
1557
|
private runtimeMetricMeshSnapshots(): readonly ZLinkRuntimeMetricMeshSnapshot[] {
|
|
@@ -1477,7 +1592,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1477
1592
|
reserved: capacity.reserved,
|
|
1478
1593
|
limit: capacity.limit
|
|
1479
1594
|
})),
|
|
1480
|
-
activation:
|
|
1595
|
+
activation: this.activationAdmission.current(meshName),
|
|
1481
1596
|
instanceSpots: []
|
|
1482
1597
|
});
|
|
1483
1598
|
}
|
|
@@ -1489,6 +1604,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1489
1604
|
if (state === undefined) {
|
|
1490
1605
|
return;
|
|
1491
1606
|
}
|
|
1607
|
+
state.abortController.abort();
|
|
1492
1608
|
|
|
1493
1609
|
const channelRuntime = this.channelRuntime;
|
|
1494
1610
|
const spotNodeRuntime = this.spotNodeRuntime;
|
|
@@ -1497,24 +1613,26 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1497
1613
|
this.stopTopologyObservers();
|
|
1498
1614
|
this.removeOwnerLeaseRecoveryPublication();
|
|
1499
1615
|
const locationSnapshot = this.locationOwner.clearForStop();
|
|
1500
|
-
this.executionState = undefined;
|
|
1501
|
-
this.channelRuntime = undefined;
|
|
1502
|
-
this.spotNodeRuntime = undefined;
|
|
1503
|
-
this.streamRuntime = undefined;
|
|
1504
|
-
this.statefulAuthorityRoutes = undefined;
|
|
1505
|
-
this.cachedLocationSpotRouteResolver = undefined;
|
|
1506
1616
|
this.lifecycleSink?.push('framework:stop');
|
|
1507
1617
|
await statefulAuthorityRoutes?.stop();
|
|
1508
1618
|
await stopRuntimeParts({
|
|
1509
1619
|
state,
|
|
1510
1620
|
locationSnapshot,
|
|
1511
1621
|
cleanupDeadline: this.runtimeDeadline,
|
|
1622
|
+
shutdownSignal: this.shutdownDeadline!.signal,
|
|
1512
1623
|
streamRuntime,
|
|
1513
1624
|
spotNodeRuntime,
|
|
1514
1625
|
channelRuntime,
|
|
1515
1626
|
serviceRelocation: this.serviceRelocation,
|
|
1516
1627
|
ownedStores: registeredRuntimeStores(this.options.registration)
|
|
1517
1628
|
});
|
|
1629
|
+
this.executionState = undefined;
|
|
1630
|
+
this.channelRuntime = undefined;
|
|
1631
|
+
this.spotNodeRuntime = undefined;
|
|
1632
|
+
this.streamRuntime = undefined;
|
|
1633
|
+
this.statefulAuthorityRoutes = undefined;
|
|
1634
|
+
this.cachedLocationSpotRouteResolver = undefined;
|
|
1635
|
+
this.listenerRecords.clear();
|
|
1518
1636
|
this.lifecycleSink?.push('framework:stopped');
|
|
1519
1637
|
if (this.shutdownOperation === undefined) {
|
|
1520
1638
|
this.setRuntimeState(ZLinkFrameworkRuntimeState.Stopped);
|
|
@@ -1579,7 +1697,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1579
1697
|
pollingIntervalMs:
|
|
1580
1698
|
this.options.registration.locations.options.pollingIntervalMs ??
|
|
1581
1699
|
zlinkDefaultLocationOptions.pollingIntervalMs,
|
|
1582
|
-
pageSize:
|
|
1700
|
+
pageSize: ZLINK_PROVIDER_MAX_PAGE_SIZE,
|
|
1583
1701
|
reportError: (error) =>
|
|
1584
1702
|
this.runtimeOrPreStartErrorSink.reportRuntimeTaskException(
|
|
1585
1703
|
'stateful authority route reconciliation',
|
|
@@ -1834,6 +1952,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1834
1952
|
} catch (error) {
|
|
1835
1953
|
throw new ZLinkDrainingStatePublishError(error);
|
|
1836
1954
|
}
|
|
1955
|
+
await awaitWithDrainSignal(this.serviceRelocation.drainTargetAttempts(), signal);
|
|
1837
1956
|
}
|
|
1838
1957
|
|
|
1839
1958
|
private async cleanupOwnerForDrain(signal: AbortSignal): Promise<void> {
|
|
@@ -1870,7 +1989,6 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1870
1989
|
),
|
|
1871
1990
|
isMaterializing: (target) =>
|
|
1872
1991
|
spotManager.isInstanceMaterializing(meshName, target.targetSpotId as never),
|
|
1873
|
-
isClosing: (target) => spotManager.isInstanceClosing(meshName, target.targetSpotId as never),
|
|
1874
1992
|
isIdleEvicting: (target) =>
|
|
1875
1993
|
spotManager.isInstanceSpotIdleEvicting(meshName, target.targetSpotId as never),
|
|
1876
1994
|
beginIdleEviction: (target) =>
|
|
@@ -1926,11 +2044,13 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1926
2044
|
| 'boundSessionFactory'
|
|
1927
2045
|
| 'shutdownSignal'
|
|
1928
2046
|
| 'admission'
|
|
2047
|
+
| 'activationAdmission'
|
|
1929
2048
|
| 'placementCreate'
|
|
1930
2049
|
> {
|
|
1931
2050
|
this.ensureLocationRuntime();
|
|
1932
2051
|
return {
|
|
1933
2052
|
...this.actorRuntimeOptionsFactory().createActorManagerOptions(),
|
|
2053
|
+
activationAdmission: this.activationAdmission,
|
|
1934
2054
|
placementCreate: async (actorId, actorType, createOnly, call, signal) => {
|
|
1935
2055
|
const placement = this.actorPlacement;
|
|
1936
2056
|
if (placement === undefined) {
|
|
@@ -1992,12 +2112,31 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1992
2112
|
?.meshNode(meshName)
|
|
1993
2113
|
?.completeClosedInstance?.(spotId, objectGeneration);
|
|
1994
2114
|
},
|
|
1995
|
-
beginInstanceIdleClosingAuthority: (meshName, spotId) =>
|
|
1996
|
-
this.locationOwner.currentLifecycle?.beginInstanceSpotClosing(
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
Promise.resolve(undefined),
|
|
2115
|
+
beginInstanceIdleClosingAuthority: (meshName, spotId, onCommitted) =>
|
|
2116
|
+
this.locationOwner.currentLifecycle?.beginInstanceSpotClosing(
|
|
2117
|
+
meshName,
|
|
2118
|
+
spotId,
|
|
2119
|
+
onCommitted
|
|
2120
|
+
) ?? Promise.resolve(undefined),
|
|
2121
|
+
beginInstanceClosingAuthority: (meshName, spotId, onCommitted) =>
|
|
2122
|
+
this.locationOwner.currentLifecycle?.beginInstanceSpotClosing(
|
|
2123
|
+
meshName,
|
|
2124
|
+
spotId,
|
|
2125
|
+
onCommitted
|
|
2126
|
+
) ?? Promise.resolve(undefined),
|
|
2127
|
+
beginUserClosingAuthority: async (meshName, spotId, objectGeneration, onCommitted) => {
|
|
2128
|
+
const coordinator = this.userSpotCoordinator;
|
|
2129
|
+
const nodeRid = this.spotNodeRuntime?.meshNode(meshName)?.status().routingId;
|
|
2130
|
+
if (coordinator === undefined || nodeRid === undefined) {
|
|
2131
|
+
throw new ZLinkConfigurationException(
|
|
2132
|
+
'User Spot context Close requires its authority coordinator.'
|
|
2133
|
+
);
|
|
2134
|
+
}
|
|
2135
|
+
return await coordinator.beginOwnerClose(
|
|
2136
|
+
{ spotId: spotId as never, objectGeneration, meshName, nodeRid },
|
|
2137
|
+
onCommitted
|
|
2138
|
+
);
|
|
2139
|
+
},
|
|
2001
2140
|
createLocationSpotRouteResolver: () => this.createLocationSpotRouteResolver(),
|
|
2002
2141
|
boundSessionRelay: this.boundSessionRelay,
|
|
2003
2142
|
actorHandoff: this.actorHandoff,
|
|
@@ -2006,19 +2145,12 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2006
2145
|
detachedTaskRunner: this.detachedTaskRunner(),
|
|
2007
2146
|
metrics: this.metrics,
|
|
2008
2147
|
admission: this.admission,
|
|
2009
|
-
|
|
2148
|
+
statefulExecution: {
|
|
2149
|
+
admissionOpen: () => this.ownerAdmissionOpen(),
|
|
2150
|
+
hostState: () => this.runtimeState
|
|
2151
|
+
}
|
|
2010
2152
|
}).create(this.actorTransferRuntime),
|
|
2011
|
-
|
|
2012
|
-
this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ?? 128,
|
|
2013
|
-
onInstanceActivationConcurrencyChanged: (meshName: string) => {
|
|
2014
|
-
void this.spotNodeRuntime
|
|
2015
|
-
?.publishMeshNodeState(
|
|
2016
|
-
this.runtimeState,
|
|
2017
|
-
this.executionState?.abortController.signal,
|
|
2018
|
-
meshName
|
|
2019
|
-
)
|
|
2020
|
-
.catch(() => undefined);
|
|
2021
|
-
}
|
|
2153
|
+
activationAdmission: this.activationAdmission
|
|
2022
2154
|
};
|
|
2023
2155
|
}
|
|
2024
2156
|
|
|
@@ -2077,7 +2209,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2077
2209
|
);
|
|
2078
2210
|
}
|
|
2079
2211
|
const meshNode = this.spotNodeRuntime?.meshNode(meshName);
|
|
2080
|
-
const descriptors =
|
|
2212
|
+
const descriptors = await listAllMeshNodeDescriptors(locationStore, meshName, signal);
|
|
2081
2213
|
const selected = await selectReadyLocationPlacementDescriptor(
|
|
2082
2214
|
descriptors,
|
|
2083
2215
|
meshNode,
|
|
@@ -2123,7 +2255,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2123
2255
|
};
|
|
2124
2256
|
}
|
|
2125
2257
|
});
|
|
2126
|
-
const coordinator = new ZLinkUserSpotCreationCoordinator({
|
|
2258
|
+
const coordinator = (this.userSpotCoordinator = new ZLinkUserSpotCreationCoordinator({
|
|
2127
2259
|
store: locationStore,
|
|
2128
2260
|
publishReadyRoute: (meshName, route) => {
|
|
2129
2261
|
this.cachedLocationSpotRouteResolver?.invalidate?.(route.spot.spotId);
|
|
@@ -2187,7 +2319,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2187
2319
|
);
|
|
2188
2320
|
}
|
|
2189
2321
|
const meshNode = this.spotNodeRuntime?.meshNode(meshName);
|
|
2190
|
-
const descriptors =
|
|
2322
|
+
const descriptors = await listAllMeshNodeDescriptors(locationStore, meshName, signal);
|
|
2191
2323
|
const selected = await selectReadyLocationPlacementDescriptor(
|
|
2192
2324
|
descriptors,
|
|
2193
2325
|
meshNode,
|
|
@@ -2231,7 +2363,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2231
2363
|
localStatus.lifecycleGeneration === selected.lifecycleGeneration
|
|
2232
2364
|
};
|
|
2233
2365
|
}
|
|
2234
|
-
});
|
|
2366
|
+
}));
|
|
2235
2367
|
const factories = new Map(
|
|
2236
2368
|
[...this.options.registration.spotNodes].map(([meshName, node]) => [
|
|
2237
2369
|
meshName,
|
|
@@ -2298,7 +2430,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2298
2430
|
try {
|
|
2299
2431
|
payload = {
|
|
2300
2432
|
packetName: 'ZLinkFrameworkUserSpotReply',
|
|
2301
|
-
contentType:
|
|
2433
|
+
contentType: ZlinkStreamContentType.Raw,
|
|
2302
2434
|
payload: Buffer.from(message.data())
|
|
2303
2435
|
};
|
|
2304
2436
|
} finally {
|
|
@@ -2428,23 +2560,6 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2428
2560
|
);
|
|
2429
2561
|
},
|
|
2430
2562
|
close: async (record, signal) => {
|
|
2431
|
-
if (!local.hasActiveSpot(record.target.spotId as never)) {
|
|
2432
|
-
throw createInternalFrameworkException(
|
|
2433
|
-
ZLinkFrameworkInternalErrorKind.SpotMoving,
|
|
2434
|
-
`User Spot '${record.target.spotId}' is not materialized on its authority owner.`,
|
|
2435
|
-
true
|
|
2436
|
-
);
|
|
2437
|
-
}
|
|
2438
|
-
if (!local.canCloseUserSpot(meshName, record.target.spotId as never)) {
|
|
2439
|
-
return {
|
|
2440
|
-
terminalResult: RequestResult.Ok,
|
|
2441
|
-
failureCode: 0,
|
|
2442
|
-
tail: {
|
|
2443
|
-
kind: 'userSpotClose' as const,
|
|
2444
|
-
closed: false
|
|
2445
|
-
}
|
|
2446
|
-
};
|
|
2447
|
-
}
|
|
2448
2563
|
return {
|
|
2449
2564
|
terminalResult: RequestResult.Ok,
|
|
2450
2565
|
failureCode: 0,
|
|
@@ -2452,8 +2567,15 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2452
2567
|
kind: 'userSpotClose' as const,
|
|
2453
2568
|
closed: await coordinator.handleRemoteClose(
|
|
2454
2569
|
record,
|
|
2455
|
-
(spot, closeSignal) =>
|
|
2456
|
-
|
|
2570
|
+
(spot, beginAuthority, closeSignal) =>
|
|
2571
|
+
local.closeUserWithAuthority(
|
|
2572
|
+
spot.meshName,
|
|
2573
|
+
spot.spotId,
|
|
2574
|
+
beginAuthority,
|
|
2575
|
+
closeSignal
|
|
2576
|
+
),
|
|
2577
|
+
signal,
|
|
2578
|
+
(spot) => local.isSpotClosing(spot.meshName, spot.spotId)
|
|
2457
2579
|
)
|
|
2458
2580
|
}
|
|
2459
2581
|
};
|
|
@@ -2487,7 +2609,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2487
2609
|
}
|
|
2488
2610
|
return node.requestUserSpotClose(targetNodeRid, request, timeoutMs);
|
|
2489
2611
|
},
|
|
2490
|
-
defaultTimeoutMs: this.options.registration.requestTimeoutMs ??
|
|
2612
|
+
defaultTimeoutMs: this.options.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
|
|
2491
2613
|
messageSerializers: this.options.registration.messageSerializers
|
|
2492
2614
|
});
|
|
2493
2615
|
}
|
|
@@ -2509,6 +2631,10 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2509
2631
|
notifyEntrySpotActorCreated: (nodeRid, actor, createRequest, signal) =>
|
|
2510
2632
|
this.spotNodeRuntime?.notifyEntrySpotActorCreated(nodeRid, actor, createRequest, signal) ??
|
|
2511
2633
|
Promise.resolve(undefined),
|
|
2634
|
+
notifyEntrySpotActorJoined: (actor, signal) =>
|
|
2635
|
+
this.spotNodeRuntime?.notifyPrimaryEntrySpotActorJoined(actor, signal) ?? Promise.resolve(),
|
|
2636
|
+
notifyEntrySpotActorLeft: (actor, signal) =>
|
|
2637
|
+
this.spotNodeRuntime?.notifyPrimaryEntrySpotActorLeft(actor, signal) ?? Promise.resolve(),
|
|
2512
2638
|
locationLifecycle: () => this.locationOwner.currentLifecycle,
|
|
2513
2639
|
primaryMeshName: () => this.meshRouters.primaryMeshName(),
|
|
2514
2640
|
actorMeshName: (actorType) => this.meshRouters.actorMeshName(actorType),
|
|
@@ -2626,6 +2752,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2626
2752
|
}).create();
|
|
2627
2753
|
return {
|
|
2628
2754
|
...options,
|
|
2755
|
+
errorSink: this.runtimeOrPreStartErrorSink,
|
|
2629
2756
|
peerAdmissionSealed: (meshName: string) => !this.admission.accepts(meshName),
|
|
2630
2757
|
messageFollowReceiver: (record: ServiceMessageFollowRecord) => {
|
|
2631
2758
|
if (record.source.kind === 'actor') {
|
|
@@ -2655,15 +2782,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2655
2782
|
record,
|
|
2656
2783
|
this.executionState?.abortController.signal
|
|
2657
2784
|
),
|
|
2658
|
-
|
|
2659
|
-
return (
|
|
2660
|
-
this.spotManager?.instanceActivationConcurrency(meshName) ?? {
|
|
2661
|
-
active: 0,
|
|
2662
|
-
limit:
|
|
2663
|
-
this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ?? 128
|
|
2664
|
-
}
|
|
2665
|
-
);
|
|
2666
|
-
}
|
|
2785
|
+
activationConcurrency: (meshName: string) => this.activationAdmission.current(meshName)
|
|
2667
2786
|
};
|
|
2668
2787
|
}
|
|
2669
2788
|
|
|
@@ -2688,14 +2807,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2688
2807
|
);
|
|
2689
2808
|
}
|
|
2690
2809
|
const binding = record.kindData;
|
|
2691
|
-
const replyBindingFailure = (
|
|
2692
|
-
kind
|
|
2693
|
-
message: string
|
|
2694
|
-
): void => {
|
|
2695
|
-
const terminal =
|
|
2696
|
-
kind === ZLinkFrameworkInternalErrorKind.ActorGenerationStale
|
|
2697
|
-
? { terminalResult: RequestResult.InvalidState, failureCode: 0 }
|
|
2698
|
-
: internalFrameworkWireReply(createInternalFrameworkException(kind, message));
|
|
2810
|
+
const replyBindingFailure = (kind: ZLinkFrameworkInternalErrorKind): void => {
|
|
2811
|
+
const terminal = internalFrameworkWireReply(kind);
|
|
2699
2812
|
if (
|
|
2700
2813
|
record.replyFailure?.(terminal.terminalResult, terminal.failureCode) !== SubmitResult.Ok
|
|
2701
2814
|
) {
|
|
@@ -2719,17 +2832,11 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2719
2832
|
nativeActorRef.actorId !== binding.actor.actorId ||
|
|
2720
2833
|
!routingIdsEqual(nativeActorRef.nodeRid, binding.actor.nodeRid)
|
|
2721
2834
|
) {
|
|
2722
|
-
replyBindingFailure(
|
|
2723
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
2724
|
-
`Actor '${binding.actor.actorId}' binding target is no longer current.`
|
|
2725
|
-
);
|
|
2835
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2726
2836
|
return;
|
|
2727
2837
|
}
|
|
2728
2838
|
if (nativeActorRef.generation !== binding.actor.generation) {
|
|
2729
|
-
replyBindingFailure(
|
|
2730
|
-
ZLinkFrameworkInternalErrorKind.ActorGenerationStale,
|
|
2731
|
-
`Actor '${binding.actor.actorId}' binding object generation is stale.`
|
|
2732
|
-
);
|
|
2839
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorGenerationStale);
|
|
2733
2840
|
return;
|
|
2734
2841
|
}
|
|
2735
2842
|
const node =
|
|
@@ -2744,10 +2851,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2744
2851
|
state.locationGeneration !== binding.authorityOwnerGeneration ||
|
|
2745
2852
|
state.isMoving
|
|
2746
2853
|
) {
|
|
2747
|
-
replyBindingFailure(
|
|
2748
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
2749
|
-
`Actor '${binding.actor.actorId}' binding authority fence is stale.`
|
|
2750
|
-
);
|
|
2854
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2751
2855
|
return;
|
|
2752
2856
|
}
|
|
2753
2857
|
const sessionOwnerIsLocal =
|
|
@@ -2761,6 +2865,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2761
2865
|
nodeRid: binding.actor.nodeRid
|
|
2762
2866
|
};
|
|
2763
2867
|
if (sessionOwnerIsLocal) {
|
|
2868
|
+
releaseApplicationJobPermitBeforeHandler();
|
|
2764
2869
|
await this.streamBindingRuntime.retireRemoteBinding(
|
|
2765
2870
|
actorRef,
|
|
2766
2871
|
binding.sessionRid,
|
|
@@ -2777,10 +2882,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2777
2882
|
binding.sessionRid
|
|
2778
2883
|
);
|
|
2779
2884
|
if (target === undefined) {
|
|
2780
|
-
replyBindingFailure(
|
|
2781
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
2782
|
-
`Actor '${binding.actor.actorId}' Session route is unavailable.`
|
|
2783
|
-
);
|
|
2885
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2784
2886
|
return;
|
|
2785
2887
|
}
|
|
2786
2888
|
const installed = state.installBoundSessionBinding({
|
|
@@ -2793,10 +2895,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2793
2895
|
bindingGeneration: binding.bindingGeneration
|
|
2794
2896
|
});
|
|
2795
2897
|
if (!installed) {
|
|
2796
|
-
replyBindingFailure(
|
|
2797
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
2798
|
-
`Actor '${binding.actor.actorId}' Session binding generation is stale.`
|
|
2799
|
-
);
|
|
2898
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2800
2899
|
return;
|
|
2801
2900
|
}
|
|
2802
2901
|
replyBindingSuccess();
|
|
@@ -3017,7 +3116,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
3017
3116
|
return reporter;
|
|
3018
3117
|
}
|
|
3019
3118
|
|
|
3020
|
-
|
|
3119
|
+
detachedTaskRunner(): ZLinkDetachedTaskRunner {
|
|
3021
3120
|
return {
|
|
3022
3121
|
runDetached: (taskName, callback) => {
|
|
3023
3122
|
const runner = this.executionState?.taskRunner;
|
|
@@ -3093,8 +3192,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
3093
3192
|
undefined,
|
|
3094
3193
|
async (meshName, nodeRid, expectedLifecycleGeneration, signal) => {
|
|
3095
3194
|
const descriptor = (
|
|
3096
|
-
await authority
|
|
3097
|
-
).
|
|
3195
|
+
await listAllMeshNodeDescriptors(authority, meshName, signal)
|
|
3196
|
+
).find(
|
|
3098
3197
|
(candidate) =>
|
|
3099
3198
|
routingIdsEqual(candidate.rid, nodeRid) &&
|
|
3100
3199
|
candidate.lifecycleGeneration === expectedLifecycleGeneration
|
|
@@ -3191,7 +3290,7 @@ export function hasExactPeerReadiness(
|
|
|
3191
3290
|
peer.routingId !== null &&
|
|
3192
3291
|
String(peer.routingId) === String(descriptor.rid) &&
|
|
3193
3292
|
peer.lifecycleGeneration === descriptor.lifecycleGeneration &&
|
|
3194
|
-
peer.state ===
|
|
3293
|
+
peer.state === MeshPeerRuntimeState.Serving
|
|
3195
3294
|
)
|
|
3196
3295
|
)
|
|
3197
3296
|
);
|
|
@@ -3201,7 +3300,11 @@ export {
|
|
|
3201
3300
|
ZLinkActorTransferAuthorityRuntime,
|
|
3202
3301
|
transferIdString
|
|
3203
3302
|
} from './actor-transfer-authority-runtime';
|
|
3204
|
-
export {
|
|
3303
|
+
export {
|
|
3304
|
+
ZLinkDrainingStatePublishError,
|
|
3305
|
+
ZLinkRetiringRollbackError,
|
|
3306
|
+
ZLinkRouteMeshRuntimeCoordinator
|
|
3307
|
+
} from './route-mesh-runtime';
|
|
3205
3308
|
export { ZLinkRelocationStateIncompatibleError } from './service-relocation-host-runtime';
|
|
3206
3309
|
export {
|
|
3207
3310
|
ZLinkHostSpotAddressTransport,
|
|
@@ -3220,7 +3323,7 @@ async function waitForForcedSessionNotification(
|
|
|
3220
3323
|
if (operation === undefined) return;
|
|
3221
3324
|
let timeoutHandle: ReturnType<typeof setTimeout> | undefined;
|
|
3222
3325
|
const timeout = new Promise<void>((resolve) => {
|
|
3223
|
-
timeoutHandle = setTimeout(resolve,
|
|
3326
|
+
timeoutHandle = setTimeout(resolve, HOST_SHUTDOWN_POLL_INTERVAL_MS);
|
|
3224
3327
|
});
|
|
3225
3328
|
try {
|
|
3226
3329
|
await Promise.race([operation.catch(() => undefined), timeout]);
|
|
@@ -3253,13 +3356,6 @@ async function awaitWithDrainSignal(
|
|
|
3253
3356
|
});
|
|
3254
3357
|
}
|
|
3255
3358
|
|
|
3256
|
-
class ZLinkDrainingStatePublishError extends Error {
|
|
3257
|
-
constructor(cause: unknown) {
|
|
3258
|
-
super('Failed to publish draining peer rows.', { cause });
|
|
3259
|
-
this.name = 'ZLinkDrainingStatePublishError';
|
|
3260
|
-
}
|
|
3261
|
-
}
|
|
3262
|
-
|
|
3263
3359
|
function resolveBackendAdapterFactory(internalOptions: unknown): ZLinkBackendAdapterFactory {
|
|
3264
3360
|
if (
|
|
3265
3361
|
typeof internalOptions === 'object' &&
|
|
@@ -3418,7 +3514,7 @@ function waitForPlacementReadiness(signal?: AbortSignal): Promise<void> {
|
|
|
3418
3514
|
const timer = setTimeout(() => {
|
|
3419
3515
|
signal?.removeEventListener('abort', abort);
|
|
3420
3516
|
resolve();
|
|
3421
|
-
},
|
|
3517
|
+
}, HANDOFF_ACCEPTANCE_POLL_INTERVAL_MS);
|
|
3422
3518
|
const abort = () => {
|
|
3423
3519
|
clearTimeout(timer);
|
|
3424
3520
|
signal?.removeEventListener('abort', abort);
|