@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,18 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ZLinkRetiringRollbackError = exports.ZLinkRouteMeshRuntimeCoordinator = void 0;
|
|
4
|
-
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
3
|
+
exports.ZLinkRetiringRollbackError = exports.ZLinkDrainingStatePublishError = exports.ZLinkRouteMeshRuntimeCoordinator = void 0;
|
|
5
4
|
const contracts_1 = require("../../contracts");
|
|
6
|
-
const
|
|
5
|
+
const RegistrationBuilderPolicy_1 = require("../../contracts/Configuration/RegistrationBuilderPolicy");
|
|
7
6
|
const abort_1 = require("../abort");
|
|
7
|
+
const diagnostics_1 = require("../diagnostics");
|
|
8
|
+
const runtime_observation_queue_1 = require("../diagnostics/runtime-observation-queue");
|
|
9
|
+
const state_lane_1 = require("../execution/state-lane");
|
|
8
10
|
const runtime_state_projections_1 = require("../foundation/runtime-state-projections");
|
|
9
|
-
const
|
|
11
|
+
const service_runtime_contracts_1 = require("../foundation/service-runtime-contracts");
|
|
12
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
13
|
+
const runtime_1 = require("../locations/runtime");
|
|
14
|
+
const DEFAULT_ROUTE_MESH_DRAIN_TIMEOUT_MS = 30_000;
|
|
15
|
+
const MAX_ROUTE_MESH_OBSERVATION_WAIT_MS = 1000;
|
|
16
|
+
const PLACEMENT_OBSERVATION_INTERVAL_MS = 100;
|
|
10
17
|
class ZLinkRouteMeshRuntimeCoordinator {
|
|
11
18
|
options;
|
|
12
19
|
states = new Map();
|
|
13
|
-
placementFingerprints = new Map();
|
|
14
|
-
peerFingerprints = new Map();
|
|
15
|
-
locationStoreHealthFingerprints = new Map();
|
|
16
20
|
placementObserver;
|
|
17
21
|
hostOperation;
|
|
18
22
|
shutdownOperation;
|
|
@@ -23,7 +27,6 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
23
27
|
options.admission.register(meshName);
|
|
24
28
|
this.states.set(meshName, {
|
|
25
29
|
state: contracts_1.ZLinkTopologyState.Starting,
|
|
26
|
-
sequence: 0n,
|
|
27
30
|
waiters: [],
|
|
28
31
|
observers: new Set()
|
|
29
32
|
});
|
|
@@ -37,6 +40,12 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
37
40
|
}
|
|
38
41
|
}
|
|
39
42
|
snapshot(meshName) {
|
|
43
|
+
const published = this.publishCurrentStatus(meshName, this.requireState(meshName));
|
|
44
|
+
if (published === undefined)
|
|
45
|
+
throw routeNotFound(meshName);
|
|
46
|
+
return published;
|
|
47
|
+
}
|
|
48
|
+
buildSnapshot(meshName, sequence) {
|
|
40
49
|
const drain = this.requireState(meshName);
|
|
41
50
|
const node = this.options.meshNode(meshName);
|
|
42
51
|
if (node === undefined)
|
|
@@ -74,7 +83,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
74
83
|
const channels = Object.entries(this.options.meshOptions.get(meshName)?.meshChannels ?? {}).map(([channelName, channel]) => {
|
|
75
84
|
const readyMemberCount = BigInt(peerChannels.filter((entry, index) => peers[index]?.state === contracts_1.ZLinkPeerState.Ready &&
|
|
76
85
|
entry.names.some((name, channelIndex) => name === channelName && (entry.weights[channelIndex] ?? 0) > 0)).length);
|
|
77
|
-
const localWeight = descriptor?.channelWeights[channelName] ?? channel.weight ??
|
|
86
|
+
const localWeight = descriptor?.channelWeights[channelName] ?? channel.weight ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT;
|
|
78
87
|
const readyTargetCount = Number(readyMemberCount) + (channel.server === true && localWeight > 0 ? 1 : 0);
|
|
79
88
|
return { channelName, isReady: readyTargetCount > 0, readyTargetCount };
|
|
80
89
|
});
|
|
@@ -89,14 +98,14 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
89
98
|
? contracts_1.ZLinkTopologyState.Degraded
|
|
90
99
|
: hostTopologyState;
|
|
91
100
|
const hostReady = (0, runtime_state_projections_1.runtimeStateIsReady)(hostState);
|
|
92
|
-
const objectRole = descriptor?.objectRole ??
|
|
101
|
+
const objectRole = descriptor?.objectRole ?? contracts_1.ZLinkObjectRole.None;
|
|
93
102
|
const placementWeight = descriptor?.placementWeight ?? 0;
|
|
94
103
|
const capacityAvailable = descriptor !== undefined &&
|
|
95
104
|
populationCapacity !== undefined &&
|
|
96
105
|
(this.options.activationAdmission?.hasHeadroom(meshName) ?? true) &&
|
|
97
106
|
(hasRemainingCapacity(populationCapacity.actors) ||
|
|
98
107
|
hasRemainingCapacity(populationCapacity.spots));
|
|
99
|
-
const placementAvailable = objectRole ===
|
|
108
|
+
const placementAvailable = objectRole === contracts_1.ZLinkObjectRole.Server &&
|
|
100
109
|
placementWeight > 0 &&
|
|
101
110
|
capacityAvailable &&
|
|
102
111
|
locationStoreHealthy &&
|
|
@@ -113,113 +122,51 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
113
122
|
isAvailable: placementAvailable,
|
|
114
123
|
activeActorCount: populationCapacity?.actors.active ?? 0,
|
|
115
124
|
activeSpotCount: populationCapacity?.spots.active ?? 0,
|
|
116
|
-
unavailableReason: placementAvailable
|
|
117
|
-
? undefined
|
|
118
|
-
: localTopologyState !== contracts_1.ZLinkTopologyState.Ready
|
|
119
|
-
? contracts_1.ZLinkTopologyReason.RuntimeNotReady
|
|
120
|
-
: !locationStoreHealthy
|
|
121
|
-
? contracts_1.ZLinkTopologyReason.LocationUnavailable
|
|
122
|
-
: placementWeight <= 0
|
|
123
|
-
? contracts_1.ZLinkTopologyReason.NoReadyTarget
|
|
124
|
-
: contracts_1.ZLinkTopologyReason.CapacityExceeded
|
|
125
|
+
unavailableReason: placementUnavailableReason(placementAvailable, hostState, locationStoreHealthy)
|
|
125
126
|
},
|
|
126
|
-
sequence
|
|
127
|
+
sequence,
|
|
127
128
|
observedAt: new Date()
|
|
128
129
|
};
|
|
129
|
-
drain.lastSnapshot = snapshot;
|
|
130
130
|
return snapshot;
|
|
131
131
|
}
|
|
132
132
|
observe(meshName, capacity = runtime_observation_queue_1.ZLINK_DEFAULT_TERMINAL_OBSERVATION_CAPACITY, signal) {
|
|
133
133
|
const state = this.requireState(meshName);
|
|
134
134
|
if (!Number.isInteger(capacity) || capacity <= 0)
|
|
135
135
|
throw new RangeError('Observer capacity must be positive.');
|
|
136
|
-
|
|
137
|
-
this.seedPlacementFingerprint(meshName);
|
|
136
|
+
const snapshot = this.snapshot(meshName);
|
|
138
137
|
const queue = new runtime_observation_queue_1.RuntimeEventQueue(capacity, signal);
|
|
138
|
+
state.observers.add(queue);
|
|
139
|
+
this.startPlacementObserver();
|
|
139
140
|
queue.onClose(() => {
|
|
140
141
|
state.observers.delete(queue);
|
|
141
142
|
this.stopPlacementObserverIfIdle();
|
|
142
143
|
});
|
|
143
|
-
this.
|
|
144
|
-
state.observers.add(queue);
|
|
145
|
-
this.startPlacementObserver();
|
|
144
|
+
this.publishStatus(meshName, queue, snapshot);
|
|
146
145
|
return queue;
|
|
147
146
|
}
|
|
148
147
|
isReady(meshName) {
|
|
149
148
|
return this.snapshot(meshName).isReady;
|
|
150
149
|
}
|
|
151
150
|
hostStateChanged() {
|
|
152
|
-
for (const [meshName, state] of this.states)
|
|
153
|
-
|
|
154
|
-
let snapshot;
|
|
155
|
-
try {
|
|
156
|
-
snapshot = this.snapshot(meshName);
|
|
157
|
-
}
|
|
158
|
-
catch {
|
|
159
|
-
continue;
|
|
160
|
-
}
|
|
161
|
-
for (const observer of state.observers)
|
|
162
|
-
observer.push(snapshot, meshName);
|
|
163
|
-
}
|
|
151
|
+
for (const [meshName, state] of this.states)
|
|
152
|
+
this.publishCurrentStatus(meshName, state);
|
|
164
153
|
}
|
|
165
154
|
stopObservers() {
|
|
166
155
|
for (const [meshName, state] of this.states) {
|
|
167
|
-
state.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
state.
|
|
173
|
-
terminal = {
|
|
174
|
-
...current,
|
|
175
|
-
state: contracts_1.ZLinkTopologyState.Stopped,
|
|
176
|
-
isReady: false,
|
|
177
|
-
channels: current.channels.map((channel) => ({
|
|
178
|
-
...channel,
|
|
179
|
-
isReady: false
|
|
180
|
-
})),
|
|
181
|
-
placement: {
|
|
182
|
-
...current.placement,
|
|
183
|
-
isAvailable: false,
|
|
184
|
-
unavailableReason: contracts_1.ZLinkTopologyReason.RuntimeNotReady
|
|
185
|
-
},
|
|
186
|
-
sequence: terminalSequence,
|
|
187
|
-
observedAt: new Date()
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
catch {
|
|
191
|
-
const current = state.lastSnapshot;
|
|
192
|
-
if (current !== undefined) {
|
|
193
|
-
const terminalSequence = current.sequence >= state.sequence ? current.sequence + 1n : state.sequence;
|
|
194
|
-
state.sequence = terminalSequence;
|
|
195
|
-
terminal = {
|
|
196
|
-
...current,
|
|
197
|
-
state: contracts_1.ZLinkTopologyState.Stopped,
|
|
198
|
-
isReady: false,
|
|
199
|
-
channels: current.channels.map((channel) => ({
|
|
200
|
-
...channel,
|
|
201
|
-
isReady: false
|
|
202
|
-
})),
|
|
203
|
-
placement: {
|
|
204
|
-
...current.placement,
|
|
205
|
-
isAvailable: false,
|
|
206
|
-
unavailableReason: contracts_1.ZLinkTopologyReason.RuntimeNotReady
|
|
207
|
-
},
|
|
208
|
-
sequence: terminalSequence,
|
|
209
|
-
observedAt: new Date()
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
for (const observer of [...state.observers]) {
|
|
214
|
-
if (terminal === undefined)
|
|
156
|
+
const published = state.lastSnapshot;
|
|
157
|
+
if (published !== undefined && (0, runtime_state_projections_1.topologyObservationIsTerminal)(published.state))
|
|
158
|
+
continue;
|
|
159
|
+
const current = published ?? this.publishCurrentStatus(meshName, state);
|
|
160
|
+
if (current === undefined) {
|
|
161
|
+
for (const observer of [...state.observers])
|
|
215
162
|
observer.close();
|
|
216
|
-
else
|
|
217
|
-
observer.seal(terminal, meshName);
|
|
218
163
|
}
|
|
219
|
-
|
|
164
|
+
else {
|
|
165
|
+
this.publishSnapshot(meshName, state, terminalSnapshot(current, contracts_1.ZLinkTopologyState.Stopped));
|
|
166
|
+
}
|
|
220
167
|
}
|
|
221
168
|
}
|
|
222
|
-
drain(meshName, deadlineMs =
|
|
169
|
+
drain(meshName, deadlineMs = DEFAULT_ROUTE_MESH_DRAIN_TIMEOUT_MS, signal) {
|
|
223
170
|
const state = this.requireState(meshName);
|
|
224
171
|
if (this.states.size > 1)
|
|
225
172
|
return Promise.reject(multiMeshDrainError());
|
|
@@ -237,7 +184,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
237
184
|
new Promise((resolve) => state.waiters.push(resolve));
|
|
238
185
|
return waitForOperation(operation, signal);
|
|
239
186
|
}
|
|
240
|
-
drainHost(deadlineMs =
|
|
187
|
+
drainHost(deadlineMs = DEFAULT_ROUTE_MESH_DRAIN_TIMEOUT_MS, signal) {
|
|
241
188
|
if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
|
|
242
189
|
return Promise.reject(new TypeError('Drain deadlineMs must be greater than zero.'));
|
|
243
190
|
}
|
|
@@ -250,12 +197,12 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
250
197
|
}
|
|
251
198
|
return waitForOperation(this.hostOperation, signal);
|
|
252
199
|
}
|
|
253
|
-
shutdownHost(deadline
|
|
200
|
+
shutdownHost(deadline, signal) {
|
|
254
201
|
if (typeof deadline === 'number' && (!Number.isFinite(deadline) || deadline <= 0)) {
|
|
255
202
|
return Promise.reject(new TypeError('Shutdown deadlineMs must be greater than zero.'));
|
|
256
203
|
}
|
|
257
204
|
if (this.shutdownOperation === undefined) {
|
|
258
|
-
const operation = this.performHostShutdown(deadline,
|
|
205
|
+
const operation = this.performHostShutdown(deadline, signal);
|
|
259
206
|
this.shutdownOperation = operation;
|
|
260
207
|
for (const state of this.states.values())
|
|
261
208
|
state.operation ??= operation;
|
|
@@ -280,7 +227,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
280
227
|
// A failed response can still follow a committed Store write. Restore
|
|
281
228
|
// every attempted descriptor before the host reports a reversible block.
|
|
282
229
|
const rollback = new AbortController();
|
|
283
|
-
const rollbackTimer = setTimeout(() => rollback.abort((0, abort_1.createDeadlineExceededError)('Retire descriptor rollback deadline exceeded.')), Math.min(deadlineMs,
|
|
230
|
+
const rollbackTimer = setTimeout(() => rollback.abort((0, abort_1.createDeadlineExceededError)('Retire descriptor rollback deadline exceeded.')), Math.min(deadlineMs, MAX_ROUTE_MESH_OBSERVATION_WAIT_MS));
|
|
284
231
|
let rollbackFailed = false;
|
|
285
232
|
for (const meshName of attempted.reverse()) {
|
|
286
233
|
try {
|
|
@@ -318,14 +265,14 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
318
265
|
}
|
|
319
266
|
catch (error) {
|
|
320
267
|
const classified = drainFailureReason(error);
|
|
321
|
-
if (
|
|
268
|
+
if ((0, diagnostics_1.isRelocationDebugEnabled)()) {
|
|
322
269
|
console.error('[zlink.runtime.relocation.drain_failed]', classified, error);
|
|
323
270
|
}
|
|
324
271
|
const reason = deadline.signal.aborted
|
|
325
272
|
? 'deadline_exceeded'
|
|
326
273
|
: classified;
|
|
327
274
|
const rollback = new AbortController();
|
|
328
|
-
const rollbackTimer = setTimeout(() => rollback.abort((0, abort_1.createDeadlineExceededError)('Relocation descriptor rollback deadline exceeded.')), Math.min(Math.max(1, deadlineMs),
|
|
275
|
+
const rollbackTimer = setTimeout(() => rollback.abort((0, abort_1.createDeadlineExceededError)('Relocation descriptor rollback deadline exceeded.')), Math.min(Math.max(1, deadlineMs), MAX_ROUTE_MESH_OBSERVATION_WAIT_MS));
|
|
329
276
|
try {
|
|
330
277
|
await Promise.all(entries.map(([meshName]) => this.options.rollbackRetiring(meshName, rollback.signal)));
|
|
331
278
|
}
|
|
@@ -432,29 +379,23 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
432
379
|
}
|
|
433
380
|
return result;
|
|
434
381
|
}
|
|
435
|
-
async performHostShutdown(cleanupDeadline,
|
|
436
|
-
const timeoutMs = Math.max(0, remainingTimeoutMs ??
|
|
437
|
-
(cleanupDeadline instanceof Date ? cleanupDeadline.getTime() - Date.now() : cleanupDeadline));
|
|
382
|
+
async performHostShutdown(cleanupDeadline, signal) {
|
|
438
383
|
const deadlineAt = cleanupDeadline instanceof Date ? cleanupDeadline : new Date(Date.now() + cleanupDeadline);
|
|
439
384
|
const entries = [...this.states.entries()];
|
|
440
|
-
if (entries.length === 0)
|
|
441
|
-
return { kind: 'drained' };
|
|
442
385
|
for (const [, state] of entries) {
|
|
443
386
|
state.deadline = deadlineAt;
|
|
444
387
|
}
|
|
445
|
-
const deadline = new AbortController();
|
|
446
|
-
const timer = setTimeout(() => deadline.abort((0, abort_1.createDeadlineExceededError)('Shutdown deadline exceeded.')), timeoutMs);
|
|
447
388
|
let result;
|
|
448
389
|
try {
|
|
449
390
|
for (const [meshName, state] of entries) {
|
|
450
391
|
this.options.admission.seal(meshName, framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RuntimeShutdown);
|
|
451
392
|
this.transition(meshName, state, contracts_1.ZLinkTopologyState.Stopping);
|
|
452
393
|
}
|
|
453
|
-
await Promise.all(entries.map(([meshName]) => this.options.publishDraining(meshName,
|
|
454
|
-
await this.options.publishHostDraining(
|
|
455
|
-
await Promise.all(entries.map(([meshName]) => this.options.admission.awaitZero(meshName,
|
|
456
|
-
await Promise.all(entries.map(([meshName]) => this.options.shutdownResources?.(meshName,
|
|
457
|
-
await this.options.cleanupHostResources(
|
|
394
|
+
await Promise.all(entries.map(([meshName]) => this.options.publishDraining(meshName, signal)));
|
|
395
|
+
await this.options.publishHostDraining(signal);
|
|
396
|
+
await Promise.all(entries.map(([meshName]) => this.options.admission.awaitZero(meshName, signal)));
|
|
397
|
+
await Promise.all(entries.map(([meshName]) => this.options.shutdownResources?.(meshName, signal)));
|
|
398
|
+
await this.options.cleanupHostResources(signal);
|
|
458
399
|
result = { kind: 'drained' };
|
|
459
400
|
for (const [meshName, state] of entries) {
|
|
460
401
|
this.transition(meshName, state, contracts_1.ZLinkTopologyState.Stopped);
|
|
@@ -464,7 +405,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
464
405
|
const classified = drainFailureReason(error);
|
|
465
406
|
const reason = classified !== 'teardown_failed'
|
|
466
407
|
? classified
|
|
467
|
-
:
|
|
408
|
+
: signal.aborted
|
|
468
409
|
? 'deadline_exceeded'
|
|
469
410
|
: classified;
|
|
470
411
|
await Promise.all(entries.map(([meshName]) => this.options.forceStopResources(meshName).catch(() => undefined)));
|
|
@@ -473,9 +414,6 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
473
414
|
this.transition(meshName, state, contracts_1.ZLinkTopologyState.Failed);
|
|
474
415
|
}
|
|
475
416
|
}
|
|
476
|
-
finally {
|
|
477
|
-
clearTimeout(timer);
|
|
478
|
-
}
|
|
479
417
|
for (const [, state] of entries) {
|
|
480
418
|
state.result = result;
|
|
481
419
|
for (const resolve of state.waiters)
|
|
@@ -488,112 +426,65 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
488
426
|
if (state.state === next)
|
|
489
427
|
return;
|
|
490
428
|
state.state = next;
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
current = this.snapshot(meshName);
|
|
496
|
-
snapshotAvailable = true;
|
|
497
|
-
}
|
|
498
|
-
catch {
|
|
499
|
-
current = state.lastSnapshot;
|
|
500
|
-
}
|
|
501
|
-
const terminal = next === contracts_1.ZLinkTopologyState.Stopped || next === contracts_1.ZLinkTopologyState.Failed;
|
|
502
|
-
if (current !== undefined) {
|
|
503
|
-
if (terminal) {
|
|
504
|
-
const terminalSequence = current.sequence >= state.sequence ? current.sequence + 1n : state.sequence;
|
|
505
|
-
state.sequence = terminalSequence;
|
|
506
|
-
const terminalStatus = {
|
|
507
|
-
...current,
|
|
508
|
-
state: next,
|
|
509
|
-
isReady: false,
|
|
510
|
-
channels: current.channels.map((channel) => ({
|
|
511
|
-
...channel,
|
|
512
|
-
isReady: false
|
|
513
|
-
})),
|
|
514
|
-
placement: {
|
|
515
|
-
...current.placement,
|
|
516
|
-
isAvailable: false,
|
|
517
|
-
unavailableReason: contracts_1.ZLinkTopologyReason.RuntimeNotReady
|
|
518
|
-
},
|
|
519
|
-
sequence: terminalSequence,
|
|
520
|
-
observedAt: new Date()
|
|
521
|
-
};
|
|
522
|
-
for (const observer of state.observers)
|
|
523
|
-
observer.seal(terminalStatus, meshName);
|
|
524
|
-
}
|
|
525
|
-
else if (snapshotAvailable) {
|
|
526
|
-
for (const observer of state.observers)
|
|
527
|
-
observer.push(current, meshName);
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
if (terminal) {
|
|
531
|
-
if (current === undefined) {
|
|
532
|
-
for (const observer of state.observers)
|
|
533
|
-
observer.close();
|
|
534
|
-
}
|
|
535
|
-
state.observers.clear();
|
|
536
|
-
this.stopPlacementObserverIfIdle();
|
|
429
|
+
const published = this.publishCurrentStatus(meshName, state);
|
|
430
|
+
if ((0, runtime_state_projections_1.topologyObservationIsTerminal)(next) && published === undefined) {
|
|
431
|
+
for (const observer of [...state.observers])
|
|
432
|
+
observer.close();
|
|
537
433
|
}
|
|
538
434
|
}
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
435
|
+
publishCurrentStatus(meshName, state) {
|
|
436
|
+
const published = state.lastSnapshot;
|
|
437
|
+
if (published !== undefined && (0, runtime_state_projections_1.topologyObservationIsTerminal)(published.state))
|
|
438
|
+
return published;
|
|
439
|
+
const desired = (0, runtime_state_projections_1.topologyObservationIsTerminal)(state.state)
|
|
440
|
+
? state.state
|
|
441
|
+
: topologyStateForHost(this.options.hostState?.() ?? contracts_1.ZLinkFrameworkRuntimeState.Serving, state.state);
|
|
442
|
+
if (published !== undefined && (0, runtime_state_projections_1.topologyObservationIsTerminal)(desired)) {
|
|
443
|
+
return this.publishSnapshot(meshName, state, terminalSnapshot(published, desired));
|
|
444
|
+
}
|
|
445
|
+
if (this.options.meshNode(meshName) === undefined)
|
|
446
|
+
return undefined;
|
|
447
|
+
const current = this.buildSnapshot(meshName, published?.sequence ?? 0n);
|
|
448
|
+
return this.publishSnapshot(meshName, state, (0, runtime_state_projections_1.topologyObservationIsTerminal)(current.state)
|
|
449
|
+
? terminalSnapshot(current, current.state)
|
|
450
|
+
: current);
|
|
451
|
+
}
|
|
452
|
+
publishSnapshot(meshName, state, current) {
|
|
453
|
+
const published = state.lastSnapshot;
|
|
454
|
+
if (published !== undefined && samePublicRouteMeshStatus(published, current))
|
|
455
|
+
return published;
|
|
456
|
+
const next = { ...current, sequence: (published?.sequence ?? 0n) + 1n, observedAt: new Date() };
|
|
457
|
+
state.lastSnapshot = next;
|
|
458
|
+
for (const observer of [...state.observers])
|
|
459
|
+
this.publishStatus(meshName, observer, next);
|
|
460
|
+
return next;
|
|
461
|
+
}
|
|
462
|
+
publishStatus(meshName, observer, status) {
|
|
463
|
+
if ((0, runtime_state_projections_1.topologyObservationIsTerminal)(status.state)) {
|
|
464
|
+
observer.seal(status, meshName);
|
|
465
|
+
}
|
|
466
|
+
else {
|
|
467
|
+
observer.push(status, meshName);
|
|
544
468
|
}
|
|
545
|
-
this.peerFingerprints.set(meshName, peerFingerprintMap(this.options.meshNode(meshName)?.peers() ?? []));
|
|
546
469
|
}
|
|
547
470
|
startPlacementObserver() {
|
|
548
471
|
if (this.placementObserver !== undefined)
|
|
549
472
|
return;
|
|
550
|
-
this.placementObserver = setInterval(() => this.observePlacementChanges(),
|
|
473
|
+
this.placementObserver = setInterval(() => this.observePlacementChanges(), PLACEMENT_OBSERVATION_INTERVAL_MS);
|
|
551
474
|
this.placementObserver.unref();
|
|
552
475
|
}
|
|
553
476
|
stopPlacementObserverIfIdle() {
|
|
554
|
-
|
|
555
|
-
|
|
477
|
+
for (const state of this.states.values()) {
|
|
478
|
+
if (state.observers.size > 0)
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
556
481
|
if (this.placementObserver !== undefined)
|
|
557
482
|
clearInterval(this.placementObserver);
|
|
558
483
|
this.placementObserver = undefined;
|
|
559
484
|
}
|
|
560
485
|
observePlacementChanges() {
|
|
561
486
|
for (const [meshName, state] of this.states) {
|
|
562
|
-
|
|
563
|
-
continue;
|
|
564
|
-
const locationStoreHealthy = this.options.isLocationStoreHealthy?.() ?? true;
|
|
565
|
-
if (locationStoreHealthy !== this.locationStoreHealthFingerprints.get(meshName)) {
|
|
566
|
-
this.locationStoreHealthFingerprints.set(meshName, locationStoreHealthy);
|
|
567
|
-
state.sequence += 1n;
|
|
568
|
-
for (const observer of state.observers) {
|
|
569
|
-
observer.push(this.snapshot(meshName), meshName);
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
const descriptor = this.options.meshNodeDescriptor?.(meshName);
|
|
573
|
-
if (descriptor === undefined)
|
|
574
|
-
continue;
|
|
575
|
-
const fingerprint = placementFingerprint(descriptor);
|
|
576
|
-
const previous = this.placementFingerprints.get(meshName);
|
|
577
|
-
this.placementFingerprints.set(meshName, fingerprint);
|
|
578
|
-
const node = this.options.meshNode(meshName);
|
|
579
|
-
if (previous !== undefined && previous !== fingerprint) {
|
|
580
|
-
state.sequence += 1n;
|
|
581
|
-
for (const observer of state.observers) {
|
|
582
|
-
observer.push(this.snapshot(meshName), meshName);
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
const previousPeers = this.peerFingerprints.get(meshName) ?? new Map();
|
|
586
|
-
const peers = node?.peers() ?? [];
|
|
587
|
-
const nextPeers = peerFingerprintMap(peers);
|
|
588
|
-
this.peerFingerprints.set(meshName, nextPeers);
|
|
589
|
-
for (const peerRid of new Set([...previousPeers.keys(), ...nextPeers.keys()])) {
|
|
590
|
-
if (previousPeers.get(peerRid) === nextPeers.get(peerRid))
|
|
591
|
-
continue;
|
|
592
|
-
state.sequence += 1n;
|
|
593
|
-
for (const observer of state.observers) {
|
|
594
|
-
observer.push(this.snapshot(meshName), meshName);
|
|
595
|
-
}
|
|
596
|
-
}
|
|
487
|
+
this.publishCurrentStatus(meshName, state);
|
|
597
488
|
}
|
|
598
489
|
}
|
|
599
490
|
requireState(meshName) {
|
|
@@ -604,6 +495,59 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
604
495
|
}
|
|
605
496
|
}
|
|
606
497
|
exports.ZLinkRouteMeshRuntimeCoordinator = ZLinkRouteMeshRuntimeCoordinator;
|
|
498
|
+
function terminalSnapshot(current, state) {
|
|
499
|
+
return {
|
|
500
|
+
...current,
|
|
501
|
+
state,
|
|
502
|
+
isReady: false,
|
|
503
|
+
channels: current.channels.map((channel) => ({ ...channel, isReady: false })),
|
|
504
|
+
placement: {
|
|
505
|
+
...current.placement,
|
|
506
|
+
isAvailable: false,
|
|
507
|
+
unavailableReason: contracts_1.ZLinkTopologyReason.RuntimeNotReady
|
|
508
|
+
}
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
function samePublicRouteMeshStatus(left, right) {
|
|
512
|
+
return (left.meshName === right.meshName &&
|
|
513
|
+
left.state === right.state &&
|
|
514
|
+
left.isReady === right.isReady &&
|
|
515
|
+
left.readyPeerCount === right.readyPeerCount &&
|
|
516
|
+
left.placement.isAvailable === right.placement.isAvailable &&
|
|
517
|
+
left.placement.activeActorCount === right.placement.activeActorCount &&
|
|
518
|
+
left.placement.activeSpotCount === right.placement.activeSpotCount &&
|
|
519
|
+
left.placement.unavailableReason === right.placement.unavailableReason &&
|
|
520
|
+
left.channels.length === right.channels.length &&
|
|
521
|
+
left.channels.every((channel, index) => {
|
|
522
|
+
const other = right.channels[index];
|
|
523
|
+
return (channel.channelName === other.channelName &&
|
|
524
|
+
channel.isReady === other.isReady &&
|
|
525
|
+
channel.readyTargetCount === other.readyTargetCount);
|
|
526
|
+
}) &&
|
|
527
|
+
left.peers.length === right.peers.length &&
|
|
528
|
+
left.peers.every((peer, index) => {
|
|
529
|
+
const other = right.peers[index];
|
|
530
|
+
return (peer.nodeRid === other.nodeRid &&
|
|
531
|
+
peer.state === other.state &&
|
|
532
|
+
peer.unavailableReason === other.unavailableReason);
|
|
533
|
+
}));
|
|
534
|
+
}
|
|
535
|
+
function placementUnavailableReason(available, hostState, locationStoreHealthy) {
|
|
536
|
+
if (available)
|
|
537
|
+
return undefined;
|
|
538
|
+
switch (hostState) {
|
|
539
|
+
case contracts_1.ZLinkFrameworkRuntimeState.Relocating:
|
|
540
|
+
case contracts_1.ZLinkFrameworkRuntimeState.Relocated:
|
|
541
|
+
case contracts_1.ZLinkFrameworkRuntimeState.Draining:
|
|
542
|
+
return contracts_1.ZLinkTopologyReason.Draining;
|
|
543
|
+
case contracts_1.ZLinkFrameworkRuntimeState.Serving:
|
|
544
|
+
return !locationStoreHealthy
|
|
545
|
+
? contracts_1.ZLinkTopologyReason.LocationUnavailable
|
|
546
|
+
: contracts_1.ZLinkTopologyReason.CapacityExceeded;
|
|
547
|
+
default:
|
|
548
|
+
return contracts_1.ZLinkTopologyReason.RuntimeNotReady;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
607
551
|
function topologyStateForHost(state, fallback) {
|
|
608
552
|
switch (state) {
|
|
609
553
|
case contracts_1.ZLinkFrameworkRuntimeState.Serving:
|
|
@@ -620,44 +564,16 @@ function topologyStateForHost(state, fallback) {
|
|
|
620
564
|
return contracts_1.ZLinkTopologyState.Failed;
|
|
621
565
|
}
|
|
622
566
|
}
|
|
623
|
-
function placementFingerprint(descriptor) {
|
|
624
|
-
const spotTypes = [...descriptor.populationCapacity.spotTypes]
|
|
625
|
-
.sort((left, right) => {
|
|
626
|
-
const kind = left.objectKind.localeCompare(right.objectKind);
|
|
627
|
-
return kind !== 0 ? kind : left.stableType.localeCompare(right.stableType);
|
|
628
|
-
})
|
|
629
|
-
.map((entry) => [
|
|
630
|
-
entry.objectKind,
|
|
631
|
-
entry.stableType,
|
|
632
|
-
entry.active,
|
|
633
|
-
entry.reserved,
|
|
634
|
-
entry.limit
|
|
635
|
-
]);
|
|
636
|
-
return JSON.stringify([
|
|
637
|
-
descriptor.objectRole,
|
|
638
|
-
descriptor.placementWeight,
|
|
639
|
-
descriptor.populationCapacity.actors,
|
|
640
|
-
descriptor.populationCapacity.spots,
|
|
641
|
-
spotTypes,
|
|
642
|
-
descriptor.activationConcurrency,
|
|
643
|
-
Object.entries(descriptor.channelWeights).sort(([left], [right]) => left.localeCompare(right))
|
|
644
|
-
]);
|
|
645
|
-
}
|
|
646
567
|
function hasRemainingCapacity(capacity) {
|
|
647
568
|
return capacity.limit === 0 || capacity.active + (capacity.reserved ?? 0) < capacity.limit;
|
|
648
569
|
}
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
peer.descriptorRevision.toString(),
|
|
655
|
-
peer.endpoint,
|
|
656
|
-
peer.state,
|
|
657
|
-
peer.lastError
|
|
658
|
-
])
|
|
659
|
-
]));
|
|
570
|
+
class ZLinkDrainingStatePublishError extends Error {
|
|
571
|
+
constructor(cause) {
|
|
572
|
+
super('Failed to publish draining peer rows.', { cause });
|
|
573
|
+
this.name = 'ZLinkDrainingStatePublishError';
|
|
574
|
+
}
|
|
660
575
|
}
|
|
576
|
+
exports.ZLinkDrainingStatePublishError = ZLinkDrainingStatePublishError;
|
|
661
577
|
class ZLinkRetiringRollbackError extends Error {
|
|
662
578
|
constructor() {
|
|
663
579
|
super('Retiring descriptor publication could not be rolled back to Serving.');
|
|
@@ -673,15 +589,14 @@ function multiMeshDrainError() {
|
|
|
673
589
|
}
|
|
674
590
|
function backendState(state) {
|
|
675
591
|
switch (state) {
|
|
676
|
-
case
|
|
592
|
+
case service_runtime_contracts_1.MeshNodeRuntimeState.Preparing:
|
|
677
593
|
return contracts_1.ZLinkTopologyState.Starting;
|
|
678
|
-
case
|
|
679
|
-
case 3:
|
|
680
|
-
case 4:
|
|
594
|
+
case service_runtime_contracts_1.MeshNodeRuntimeState.Serving:
|
|
681
595
|
return contracts_1.ZLinkTopologyState.Ready;
|
|
682
|
-
case
|
|
596
|
+
case service_runtime_contracts_1.MeshNodeRuntimeState.Retiring:
|
|
597
|
+
case service_runtime_contracts_1.MeshNodeRuntimeState.Draining:
|
|
683
598
|
return contracts_1.ZLinkTopologyState.Stopping;
|
|
684
|
-
case
|
|
599
|
+
case service_runtime_contracts_1.MeshNodeRuntimeState.Stopped:
|
|
685
600
|
return contracts_1.ZLinkTopologyState.Stopped;
|
|
686
601
|
default:
|
|
687
602
|
return contracts_1.ZLinkTopologyState.Failed;
|
|
@@ -689,14 +604,14 @@ function backendState(state) {
|
|
|
689
604
|
}
|
|
690
605
|
function peerState(state) {
|
|
691
606
|
switch (state) {
|
|
692
|
-
case
|
|
607
|
+
case service_runtime_contracts_1.MeshPeerRuntimeState.Serving:
|
|
693
608
|
return contracts_1.ZLinkPeerState.Ready;
|
|
694
|
-
case
|
|
609
|
+
case service_runtime_contracts_1.MeshPeerRuntimeState.Draining:
|
|
695
610
|
return contracts_1.ZLinkPeerState.Draining;
|
|
696
|
-
case
|
|
611
|
+
case service_runtime_contracts_1.MeshPeerRuntimeState.NotRequired:
|
|
697
612
|
return contracts_1.ZLinkPeerState.NotRequired;
|
|
698
|
-
case
|
|
699
|
-
case
|
|
613
|
+
case service_runtime_contracts_1.MeshPeerRuntimeState.Connecting:
|
|
614
|
+
case service_runtime_contracts_1.MeshPeerRuntimeState.Preparing:
|
|
700
615
|
return contracts_1.ZLinkPeerState.Connecting;
|
|
701
616
|
default:
|
|
702
617
|
return contracts_1.ZLinkPeerState.NotConnected;
|
|
@@ -714,12 +629,16 @@ function peerUnavailableReason(state) {
|
|
|
714
629
|
}
|
|
715
630
|
}
|
|
716
631
|
function drainFailureReason(error) {
|
|
717
|
-
|
|
718
|
-
|
|
632
|
+
if ((0, state_lane_1.isStructuralGuardEnabled)()) {
|
|
633
|
+
const pending = (0, state_lane_1.debugPendingWorkNames)();
|
|
634
|
+
if (pending.length > 0)
|
|
635
|
+
console.error('[zlink.runtime.drain.pending]', pending);
|
|
636
|
+
}
|
|
637
|
+
if (error instanceof ZLinkDrainingStatePublishError)
|
|
719
638
|
return 'drain_state_publish_failed';
|
|
720
|
-
if (
|
|
639
|
+
if (error instanceof runtime_1.ZLinkOwnerCleanupError ||
|
|
721
640
|
(error instanceof AggregateError &&
|
|
722
|
-
error.errors.some((nested) => nested instanceof
|
|
641
|
+
error.errors.some((nested) => nested instanceof runtime_1.ZLinkOwnerCleanupError))) {
|
|
723
642
|
return 'owner_cleanup_failed';
|
|
724
643
|
}
|
|
725
644
|
return 'teardown_failed';
|
|
@@ -15,10 +15,12 @@ export interface ZLinkRuntimeStartRollbackParts {
|
|
|
15
15
|
readonly spotNodeRuntime?: ZLinkSpotNodeRuntimeManager;
|
|
16
16
|
readonly channelRuntime?: ZLinkChannelRuntimeManager;
|
|
17
17
|
readonly ownedStores?: readonly ZLinkRuntimeOwnedStore[];
|
|
18
|
+
readonly shutdownSignal?: AbortSignal;
|
|
18
19
|
}
|
|
19
20
|
export interface ZLinkRuntimeStopParts {
|
|
20
21
|
readonly state: ZLinkFrameworkExecutionState;
|
|
21
22
|
readonly cleanupDeadline?: Date;
|
|
23
|
+
readonly shutdownSignal?: AbortSignal;
|
|
22
24
|
readonly locationSnapshot: ZLinkLocationRuntimeStopSnapshot;
|
|
23
25
|
readonly streamRuntime?: ZLinkStreamRuntimeManager;
|
|
24
26
|
readonly spotNodeRuntime?: ZLinkSpotNodeRuntimeManager;
|