@zlink-systems/framework 0.26.0 → 0.28.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/Actors/ZLinkActorClient.d.ts +1 -1
- package/dist/contracts/Channels/Calls.d.ts +1 -1
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/Builders.d.ts +0 -1
- package/dist/contracts/Configuration/Configs.d.ts +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 -5
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/Spots/Contracts.d.ts +2 -2
- package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
- package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +49 -153
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +83 -105
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +1 -0
- package/dist/runtime/actors/actor-request-deadline.js +6 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +2 -0
- package/dist/runtime/admission.js +7 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +7 -27
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +41 -34
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -8
- package/dist/runtime/channels/channel-clients.js +73 -59
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.d.ts +1 -1
- package/dist/runtime/channels/channel-envelope.js +51 -39
- package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
- package/dist/runtime/channels/channel-outbound-operations.js +25 -42
- 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 +4 -4
- package/dist/runtime/channels/channel-runtime-manager.js +13 -10
- package/dist/runtime/channels/channel-socket-options.js +3 -12
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +240 -177
- package/dist/runtime/channels/channel-transports.d.ts +21 -31
- package/dist/runtime/channels/channel-transports.js +80 -62
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +130 -72
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +1 -3
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
- package/dist/runtime/channels/source-spot-router.d.ts +1 -1
- package/dist/runtime/channels/source-spot-router.js +2 -4
- 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.d.ts +1 -1
- package/dist/runtime/channels/spot-node-route-transport.js +5 -5
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
- package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +79 -94
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +11 -8
- package/dist/runtime/host/actor-packet-relay.js +54 -99
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +14 -13
- package/dist/runtime/host/index.js +190 -171
- 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 +15 -28
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +3 -12
- package/dist/runtime/host/spot-address-transport.js +78 -220
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +309 -336
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/request-deadline.d.ts +3 -0
- package/dist/runtime/messaging/request-deadline.js +39 -0
- package/dist/runtime/messaging/submission-result.d.ts +4 -0
- package/dist/runtime/messaging/submission-result.js +56 -1
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +7 -8
- package/dist/runtime/spots/spot-outbound.js +21 -23
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -2
- package/dist/runtime/streams/index.d.ts +16 -17
- package/dist/runtime/streams/index.js +22 -23
- package/dist/runtime/streams/managed-stream.d.ts +5 -2
- package/dist/runtime/streams/managed-stream.js +20 -13
- package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
- 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 +6 -8
- package/dist/runtime/streams/session-calls.js +6 -22
- package/dist/runtime/streams/session-context.d.ts +10 -10
- package/dist/runtime/streams/session-context.js +25 -10
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +1 -1
- package/src/contracts/Channels/Calls.ts +1 -1
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/Builders.ts +0 -1
- package/src/contracts/Configuration/Configs.ts +0 -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 -71
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/Spots/Contracts.ts +2 -2
- package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
- package/src/contracts/Streams/IZLinkSession.ts +2 -3
- package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +85 -218
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +4 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +14 -37
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +67 -10
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +44 -49
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +139 -102
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +74 -57
- package/src/runtime/channels/channel-outbound-operations.ts +40 -55
- 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 +12 -30
- package/src/runtime/channels/channel-socket-options.ts +8 -15
- package/src/runtime/channels/channel-socket-registry.ts +291 -196
- package/src/runtime/channels/channel-transports.ts +168 -145
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +172 -91
- package/src/runtime/channels/local-spot-route-transport.ts +1 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
- package/src/runtime/channels/source-spot-router.ts +2 -9
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +7 -9
- package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +127 -125
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +63 -160
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +180 -260
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +327 -320
- 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 +16 -57
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
- package/src/runtime/host/spot-address-transport.ts +175 -356
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +457 -482
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/request-deadline.ts +58 -0
- package/src/runtime/messaging/submission-result.ts +72 -2
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +59 -47
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +98 -66
- package/src/runtime/streams/bound-session-service.ts +22 -2
- package/src/runtime/streams/index.ts +78 -68
- package/src/runtime/streams/managed-stream.ts +32 -23
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
- 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 +11 -36
- package/src/runtime/streams/session-context.ts +60 -25
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,81 +1,98 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
ZLinkFrameworkInternalErrorKind,
|
|
4
|
-
createInternalFrameworkException,
|
|
5
|
-
internalFrameworkWireReply
|
|
6
|
-
} from '../framework-errors-internal';
|
|
1
|
+
import { listAllMeshNodeDescriptors } from '../locations/location-store-pages';
|
|
2
|
+
import { ZlinkStreamContentType } from '@zlink-systems/stream-wire';
|
|
7
3
|
import { randomBytes, randomUUID } from 'node:crypto';
|
|
8
|
-
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
9
|
-
import {
|
|
10
|
-
RequestResult,
|
|
11
|
-
SubmitResult,
|
|
12
|
-
type ZLinkBackendMessageLike as MessageLike
|
|
13
|
-
} from '../backend/runtime-values';
|
|
14
|
-
import {
|
|
15
|
-
OperationKind,
|
|
16
|
-
ReceiveKind,
|
|
17
|
-
type ReadyRecord,
|
|
18
|
-
type ReceiveRecord
|
|
19
|
-
} from '../foundation/service-runtime-contracts';
|
|
20
|
-
import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
|
|
21
|
-
import { runtimeAcceptsWork, runtimeStateIsReady } from '../foundation/runtime-state-projections';
|
|
22
|
-
import { createDeadlineExceededError, isDeadlineExceededError } from '../abort';
|
|
23
|
-
import { meshActorSessionNodeAdapter, ZLinkNodeBackendAdapterFactory } from '../backend';
|
|
24
|
-
import type {
|
|
25
|
-
ZLinkBackendAdapterFactory,
|
|
26
|
-
ZLinkBackendContext,
|
|
27
|
-
ZLinkBackendMeshNode
|
|
28
|
-
} from '../backend';
|
|
29
|
-
|
|
30
|
-
const LEGACY_MESH_SEND_TIMEOUT_MS = 1000;
|
|
31
|
-
import type { ZLinkFrameworkRegistration } from '../configuration';
|
|
32
|
-
import type {
|
|
33
|
-
ActorRef,
|
|
34
|
-
RoutingId,
|
|
35
|
-
ZLinkMeshNodeDescriptor,
|
|
36
|
-
ZLinkClientServerRuntime,
|
|
37
|
-
ZLinkFanoutRuntime,
|
|
38
|
-
ZLinkFrameworkRuntime,
|
|
39
|
-
ZLinkListenerKind,
|
|
40
|
-
ZLinkListenerStatus,
|
|
41
|
-
ZLinkFrameworkLifecycleOptions,
|
|
42
|
-
ZLinkFrameworkRelocationOptions,
|
|
43
|
-
ZLinkFrameworkRelocationResult,
|
|
44
|
-
ZLinkObservedStatus,
|
|
45
|
-
ZLinkFrameworkRuntimeStatus,
|
|
46
|
-
ZLinkFrameworkTerminationResult,
|
|
47
|
-
ZLinkRouteMeshRuntime
|
|
48
|
-
} from '../../contracts';
|
|
49
|
-
import type { ZLinkLocationOwnerToken } from '../../contracts/Locations';
|
|
50
|
-
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
51
|
-
import type { Type } from '../../contracts/Common/CoreTypes';
|
|
52
|
-
import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
|
|
53
|
-
import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
|
|
54
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,
|
|
55
22
|
ZLinkFrameworkRelocationMode,
|
|
56
23
|
ZLinkFrameworkRelocationOutcome,
|
|
57
24
|
ZLinkFrameworkRelocationReason,
|
|
58
25
|
ZLinkFrameworkRuntimeState,
|
|
59
26
|
ZLinkFrameworkTerminationOutcome,
|
|
60
27
|
ZLinkFrameworkTerminationReason,
|
|
28
|
+
zlinkMessageMetadata,
|
|
61
29
|
ZLinkObjectRole,
|
|
62
30
|
ZLinkPeerState,
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
ZLinkSpotCreateState
|
|
31
|
+
ZLinkSpotCreateState,
|
|
32
|
+
ZLinkSpotKind
|
|
66
33
|
} from '../../contracts';
|
|
67
|
-
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';
|
|
68
40
|
import {
|
|
69
|
-
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
|
|
70
41
|
ZLinkDispatchErrorSurface,
|
|
71
|
-
ZLinkDispatchMessageKind
|
|
42
|
+
ZLinkDispatchMessageKind,
|
|
43
|
+
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome
|
|
72
44
|
} from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
73
|
-
import
|
|
74
|
-
|
|
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';
|
|
75
92
|
import {
|
|
76
93
|
DefaultZLinkChannelRuntimeOptions,
|
|
77
|
-
ZLinkDispatchErrorReporter,
|
|
78
94
|
ZLinkChannelRuntimeManager,
|
|
95
|
+
ZLinkDispatchErrorReporter,
|
|
79
96
|
ZLinkRuntimeRouteTransport,
|
|
80
97
|
type ZLinkDispatchErrorSink
|
|
81
98
|
} from '../channels';
|
|
@@ -85,33 +102,72 @@ import {
|
|
|
85
102
|
encodeChannelErrorReplyParts,
|
|
86
103
|
encodeChannelReplyParts
|
|
87
104
|
} from '../channels/channel-envelope';
|
|
88
|
-
import {
|
|
89
|
-
import {
|
|
90
|
-
ZLINK_INTERNAL_ACTOR_TRANSPORT_DELIVERY_GATE,
|
|
91
|
-
type ZLinkInternalActorTransportDeliveryGate
|
|
92
|
-
} from '../actors/actor-transport-delivery-gate';
|
|
93
|
-
import {
|
|
94
|
-
ZLINK_INTERNAL_APPLICATION_JOB_QUEUE_HANDLER_START_GATE,
|
|
95
|
-
type ZLinkInternalApplicationJobQueueHandlerStartGate
|
|
96
|
-
} from '../application-jobs/application-job-queue-handler-start-gate';
|
|
97
|
-
import { ZLinkFrameworkExecutionState, ZLinkRuntimeTaskErrorSink } from '../execution';
|
|
105
|
+
import type { ZLinkFrameworkRegistration } from '../configuration';
|
|
98
106
|
import {
|
|
107
|
+
type ZLinkRuntimeEventPublisher,
|
|
99
108
|
createDiagnosticsContext,
|
|
100
109
|
createInboundFlow,
|
|
101
110
|
currentOrCreateFlow,
|
|
102
111
|
DefaultZLinkRuntimeEventPublisher,
|
|
103
112
|
flowIfEnabled,
|
|
104
113
|
runWithFlow,
|
|
114
|
+
ZLinkRuntimeMetrics,
|
|
105
115
|
type ZLinkDiagnosticsContext,
|
|
106
116
|
type ZLinkMessageFlowModeCell,
|
|
107
|
-
type ZLinkRuntimeMetricMeshSnapshot
|
|
108
|
-
ZLinkRuntimeMetrics
|
|
117
|
+
type ZLinkRuntimeMetricMeshSnapshot
|
|
109
118
|
} from '../diagnostics';
|
|
119
|
+
import { METRIC_NAMES, MILLISECONDS_PER_SECOND } from '../diagnostics/runtime-metrics';
|
|
120
|
+
import { RuntimeEventQueue } from '../diagnostics/runtime-observation-queue';
|
|
110
121
|
import {
|
|
111
122
|
ZLinkClientServerRuntimeProjection,
|
|
112
123
|
ZLinkFanoutRuntimeProjection
|
|
113
124
|
} from '../diagnostics/topology-runtime-projections';
|
|
114
|
-
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';
|
|
115
171
|
import {
|
|
116
172
|
DefaultZLinkSpotManager,
|
|
117
173
|
ZLinkPublicSpotManager,
|
|
@@ -120,85 +176,50 @@ import {
|
|
|
120
176
|
type ZLinkDetachedTaskRunner,
|
|
121
177
|
type ZLinkSpotManagerOptions
|
|
122
178
|
} from '../spots';
|
|
123
|
-
import type {
|
|
124
|
-
import { messageFollowOwnerNodeRid, ownerFence } from '../actors/actor-message-follow-context';
|
|
125
|
-
import {
|
|
126
|
-
DefaultZLinkActorClient,
|
|
127
|
-
ZLinkActorHandoffCoordinator,
|
|
128
|
-
ZLinkActorTransferRegistry,
|
|
129
|
-
decodeRemoteActorSourceLeaveTerminal,
|
|
130
|
-
isActorAuthorityPayload,
|
|
131
|
-
publishInitialActorAuthority,
|
|
132
|
-
rewriteActorAuthorityOwner
|
|
133
|
-
} from '../actors';
|
|
179
|
+
import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
|
|
134
180
|
import {
|
|
135
181
|
DefaultZLinkBoundSessionFactory,
|
|
136
|
-
type DefaultZLinkBoundSession,
|
|
137
|
-
type ZLinkStreamPayloadCodec,
|
|
138
182
|
ZLinkStreamBindingRuntime,
|
|
139
|
-
ZLinkStreamRuntimeManager
|
|
183
|
+
ZLinkStreamRuntimeManager,
|
|
184
|
+
type DefaultZLinkBoundSession,
|
|
185
|
+
type ZLinkStreamPayloadCodec
|
|
140
186
|
} from '../streams';
|
|
141
|
-
import {
|
|
142
|
-
ZLinkOwnerCleanupError,
|
|
143
|
-
ZLinkAuthoritySpotRouteResolver,
|
|
144
|
-
type ZLinkLocationRuntime,
|
|
145
|
-
type ZLinkStoreLocationResolvers
|
|
146
|
-
} from '../locations';
|
|
147
|
-
import {
|
|
148
|
-
zlinkDefaultLocationOptions,
|
|
149
|
-
type ZLinkLocationRuntimeQuery
|
|
150
|
-
} from '../../contracts/Locations';
|
|
187
|
+
import { ZLinkActorPlacementCoordinator } from './actor-placement-coordinator';
|
|
151
188
|
import { ZLinkActorRuntimeOptionsFactory } from './actor-runtime-options-factory';
|
|
152
|
-
import { ZLinkActorTransferRuntime } from './actor-transfer-runtime';
|
|
153
189
|
import { ZLinkActorTransferAuthorityRuntime } from './actor-transfer-authority-runtime';
|
|
154
|
-
import {
|
|
155
|
-
import { ZLinkLocationRuntimeOwner } from './location-runtime-owner';
|
|
156
|
-
import { MeshRouterResolver } from './mesh-router-resolver';
|
|
157
|
-
import { ZLinkBoundSessionRelay } from './bound-session-relay';
|
|
158
|
-
import { decodeRoutingId, encodeRoutingIdStorageHex, routingIdsEqual } from '../routing-id';
|
|
159
|
-
import { rewriteServiceAuthorityOwner } from '../foundation/service-authority-payload-codec';
|
|
190
|
+
import { ZLinkActorTransferRuntime } from './actor-transfer-runtime';
|
|
160
191
|
import {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
192
|
+
ApplicationJobQueue,
|
|
193
|
+
nodeEffectiveProcessorCount,
|
|
194
|
+
resolveApplicationJobQueueConfiguration
|
|
195
|
+
} from './application-job-queue';
|
|
196
|
+
import { ZLinkBoundSessionRelay } from './bound-session-relay';
|
|
165
197
|
import { ZLinkChannelRuntimeOptionsFactory } from './channel-runtime-options-factory';
|
|
166
|
-
import {
|
|
167
|
-
import {
|
|
168
|
-
import { ZLinkRuntimeAdmissionGate } from '../admission';
|
|
169
|
-
import { ZLinkActivationAdmission } from '../activation-admission';
|
|
170
|
-
import { ZLinkRetiringRollbackError, ZLinkRouteMeshRuntimeCoordinator } from './route-mesh-runtime';
|
|
171
|
-
import { ServiceRelocationAuthorityError } from '../foundation/service-relocation-coordinator';
|
|
172
|
-
import { ZLinkConfigurationException } from '../../contracts/Configuration/ConfigurationException';
|
|
173
|
-
import { ZLinkStatefulAuthorityRouteRuntime } from './stateful-authority-route-runtime';
|
|
198
|
+
import { ZLinkEntryActorRuntimeService } from './entry-actor-runtime';
|
|
199
|
+
import { HostCapacityStatusProjection } from './host-capacity-status';
|
|
174
200
|
import { ZLinkInstanceActivationAuthority } from './instance-activation-authority';
|
|
175
|
-
import
|
|
176
|
-
|
|
177
|
-
ServiceInstanceApplicationLifecycle
|
|
178
|
-
} from '../foundation/service-stateful-runtime';
|
|
179
|
-
import { hasObjectClientCapability, ZLinkHostSpotAddressTransport } from './spot-address-transport';
|
|
180
|
-
import { ZLinkUserSpotCreationCoordinator } from './user-spot-creation-coordinator';
|
|
181
|
-
import { ZLinkActorPlacementCoordinator } from './actor-placement-coordinator';
|
|
182
|
-
import {
|
|
183
|
-
decodeFrameworkPayloadMessage,
|
|
184
|
-
encodeFrameworkPayloadMessage
|
|
185
|
-
} from '../messaging/payload-codec';
|
|
201
|
+
import { ZLinkLocationRuntimeOwner } from './location-runtime-owner';
|
|
202
|
+
import { MeshRouterResolver } from './mesh-router-resolver';
|
|
186
203
|
import {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
204
|
+
ZLinkDrainingStatePublishError,
|
|
205
|
+
ZLinkRetiringRollbackError,
|
|
206
|
+
ZLinkRouteMeshRuntimeCoordinator
|
|
207
|
+
} from './route-mesh-runtime';
|
|
190
208
|
import { DefaultZLinkRouteMeshRuntimeOptions } from './route-mesh-runtime-options';
|
|
209
|
+
import { rollbackRuntimeStart, stopRuntimeParts } from './runtime-shutdown';
|
|
191
210
|
import {
|
|
192
211
|
ZLinkHostServiceRelocationRuntime,
|
|
193
212
|
ZLinkRelocationStateIncompatibleError
|
|
194
213
|
} from './service-relocation-host-runtime';
|
|
195
|
-
import {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
} from './
|
|
200
|
-
|
|
201
|
-
|
|
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;
|
|
202
223
|
|
|
203
224
|
export interface ZLinkFrameworkRuntimeLifecycle {
|
|
204
225
|
readonly isStarted: boolean;
|
|
@@ -224,6 +245,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
224
245
|
private runtimeSequence = 0n;
|
|
225
246
|
private readonly runtimeObservationSource = Symbol('zlink.framework-runtime');
|
|
226
247
|
private runtimeDeadline?: Date;
|
|
248
|
+
private shutdownDeadline?: AbortController;
|
|
227
249
|
private runtimeRelocationResult?: ZLinkFrameworkRelocationResult;
|
|
228
250
|
private runtimeTerminationResult?: ZLinkFrameworkTerminationResult;
|
|
229
251
|
private relocationOperation?: Promise<ZLinkFrameworkRelocationResult>;
|
|
@@ -264,16 +286,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
264
286
|
private readonly admission = new ZLinkRuntimeAdmissionGate(() => this.ownerAdmissionOpen());
|
|
265
287
|
private readonly activationAdmission = new ZLinkActivationAdmission(
|
|
266
288
|
(meshName) =>
|
|
267
|
-
this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ??
|
|
268
|
-
|
|
269
|
-
void this.spotNodeRuntime
|
|
270
|
-
?.publishMeshNodeState(
|
|
271
|
-
this.runtimeState,
|
|
272
|
-
this.executionState?.abortController.signal,
|
|
273
|
-
meshName
|
|
274
|
-
)
|
|
275
|
-
.catch(() => undefined);
|
|
276
|
-
}
|
|
289
|
+
this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ??
|
|
290
|
+
DEFAULT_ACTIVATION_CONCURRENCY_LIMIT
|
|
277
291
|
);
|
|
278
292
|
private cachedLocationSpotRouteResolver?: ZLinkSpotRouteResolver;
|
|
279
293
|
private actorClientLocationResolver?: ZLinkStoreLocationResolvers;
|
|
@@ -351,25 +365,6 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
351
365
|
);
|
|
352
366
|
this.meshRouters = new MeshRouterResolver(options.registration);
|
|
353
367
|
this.spotRouterChannelIdForMesh = this.meshRouters.spotRouterChannelIdByMesh();
|
|
354
|
-
const sendTimeoutMsForSpotMesh = (meshName: string): number =>
|
|
355
|
-
options.registration.spotNodes.get(meshName)?.router?.sendTimeoutMs ??
|
|
356
|
-
LEGACY_MESH_SEND_TIMEOUT_MS;
|
|
357
|
-
const sendTimeoutMsForSpotRouteChannel = (routeChannelId: string): number => {
|
|
358
|
-
const routeChannel = options.registration.routeChannelOptions.get(routeChannelId);
|
|
359
|
-
if (routeChannel !== undefined) {
|
|
360
|
-
return routeChannel.sendTimeoutMs ?? LEGACY_MESH_SEND_TIMEOUT_MS;
|
|
361
|
-
}
|
|
362
|
-
return sendTimeoutMsForSpotMesh(routeChannelId);
|
|
363
|
-
};
|
|
364
|
-
const defaultSpotSendTimeoutMs = Math.max(
|
|
365
|
-
LEGACY_MESH_SEND_TIMEOUT_MS,
|
|
366
|
-
...[...options.registration.spotNodes.values()].map(
|
|
367
|
-
(node) => node.router?.sendTimeoutMs ?? LEGACY_MESH_SEND_TIMEOUT_MS
|
|
368
|
-
),
|
|
369
|
-
...[...options.registration.routeChannelOptions.values()].map(
|
|
370
|
-
(route) => route.sendTimeoutMs ?? LEGACY_MESH_SEND_TIMEOUT_MS
|
|
371
|
-
)
|
|
372
|
-
);
|
|
373
368
|
this.routeTransport = new ZLinkRuntimeRouteTransport(
|
|
374
369
|
() => this.channelRuntime,
|
|
375
370
|
(routerChannelId) => this.meshRouters.canUseRouterChannel(routerChannelId),
|
|
@@ -379,7 +374,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
379
374
|
this.meshRouters.classifyManualNodeTarget(meshName, targetNodeRid),
|
|
380
375
|
(meshName, sourceNodeRid, parts) => this.submitLocalMeshRoute(meshName, sourceNodeRid, parts),
|
|
381
376
|
this.metrics,
|
|
382
|
-
() => this.flowCreationEnabled()
|
|
377
|
+
() => this.flowCreationEnabled(),
|
|
378
|
+
() => this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink).flow
|
|
383
379
|
);
|
|
384
380
|
this.spotAddressTransport = new ZLinkHostSpotAddressTransport({
|
|
385
381
|
resolver: () => this.createLocationSpotRouteResolver(),
|
|
@@ -392,10 +388,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
392
388
|
meshNode: (meshName) => this.spotNodeRuntime?.meshNode(meshName),
|
|
393
389
|
completions: (meshName) => this.spotNodeRuntime?.meshCompletionTable(meshName),
|
|
394
390
|
codecs: { serializers: options.registration.messageSerializers },
|
|
395
|
-
defaultRequestTimeoutMs: options.registration.requestTimeoutMs ??
|
|
396
|
-
defaultSendTimeoutMs: defaultSpotSendTimeoutMs,
|
|
397
|
-
sendTimeoutMsForMesh: sendTimeoutMsForSpotMesh,
|
|
398
|
-
sendTimeoutMsForRouteChannel: sendTimeoutMsForSpotRouteChannel,
|
|
391
|
+
defaultRequestTimeoutMs: options.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
|
|
399
392
|
dispatchErrors: this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink)
|
|
400
393
|
});
|
|
401
394
|
this.locationOwner = new ZLinkLocationRuntimeOwner({
|
|
@@ -406,6 +399,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
406
399
|
rewriteAuthorityPayloadForOwner
|
|
407
400
|
});
|
|
408
401
|
this.streamBindingRuntime = new ZLinkStreamBindingRuntime({
|
|
402
|
+
dispatchErrors: this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink),
|
|
409
403
|
streamPayloadCodec: resolveStreamPayloadCodec(options.registration),
|
|
410
404
|
streamCompression: options.registration.streamCompression,
|
|
411
405
|
messageSerializers: options.registration.messageSerializers,
|
|
@@ -445,8 +439,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
445
439
|
options
|
|
446
440
|
);
|
|
447
441
|
},
|
|
448
|
-
relay: (actor, header, payload
|
|
449
|
-
this.boundSessionRelay.actorPackets.relayActorPacket(actor, header, payload
|
|
442
|
+
relay: (actor, header, payload) =>
|
|
443
|
+
this.boundSessionRelay.actorPackets.relayActorPacket(actor, header, payload),
|
|
450
444
|
notifyDisconnected: (actor, signal) =>
|
|
451
445
|
this.boundSessionRelay.actorPackets.notifyBoundActorDisconnected(actor, signal)
|
|
452
446
|
});
|
|
@@ -784,6 +778,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
784
778
|
});
|
|
785
779
|
this.serviceRelocation = new ZLinkHostServiceRelocationRuntime({
|
|
786
780
|
registration: options.registration,
|
|
781
|
+
targetAdmissionSealed: () => this.shutdownOperationStartedAt !== undefined,
|
|
787
782
|
providerResolver: options.providerResolver,
|
|
788
783
|
locationStore: () => this.locationOwner.currentStores?.locationStore,
|
|
789
784
|
currentOwner: () => this.locationOwner.currentRuntime?.currentOwnerToken,
|
|
@@ -870,7 +865,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
870
865
|
}
|
|
871
866
|
|
|
872
867
|
get isStarted(): boolean {
|
|
873
|
-
return this.executionState !== undefined;
|
|
868
|
+
return this.executionState !== undefined && !this.executionState.abortController.signal.aborted;
|
|
874
869
|
}
|
|
875
870
|
|
|
876
871
|
get status(): ZLinkFrameworkRuntimeStatus {
|
|
@@ -905,6 +900,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
905
900
|
const queue = new RuntimeEventQueue<ZLinkFrameworkRuntimeStatus>(undefined, signal);
|
|
906
901
|
this.runtimeObservers.add(queue);
|
|
907
902
|
queue.onClose(() => this.runtimeObservers.delete(queue));
|
|
903
|
+
this.publishRuntimeStatus(queue, this.status);
|
|
908
904
|
return queue;
|
|
909
905
|
}
|
|
910
906
|
|
|
@@ -921,7 +917,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
921
917
|
options,
|
|
922
918
|
this.options.registration.applicationVersion
|
|
923
919
|
);
|
|
924
|
-
const deadlineMs = options.deadlineMs ??
|
|
920
|
+
const deadlineMs = options.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
|
|
925
921
|
if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
|
|
926
922
|
return Promise.reject(new RangeError('Relocation deadlineMs must be greater than zero.'));
|
|
927
923
|
}
|
|
@@ -990,7 +986,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
990
986
|
}
|
|
991
987
|
|
|
992
988
|
shutdown(options?: ZLinkFrameworkLifecycleOptions): Promise<ZLinkFrameworkTerminationResult> {
|
|
993
|
-
const deadlineMs = options?.deadlineMs ??
|
|
989
|
+
const deadlineMs = options?.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
|
|
994
990
|
if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
|
|
995
991
|
return Promise.reject(new RangeError('Shutdown deadlineMs must be greater than zero.'));
|
|
996
992
|
}
|
|
@@ -1103,52 +1099,78 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1103
1099
|
}
|
|
1104
1100
|
|
|
1105
1101
|
private async runShutdown(deadlineMs: number): Promise<ZLinkFrameworkTerminationResult> {
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1102
|
+
return await this.runWithShutdownDeadline(deadlineMs, async () => {
|
|
1103
|
+
const deadlineAtMs = performance.now() + deadlineMs;
|
|
1104
|
+
try {
|
|
1105
|
+
this.admission.close();
|
|
1106
|
+
if (this.runtimeState === ZLinkFrameworkRuntimeState.Preparing) {
|
|
1107
|
+
this.executionState?.abortController.abort();
|
|
1108
|
+
}
|
|
1109
|
+
this.setRuntimeState(ZLinkFrameworkRuntimeState.Draining);
|
|
1110
|
+
if (
|
|
1111
|
+
this.relocationOperation !== undefined &&
|
|
1112
|
+
this.relocationStopStarting?.signal.aborted === true
|
|
1113
|
+
) {
|
|
1114
|
+
await this.relocationOperation;
|
|
1115
|
+
}
|
|
1116
|
+
// Seal application admission before the public status reports that the
|
|
1117
|
+
// host no longer accepts work. This prevents status polling from racing
|
|
1118
|
+
// with the coordinator's synchronous seal step.
|
|
1119
|
+
const unscopedStreamDrain = this.streamRuntime?.notifyUnscopedServerDrain();
|
|
1120
|
+
const shutdown = this.routeMeshCoordinator.shutdownHost(
|
|
1121
|
+
this.runtimeDeadline!,
|
|
1122
|
+
this.shutdownDeadline!.signal
|
|
1123
|
+
);
|
|
1124
|
+
const drain = await shutdown;
|
|
1125
|
+
await unscopedStreamDrain;
|
|
1126
|
+
await this.stop();
|
|
1127
|
+
if (drain.kind === 'forceStopped') {
|
|
1128
|
+
return this.completeTermination({
|
|
1129
|
+
outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
|
|
1130
|
+
reason:
|
|
1131
|
+
drain.reason === 'deadline_exceeded'
|
|
1132
|
+
? ZLinkFrameworkTerminationReason.DeadlineExceeded
|
|
1133
|
+
: ZLinkFrameworkTerminationReason.TeardownFailed
|
|
1134
|
+
});
|
|
1135
|
+
}
|
|
1136
|
+
if (performance.now() >= deadlineAtMs) {
|
|
1137
|
+
throw createDeadlineExceededError('Shutdown resource cleanup exceeded its deadline.');
|
|
1138
|
+
}
|
|
1139
|
+
return this.completeTermination({
|
|
1140
|
+
outcome: ZLinkFrameworkTerminationOutcome.Stopped,
|
|
1141
|
+
reason: ZLinkFrameworkTerminationReason.None
|
|
1142
|
+
});
|
|
1143
|
+
} catch (error) {
|
|
1144
|
+
await this.stop().catch(() => undefined);
|
|
1129
1145
|
return this.completeTermination({
|
|
1130
1146
|
outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
|
|
1131
|
-
reason:
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
: ZLinkFrameworkTerminationReason.TeardownFailed
|
|
1147
|
+
reason: isDeadlineExceededError(error)
|
|
1148
|
+
? ZLinkFrameworkTerminationReason.DeadlineExceeded
|
|
1149
|
+
: ZLinkFrameworkTerminationReason.TeardownFailed
|
|
1135
1150
|
});
|
|
1136
1151
|
}
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
+
});
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
private async runWithShutdownDeadline<T>(
|
|
1156
|
+
deadlineMs: number,
|
|
1157
|
+
operation: () => Promise<T>
|
|
1158
|
+
): Promise<T> {
|
|
1159
|
+
if (this.shutdownDeadline !== undefined) return await operation();
|
|
1160
|
+
const deadline = new AbortController();
|
|
1161
|
+
this.shutdownDeadline = deadline;
|
|
1162
|
+
const ownsRuntimeDeadline = this.runtimeDeadline === undefined;
|
|
1163
|
+
this.runtimeDeadline ??= new Date(Date.now() + deadlineMs);
|
|
1164
|
+
const timer = setTimeout(
|
|
1165
|
+
() => deadline.abort(createDeadlineExceededError('Shutdown deadline exceeded.')),
|
|
1166
|
+
Math.max(0, this.runtimeDeadline.getTime() - Date.now())
|
|
1167
|
+
);
|
|
1168
|
+
try {
|
|
1169
|
+
return await operation();
|
|
1170
|
+
} finally {
|
|
1171
|
+
clearTimeout(timer);
|
|
1172
|
+
this.shutdownDeadline = undefined;
|
|
1173
|
+
if (ownsRuntimeDeadline) this.runtimeDeadline = undefined;
|
|
1152
1174
|
}
|
|
1153
1175
|
}
|
|
1154
1176
|
|
|
@@ -1185,8 +1207,9 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1185
1207
|
private recordRelocationResult(result: ZLinkFrameworkRelocationResult): void {
|
|
1186
1208
|
if (this.relocationOperationStartedAt !== undefined) {
|
|
1187
1209
|
this.metrics.duration(
|
|
1188
|
-
|
|
1189
|
-
Math.max(0, performance.now() - this.relocationOperationStartedAt) /
|
|
1210
|
+
METRIC_NAMES.HostRelocationDuration,
|
|
1211
|
+
Math.max(0, performance.now() - this.relocationOperationStartedAt) /
|
|
1212
|
+
MILLISECONDS_PER_SECOND,
|
|
1190
1213
|
{
|
|
1191
1214
|
mode: relocationModeMetricName(result.mode),
|
|
1192
1215
|
outcome:
|
|
@@ -1195,7 +1218,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1195
1218
|
);
|
|
1196
1219
|
}
|
|
1197
1220
|
if (result.outcome === ZLinkFrameworkRelocationOutcome.Blocked) {
|
|
1198
|
-
this.metrics.count(
|
|
1221
|
+
this.metrics.count(METRIC_NAMES.HostRelocationBlocked, 1, {
|
|
1199
1222
|
mode: relocationModeMetricName(result.mode),
|
|
1200
1223
|
reason: relocationReasonMetricName(result.reason)
|
|
1201
1224
|
});
|
|
@@ -1218,8 +1241,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1218
1241
|
this.runtimeDeadline = undefined;
|
|
1219
1242
|
if (this.shutdownOperationStartedAt !== undefined) {
|
|
1220
1243
|
this.metrics.duration(
|
|
1221
|
-
|
|
1222
|
-
Math.max(0, performance.now() - this.shutdownOperationStartedAt) /
|
|
1244
|
+
METRIC_NAMES.HostShutdownDuration,
|
|
1245
|
+
Math.max(0, performance.now() - this.shutdownOperationStartedAt) / MILLISECONDS_PER_SECOND,
|
|
1223
1246
|
{
|
|
1224
1247
|
outcome:
|
|
1225
1248
|
result.outcome === ZLinkFrameworkTerminationOutcome.Stopped
|
|
@@ -1229,7 +1252,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1229
1252
|
);
|
|
1230
1253
|
}
|
|
1231
1254
|
if (result.outcome === ZLinkFrameworkTerminationOutcome.ForceStopped) {
|
|
1232
|
-
this.metrics.count(
|
|
1255
|
+
this.metrics.count(METRIC_NAMES.HostShutdownForced, 1, {
|
|
1233
1256
|
reason: terminationReasonMetricName(result.reason)
|
|
1234
1257
|
});
|
|
1235
1258
|
}
|
|
@@ -1251,14 +1274,18 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1251
1274
|
this.notifyTopologyHostStateChanged();
|
|
1252
1275
|
const status = this.status;
|
|
1253
1276
|
for (const observer of this.runtimeObservers) {
|
|
1254
|
-
|
|
1255
|
-
observer.seal(status, this.runtimeObservationSource);
|
|
1256
|
-
} else {
|
|
1257
|
-
observer.push(status, this.runtimeObservationSource);
|
|
1258
|
-
}
|
|
1277
|
+
this.publishRuntimeStatus(observer, status);
|
|
1259
1278
|
}
|
|
1260
|
-
|
|
1261
|
-
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1281
|
+
private publishRuntimeStatus(
|
|
1282
|
+
observer: RuntimeEventQueue<ZLinkFrameworkRuntimeStatus>,
|
|
1283
|
+
status: ZLinkFrameworkRuntimeStatus
|
|
1284
|
+
): void {
|
|
1285
|
+
if (runtimeObservationIsTerminal(status.state)) {
|
|
1286
|
+
observer.complete(status, this.runtimeObservationSource);
|
|
1287
|
+
} else {
|
|
1288
|
+
observer.push(status, this.runtimeObservationSource);
|
|
1262
1289
|
}
|
|
1263
1290
|
}
|
|
1264
1291
|
|
|
@@ -1410,7 +1437,9 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1410
1437
|
const locationRuntime = await this.locationOwner.startForRuntime(
|
|
1411
1438
|
this.meshRouters.primaryMeshName(),
|
|
1412
1439
|
spotNodeRuntime,
|
|
1413
|
-
channelRuntime
|
|
1440
|
+
channelRuntime,
|
|
1441
|
+
this.executionState.abortController.signal,
|
|
1442
|
+
() => this.shutdownDeadline!.signal
|
|
1414
1443
|
);
|
|
1415
1444
|
startedLocationRuntime = locationRuntime;
|
|
1416
1445
|
if (locationRuntime !== undefined) {
|
|
@@ -1462,15 +1491,27 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1462
1491
|
this.setRuntimeState(ZLinkFrameworkRuntimeState.Serving);
|
|
1463
1492
|
this.lifecycleSink?.push('framework:started');
|
|
1464
1493
|
} catch (error) {
|
|
1494
|
+
if (this.shutdownDeadline !== undefined && isAbortError(error)) throw error;
|
|
1465
1495
|
await statefulAuthorityRoutes?.stop();
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1496
|
+
try {
|
|
1497
|
+
await this.runWithShutdownDeadline(DEFAULT_HOST_CONTROL_TIMEOUT_MS, async () =>
|
|
1498
|
+
rollbackRuntimeStart({
|
|
1499
|
+
context,
|
|
1500
|
+
startedLocationRuntime: startedLocationRuntime ?? this.locationOwner.currentRuntime,
|
|
1501
|
+
shutdownSignal: this.shutdownDeadline!.signal,
|
|
1502
|
+
streamRuntime,
|
|
1503
|
+
spotNodeRuntime,
|
|
1504
|
+
channelRuntime,
|
|
1505
|
+
ownedStores: registeredRuntimeStores(this.options.registration)
|
|
1506
|
+
})
|
|
1507
|
+
);
|
|
1508
|
+
} catch (cleanupError) {
|
|
1509
|
+
this.runtimeOrPreStartErrorSink.reportRuntimeTaskException(
|
|
1510
|
+
'framework start rollback',
|
|
1511
|
+
cleanupError
|
|
1512
|
+
);
|
|
1513
|
+
throw new AggregateError([error, cleanupError], 'Framework start and rollback failed.');
|
|
1514
|
+
}
|
|
1474
1515
|
this.executionState = undefined;
|
|
1475
1516
|
this.channelRuntime = undefined;
|
|
1476
1517
|
this.spotNodeRuntime = undefined;
|
|
@@ -1484,7 +1525,9 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1484
1525
|
}
|
|
1485
1526
|
|
|
1486
1527
|
async stop(): Promise<void> {
|
|
1487
|
-
await this.
|
|
1528
|
+
await this.runWithShutdownDeadline(DEFAULT_HOST_CONTROL_TIMEOUT_MS, async () =>
|
|
1529
|
+
this.runLifecycle(() => this.stopCore())
|
|
1530
|
+
);
|
|
1488
1531
|
}
|
|
1489
1532
|
|
|
1490
1533
|
private runtimeMetricMeshSnapshots(): readonly ZLinkRuntimeMetricMeshSnapshot[] {
|
|
@@ -1537,6 +1580,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1537
1580
|
if (state === undefined) {
|
|
1538
1581
|
return;
|
|
1539
1582
|
}
|
|
1583
|
+
state.abortController.abort();
|
|
1540
1584
|
|
|
1541
1585
|
const channelRuntime = this.channelRuntime;
|
|
1542
1586
|
const spotNodeRuntime = this.spotNodeRuntime;
|
|
@@ -1545,24 +1589,25 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1545
1589
|
this.stopTopologyObservers();
|
|
1546
1590
|
this.removeOwnerLeaseRecoveryPublication();
|
|
1547
1591
|
const locationSnapshot = this.locationOwner.clearForStop();
|
|
1548
|
-
this.executionState = undefined;
|
|
1549
|
-
this.channelRuntime = undefined;
|
|
1550
|
-
this.spotNodeRuntime = undefined;
|
|
1551
|
-
this.streamRuntime = undefined;
|
|
1552
|
-
this.statefulAuthorityRoutes = undefined;
|
|
1553
|
-
this.cachedLocationSpotRouteResolver = undefined;
|
|
1554
1592
|
this.lifecycleSink?.push('framework:stop');
|
|
1555
1593
|
await statefulAuthorityRoutes?.stop();
|
|
1556
1594
|
await stopRuntimeParts({
|
|
1557
1595
|
state,
|
|
1558
1596
|
locationSnapshot,
|
|
1559
1597
|
cleanupDeadline: this.runtimeDeadline,
|
|
1598
|
+
shutdownSignal: this.shutdownDeadline!.signal,
|
|
1560
1599
|
streamRuntime,
|
|
1561
1600
|
spotNodeRuntime,
|
|
1562
1601
|
channelRuntime,
|
|
1563
1602
|
serviceRelocation: this.serviceRelocation,
|
|
1564
1603
|
ownedStores: registeredRuntimeStores(this.options.registration)
|
|
1565
1604
|
});
|
|
1605
|
+
this.executionState = undefined;
|
|
1606
|
+
this.channelRuntime = undefined;
|
|
1607
|
+
this.spotNodeRuntime = undefined;
|
|
1608
|
+
this.streamRuntime = undefined;
|
|
1609
|
+
this.statefulAuthorityRoutes = undefined;
|
|
1610
|
+
this.cachedLocationSpotRouteResolver = undefined;
|
|
1566
1611
|
this.listenerRecords.clear();
|
|
1567
1612
|
this.lifecycleSink?.push('framework:stopped');
|
|
1568
1613
|
if (this.shutdownOperation === undefined) {
|
|
@@ -1628,7 +1673,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1628
1673
|
pollingIntervalMs:
|
|
1629
1674
|
this.options.registration.locations.options.pollingIntervalMs ??
|
|
1630
1675
|
zlinkDefaultLocationOptions.pollingIntervalMs,
|
|
1631
|
-
pageSize:
|
|
1676
|
+
pageSize: ZLINK_PROVIDER_MAX_PAGE_SIZE,
|
|
1632
1677
|
reportError: (error) =>
|
|
1633
1678
|
this.runtimeOrPreStartErrorSink.reportRuntimeTaskException(
|
|
1634
1679
|
'stateful authority route reconciliation',
|
|
@@ -1657,11 +1702,6 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1657
1702
|
): void {
|
|
1658
1703
|
for (const [meshName, node] of spotNodeRuntime.meshNodesByName) {
|
|
1659
1704
|
const activationNode = node as typeof node & {
|
|
1660
|
-
setSpotAdmissionProvider?: (provider: {
|
|
1661
|
-
isClosing(spotId: string): boolean;
|
|
1662
|
-
awaitCloseDecision(spotId: string): Promise<void> | undefined;
|
|
1663
|
-
runtimeState(): ZLinkFrameworkRuntimeState;
|
|
1664
|
-
}) => void;
|
|
1665
1705
|
registerAsyncInstanceActivationAuthority?: (
|
|
1666
1706
|
authority: ServiceAsyncInstanceActivationAuthority
|
|
1667
1707
|
) => void;
|
|
@@ -1677,11 +1717,6 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1677
1717
|
};
|
|
1678
1718
|
const spotManager = this.spotManager;
|
|
1679
1719
|
if (spotManager !== undefined) {
|
|
1680
|
-
activationNode.setSpotAdmissionProvider?.({
|
|
1681
|
-
isClosing: (spotId) => spotManager.isSpotClosing(meshName, spotId),
|
|
1682
|
-
awaitCloseDecision: (spotId) => spotManager.pendingSpotCloseDecision(meshName, spotId),
|
|
1683
|
-
runtimeState: () => this.runtimeState
|
|
1684
|
-
});
|
|
1685
1720
|
this.registerInstanceApplicationLifecycle(meshName, activationNode, spotManager);
|
|
1686
1721
|
}
|
|
1687
1722
|
activationNode.registerAsyncInstanceActivationAuthority?.(
|
|
@@ -1893,6 +1928,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1893
1928
|
} catch (error) {
|
|
1894
1929
|
throw new ZLinkDrainingStatePublishError(error);
|
|
1895
1930
|
}
|
|
1931
|
+
await awaitWithDrainSignal(this.serviceRelocation.drainTargetAttempts(), signal);
|
|
1896
1932
|
}
|
|
1897
1933
|
|
|
1898
1934
|
private async cleanupOwnerForDrain(signal: AbortSignal): Promise<void> {
|
|
@@ -1929,7 +1965,6 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1929
1965
|
),
|
|
1930
1966
|
isMaterializing: (target) =>
|
|
1931
1967
|
spotManager.isInstanceMaterializing(meshName, target.targetSpotId as never),
|
|
1932
|
-
isClosing: (target) => spotManager.isInstanceClosing(meshName, target.targetSpotId as never),
|
|
1933
1968
|
isIdleEvicting: (target) =>
|
|
1934
1969
|
spotManager.isInstanceSpotIdleEvicting(meshName, target.targetSpotId as never),
|
|
1935
1970
|
beginIdleEviction: (target) =>
|
|
@@ -1965,19 +2000,6 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1965
2000
|
setSpotManager(spotManager: DefaultZLinkSpotManager): void {
|
|
1966
2001
|
this.spotManager = spotManager;
|
|
1967
2002
|
for (const [meshName, node] of this.spotNodeRuntime?.meshNodesByName ?? []) {
|
|
1968
|
-
const admissionNode = node as typeof node & {
|
|
1969
|
-
setSpotAdmissionProvider?: (provider: {
|
|
1970
|
-
isClosing(spotId: string): boolean;
|
|
1971
|
-
awaitCloseDecision(spotId: string): Promise<void> | undefined;
|
|
1972
|
-
runtimeState(): ZLinkFrameworkRuntimeState;
|
|
1973
|
-
}) => void;
|
|
1974
|
-
};
|
|
1975
|
-
admissionNode.setSpotAdmissionProvider?.({
|
|
1976
|
-
isClosing: (spotId: string) => spotManager.isSpotClosing(meshName, spotId),
|
|
1977
|
-
awaitCloseDecision: (spotId: string) =>
|
|
1978
|
-
spotManager.pendingSpotCloseDecision(meshName, spotId),
|
|
1979
|
-
runtimeState: () => this.runtimeState
|
|
1980
|
-
});
|
|
1981
2003
|
this.registerInstanceApplicationLifecycle(meshName, node, spotManager);
|
|
1982
2004
|
}
|
|
1983
2005
|
}
|
|
@@ -2099,7 +2121,10 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2099
2121
|
detachedTaskRunner: this.detachedTaskRunner(),
|
|
2100
2122
|
metrics: this.metrics,
|
|
2101
2123
|
admission: this.admission,
|
|
2102
|
-
|
|
2124
|
+
statefulExecution: {
|
|
2125
|
+
admissionOpen: () => this.ownerAdmissionOpen(),
|
|
2126
|
+
hostState: () => this.runtimeState
|
|
2127
|
+
}
|
|
2103
2128
|
}).create(this.actorTransferRuntime),
|
|
2104
2129
|
activationAdmission: this.activationAdmission
|
|
2105
2130
|
};
|
|
@@ -2160,7 +2185,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2160
2185
|
);
|
|
2161
2186
|
}
|
|
2162
2187
|
const meshNode = this.spotNodeRuntime?.meshNode(meshName);
|
|
2163
|
-
const descriptors =
|
|
2188
|
+
const descriptors = await listAllMeshNodeDescriptors(locationStore, meshName, signal);
|
|
2164
2189
|
const selected = await selectReadyLocationPlacementDescriptor(
|
|
2165
2190
|
descriptors,
|
|
2166
2191
|
meshNode,
|
|
@@ -2270,7 +2295,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2270
2295
|
);
|
|
2271
2296
|
}
|
|
2272
2297
|
const meshNode = this.spotNodeRuntime?.meshNode(meshName);
|
|
2273
|
-
const descriptors =
|
|
2298
|
+
const descriptors = await listAllMeshNodeDescriptors(locationStore, meshName, signal);
|
|
2274
2299
|
const selected = await selectReadyLocationPlacementDescriptor(
|
|
2275
2300
|
descriptors,
|
|
2276
2301
|
meshNode,
|
|
@@ -2381,7 +2406,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2381
2406
|
try {
|
|
2382
2407
|
payload = {
|
|
2383
2408
|
packetName: 'ZLinkFrameworkUserSpotReply',
|
|
2384
|
-
contentType:
|
|
2409
|
+
contentType: ZlinkStreamContentType.Raw,
|
|
2385
2410
|
payload: Buffer.from(message.data())
|
|
2386
2411
|
};
|
|
2387
2412
|
} finally {
|
|
@@ -2560,7 +2585,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2560
2585
|
}
|
|
2561
2586
|
return node.requestUserSpotClose(targetNodeRid, request, timeoutMs);
|
|
2562
2587
|
},
|
|
2563
|
-
defaultTimeoutMs: this.options.registration.requestTimeoutMs ??
|
|
2588
|
+
defaultTimeoutMs: this.options.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
|
|
2564
2589
|
messageSerializers: this.options.registration.messageSerializers
|
|
2565
2590
|
});
|
|
2566
2591
|
}
|
|
@@ -2582,6 +2607,10 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2582
2607
|
notifyEntrySpotActorCreated: (nodeRid, actor, createRequest, signal) =>
|
|
2583
2608
|
this.spotNodeRuntime?.notifyEntrySpotActorCreated(nodeRid, actor, createRequest, signal) ??
|
|
2584
2609
|
Promise.resolve(undefined),
|
|
2610
|
+
notifyEntrySpotActorJoined: (actor, signal) =>
|
|
2611
|
+
this.spotNodeRuntime?.notifyPrimaryEntrySpotActorJoined(actor, signal) ?? Promise.resolve(),
|
|
2612
|
+
notifyEntrySpotActorLeft: (actor, signal) =>
|
|
2613
|
+
this.spotNodeRuntime?.notifyPrimaryEntrySpotActorLeft(actor, signal) ?? Promise.resolve(),
|
|
2585
2614
|
locationLifecycle: () => this.locationOwner.currentLifecycle,
|
|
2586
2615
|
primaryMeshName: () => this.meshRouters.primaryMeshName(),
|
|
2587
2616
|
actorMeshName: (actorType) => this.meshRouters.actorMeshName(actorType),
|
|
@@ -2699,6 +2728,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2699
2728
|
}).create();
|
|
2700
2729
|
return {
|
|
2701
2730
|
...options,
|
|
2731
|
+
errorSink: this.runtimeOrPreStartErrorSink,
|
|
2702
2732
|
peerAdmissionSealed: (meshName: string) => !this.admission.accepts(meshName),
|
|
2703
2733
|
messageFollowReceiver: (record: ServiceMessageFollowRecord) => {
|
|
2704
2734
|
if (record.source.kind === 'actor') {
|
|
@@ -2753,14 +2783,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2753
2783
|
);
|
|
2754
2784
|
}
|
|
2755
2785
|
const binding = record.kindData;
|
|
2756
|
-
const replyBindingFailure = (
|
|
2757
|
-
kind
|
|
2758
|
-
message: string
|
|
2759
|
-
): void => {
|
|
2760
|
-
const terminal =
|
|
2761
|
-
kind === ZLinkFrameworkInternalErrorKind.ActorGenerationStale
|
|
2762
|
-
? { terminalResult: RequestResult.InvalidState, failureCode: 0 }
|
|
2763
|
-
: internalFrameworkWireReply(createInternalFrameworkException(kind, message));
|
|
2786
|
+
const replyBindingFailure = (kind: ZLinkFrameworkInternalErrorKind): void => {
|
|
2787
|
+
const terminal = internalFrameworkWireReply(kind);
|
|
2764
2788
|
if (
|
|
2765
2789
|
record.replyFailure?.(terminal.terminalResult, terminal.failureCode) !== SubmitResult.Ok
|
|
2766
2790
|
) {
|
|
@@ -2784,17 +2808,11 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2784
2808
|
nativeActorRef.actorId !== binding.actor.actorId ||
|
|
2785
2809
|
!routingIdsEqual(nativeActorRef.nodeRid, binding.actor.nodeRid)
|
|
2786
2810
|
) {
|
|
2787
|
-
replyBindingFailure(
|
|
2788
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
2789
|
-
`Actor '${binding.actor.actorId}' binding target is no longer current.`
|
|
2790
|
-
);
|
|
2811
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2791
2812
|
return;
|
|
2792
2813
|
}
|
|
2793
2814
|
if (nativeActorRef.generation !== binding.actor.generation) {
|
|
2794
|
-
replyBindingFailure(
|
|
2795
|
-
ZLinkFrameworkInternalErrorKind.ActorGenerationStale,
|
|
2796
|
-
`Actor '${binding.actor.actorId}' binding object generation is stale.`
|
|
2797
|
-
);
|
|
2815
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorGenerationStale);
|
|
2798
2816
|
return;
|
|
2799
2817
|
}
|
|
2800
2818
|
const node =
|
|
@@ -2809,10 +2827,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2809
2827
|
state.locationGeneration !== binding.authorityOwnerGeneration ||
|
|
2810
2828
|
state.isMoving
|
|
2811
2829
|
) {
|
|
2812
|
-
replyBindingFailure(
|
|
2813
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
2814
|
-
`Actor '${binding.actor.actorId}' binding authority fence is stale.`
|
|
2815
|
-
);
|
|
2830
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2816
2831
|
return;
|
|
2817
2832
|
}
|
|
2818
2833
|
const sessionOwnerIsLocal =
|
|
@@ -2826,6 +2841,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2826
2841
|
nodeRid: binding.actor.nodeRid
|
|
2827
2842
|
};
|
|
2828
2843
|
if (sessionOwnerIsLocal) {
|
|
2844
|
+
releaseApplicationJobPermitBeforeHandler();
|
|
2829
2845
|
await this.streamBindingRuntime.retireRemoteBinding(
|
|
2830
2846
|
actorRef,
|
|
2831
2847
|
binding.sessionRid,
|
|
@@ -2842,10 +2858,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2842
2858
|
binding.sessionRid
|
|
2843
2859
|
);
|
|
2844
2860
|
if (target === undefined) {
|
|
2845
|
-
replyBindingFailure(
|
|
2846
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
2847
|
-
`Actor '${binding.actor.actorId}' Session route is unavailable.`
|
|
2848
|
-
);
|
|
2861
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2849
2862
|
return;
|
|
2850
2863
|
}
|
|
2851
2864
|
const installed = state.installBoundSessionBinding({
|
|
@@ -2858,10 +2871,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2858
2871
|
bindingGeneration: binding.bindingGeneration
|
|
2859
2872
|
});
|
|
2860
2873
|
if (!installed) {
|
|
2861
|
-
replyBindingFailure(
|
|
2862
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
2863
|
-
`Actor '${binding.actor.actorId}' Session binding generation is stale.`
|
|
2864
|
-
);
|
|
2874
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2865
2875
|
return;
|
|
2866
2876
|
}
|
|
2867
2877
|
replyBindingSuccess();
|
|
@@ -3082,7 +3092,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
3082
3092
|
return reporter;
|
|
3083
3093
|
}
|
|
3084
3094
|
|
|
3085
|
-
|
|
3095
|
+
detachedTaskRunner(): ZLinkDetachedTaskRunner {
|
|
3086
3096
|
return {
|
|
3087
3097
|
runDetached: (taskName, callback) => {
|
|
3088
3098
|
const runner = this.executionState?.taskRunner;
|
|
@@ -3158,8 +3168,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
3158
3168
|
undefined,
|
|
3159
3169
|
async (meshName, nodeRid, expectedLifecycleGeneration, signal) => {
|
|
3160
3170
|
const descriptor = (
|
|
3161
|
-
await authority
|
|
3162
|
-
).
|
|
3171
|
+
await listAllMeshNodeDescriptors(authority, meshName, signal)
|
|
3172
|
+
).find(
|
|
3163
3173
|
(candidate) =>
|
|
3164
3174
|
routingIdsEqual(candidate.rid, nodeRid) &&
|
|
3165
3175
|
candidate.lifecycleGeneration === expectedLifecycleGeneration
|
|
@@ -3256,7 +3266,7 @@ export function hasExactPeerReadiness(
|
|
|
3256
3266
|
peer.routingId !== null &&
|
|
3257
3267
|
String(peer.routingId) === String(descriptor.rid) &&
|
|
3258
3268
|
peer.lifecycleGeneration === descriptor.lifecycleGeneration &&
|
|
3259
|
-
peer.state ===
|
|
3269
|
+
peer.state === MeshPeerRuntimeState.Serving
|
|
3260
3270
|
)
|
|
3261
3271
|
)
|
|
3262
3272
|
);
|
|
@@ -3266,7 +3276,11 @@ export {
|
|
|
3266
3276
|
ZLinkActorTransferAuthorityRuntime,
|
|
3267
3277
|
transferIdString
|
|
3268
3278
|
} from './actor-transfer-authority-runtime';
|
|
3269
|
-
export {
|
|
3279
|
+
export {
|
|
3280
|
+
ZLinkDrainingStatePublishError,
|
|
3281
|
+
ZLinkRetiringRollbackError,
|
|
3282
|
+
ZLinkRouteMeshRuntimeCoordinator
|
|
3283
|
+
} from './route-mesh-runtime';
|
|
3270
3284
|
export { ZLinkRelocationStateIncompatibleError } from './service-relocation-host-runtime';
|
|
3271
3285
|
export {
|
|
3272
3286
|
ZLinkHostSpotAddressTransport,
|
|
@@ -3285,7 +3299,7 @@ async function waitForForcedSessionNotification(
|
|
|
3285
3299
|
if (operation === undefined) return;
|
|
3286
3300
|
let timeoutHandle: ReturnType<typeof setTimeout> | undefined;
|
|
3287
3301
|
const timeout = new Promise<void>((resolve) => {
|
|
3288
|
-
timeoutHandle = setTimeout(resolve,
|
|
3302
|
+
timeoutHandle = setTimeout(resolve, HOST_SHUTDOWN_POLL_INTERVAL_MS);
|
|
3289
3303
|
});
|
|
3290
3304
|
try {
|
|
3291
3305
|
await Promise.race([operation.catch(() => undefined), timeout]);
|
|
@@ -3318,13 +3332,6 @@ async function awaitWithDrainSignal(
|
|
|
3318
3332
|
});
|
|
3319
3333
|
}
|
|
3320
3334
|
|
|
3321
|
-
class ZLinkDrainingStatePublishError extends Error {
|
|
3322
|
-
constructor(cause: unknown) {
|
|
3323
|
-
super('Failed to publish draining peer rows.', { cause });
|
|
3324
|
-
this.name = 'ZLinkDrainingStatePublishError';
|
|
3325
|
-
}
|
|
3326
|
-
}
|
|
3327
|
-
|
|
3328
3335
|
function resolveBackendAdapterFactory(internalOptions: unknown): ZLinkBackendAdapterFactory {
|
|
3329
3336
|
if (
|
|
3330
3337
|
typeof internalOptions === 'object' &&
|
|
@@ -3483,7 +3490,7 @@ function waitForPlacementReadiness(signal?: AbortSignal): Promise<void> {
|
|
|
3483
3490
|
const timer = setTimeout(() => {
|
|
3484
3491
|
signal?.removeEventListener('abort', abort);
|
|
3485
3492
|
resolve();
|
|
3486
|
-
},
|
|
3493
|
+
}, HANDOFF_ACCEPTANCE_POLL_INTERVAL_MS);
|
|
3487
3494
|
const abort = () => {
|
|
3488
3495
|
clearTimeout(timer);
|
|
3489
3496
|
signal?.removeEventListener('abort', abort);
|