@zlink-systems/framework 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.js +16 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +28 -0
- package/dist/runtime/activation-admission.js +57 -0
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +19 -17
- package/dist/runtime/actors/actor-handoff.d.ts +13 -7
- package/dist/runtime/actors/actor-handoff.js +36 -25
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +85 -123
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
- package/dist/runtime/actors/actor-remote-joiner.js +11 -17
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
- package/dist/runtime/actors/deferred-join-completion.js +21 -0
- package/dist/runtime/actors/index.d.ts +10 -8
- package/dist/runtime/actors/index.js +101 -73
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +7 -1
- package/dist/runtime/admission.js +11 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +8 -33
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
- package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -9
- package/dist/runtime/channels/channel-clients.js +68 -60
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -18
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
- package/dist/runtime/channels/channel-runtime-manager.js +4 -12
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
- package/dist/runtime/channels/channel-socket-registry.js +296 -235
- package/dist/runtime/channels/channel-transports.d.ts +11 -20
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +133 -81
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +22 -9
- package/dist/runtime/execution/index.js +107 -37
- package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
- package/dist/runtime/execution/serial-execution-queue.js +99 -26
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/listener-records.d.ts +11 -0
- package/dist/runtime/foundation/listener-records.js +20 -0
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
- package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
- package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
- package/dist/runtime/foundation/service-topology-registry.js +22 -61
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
- package/dist/runtime/host/actor-transfer-runtime.js +210 -256
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +19 -14
- package/dist/runtime/host/index.js +234 -175
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +11 -23
- package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
- package/dist/runtime/host/route-mesh-runtime.js +178 -257
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
- package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
- package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
- package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
- package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +5 -10
- package/dist/runtime/locations/lifecycle.js +4 -33
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +44 -30
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
- package/dist/runtime/locations/spot-location-claims.js +40 -23
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
- package/dist/runtime/spots/index.d.ts +29 -29
- package/dist/runtime/spots/index.js +441 -313
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
- package/dist/runtime/spots/spot-activation-registry.js +27 -60
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
- package/dist/runtime/spots/spot-activation-state.js +4 -17
- package/dist/runtime/spots/spot-activation.d.ts +10 -9
- package/dist/runtime/spots/spot-activation.js +103 -81
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
- package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
- package/dist/runtime/spots/spot-actor-membership.js +44 -53
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-entry-activation.js +9 -21
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +6 -5
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
- package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +10 -37
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
- package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
- package/dist/runtime/spots/spot-serial-executor.js +9 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
- package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
- package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -19
- package/dist/runtime/streams/index.d.ts +15 -14
- package/dist/runtime/streams/index.js +38 -39
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/session-serial-executor.js +2 -2
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +15 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +72 -0
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +45 -39
- package/src/runtime/actors/actor-handoff.ts +55 -45
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +174 -215
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +15 -36
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/actor-source-transfer.ts +5 -18
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +44 -0
- package/src/runtime/actors/index.ts +122 -88
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +13 -2
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +15 -42
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
- package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
- package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
- package/src/runtime/backend/raw-binding-port.ts +14 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -31
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +8 -15
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +369 -262
- package/src/runtime/channels/channel-transports.ts +161 -115
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +175 -106
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +116 -38
- package/src/runtime/execution/serial-execution-queue.ts +179 -34
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/listener-records.ts +21 -0
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
- package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
- package/src/runtime/foundation/service-topology-registry.ts +30 -79
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +266 -418
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +408 -312
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +12 -44
- package/src/runtime/host/route-mesh-runtime.ts +236 -275
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
- package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
- package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +16 -45
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +90 -58
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +54 -26
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
- package/src/runtime/spots/index.ts +687 -437
- package/src/runtime/spots/spot-activation-registry.ts +42 -71
- package/src/runtime/spots/spot-activation-state.ts +4 -16
- package/src/runtime/spots/spot-activation.ts +167 -115
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
- package/src/runtime/spots/spot-actor-membership.ts +107 -75
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -33
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +29 -21
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
- package/src/runtime/spots/spot-outbound.ts +47 -68
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +10 -43
- package/src/runtime/spots/spot-serial-executor.ts +10 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +23 -37
- package/src/runtime/streams/index.ts +102 -88
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/session-serial-executor.ts +2 -2
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
- package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,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)
|
|
@@ -44,17 +53,19 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
44
53
|
const status = node.status();
|
|
45
54
|
const descriptor = this.options.meshNodeDescriptor?.(meshName);
|
|
46
55
|
const localPlacementCounts = this.options.localPlacementCounts?.(meshName);
|
|
47
|
-
|
|
48
|
-
|
|
56
|
+
// Active counts come only from this MeshNode's activation records (runtime monitoring §5);
|
|
57
|
+
// before the object managers exist nothing is active on it.
|
|
58
|
+
const populationCapacity = descriptor === undefined
|
|
59
|
+
? undefined
|
|
49
60
|
: {
|
|
50
61
|
...descriptor.populationCapacity,
|
|
51
62
|
actors: {
|
|
52
63
|
...descriptor.populationCapacity.actors,
|
|
53
|
-
active: localPlacementCounts
|
|
64
|
+
active: localPlacementCounts?.activeActorCount ?? 0
|
|
54
65
|
},
|
|
55
66
|
spots: {
|
|
56
67
|
...descriptor.populationCapacity.spots,
|
|
57
|
-
active: localPlacementCounts
|
|
68
|
+
active: localPlacementCounts?.activeSpotCount ?? 0
|
|
58
69
|
}
|
|
59
70
|
};
|
|
60
71
|
const backendPeers = node.peers();
|
|
@@ -72,7 +83,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
72
83
|
const channels = Object.entries(this.options.meshOptions.get(meshName)?.meshChannels ?? {}).map(([channelName, channel]) => {
|
|
73
84
|
const readyMemberCount = BigInt(peerChannels.filter((entry, index) => peers[index]?.state === contracts_1.ZLinkPeerState.Ready &&
|
|
74
85
|
entry.names.some((name, channelIndex) => name === channelName && (entry.weights[channelIndex] ?? 0) > 0)).length);
|
|
75
|
-
const localWeight = descriptor?.channelWeights[channelName] ?? channel.weight ??
|
|
86
|
+
const localWeight = descriptor?.channelWeights[channelName] ?? channel.weight ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT;
|
|
76
87
|
const readyTargetCount = Number(readyMemberCount) + (channel.server === true && localWeight > 0 ? 1 : 0);
|
|
77
88
|
return { channelName, isReady: readyTargetCount > 0, readyTargetCount };
|
|
78
89
|
});
|
|
@@ -87,14 +98,14 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
87
98
|
? contracts_1.ZLinkTopologyState.Degraded
|
|
88
99
|
: hostTopologyState;
|
|
89
100
|
const hostReady = (0, runtime_state_projections_1.runtimeStateIsReady)(hostState);
|
|
90
|
-
const objectRole = descriptor?.objectRole ??
|
|
101
|
+
const objectRole = descriptor?.objectRole ?? contracts_1.ZLinkObjectRole.None;
|
|
91
102
|
const placementWeight = descriptor?.placementWeight ?? 0;
|
|
92
103
|
const capacityAvailable = descriptor !== undefined &&
|
|
93
104
|
populationCapacity !== undefined &&
|
|
94
|
-
|
|
105
|
+
(this.options.activationAdmission?.hasHeadroom(meshName) ?? true) &&
|
|
95
106
|
(hasRemainingCapacity(populationCapacity.actors) ||
|
|
96
107
|
hasRemainingCapacity(populationCapacity.spots));
|
|
97
|
-
const placementAvailable = objectRole ===
|
|
108
|
+
const placementAvailable = objectRole === contracts_1.ZLinkObjectRole.Server &&
|
|
98
109
|
placementWeight > 0 &&
|
|
99
110
|
capacityAvailable &&
|
|
100
111
|
locationStoreHealthy &&
|
|
@@ -111,113 +122,51 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
111
122
|
isAvailable: placementAvailable,
|
|
112
123
|
activeActorCount: populationCapacity?.actors.active ?? 0,
|
|
113
124
|
activeSpotCount: populationCapacity?.spots.active ?? 0,
|
|
114
|
-
unavailableReason: placementAvailable
|
|
115
|
-
? undefined
|
|
116
|
-
: localTopologyState !== contracts_1.ZLinkTopologyState.Ready
|
|
117
|
-
? contracts_1.ZLinkTopologyReason.RuntimeNotReady
|
|
118
|
-
: !locationStoreHealthy
|
|
119
|
-
? contracts_1.ZLinkTopologyReason.LocationUnavailable
|
|
120
|
-
: placementWeight <= 0
|
|
121
|
-
? contracts_1.ZLinkTopologyReason.NoReadyTarget
|
|
122
|
-
: contracts_1.ZLinkTopologyReason.CapacityExceeded
|
|
125
|
+
unavailableReason: placementUnavailableReason(placementAvailable, hostState, locationStoreHealthy)
|
|
123
126
|
},
|
|
124
|
-
sequence
|
|
127
|
+
sequence,
|
|
125
128
|
observedAt: new Date()
|
|
126
129
|
};
|
|
127
|
-
drain.lastSnapshot = snapshot;
|
|
128
130
|
return snapshot;
|
|
129
131
|
}
|
|
130
132
|
observe(meshName, capacity = runtime_observation_queue_1.ZLINK_DEFAULT_TERMINAL_OBSERVATION_CAPACITY, signal) {
|
|
131
133
|
const state = this.requireState(meshName);
|
|
132
134
|
if (!Number.isInteger(capacity) || capacity <= 0)
|
|
133
135
|
throw new RangeError('Observer capacity must be positive.');
|
|
134
|
-
|
|
135
|
-
this.seedPlacementFingerprint(meshName);
|
|
136
|
+
const snapshot = this.snapshot(meshName);
|
|
136
137
|
const queue = new runtime_observation_queue_1.RuntimeEventQueue(capacity, signal);
|
|
138
|
+
state.observers.add(queue);
|
|
139
|
+
this.startPlacementObserver();
|
|
137
140
|
queue.onClose(() => {
|
|
138
141
|
state.observers.delete(queue);
|
|
139
142
|
this.stopPlacementObserverIfIdle();
|
|
140
143
|
});
|
|
141
|
-
this.
|
|
142
|
-
state.observers.add(queue);
|
|
143
|
-
this.startPlacementObserver();
|
|
144
|
+
this.publishStatus(meshName, queue, snapshot);
|
|
144
145
|
return queue;
|
|
145
146
|
}
|
|
146
147
|
isReady(meshName) {
|
|
147
148
|
return this.snapshot(meshName).isReady;
|
|
148
149
|
}
|
|
149
150
|
hostStateChanged() {
|
|
150
|
-
for (const [meshName, state] of this.states)
|
|
151
|
-
|
|
152
|
-
let snapshot;
|
|
153
|
-
try {
|
|
154
|
-
snapshot = this.snapshot(meshName);
|
|
155
|
-
}
|
|
156
|
-
catch {
|
|
157
|
-
continue;
|
|
158
|
-
}
|
|
159
|
-
for (const observer of state.observers)
|
|
160
|
-
observer.push(snapshot, meshName);
|
|
161
|
-
}
|
|
151
|
+
for (const [meshName, state] of this.states)
|
|
152
|
+
this.publishCurrentStatus(meshName, state);
|
|
162
153
|
}
|
|
163
154
|
stopObservers() {
|
|
164
155
|
for (const [meshName, state] of this.states) {
|
|
165
|
-
state.
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
state.
|
|
171
|
-
terminal = {
|
|
172
|
-
...current,
|
|
173
|
-
state: contracts_1.ZLinkTopologyState.Stopped,
|
|
174
|
-
isReady: false,
|
|
175
|
-
channels: current.channels.map((channel) => ({
|
|
176
|
-
...channel,
|
|
177
|
-
isReady: false
|
|
178
|
-
})),
|
|
179
|
-
placement: {
|
|
180
|
-
...current.placement,
|
|
181
|
-
isAvailable: false,
|
|
182
|
-
unavailableReason: contracts_1.ZLinkTopologyReason.RuntimeNotReady
|
|
183
|
-
},
|
|
184
|
-
sequence: terminalSequence,
|
|
185
|
-
observedAt: new Date()
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
catch {
|
|
189
|
-
const current = state.lastSnapshot;
|
|
190
|
-
if (current !== undefined) {
|
|
191
|
-
const terminalSequence = current.sequence >= state.sequence ? current.sequence + 1n : state.sequence;
|
|
192
|
-
state.sequence = terminalSequence;
|
|
193
|
-
terminal = {
|
|
194
|
-
...current,
|
|
195
|
-
state: contracts_1.ZLinkTopologyState.Stopped,
|
|
196
|
-
isReady: false,
|
|
197
|
-
channels: current.channels.map((channel) => ({
|
|
198
|
-
...channel,
|
|
199
|
-
isReady: false
|
|
200
|
-
})),
|
|
201
|
-
placement: {
|
|
202
|
-
...current.placement,
|
|
203
|
-
isAvailable: false,
|
|
204
|
-
unavailableReason: contracts_1.ZLinkTopologyReason.RuntimeNotReady
|
|
205
|
-
},
|
|
206
|
-
sequence: terminalSequence,
|
|
207
|
-
observedAt: new Date()
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
for (const observer of [...state.observers]) {
|
|
212
|
-
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])
|
|
213
162
|
observer.close();
|
|
214
|
-
else
|
|
215
|
-
observer.seal(terminal, meshName);
|
|
216
163
|
}
|
|
217
|
-
|
|
164
|
+
else {
|
|
165
|
+
this.publishSnapshot(meshName, state, terminalSnapshot(current, contracts_1.ZLinkTopologyState.Stopped));
|
|
166
|
+
}
|
|
218
167
|
}
|
|
219
168
|
}
|
|
220
|
-
drain(meshName, deadlineMs =
|
|
169
|
+
drain(meshName, deadlineMs = DEFAULT_ROUTE_MESH_DRAIN_TIMEOUT_MS, signal) {
|
|
221
170
|
const state = this.requireState(meshName);
|
|
222
171
|
if (this.states.size > 1)
|
|
223
172
|
return Promise.reject(multiMeshDrainError());
|
|
@@ -235,7 +184,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
235
184
|
new Promise((resolve) => state.waiters.push(resolve));
|
|
236
185
|
return waitForOperation(operation, signal);
|
|
237
186
|
}
|
|
238
|
-
drainHost(deadlineMs =
|
|
187
|
+
drainHost(deadlineMs = DEFAULT_ROUTE_MESH_DRAIN_TIMEOUT_MS, signal) {
|
|
239
188
|
if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
|
|
240
189
|
return Promise.reject(new TypeError('Drain deadlineMs must be greater than zero.'));
|
|
241
190
|
}
|
|
@@ -248,12 +197,12 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
248
197
|
}
|
|
249
198
|
return waitForOperation(this.hostOperation, signal);
|
|
250
199
|
}
|
|
251
|
-
shutdownHost(deadline
|
|
200
|
+
shutdownHost(deadline, signal) {
|
|
252
201
|
if (typeof deadline === 'number' && (!Number.isFinite(deadline) || deadline <= 0)) {
|
|
253
202
|
return Promise.reject(new TypeError('Shutdown deadlineMs must be greater than zero.'));
|
|
254
203
|
}
|
|
255
204
|
if (this.shutdownOperation === undefined) {
|
|
256
|
-
const operation = this.performHostShutdown(deadline,
|
|
205
|
+
const operation = this.performHostShutdown(deadline, signal);
|
|
257
206
|
this.shutdownOperation = operation;
|
|
258
207
|
for (const state of this.states.values())
|
|
259
208
|
state.operation ??= operation;
|
|
@@ -278,7 +227,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
278
227
|
// A failed response can still follow a committed Store write. Restore
|
|
279
228
|
// every attempted descriptor before the host reports a reversible block.
|
|
280
229
|
const rollback = new AbortController();
|
|
281
|
-
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));
|
|
282
231
|
let rollbackFailed = false;
|
|
283
232
|
for (const meshName of attempted.reverse()) {
|
|
284
233
|
try {
|
|
@@ -316,14 +265,14 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
316
265
|
}
|
|
317
266
|
catch (error) {
|
|
318
267
|
const classified = drainFailureReason(error);
|
|
319
|
-
if (
|
|
268
|
+
if ((0, diagnostics_1.isRelocationDebugEnabled)()) {
|
|
320
269
|
console.error('[zlink.runtime.relocation.drain_failed]', classified, error);
|
|
321
270
|
}
|
|
322
271
|
const reason = deadline.signal.aborted
|
|
323
272
|
? 'deadline_exceeded'
|
|
324
273
|
: classified;
|
|
325
274
|
const rollback = new AbortController();
|
|
326
|
-
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));
|
|
327
276
|
try {
|
|
328
277
|
await Promise.all(entries.map(([meshName]) => this.options.rollbackRetiring(meshName, rollback.signal)));
|
|
329
278
|
}
|
|
@@ -430,29 +379,23 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
430
379
|
}
|
|
431
380
|
return result;
|
|
432
381
|
}
|
|
433
|
-
async performHostShutdown(cleanupDeadline,
|
|
434
|
-
const timeoutMs = Math.max(0, remainingTimeoutMs ??
|
|
435
|
-
(cleanupDeadline instanceof Date ? cleanupDeadline.getTime() - Date.now() : cleanupDeadline));
|
|
382
|
+
async performHostShutdown(cleanupDeadline, signal) {
|
|
436
383
|
const deadlineAt = cleanupDeadline instanceof Date ? cleanupDeadline : new Date(Date.now() + cleanupDeadline);
|
|
437
384
|
const entries = [...this.states.entries()];
|
|
438
|
-
if (entries.length === 0)
|
|
439
|
-
return { kind: 'drained' };
|
|
440
385
|
for (const [, state] of entries) {
|
|
441
386
|
state.deadline = deadlineAt;
|
|
442
387
|
}
|
|
443
|
-
const deadline = new AbortController();
|
|
444
|
-
const timer = setTimeout(() => deadline.abort((0, abort_1.createDeadlineExceededError)('Shutdown deadline exceeded.')), timeoutMs);
|
|
445
388
|
let result;
|
|
446
389
|
try {
|
|
447
390
|
for (const [meshName, state] of entries) {
|
|
448
391
|
this.options.admission.seal(meshName, framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RuntimeShutdown);
|
|
449
392
|
this.transition(meshName, state, contracts_1.ZLinkTopologyState.Stopping);
|
|
450
393
|
}
|
|
451
|
-
await Promise.all(entries.map(([meshName]) => this.options.publishDraining(meshName,
|
|
452
|
-
await this.options.publishHostDraining(
|
|
453
|
-
await Promise.all(entries.map(([meshName]) => this.options.admission.awaitZero(meshName,
|
|
454
|
-
await Promise.all(entries.map(([meshName]) => this.options.shutdownResources?.(meshName,
|
|
455
|
-
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);
|
|
456
399
|
result = { kind: 'drained' };
|
|
457
400
|
for (const [meshName, state] of entries) {
|
|
458
401
|
this.transition(meshName, state, contracts_1.ZLinkTopologyState.Stopped);
|
|
@@ -462,7 +405,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
462
405
|
const classified = drainFailureReason(error);
|
|
463
406
|
const reason = classified !== 'teardown_failed'
|
|
464
407
|
? classified
|
|
465
|
-
:
|
|
408
|
+
: signal.aborted
|
|
466
409
|
? 'deadline_exceeded'
|
|
467
410
|
: classified;
|
|
468
411
|
await Promise.all(entries.map(([meshName]) => this.options.forceStopResources(meshName).catch(() => undefined)));
|
|
@@ -471,9 +414,6 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
471
414
|
this.transition(meshName, state, contracts_1.ZLinkTopologyState.Failed);
|
|
472
415
|
}
|
|
473
416
|
}
|
|
474
|
-
finally {
|
|
475
|
-
clearTimeout(timer);
|
|
476
|
-
}
|
|
477
417
|
for (const [, state] of entries) {
|
|
478
418
|
state.result = result;
|
|
479
419
|
for (const resolve of state.waiters)
|
|
@@ -486,112 +426,65 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
486
426
|
if (state.state === next)
|
|
487
427
|
return;
|
|
488
428
|
state.state = next;
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
current = this.snapshot(meshName);
|
|
494
|
-
snapshotAvailable = true;
|
|
495
|
-
}
|
|
496
|
-
catch {
|
|
497
|
-
current = state.lastSnapshot;
|
|
498
|
-
}
|
|
499
|
-
const terminal = next === contracts_1.ZLinkTopologyState.Stopped || next === contracts_1.ZLinkTopologyState.Failed;
|
|
500
|
-
if (current !== undefined) {
|
|
501
|
-
if (terminal) {
|
|
502
|
-
const terminalSequence = current.sequence >= state.sequence ? current.sequence + 1n : state.sequence;
|
|
503
|
-
state.sequence = terminalSequence;
|
|
504
|
-
const terminalStatus = {
|
|
505
|
-
...current,
|
|
506
|
-
state: next,
|
|
507
|
-
isReady: false,
|
|
508
|
-
channels: current.channels.map((channel) => ({
|
|
509
|
-
...channel,
|
|
510
|
-
isReady: false
|
|
511
|
-
})),
|
|
512
|
-
placement: {
|
|
513
|
-
...current.placement,
|
|
514
|
-
isAvailable: false,
|
|
515
|
-
unavailableReason: contracts_1.ZLinkTopologyReason.RuntimeNotReady
|
|
516
|
-
},
|
|
517
|
-
sequence: terminalSequence,
|
|
518
|
-
observedAt: new Date()
|
|
519
|
-
};
|
|
520
|
-
for (const observer of state.observers)
|
|
521
|
-
observer.seal(terminalStatus, meshName);
|
|
522
|
-
}
|
|
523
|
-
else if (snapshotAvailable) {
|
|
524
|
-
for (const observer of state.observers)
|
|
525
|
-
observer.push(current, meshName);
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
if (terminal) {
|
|
529
|
-
if (current === undefined) {
|
|
530
|
-
for (const observer of state.observers)
|
|
531
|
-
observer.close();
|
|
532
|
-
}
|
|
533
|
-
state.observers.clear();
|
|
534
|
-
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();
|
|
535
433
|
}
|
|
536
434
|
}
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
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);
|
|
542
468
|
}
|
|
543
|
-
this.peerFingerprints.set(meshName, peerFingerprintMap(this.options.meshNode(meshName)?.peers() ?? []));
|
|
544
469
|
}
|
|
545
470
|
startPlacementObserver() {
|
|
546
471
|
if (this.placementObserver !== undefined)
|
|
547
472
|
return;
|
|
548
|
-
this.placementObserver = setInterval(() => this.observePlacementChanges(),
|
|
473
|
+
this.placementObserver = setInterval(() => this.observePlacementChanges(), PLACEMENT_OBSERVATION_INTERVAL_MS);
|
|
549
474
|
this.placementObserver.unref();
|
|
550
475
|
}
|
|
551
476
|
stopPlacementObserverIfIdle() {
|
|
552
|
-
|
|
553
|
-
|
|
477
|
+
for (const state of this.states.values()) {
|
|
478
|
+
if (state.observers.size > 0)
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
554
481
|
if (this.placementObserver !== undefined)
|
|
555
482
|
clearInterval(this.placementObserver);
|
|
556
483
|
this.placementObserver = undefined;
|
|
557
484
|
}
|
|
558
485
|
observePlacementChanges() {
|
|
559
486
|
for (const [meshName, state] of this.states) {
|
|
560
|
-
|
|
561
|
-
continue;
|
|
562
|
-
const locationStoreHealthy = this.options.isLocationStoreHealthy?.() ?? true;
|
|
563
|
-
if (locationStoreHealthy !== this.locationStoreHealthFingerprints.get(meshName)) {
|
|
564
|
-
this.locationStoreHealthFingerprints.set(meshName, locationStoreHealthy);
|
|
565
|
-
state.sequence += 1n;
|
|
566
|
-
for (const observer of state.observers) {
|
|
567
|
-
observer.push(this.snapshot(meshName), meshName);
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
const descriptor = this.options.meshNodeDescriptor?.(meshName);
|
|
571
|
-
if (descriptor === undefined)
|
|
572
|
-
continue;
|
|
573
|
-
const fingerprint = placementFingerprint(descriptor);
|
|
574
|
-
const previous = this.placementFingerprints.get(meshName);
|
|
575
|
-
this.placementFingerprints.set(meshName, fingerprint);
|
|
576
|
-
const node = this.options.meshNode(meshName);
|
|
577
|
-
if (previous !== undefined && previous !== fingerprint) {
|
|
578
|
-
state.sequence += 1n;
|
|
579
|
-
for (const observer of state.observers) {
|
|
580
|
-
observer.push(this.snapshot(meshName), meshName);
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
const previousPeers = this.peerFingerprints.get(meshName) ?? new Map();
|
|
584
|
-
const peers = node?.peers() ?? [];
|
|
585
|
-
const nextPeers = peerFingerprintMap(peers);
|
|
586
|
-
this.peerFingerprints.set(meshName, nextPeers);
|
|
587
|
-
for (const peerRid of new Set([...previousPeers.keys(), ...nextPeers.keys()])) {
|
|
588
|
-
if (previousPeers.get(peerRid) === nextPeers.get(peerRid))
|
|
589
|
-
continue;
|
|
590
|
-
state.sequence += 1n;
|
|
591
|
-
for (const observer of state.observers) {
|
|
592
|
-
observer.push(this.snapshot(meshName), meshName);
|
|
593
|
-
}
|
|
594
|
-
}
|
|
487
|
+
this.publishCurrentStatus(meshName, state);
|
|
595
488
|
}
|
|
596
489
|
}
|
|
597
490
|
requireState(meshName) {
|
|
@@ -602,6 +495,59 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
602
495
|
}
|
|
603
496
|
}
|
|
604
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
|
+
}
|
|
605
551
|
function topologyStateForHost(state, fallback) {
|
|
606
552
|
switch (state) {
|
|
607
553
|
case contracts_1.ZLinkFrameworkRuntimeState.Serving:
|
|
@@ -618,44 +564,16 @@ function topologyStateForHost(state, fallback) {
|
|
|
618
564
|
return contracts_1.ZLinkTopologyState.Failed;
|
|
619
565
|
}
|
|
620
566
|
}
|
|
621
|
-
function placementFingerprint(descriptor) {
|
|
622
|
-
const spotTypes = [...descriptor.populationCapacity.spotTypes]
|
|
623
|
-
.sort((left, right) => {
|
|
624
|
-
const kind = left.objectKind.localeCompare(right.objectKind);
|
|
625
|
-
return kind !== 0 ? kind : left.stableType.localeCompare(right.stableType);
|
|
626
|
-
})
|
|
627
|
-
.map((entry) => [
|
|
628
|
-
entry.objectKind,
|
|
629
|
-
entry.stableType,
|
|
630
|
-
entry.active,
|
|
631
|
-
entry.reserved,
|
|
632
|
-
entry.limit
|
|
633
|
-
]);
|
|
634
|
-
return JSON.stringify([
|
|
635
|
-
descriptor.objectRole,
|
|
636
|
-
descriptor.placementWeight,
|
|
637
|
-
descriptor.populationCapacity.actors,
|
|
638
|
-
descriptor.populationCapacity.spots,
|
|
639
|
-
spotTypes,
|
|
640
|
-
descriptor.activationConcurrency,
|
|
641
|
-
Object.entries(descriptor.channelWeights).sort(([left], [right]) => left.localeCompare(right))
|
|
642
|
-
]);
|
|
643
|
-
}
|
|
644
567
|
function hasRemainingCapacity(capacity) {
|
|
645
568
|
return capacity.limit === 0 || capacity.active + (capacity.reserved ?? 0) < capacity.limit;
|
|
646
569
|
}
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
peer.descriptorRevision.toString(),
|
|
653
|
-
peer.endpoint,
|
|
654
|
-
peer.state,
|
|
655
|
-
peer.lastError
|
|
656
|
-
])
|
|
657
|
-
]));
|
|
570
|
+
class ZLinkDrainingStatePublishError extends Error {
|
|
571
|
+
constructor(cause) {
|
|
572
|
+
super('Failed to publish draining peer rows.', { cause });
|
|
573
|
+
this.name = 'ZLinkDrainingStatePublishError';
|
|
574
|
+
}
|
|
658
575
|
}
|
|
576
|
+
exports.ZLinkDrainingStatePublishError = ZLinkDrainingStatePublishError;
|
|
659
577
|
class ZLinkRetiringRollbackError extends Error {
|
|
660
578
|
constructor() {
|
|
661
579
|
super('Retiring descriptor publication could not be rolled back to Serving.');
|
|
@@ -671,15 +589,14 @@ function multiMeshDrainError() {
|
|
|
671
589
|
}
|
|
672
590
|
function backendState(state) {
|
|
673
591
|
switch (state) {
|
|
674
|
-
case
|
|
592
|
+
case service_runtime_contracts_1.MeshNodeRuntimeState.Preparing:
|
|
675
593
|
return contracts_1.ZLinkTopologyState.Starting;
|
|
676
|
-
case
|
|
677
|
-
case 3:
|
|
678
|
-
case 4:
|
|
594
|
+
case service_runtime_contracts_1.MeshNodeRuntimeState.Serving:
|
|
679
595
|
return contracts_1.ZLinkTopologyState.Ready;
|
|
680
|
-
case
|
|
596
|
+
case service_runtime_contracts_1.MeshNodeRuntimeState.Retiring:
|
|
597
|
+
case service_runtime_contracts_1.MeshNodeRuntimeState.Draining:
|
|
681
598
|
return contracts_1.ZLinkTopologyState.Stopping;
|
|
682
|
-
case
|
|
599
|
+
case service_runtime_contracts_1.MeshNodeRuntimeState.Stopped:
|
|
683
600
|
return contracts_1.ZLinkTopologyState.Stopped;
|
|
684
601
|
default:
|
|
685
602
|
return contracts_1.ZLinkTopologyState.Failed;
|
|
@@ -687,14 +604,14 @@ function backendState(state) {
|
|
|
687
604
|
}
|
|
688
605
|
function peerState(state) {
|
|
689
606
|
switch (state) {
|
|
690
|
-
case
|
|
607
|
+
case service_runtime_contracts_1.MeshPeerRuntimeState.Serving:
|
|
691
608
|
return contracts_1.ZLinkPeerState.Ready;
|
|
692
|
-
case
|
|
609
|
+
case service_runtime_contracts_1.MeshPeerRuntimeState.Draining:
|
|
693
610
|
return contracts_1.ZLinkPeerState.Draining;
|
|
694
|
-
case
|
|
611
|
+
case service_runtime_contracts_1.MeshPeerRuntimeState.NotRequired:
|
|
695
612
|
return contracts_1.ZLinkPeerState.NotRequired;
|
|
696
|
-
case
|
|
697
|
-
case
|
|
613
|
+
case service_runtime_contracts_1.MeshPeerRuntimeState.Connecting:
|
|
614
|
+
case service_runtime_contracts_1.MeshPeerRuntimeState.Preparing:
|
|
698
615
|
return contracts_1.ZLinkPeerState.Connecting;
|
|
699
616
|
default:
|
|
700
617
|
return contracts_1.ZLinkPeerState.NotConnected;
|
|
@@ -712,12 +629,16 @@ function peerUnavailableReason(state) {
|
|
|
712
629
|
}
|
|
713
630
|
}
|
|
714
631
|
function drainFailureReason(error) {
|
|
715
|
-
|
|
716
|
-
|
|
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)
|
|
717
638
|
return 'drain_state_publish_failed';
|
|
718
|
-
if (
|
|
639
|
+
if (error instanceof runtime_1.ZLinkOwnerCleanupError ||
|
|
719
640
|
(error instanceof AggregateError &&
|
|
720
|
-
error.errors.some((nested) => nested instanceof
|
|
641
|
+
error.errors.some((nested) => nested instanceof runtime_1.ZLinkOwnerCleanupError))) {
|
|
721
642
|
return 'owner_cleanup_failed';
|
|
722
643
|
}
|
|
723
644
|
return 'teardown_failed';
|