@zlink-systems/framework 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +83 -105
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +2 -0
- package/dist/runtime/admission.js +7 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +6 -23
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -8
- package/dist/runtime/channels/channel-clients.js +68 -52
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -10
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.js +5 -2
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +248 -174
- package/dist/runtime/channels/channel-transports.d.ts +11 -17
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +130 -72
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +14 -13
- package/dist/runtime/host/index.js +190 -157
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +7 -20
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +9 -8
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +11 -1
- package/dist/runtime/streams/index.d.ts +14 -15
- package/dist/runtime/streams/index.js +20 -21
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +13 -29
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -85
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -23
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +6 -2
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +301 -192
- package/src/runtime/channels/channel-transports.ts +161 -112
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +172 -91
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +180 -260
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +327 -296
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +8 -41
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +45 -23
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +21 -1
- package/src/runtime/streams/index.ts +76 -64
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,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,52 @@ 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;
|
|
223
|
+
|
|
224
|
+
const LEGACY_MESH_SEND_TIMEOUT_MS = 1000;
|
|
202
225
|
|
|
203
226
|
export interface ZLinkFrameworkRuntimeLifecycle {
|
|
204
227
|
readonly isStarted: boolean;
|
|
@@ -224,6 +247,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
224
247
|
private runtimeSequence = 0n;
|
|
225
248
|
private readonly runtimeObservationSource = Symbol('zlink.framework-runtime');
|
|
226
249
|
private runtimeDeadline?: Date;
|
|
250
|
+
private shutdownDeadline?: AbortController;
|
|
227
251
|
private runtimeRelocationResult?: ZLinkFrameworkRelocationResult;
|
|
228
252
|
private runtimeTerminationResult?: ZLinkFrameworkTerminationResult;
|
|
229
253
|
private relocationOperation?: Promise<ZLinkFrameworkRelocationResult>;
|
|
@@ -264,16 +288,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
264
288
|
private readonly admission = new ZLinkRuntimeAdmissionGate(() => this.ownerAdmissionOpen());
|
|
265
289
|
private readonly activationAdmission = new ZLinkActivationAdmission(
|
|
266
290
|
(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
|
-
}
|
|
291
|
+
this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ??
|
|
292
|
+
DEFAULT_ACTIVATION_CONCURRENCY_LIMIT
|
|
277
293
|
);
|
|
278
294
|
private cachedLocationSpotRouteResolver?: ZLinkSpotRouteResolver;
|
|
279
295
|
private actorClientLocationResolver?: ZLinkStoreLocationResolvers;
|
|
@@ -379,7 +395,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
379
395
|
this.meshRouters.classifyManualNodeTarget(meshName, targetNodeRid),
|
|
380
396
|
(meshName, sourceNodeRid, parts) => this.submitLocalMeshRoute(meshName, sourceNodeRid, parts),
|
|
381
397
|
this.metrics,
|
|
382
|
-
() => this.flowCreationEnabled()
|
|
398
|
+
() => this.flowCreationEnabled(),
|
|
399
|
+
() => this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink).flow
|
|
383
400
|
);
|
|
384
401
|
this.spotAddressTransport = new ZLinkHostSpotAddressTransport({
|
|
385
402
|
resolver: () => this.createLocationSpotRouteResolver(),
|
|
@@ -392,7 +409,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
392
409
|
meshNode: (meshName) => this.spotNodeRuntime?.meshNode(meshName),
|
|
393
410
|
completions: (meshName) => this.spotNodeRuntime?.meshCompletionTable(meshName),
|
|
394
411
|
codecs: { serializers: options.registration.messageSerializers },
|
|
395
|
-
defaultRequestTimeoutMs: options.registration.requestTimeoutMs ??
|
|
412
|
+
defaultRequestTimeoutMs: options.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
|
|
396
413
|
defaultSendTimeoutMs: defaultSpotSendTimeoutMs,
|
|
397
414
|
sendTimeoutMsForMesh: sendTimeoutMsForSpotMesh,
|
|
398
415
|
sendTimeoutMsForRouteChannel: sendTimeoutMsForSpotRouteChannel,
|
|
@@ -406,6 +423,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
406
423
|
rewriteAuthorityPayloadForOwner
|
|
407
424
|
});
|
|
408
425
|
this.streamBindingRuntime = new ZLinkStreamBindingRuntime({
|
|
426
|
+
dispatchErrors: this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink),
|
|
409
427
|
streamPayloadCodec: resolveStreamPayloadCodec(options.registration),
|
|
410
428
|
streamCompression: options.registration.streamCompression,
|
|
411
429
|
messageSerializers: options.registration.messageSerializers,
|
|
@@ -784,6 +802,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
784
802
|
});
|
|
785
803
|
this.serviceRelocation = new ZLinkHostServiceRelocationRuntime({
|
|
786
804
|
registration: options.registration,
|
|
805
|
+
targetAdmissionSealed: () => this.shutdownOperationStartedAt !== undefined,
|
|
787
806
|
providerResolver: options.providerResolver,
|
|
788
807
|
locationStore: () => this.locationOwner.currentStores?.locationStore,
|
|
789
808
|
currentOwner: () => this.locationOwner.currentRuntime?.currentOwnerToken,
|
|
@@ -870,7 +889,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
870
889
|
}
|
|
871
890
|
|
|
872
891
|
get isStarted(): boolean {
|
|
873
|
-
return this.executionState !== undefined;
|
|
892
|
+
return this.executionState !== undefined && !this.executionState.abortController.signal.aborted;
|
|
874
893
|
}
|
|
875
894
|
|
|
876
895
|
get status(): ZLinkFrameworkRuntimeStatus {
|
|
@@ -905,6 +924,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
905
924
|
const queue = new RuntimeEventQueue<ZLinkFrameworkRuntimeStatus>(undefined, signal);
|
|
906
925
|
this.runtimeObservers.add(queue);
|
|
907
926
|
queue.onClose(() => this.runtimeObservers.delete(queue));
|
|
927
|
+
this.publishRuntimeStatus(queue, this.status);
|
|
908
928
|
return queue;
|
|
909
929
|
}
|
|
910
930
|
|
|
@@ -921,7 +941,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
921
941
|
options,
|
|
922
942
|
this.options.registration.applicationVersion
|
|
923
943
|
);
|
|
924
|
-
const deadlineMs = options.deadlineMs ??
|
|
944
|
+
const deadlineMs = options.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
|
|
925
945
|
if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
|
|
926
946
|
return Promise.reject(new RangeError('Relocation deadlineMs must be greater than zero.'));
|
|
927
947
|
}
|
|
@@ -990,7 +1010,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
990
1010
|
}
|
|
991
1011
|
|
|
992
1012
|
shutdown(options?: ZLinkFrameworkLifecycleOptions): Promise<ZLinkFrameworkTerminationResult> {
|
|
993
|
-
const deadlineMs = options?.deadlineMs ??
|
|
1013
|
+
const deadlineMs = options?.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
|
|
994
1014
|
if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
|
|
995
1015
|
return Promise.reject(new RangeError('Shutdown deadlineMs must be greater than zero.'));
|
|
996
1016
|
}
|
|
@@ -1103,52 +1123,78 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1103
1123
|
}
|
|
1104
1124
|
|
|
1105
1125
|
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
|
-
|
|
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);
|
|
1129
1169
|
return this.completeTermination({
|
|
1130
1170
|
outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
|
|
1131
|
-
reason:
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
: ZLinkFrameworkTerminationReason.TeardownFailed
|
|
1171
|
+
reason: isDeadlineExceededError(error)
|
|
1172
|
+
? ZLinkFrameworkTerminationReason.DeadlineExceeded
|
|
1173
|
+
: ZLinkFrameworkTerminationReason.TeardownFailed
|
|
1135
1174
|
});
|
|
1136
1175
|
}
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
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;
|
|
1152
1198
|
}
|
|
1153
1199
|
}
|
|
1154
1200
|
|
|
@@ -1185,8 +1231,9 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1185
1231
|
private recordRelocationResult(result: ZLinkFrameworkRelocationResult): void {
|
|
1186
1232
|
if (this.relocationOperationStartedAt !== undefined) {
|
|
1187
1233
|
this.metrics.duration(
|
|
1188
|
-
|
|
1189
|
-
Math.max(0, performance.now() - this.relocationOperationStartedAt) /
|
|
1234
|
+
METRIC_NAMES.HostRelocationDuration,
|
|
1235
|
+
Math.max(0, performance.now() - this.relocationOperationStartedAt) /
|
|
1236
|
+
MILLISECONDS_PER_SECOND,
|
|
1190
1237
|
{
|
|
1191
1238
|
mode: relocationModeMetricName(result.mode),
|
|
1192
1239
|
outcome:
|
|
@@ -1195,7 +1242,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1195
1242
|
);
|
|
1196
1243
|
}
|
|
1197
1244
|
if (result.outcome === ZLinkFrameworkRelocationOutcome.Blocked) {
|
|
1198
|
-
this.metrics.count(
|
|
1245
|
+
this.metrics.count(METRIC_NAMES.HostRelocationBlocked, 1, {
|
|
1199
1246
|
mode: relocationModeMetricName(result.mode),
|
|
1200
1247
|
reason: relocationReasonMetricName(result.reason)
|
|
1201
1248
|
});
|
|
@@ -1218,8 +1265,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1218
1265
|
this.runtimeDeadline = undefined;
|
|
1219
1266
|
if (this.shutdownOperationStartedAt !== undefined) {
|
|
1220
1267
|
this.metrics.duration(
|
|
1221
|
-
|
|
1222
|
-
Math.max(0, performance.now() - this.shutdownOperationStartedAt) /
|
|
1268
|
+
METRIC_NAMES.HostShutdownDuration,
|
|
1269
|
+
Math.max(0, performance.now() - this.shutdownOperationStartedAt) / MILLISECONDS_PER_SECOND,
|
|
1223
1270
|
{
|
|
1224
1271
|
outcome:
|
|
1225
1272
|
result.outcome === ZLinkFrameworkTerminationOutcome.Stopped
|
|
@@ -1229,7 +1276,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1229
1276
|
);
|
|
1230
1277
|
}
|
|
1231
1278
|
if (result.outcome === ZLinkFrameworkTerminationOutcome.ForceStopped) {
|
|
1232
|
-
this.metrics.count(
|
|
1279
|
+
this.metrics.count(METRIC_NAMES.HostShutdownForced, 1, {
|
|
1233
1280
|
reason: terminationReasonMetricName(result.reason)
|
|
1234
1281
|
});
|
|
1235
1282
|
}
|
|
@@ -1251,14 +1298,18 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1251
1298
|
this.notifyTopologyHostStateChanged();
|
|
1252
1299
|
const status = this.status;
|
|
1253
1300
|
for (const observer of this.runtimeObservers) {
|
|
1254
|
-
|
|
1255
|
-
observer.seal(status, this.runtimeObservationSource);
|
|
1256
|
-
} else {
|
|
1257
|
-
observer.push(status, this.runtimeObservationSource);
|
|
1258
|
-
}
|
|
1301
|
+
this.publishRuntimeStatus(observer, status);
|
|
1259
1302
|
}
|
|
1260
|
-
|
|
1261
|
-
|
|
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);
|
|
1262
1313
|
}
|
|
1263
1314
|
}
|
|
1264
1315
|
|
|
@@ -1410,7 +1461,9 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1410
1461
|
const locationRuntime = await this.locationOwner.startForRuntime(
|
|
1411
1462
|
this.meshRouters.primaryMeshName(),
|
|
1412
1463
|
spotNodeRuntime,
|
|
1413
|
-
channelRuntime
|
|
1464
|
+
channelRuntime,
|
|
1465
|
+
this.executionState.abortController.signal,
|
|
1466
|
+
() => this.shutdownDeadline!.signal
|
|
1414
1467
|
);
|
|
1415
1468
|
startedLocationRuntime = locationRuntime;
|
|
1416
1469
|
if (locationRuntime !== undefined) {
|
|
@@ -1462,15 +1515,27 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1462
1515
|
this.setRuntimeState(ZLinkFrameworkRuntimeState.Serving);
|
|
1463
1516
|
this.lifecycleSink?.push('framework:started');
|
|
1464
1517
|
} catch (error) {
|
|
1518
|
+
if (this.shutdownDeadline !== undefined && isAbortError(error)) throw error;
|
|
1465
1519
|
await statefulAuthorityRoutes?.stop();
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
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
|
+
}
|
|
1474
1539
|
this.executionState = undefined;
|
|
1475
1540
|
this.channelRuntime = undefined;
|
|
1476
1541
|
this.spotNodeRuntime = undefined;
|
|
@@ -1484,7 +1549,9 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1484
1549
|
}
|
|
1485
1550
|
|
|
1486
1551
|
async stop(): Promise<void> {
|
|
1487
|
-
await this.
|
|
1552
|
+
await this.runWithShutdownDeadline(DEFAULT_HOST_CONTROL_TIMEOUT_MS, async () =>
|
|
1553
|
+
this.runLifecycle(() => this.stopCore())
|
|
1554
|
+
);
|
|
1488
1555
|
}
|
|
1489
1556
|
|
|
1490
1557
|
private runtimeMetricMeshSnapshots(): readonly ZLinkRuntimeMetricMeshSnapshot[] {
|
|
@@ -1537,6 +1604,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1537
1604
|
if (state === undefined) {
|
|
1538
1605
|
return;
|
|
1539
1606
|
}
|
|
1607
|
+
state.abortController.abort();
|
|
1540
1608
|
|
|
1541
1609
|
const channelRuntime = this.channelRuntime;
|
|
1542
1610
|
const spotNodeRuntime = this.spotNodeRuntime;
|
|
@@ -1545,24 +1613,25 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1545
1613
|
this.stopTopologyObservers();
|
|
1546
1614
|
this.removeOwnerLeaseRecoveryPublication();
|
|
1547
1615
|
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
1616
|
this.lifecycleSink?.push('framework:stop');
|
|
1555
1617
|
await statefulAuthorityRoutes?.stop();
|
|
1556
1618
|
await stopRuntimeParts({
|
|
1557
1619
|
state,
|
|
1558
1620
|
locationSnapshot,
|
|
1559
1621
|
cleanupDeadline: this.runtimeDeadline,
|
|
1622
|
+
shutdownSignal: this.shutdownDeadline!.signal,
|
|
1560
1623
|
streamRuntime,
|
|
1561
1624
|
spotNodeRuntime,
|
|
1562
1625
|
channelRuntime,
|
|
1563
1626
|
serviceRelocation: this.serviceRelocation,
|
|
1564
1627
|
ownedStores: registeredRuntimeStores(this.options.registration)
|
|
1565
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;
|
|
1566
1635
|
this.listenerRecords.clear();
|
|
1567
1636
|
this.lifecycleSink?.push('framework:stopped');
|
|
1568
1637
|
if (this.shutdownOperation === undefined) {
|
|
@@ -1628,7 +1697,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1628
1697
|
pollingIntervalMs:
|
|
1629
1698
|
this.options.registration.locations.options.pollingIntervalMs ??
|
|
1630
1699
|
zlinkDefaultLocationOptions.pollingIntervalMs,
|
|
1631
|
-
pageSize:
|
|
1700
|
+
pageSize: ZLINK_PROVIDER_MAX_PAGE_SIZE,
|
|
1632
1701
|
reportError: (error) =>
|
|
1633
1702
|
this.runtimeOrPreStartErrorSink.reportRuntimeTaskException(
|
|
1634
1703
|
'stateful authority route reconciliation',
|
|
@@ -1657,11 +1726,6 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1657
1726
|
): void {
|
|
1658
1727
|
for (const [meshName, node] of spotNodeRuntime.meshNodesByName) {
|
|
1659
1728
|
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
1729
|
registerAsyncInstanceActivationAuthority?: (
|
|
1666
1730
|
authority: ServiceAsyncInstanceActivationAuthority
|
|
1667
1731
|
) => void;
|
|
@@ -1677,11 +1741,6 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1677
1741
|
};
|
|
1678
1742
|
const spotManager = this.spotManager;
|
|
1679
1743
|
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
1744
|
this.registerInstanceApplicationLifecycle(meshName, activationNode, spotManager);
|
|
1686
1745
|
}
|
|
1687
1746
|
activationNode.registerAsyncInstanceActivationAuthority?.(
|
|
@@ -1893,6 +1952,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1893
1952
|
} catch (error) {
|
|
1894
1953
|
throw new ZLinkDrainingStatePublishError(error);
|
|
1895
1954
|
}
|
|
1955
|
+
await awaitWithDrainSignal(this.serviceRelocation.drainTargetAttempts(), signal);
|
|
1896
1956
|
}
|
|
1897
1957
|
|
|
1898
1958
|
private async cleanupOwnerForDrain(signal: AbortSignal): Promise<void> {
|
|
@@ -1929,7 +1989,6 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1929
1989
|
),
|
|
1930
1990
|
isMaterializing: (target) =>
|
|
1931
1991
|
spotManager.isInstanceMaterializing(meshName, target.targetSpotId as never),
|
|
1932
|
-
isClosing: (target) => spotManager.isInstanceClosing(meshName, target.targetSpotId as never),
|
|
1933
1992
|
isIdleEvicting: (target) =>
|
|
1934
1993
|
spotManager.isInstanceSpotIdleEvicting(meshName, target.targetSpotId as never),
|
|
1935
1994
|
beginIdleEviction: (target) =>
|
|
@@ -1965,19 +2024,6 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
1965
2024
|
setSpotManager(spotManager: DefaultZLinkSpotManager): void {
|
|
1966
2025
|
this.spotManager = spotManager;
|
|
1967
2026
|
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
2027
|
this.registerInstanceApplicationLifecycle(meshName, node, spotManager);
|
|
1982
2028
|
}
|
|
1983
2029
|
}
|
|
@@ -2099,7 +2145,10 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2099
2145
|
detachedTaskRunner: this.detachedTaskRunner(),
|
|
2100
2146
|
metrics: this.metrics,
|
|
2101
2147
|
admission: this.admission,
|
|
2102
|
-
|
|
2148
|
+
statefulExecution: {
|
|
2149
|
+
admissionOpen: () => this.ownerAdmissionOpen(),
|
|
2150
|
+
hostState: () => this.runtimeState
|
|
2151
|
+
}
|
|
2103
2152
|
}).create(this.actorTransferRuntime),
|
|
2104
2153
|
activationAdmission: this.activationAdmission
|
|
2105
2154
|
};
|
|
@@ -2160,7 +2209,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2160
2209
|
);
|
|
2161
2210
|
}
|
|
2162
2211
|
const meshNode = this.spotNodeRuntime?.meshNode(meshName);
|
|
2163
|
-
const descriptors =
|
|
2212
|
+
const descriptors = await listAllMeshNodeDescriptors(locationStore, meshName, signal);
|
|
2164
2213
|
const selected = await selectReadyLocationPlacementDescriptor(
|
|
2165
2214
|
descriptors,
|
|
2166
2215
|
meshNode,
|
|
@@ -2270,7 +2319,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2270
2319
|
);
|
|
2271
2320
|
}
|
|
2272
2321
|
const meshNode = this.spotNodeRuntime?.meshNode(meshName);
|
|
2273
|
-
const descriptors =
|
|
2322
|
+
const descriptors = await listAllMeshNodeDescriptors(locationStore, meshName, signal);
|
|
2274
2323
|
const selected = await selectReadyLocationPlacementDescriptor(
|
|
2275
2324
|
descriptors,
|
|
2276
2325
|
meshNode,
|
|
@@ -2381,7 +2430,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2381
2430
|
try {
|
|
2382
2431
|
payload = {
|
|
2383
2432
|
packetName: 'ZLinkFrameworkUserSpotReply',
|
|
2384
|
-
contentType:
|
|
2433
|
+
contentType: ZlinkStreamContentType.Raw,
|
|
2385
2434
|
payload: Buffer.from(message.data())
|
|
2386
2435
|
};
|
|
2387
2436
|
} finally {
|
|
@@ -2560,7 +2609,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2560
2609
|
}
|
|
2561
2610
|
return node.requestUserSpotClose(targetNodeRid, request, timeoutMs);
|
|
2562
2611
|
},
|
|
2563
|
-
defaultTimeoutMs: this.options.registration.requestTimeoutMs ??
|
|
2612
|
+
defaultTimeoutMs: this.options.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
|
|
2564
2613
|
messageSerializers: this.options.registration.messageSerializers
|
|
2565
2614
|
});
|
|
2566
2615
|
}
|
|
@@ -2582,6 +2631,10 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2582
2631
|
notifyEntrySpotActorCreated: (nodeRid, actor, createRequest, signal) =>
|
|
2583
2632
|
this.spotNodeRuntime?.notifyEntrySpotActorCreated(nodeRid, actor, createRequest, signal) ??
|
|
2584
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(),
|
|
2585
2638
|
locationLifecycle: () => this.locationOwner.currentLifecycle,
|
|
2586
2639
|
primaryMeshName: () => this.meshRouters.primaryMeshName(),
|
|
2587
2640
|
actorMeshName: (actorType) => this.meshRouters.actorMeshName(actorType),
|
|
@@ -2699,6 +2752,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2699
2752
|
}).create();
|
|
2700
2753
|
return {
|
|
2701
2754
|
...options,
|
|
2755
|
+
errorSink: this.runtimeOrPreStartErrorSink,
|
|
2702
2756
|
peerAdmissionSealed: (meshName: string) => !this.admission.accepts(meshName),
|
|
2703
2757
|
messageFollowReceiver: (record: ServiceMessageFollowRecord) => {
|
|
2704
2758
|
if (record.source.kind === 'actor') {
|
|
@@ -2753,14 +2807,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2753
2807
|
);
|
|
2754
2808
|
}
|
|
2755
2809
|
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));
|
|
2810
|
+
const replyBindingFailure = (kind: ZLinkFrameworkInternalErrorKind): void => {
|
|
2811
|
+
const terminal = internalFrameworkWireReply(kind);
|
|
2764
2812
|
if (
|
|
2765
2813
|
record.replyFailure?.(terminal.terminalResult, terminal.failureCode) !== SubmitResult.Ok
|
|
2766
2814
|
) {
|
|
@@ -2784,17 +2832,11 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2784
2832
|
nativeActorRef.actorId !== binding.actor.actorId ||
|
|
2785
2833
|
!routingIdsEqual(nativeActorRef.nodeRid, binding.actor.nodeRid)
|
|
2786
2834
|
) {
|
|
2787
|
-
replyBindingFailure(
|
|
2788
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
2789
|
-
`Actor '${binding.actor.actorId}' binding target is no longer current.`
|
|
2790
|
-
);
|
|
2835
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2791
2836
|
return;
|
|
2792
2837
|
}
|
|
2793
2838
|
if (nativeActorRef.generation !== binding.actor.generation) {
|
|
2794
|
-
replyBindingFailure(
|
|
2795
|
-
ZLinkFrameworkInternalErrorKind.ActorGenerationStale,
|
|
2796
|
-
`Actor '${binding.actor.actorId}' binding object generation is stale.`
|
|
2797
|
-
);
|
|
2839
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorGenerationStale);
|
|
2798
2840
|
return;
|
|
2799
2841
|
}
|
|
2800
2842
|
const node =
|
|
@@ -2809,10 +2851,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2809
2851
|
state.locationGeneration !== binding.authorityOwnerGeneration ||
|
|
2810
2852
|
state.isMoving
|
|
2811
2853
|
) {
|
|
2812
|
-
replyBindingFailure(
|
|
2813
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
2814
|
-
`Actor '${binding.actor.actorId}' binding authority fence is stale.`
|
|
2815
|
-
);
|
|
2854
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2816
2855
|
return;
|
|
2817
2856
|
}
|
|
2818
2857
|
const sessionOwnerIsLocal =
|
|
@@ -2826,6 +2865,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2826
2865
|
nodeRid: binding.actor.nodeRid
|
|
2827
2866
|
};
|
|
2828
2867
|
if (sessionOwnerIsLocal) {
|
|
2868
|
+
releaseApplicationJobPermitBeforeHandler();
|
|
2829
2869
|
await this.streamBindingRuntime.retireRemoteBinding(
|
|
2830
2870
|
actorRef,
|
|
2831
2871
|
binding.sessionRid,
|
|
@@ -2842,10 +2882,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2842
2882
|
binding.sessionRid
|
|
2843
2883
|
);
|
|
2844
2884
|
if (target === undefined) {
|
|
2845
|
-
replyBindingFailure(
|
|
2846
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
2847
|
-
`Actor '${binding.actor.actorId}' Session route is unavailable.`
|
|
2848
|
-
);
|
|
2885
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2849
2886
|
return;
|
|
2850
2887
|
}
|
|
2851
2888
|
const installed = state.installBoundSessionBinding({
|
|
@@ -2858,10 +2895,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
2858
2895
|
bindingGeneration: binding.bindingGeneration
|
|
2859
2896
|
});
|
|
2860
2897
|
if (!installed) {
|
|
2861
|
-
replyBindingFailure(
|
|
2862
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
2863
|
-
`Actor '${binding.actor.actorId}' Session binding generation is stale.`
|
|
2864
|
-
);
|
|
2898
|
+
replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
|
|
2865
2899
|
return;
|
|
2866
2900
|
}
|
|
2867
2901
|
replyBindingSuccess();
|
|
@@ -3082,7 +3116,7 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
3082
3116
|
return reporter;
|
|
3083
3117
|
}
|
|
3084
3118
|
|
|
3085
|
-
|
|
3119
|
+
detachedTaskRunner(): ZLinkDetachedTaskRunner {
|
|
3086
3120
|
return {
|
|
3087
3121
|
runDetached: (taskName, callback) => {
|
|
3088
3122
|
const runner = this.executionState?.taskRunner;
|
|
@@ -3158,8 +3192,8 @@ export class ZLinkFrameworkRuntimeHost
|
|
|
3158
3192
|
undefined,
|
|
3159
3193
|
async (meshName, nodeRid, expectedLifecycleGeneration, signal) => {
|
|
3160
3194
|
const descriptor = (
|
|
3161
|
-
await authority
|
|
3162
|
-
).
|
|
3195
|
+
await listAllMeshNodeDescriptors(authority, meshName, signal)
|
|
3196
|
+
).find(
|
|
3163
3197
|
(candidate) =>
|
|
3164
3198
|
routingIdsEqual(candidate.rid, nodeRid) &&
|
|
3165
3199
|
candidate.lifecycleGeneration === expectedLifecycleGeneration
|
|
@@ -3256,7 +3290,7 @@ export function hasExactPeerReadiness(
|
|
|
3256
3290
|
peer.routingId !== null &&
|
|
3257
3291
|
String(peer.routingId) === String(descriptor.rid) &&
|
|
3258
3292
|
peer.lifecycleGeneration === descriptor.lifecycleGeneration &&
|
|
3259
|
-
peer.state ===
|
|
3293
|
+
peer.state === MeshPeerRuntimeState.Serving
|
|
3260
3294
|
)
|
|
3261
3295
|
)
|
|
3262
3296
|
);
|
|
@@ -3266,7 +3300,11 @@ export {
|
|
|
3266
3300
|
ZLinkActorTransferAuthorityRuntime,
|
|
3267
3301
|
transferIdString
|
|
3268
3302
|
} from './actor-transfer-authority-runtime';
|
|
3269
|
-
export {
|
|
3303
|
+
export {
|
|
3304
|
+
ZLinkDrainingStatePublishError,
|
|
3305
|
+
ZLinkRetiringRollbackError,
|
|
3306
|
+
ZLinkRouteMeshRuntimeCoordinator
|
|
3307
|
+
} from './route-mesh-runtime';
|
|
3270
3308
|
export { ZLinkRelocationStateIncompatibleError } from './service-relocation-host-runtime';
|
|
3271
3309
|
export {
|
|
3272
3310
|
ZLinkHostSpotAddressTransport,
|
|
@@ -3285,7 +3323,7 @@ async function waitForForcedSessionNotification(
|
|
|
3285
3323
|
if (operation === undefined) return;
|
|
3286
3324
|
let timeoutHandle: ReturnType<typeof setTimeout> | undefined;
|
|
3287
3325
|
const timeout = new Promise<void>((resolve) => {
|
|
3288
|
-
timeoutHandle = setTimeout(resolve,
|
|
3326
|
+
timeoutHandle = setTimeout(resolve, HOST_SHUTDOWN_POLL_INTERVAL_MS);
|
|
3289
3327
|
});
|
|
3290
3328
|
try {
|
|
3291
3329
|
await Promise.race([operation.catch(() => undefined), timeout]);
|
|
@@ -3318,13 +3356,6 @@ async function awaitWithDrainSignal(
|
|
|
3318
3356
|
});
|
|
3319
3357
|
}
|
|
3320
3358
|
|
|
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
3359
|
function resolveBackendAdapterFactory(internalOptions: unknown): ZLinkBackendAdapterFactory {
|
|
3329
3360
|
if (
|
|
3330
3361
|
typeof internalOptions === 'object' &&
|
|
@@ -3483,7 +3514,7 @@ function waitForPlacementReadiness(signal?: AbortSignal): Promise<void> {
|
|
|
3483
3514
|
const timer = setTimeout(() => {
|
|
3484
3515
|
signal?.removeEventListener('abort', abort);
|
|
3485
3516
|
resolve();
|
|
3486
|
-
},
|
|
3517
|
+
}, HANDOFF_ACCEPTANCE_POLL_INTERVAL_MS);
|
|
3487
3518
|
const abort = () => {
|
|
3488
3519
|
clearTimeout(timer);
|
|
3489
3520
|
signal?.removeEventListener('abort', abort);
|