@zlink-systems/framework 0.21.0 → 0.22.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/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +43 -33
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +244 -227
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +208 -219
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +0 -1
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +138 -130
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +73 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +215 -197
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/flow-context.ts +12 -3
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +95 -76
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +593 -563
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -20,8 +20,7 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
20
20
|
this.options = options;
|
|
21
21
|
}
|
|
22
22
|
async receiveRoutedBoundSession(actorId, message, packetName, metadata, actorRef, actorPacketTarget) {
|
|
23
|
-
const ownershipGeneration = actorRef
|
|
24
|
-
?.ownershipGeneration;
|
|
23
|
+
const ownershipGeneration = actorRef?.ownershipGeneration;
|
|
25
24
|
const currentGeneration = this.actorOwnershipGenerations.get(actorId);
|
|
26
25
|
if (currentGeneration !== undefined &&
|
|
27
26
|
(ownershipGeneration === undefined || ownershipGeneration < currentGeneration))
|
|
@@ -30,21 +29,23 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
30
29
|
this.actorOwnershipGenerations.set(actorId, ownershipGeneration);
|
|
31
30
|
}
|
|
32
31
|
await this.options.updateRemoteActorPacketTarget(actorId, actorPacketTarget);
|
|
33
|
-
if (ownershipGeneration !== undefined
|
|
34
|
-
|
|
32
|
+
if (ownershipGeneration !== undefined &&
|
|
33
|
+
this.actorOwnershipGenerations.get(actorId) !== ownershipGeneration)
|
|
35
34
|
return;
|
|
36
35
|
if (actorRef !== undefined) {
|
|
37
36
|
await this.options.streamBindingRuntime().rebindActor(actorRef);
|
|
38
37
|
}
|
|
39
|
-
if (ownershipGeneration !== undefined
|
|
40
|
-
|
|
38
|
+
if (ownershipGeneration !== undefined &&
|
|
39
|
+
this.actorOwnershipGenerations.get(actorId) !== ownershipGeneration)
|
|
41
40
|
return;
|
|
42
|
-
const sent = await this.options
|
|
41
|
+
const sent = await this.options
|
|
42
|
+
.streamBindingRuntime()
|
|
43
|
+
.sendLocalBoundSession(actorId, message, packetName, metadata);
|
|
43
44
|
if (sent) {
|
|
44
45
|
return;
|
|
45
46
|
}
|
|
46
|
-
if (ownershipGeneration !== undefined
|
|
47
|
-
|
|
47
|
+
if (ownershipGeneration !== undefined &&
|
|
48
|
+
this.actorOwnershipGenerations.get(actorId) !== ownershipGeneration)
|
|
48
49
|
return;
|
|
49
50
|
if (this.options.actorManager()?.getState(actorId)?.remoteBoundSessionTarget === undefined) {
|
|
50
51
|
return;
|
|
@@ -60,11 +61,15 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
60
61
|
}
|
|
61
62
|
async receiveRoutedBoundSessionResponse(actorId, packetName, requestSeq, message, replyOptions, actorPacketTarget) {
|
|
62
63
|
await this.options.updateRemoteActorPacketTarget(actorId, actorPacketTarget);
|
|
63
|
-
await this.options
|
|
64
|
+
await this.options
|
|
65
|
+
.streamBindingRuntime()
|
|
66
|
+
.sendLocalBoundSessionResponse(actorId, packetName, requestSeq, message, replyOptions.metadata, replyOptions.compressPayload);
|
|
64
67
|
}
|
|
65
68
|
async receiveRoutedBoundSessionError(actorId, packetName, requestSeq, error, metadata, actorPacketTarget) {
|
|
66
69
|
await this.options.updateRemoteActorPacketTarget(actorId, actorPacketTarget);
|
|
67
|
-
await this.options
|
|
70
|
+
await this.options
|
|
71
|
+
.streamBindingRuntime()
|
|
72
|
+
.sendLocalBoundSessionError(actorId, packetName, requestSeq, error, metadata);
|
|
68
73
|
}
|
|
69
74
|
async receiveRemoteBoundSessionSend(payload) {
|
|
70
75
|
const send = (0, bound_session_wire_1.decodeRemoteBoundSessionSendPayload)(payload);
|
|
@@ -72,7 +77,7 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
72
77
|
const owner = (0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwnerIfRegistered)(this.options.streamBindingRuntime());
|
|
73
78
|
const retained = await owner?.retainRelocationOutbound(send.actorId, {
|
|
74
79
|
deliver: () => this.deliverRemoteBoundSessionSend(send),
|
|
75
|
-
fail: error => this.options.reportOwnershipRefreshError?.(send.actorId, error)
|
|
80
|
+
fail: (error) => this.options.reportOwnershipRefreshError?.(send.actorId, error)
|
|
76
81
|
}, send.relocationSealId);
|
|
77
82
|
if (retained === 'retained')
|
|
78
83
|
return { ok: true };
|
|
@@ -82,7 +87,9 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
82
87
|
}
|
|
83
88
|
async deliverRemoteBoundSessionSend(send) {
|
|
84
89
|
const metadata = new Map(Object.entries(send.metadata ?? {}));
|
|
85
|
-
if (await this.options
|
|
90
|
+
if (await this.options
|
|
91
|
+
.streamBindingRuntime()
|
|
92
|
+
.sendLocalBoundSession(send.actorId, send.message, send.boundPacketName, metadata)) {
|
|
86
93
|
return true;
|
|
87
94
|
}
|
|
88
95
|
if (this.options.actorManager()?.getState(send.actorId)?.remoteBoundSessionTarget === undefined) {
|
|
@@ -101,13 +108,17 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
101
108
|
async receiveRemoteBoundSessionResponse(payload) {
|
|
102
109
|
const response = (0, bound_session_wire_1.decodeRemoteBoundSessionResponsePayload)(payload);
|
|
103
110
|
await this.options.updateRemoteActorPacketTarget(response.actorId, response.actorPacketTarget);
|
|
104
|
-
const sent = await this.options
|
|
111
|
+
const sent = await this.options
|
|
112
|
+
.streamBindingRuntime()
|
|
113
|
+
.sendLocalBoundSessionResponse(response.actorId, response.boundPacketName, response.requestSeq, response.message, new Map(Object.entries(response.metadata ?? {})), response.compressPayload);
|
|
105
114
|
return { ok: sent };
|
|
106
115
|
}
|
|
107
116
|
async receiveRemoteBoundSessionError(payload) {
|
|
108
117
|
const response = (0, bound_session_wire_1.decodeRemoteBoundSessionErrorPayload)(payload);
|
|
109
118
|
await this.options.updateRemoteActorPacketTarget(response.actorId, response.actorPacketTarget);
|
|
110
|
-
const sent = await this.options
|
|
119
|
+
const sent = await this.options
|
|
120
|
+
.streamBindingRuntime()
|
|
121
|
+
.sendLocalBoundSessionError(response.actorId, response.boundPacketName, response.requestSeq, response.error, new Map(Object.entries(response.metadata ?? {})));
|
|
111
122
|
return { ok: sent };
|
|
112
123
|
}
|
|
113
124
|
async receiveServiceWireSessionRelocationSeal(value, signal) {
|
|
@@ -179,15 +190,21 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
179
190
|
}
|
|
180
191
|
const owner = (0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwner)(this.options.streamBindingRuntime());
|
|
181
192
|
await owner.clearRelocation(actorId, error);
|
|
182
|
-
void this.options
|
|
183
|
-
.
|
|
193
|
+
void this.options
|
|
194
|
+
.streamBindingRuntime()
|
|
195
|
+
.disconnectBoundSession(actorId)
|
|
196
|
+
.catch((disconnectError) => this.options.reportOwnershipRefreshError?.(actorId, disconnectError));
|
|
184
197
|
state.sealAbortCleanup?.();
|
|
185
198
|
};
|
|
186
199
|
const timeoutError = () => (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Actor '${actorId}' Session relocation seal exceeded its absolute deadline.`, true);
|
|
187
|
-
state.sealTimer = setTimeout(() => {
|
|
200
|
+
state.sealTimer = setTimeout(() => {
|
|
201
|
+
void expire(timeoutError());
|
|
202
|
+
}, this.options.sessionRelocationSealTimeoutMs);
|
|
188
203
|
state.sealTimer.unref();
|
|
189
204
|
if (signal !== undefined) {
|
|
190
|
-
const onAbort = () => {
|
|
205
|
+
const onAbort = () => {
|
|
206
|
+
void expire(signal.reason ?? timeoutError());
|
|
207
|
+
};
|
|
191
208
|
state.sealAbortCleanup = () => signal.removeEventListener('abort', onAbort);
|
|
192
209
|
if (signal.aborted)
|
|
193
210
|
onAbort();
|
|
@@ -207,10 +224,12 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
207
224
|
}
|
|
208
225
|
if (state.terminal !== true) {
|
|
209
226
|
const owner = (0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwner)(this.options.streamBindingRuntime());
|
|
210
|
-
if (await owner.relocationSnapshot(actorId, key) !== undefined) {
|
|
227
|
+
if ((await owner.relocationSnapshot(actorId, key)) !== undefined) {
|
|
211
228
|
await owner.clearRelocation(actorId, error);
|
|
212
|
-
void this.options
|
|
213
|
-
.
|
|
229
|
+
void this.options
|
|
230
|
+
.streamBindingRuntime()
|
|
231
|
+
.disconnectBoundSession(actorId)
|
|
232
|
+
.catch((disconnectError) => this.options.reportOwnershipRefreshError?.(actorId, disconnectError));
|
|
214
233
|
}
|
|
215
234
|
}
|
|
216
235
|
throw sealController.signal.aborted ? sealController.signal.reason : error;
|
|
@@ -242,8 +261,8 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
242
261
|
this.warnLateSessionRouteUpdate(value);
|
|
243
262
|
return;
|
|
244
263
|
}
|
|
245
|
-
if (state.routeRequestFingerprint !== undefined
|
|
246
|
-
|
|
264
|
+
if (state.routeRequestFingerprint !== undefined &&
|
|
265
|
+
state.routeRequestFingerprint !== routeRequestFingerprint) {
|
|
247
266
|
throw new service_wire_m6a_codec_1.ServiceWireProtocolError(`Session relocation '${key}' repeated command 44 with different bytes.`);
|
|
248
267
|
}
|
|
249
268
|
if (state.routeFingerprint !== undefined) {
|
|
@@ -269,7 +288,7 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
269
288
|
this.terminalServiceWireRelocations.remember(key, {
|
|
270
289
|
actorId: state.actorId,
|
|
271
290
|
sealFingerprint: state.sealFingerprint,
|
|
272
|
-
sealed: state.sealed ?? await state.sealPromise,
|
|
291
|
+
sealed: state.sealed ?? (await state.sealPromise),
|
|
273
292
|
routeRequestFingerprint,
|
|
274
293
|
routeFingerprint: fingerprint
|
|
275
294
|
});
|
|
@@ -287,7 +306,7 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
287
306
|
if (this.activeServiceWireRelocations.get(key) === state) {
|
|
288
307
|
this.activeServiceWireRelocations.delete(key);
|
|
289
308
|
}
|
|
290
|
-
const sealed = state.sealed ?? await state.sealPromise;
|
|
309
|
+
const sealed = state.sealed ?? (await state.sealPromise);
|
|
291
310
|
this.terminalServiceWireRelocations.remember(key, {
|
|
292
311
|
actorId: state.actorId,
|
|
293
312
|
sealFingerprint: state.sealFingerprint,
|
|
@@ -295,10 +314,11 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
295
314
|
routeRequestFingerprint,
|
|
296
315
|
routeFingerprint: fingerprint
|
|
297
316
|
});
|
|
298
|
-
(0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwner)(this.options.streamBindingRuntime())
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
.
|
|
317
|
+
(0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwner)(this.options.streamBindingRuntime()).clearRelocation(state.actorId, error);
|
|
318
|
+
await this.options
|
|
319
|
+
.streamBindingRuntime()
|
|
320
|
+
.disconnectBoundSession(state.actorId)
|
|
321
|
+
.catch((disconnectError) => this.options.reportOwnershipRefreshError?.(state.actorId, disconnectError));
|
|
302
322
|
throw error;
|
|
303
323
|
}
|
|
304
324
|
}
|
|
@@ -345,8 +365,8 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
345
365
|
releaseSeal: { sealId: key }
|
|
346
366
|
});
|
|
347
367
|
const currentGeneration = this.actorOwnershipGenerations.get(value.actor.actorId);
|
|
348
|
-
if (currentGeneration === undefined
|
|
349
|
-
|
|
368
|
+
if (currentGeneration === undefined ||
|
|
369
|
+
currentGeneration < committedRoute.targetAuthorityOwnerGeneration) {
|
|
350
370
|
this.actorOwnershipGenerations.set(value.actor.actorId, committedRoute.targetAuthorityOwnerGeneration);
|
|
351
371
|
}
|
|
352
372
|
});
|
|
@@ -354,12 +374,14 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
354
374
|
await owner.observeRelocationTerminal(value.actor.actorId, key, fingerprint);
|
|
355
375
|
}
|
|
356
376
|
async validateServiceWireSessionRoute(value) {
|
|
357
|
-
const current = await this.options
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
377
|
+
const current = await this.options
|
|
378
|
+
.streamBindingRuntime()
|
|
379
|
+
.sessionRouteFence(value.actor.actor.actorId);
|
|
380
|
+
if (current === undefined ||
|
|
381
|
+
current.actor.objectGeneration !== value.actor.actor.generation ||
|
|
382
|
+
!(0, routing_id_1.routingIdsEqual)(current.actor.nodeRid, value.actor.actor.nodeRid) ||
|
|
383
|
+
current.sessionRid.toString() !== value.session.sessionRid ||
|
|
384
|
+
current.bindingGeneration !== value.session.bindingGeneration) {
|
|
363
385
|
throw new bound_session_wire_1.ZLinkRemoteBoundSessionFenceError(`Actor '${value.actor.actor.actorId}' command 42 was fenced by its exact Session route.`);
|
|
364
386
|
}
|
|
365
387
|
}
|
|
@@ -402,7 +424,9 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
402
424
|
}
|
|
403
425
|
async sendActorResponse(actor, packetName, requestSeq, response, replyOptions, fallbackBoundSessionTarget, fallbackActorRef, signal) {
|
|
404
426
|
const state = this.options.actorManager()?.getState(actor.context.actorId);
|
|
405
|
-
if (await this.options
|
|
427
|
+
if (await this.options
|
|
428
|
+
.streamBindingRuntime()
|
|
429
|
+
.sendLocalBoundSessionResponse(actor.context.actorId, packetName, requestSeq, response, replyOptions.metadata, replyOptions.compressPayload)) {
|
|
406
430
|
return;
|
|
407
431
|
}
|
|
408
432
|
const actorRef = currentActorRef(state, fallbackActorRef);
|
|
@@ -418,15 +442,18 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
418
442
|
if (actorSessionNode === undefined) {
|
|
419
443
|
throw new Error('Native bound-session response requires the RouteMesh stream-session service.');
|
|
420
444
|
}
|
|
421
|
-
await this.options
|
|
445
|
+
await this.options
|
|
446
|
+
.streamBindingRuntime()
|
|
447
|
+
.sendNativeBoundSessionResponse(actorSessionNode, actorRef, packetName, requestSeq, response, replyOptions.metadata, replyOptions.compressPayload, signal);
|
|
422
448
|
}
|
|
423
449
|
async sendActorError(actorId, packetName, requestSeq, error, metadata, fallbackBoundSessionTarget, fallbackActorRef, signal) {
|
|
424
|
-
if (await this.options
|
|
450
|
+
if (await this.options
|
|
451
|
+
.streamBindingRuntime()
|
|
452
|
+
.sendLocalBoundSessionError(actorId, packetName, requestSeq, error, metadata)) {
|
|
425
453
|
return;
|
|
426
454
|
}
|
|
427
455
|
const state = this.options.actorManager()?.getState(actorId);
|
|
428
|
-
const actorRef = currentActorRef(state, fallbackActorRef)
|
|
429
|
-
?? this.options.destroyedActorRefs.get(actorId);
|
|
456
|
+
const actorRef = currentActorRef(state, fallbackActorRef) ?? this.options.destroyedActorRefs.get(actorId);
|
|
430
457
|
const remoteTarget = fallbackBoundSessionTarget ?? state?.remoteBoundSessionTarget;
|
|
431
458
|
if (remoteTarget !== undefined) {
|
|
432
459
|
await this.sendRemoteBoundSessionError(remoteTarget, actorId, packetName, requestSeq, error, metadata, signal);
|
|
@@ -439,7 +466,9 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
439
466
|
if (actorSessionNode === undefined) {
|
|
440
467
|
throw new Error('Native bound-session error response requires the RouteMesh stream-session service.');
|
|
441
468
|
}
|
|
442
|
-
await this.options
|
|
469
|
+
await this.options
|
|
470
|
+
.streamBindingRuntime()
|
|
471
|
+
.sendNativeBoundSessionError(actorSessionNode, actorRef, packetName, requestSeq, error, metadata, signal);
|
|
443
472
|
}
|
|
444
473
|
async sendRemoteBoundSessionResponse(target, actorId, packetName, requestSeq, message, replyOptions, signal) {
|
|
445
474
|
const actorPacketTarget = (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.options.actorPacketTargetForState(actorId, target.routerChannelId));
|
|
@@ -468,16 +497,15 @@ class ZLinkRemoteBoundSessionRelay {
|
|
|
468
497
|
if (typeof packetName !== 'string') {
|
|
469
498
|
throw new Error('Remote bound session control payload does not declare a packet name.');
|
|
470
499
|
}
|
|
471
|
-
const submit = this.options.routeTransport.submitInfrastructure
|
|
472
|
-
?? this.options.routeTransport.submit;
|
|
500
|
+
const submit = this.options.routeTransport.submitInfrastructure ?? this.options.routeTransport.submit;
|
|
473
501
|
if (submit === undefined) {
|
|
474
502
|
throw new Error('Remote bound session node-direct transport is not available.');
|
|
475
503
|
}
|
|
476
504
|
const result = await submit.call(this.options.routeTransport, target.routerChannelId, String(target.targetNodeRid), packetName, payload, signal);
|
|
477
505
|
if (result.status !== submission_result_1.ZLinkSubmitStatus.Submitted) {
|
|
478
|
-
throw new Error(`Remote bound session control '${packetName}' was not admitted`
|
|
479
|
-
|
|
480
|
-
|
|
506
|
+
throw new Error(`Remote bound session control '${packetName}' was not admitted` +
|
|
507
|
+
` on '${target.routerChannelId}' for '${String(target.targetNodeRid)}'` +
|
|
508
|
+
` (status ${result.status}).`);
|
|
481
509
|
}
|
|
482
510
|
}
|
|
483
511
|
}
|
|
@@ -486,9 +514,7 @@ function currentActorRef(state, fallback) {
|
|
|
486
514
|
const native = state?.nativeActorRef;
|
|
487
515
|
if (native === undefined)
|
|
488
516
|
return fallback;
|
|
489
|
-
const objectGeneration = native.generation
|
|
490
|
-
?? native.objectGeneration
|
|
491
|
-
?? fallback?.objectGeneration;
|
|
517
|
+
const objectGeneration = native.generation ?? native.objectGeneration ?? fallback?.objectGeneration;
|
|
492
518
|
const meshName = state?.meshName ?? fallback?.meshName;
|
|
493
519
|
if (objectGeneration === undefined || meshName === undefined)
|
|
494
520
|
return fallback;
|
|
@@ -506,30 +532,28 @@ function serviceWireBarrierKey(value) {
|
|
|
506
532
|
return (0, service_stateful_wire_codec_1.serviceSessionRelocationIdentityKey)(value);
|
|
507
533
|
}
|
|
508
534
|
function validateSessionRelocationRouteAgainstSeal(route, sealed) {
|
|
509
|
-
const sameCoordinator = route.coordinator.ownerId === sealed.coordinator.ownerId
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
const sameSession = route.session.sessionOwnerNodeRid === sealed.session.sessionOwnerNodeRid
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
||
|
|
524
|
-
||
|
|
525
|
-
||
|
|
526
|
-
|
|
527
|
-
|| route.actor.generation !== sealed.actor.actor.generation) {
|
|
535
|
+
const sameCoordinator = route.coordinator.ownerId === sealed.coordinator.ownerId &&
|
|
536
|
+
route.coordinator.leaseGeneration === sealed.coordinator.leaseGeneration &&
|
|
537
|
+
route.coordinator.nodeRid === sealed.coordinator.nodeRid &&
|
|
538
|
+
route.coordinator.nodeGeneration === sealed.coordinator.nodeGeneration &&
|
|
539
|
+
route.coordinator.expectedAuthorityStoreVersion ===
|
|
540
|
+
sealed.coordinator.expectedAuthorityStoreVersion;
|
|
541
|
+
const sameSession = route.session.sessionOwnerNodeRid === sealed.session.sessionOwnerNodeRid &&
|
|
542
|
+
route.session.sessionOwnerNodeGeneration === sealed.session.sessionOwnerNodeGeneration &&
|
|
543
|
+
route.session.sessionOwnerId === sealed.session.sessionOwnerId &&
|
|
544
|
+
route.session.sessionOwnerLeaseGeneration === sealed.session.sessionOwnerLeaseGeneration &&
|
|
545
|
+
route.session.sessionRid === sealed.session.sessionRid &&
|
|
546
|
+
route.session.bindingGeneration === sealed.session.bindingGeneration;
|
|
547
|
+
if (route.relocation.high !== sealed.relocation.high ||
|
|
548
|
+
route.relocation.low !== sealed.relocation.low ||
|
|
549
|
+
!sameCoordinator ||
|
|
550
|
+
!sameSession ||
|
|
551
|
+
route.actor.actorId !== sealed.actor.actor.actorId ||
|
|
552
|
+
route.actor.generation !== sealed.actor.actor.generation) {
|
|
528
553
|
throw new service_wire_m6a_codec_1.ServiceWireProtocolError(`Session relocation '${serviceWireBarrierKey(route)}' changed its command 42 fence.`);
|
|
529
554
|
}
|
|
530
555
|
if (route.route.action === 'commit') {
|
|
531
|
-
if (route.route.previousAuthorityOwnerGeneration
|
|
532
|
-
!== sealed.actor.authorityOwnerGeneration) {
|
|
556
|
+
if (route.route.previousAuthorityOwnerGeneration !== sealed.actor.authorityOwnerGeneration) {
|
|
533
557
|
throw new service_wire_m6a_codec_1.ServiceWireProtocolError(`Session relocation '${serviceWireBarrierKey(route)}' changed its source authority fence.`);
|
|
534
558
|
}
|
|
535
559
|
return;
|
|
@@ -69,51 +69,43 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
69
69
|
unavailableReason: peerUnavailableReason(state)
|
|
70
70
|
};
|
|
71
71
|
});
|
|
72
|
-
const channels = Object.entries(this.options.meshOptions.get(meshName)?.meshChannels ?? {})
|
|
73
|
-
.
|
|
74
|
-
|
|
75
|
-
&& entry.names.some((name, channelIndex) => name === channelName && (entry.weights[channelIndex] ?? 0) > 0)).length);
|
|
72
|
+
const channels = Object.entries(this.options.meshOptions.get(meshName)?.meshChannels ?? {}).map(([channelName, channel]) => {
|
|
73
|
+
const readyMemberCount = BigInt(peerChannels.filter((entry, index) => peers[index]?.state === contracts_1.ZLinkPeerState.Ready &&
|
|
74
|
+
entry.names.some((name, channelIndex) => name === channelName && (entry.weights[channelIndex] ?? 0) > 0)).length);
|
|
76
75
|
const localWeight = descriptor?.channelWeights[channelName] ?? channel.weight ?? 100;
|
|
77
|
-
const readyTargetCount = Number(readyMemberCount)
|
|
78
|
-
+ (channel.server === true && localWeight > 0 ? 1 : 0);
|
|
76
|
+
const readyTargetCount = Number(readyMemberCount) + (channel.server === true && localWeight > 0 ? 1 : 0);
|
|
79
77
|
return { channelName, isReady: readyTargetCount > 0, readyTargetCount };
|
|
80
78
|
});
|
|
81
79
|
const backendTopologyState = backendState(status.state);
|
|
82
|
-
const hasUnavailableRequiredPeer = peers.some(peer => peer.state === contracts_1.ZLinkPeerState.Connecting
|
|
83
|
-
|
|
84
|
-
const
|
|
85
|
-
? backendTopologyState
|
|
86
|
-
: drain.state;
|
|
87
|
-
const hostState = this.options.hostState?.()
|
|
88
|
-
?? contracts_1.ZLinkFrameworkRuntimeState.Serving;
|
|
80
|
+
const hasUnavailableRequiredPeer = peers.some((peer) => peer.state === contracts_1.ZLinkPeerState.Connecting || peer.state === contracts_1.ZLinkPeerState.NotConnected);
|
|
81
|
+
const localTopologyState = drain.state === contracts_1.ZLinkTopologyState.Ready ? backendTopologyState : drain.state;
|
|
82
|
+
const hostState = this.options.hostState?.() ?? contracts_1.ZLinkFrameworkRuntimeState.Serving;
|
|
89
83
|
const hostTopologyState = topologyStateForHost(hostState, localTopologyState);
|
|
90
84
|
const locationStoreHealthy = this.options.isLocationStoreHealthy?.() ?? true;
|
|
91
|
-
const state = hostTopologyState === contracts_1.ZLinkTopologyState.Ready
|
|
92
|
-
|
|
85
|
+
const state = hostTopologyState === contracts_1.ZLinkTopologyState.Ready &&
|
|
86
|
+
(hasUnavailableRequiredPeer || !locationStoreHealthy)
|
|
93
87
|
? contracts_1.ZLinkTopologyState.Degraded
|
|
94
88
|
: hostTopologyState;
|
|
95
89
|
const hostReady = (0, runtime_state_projections_1.runtimeStateIsReady)(hostState);
|
|
96
90
|
const objectRole = descriptor?.objectRole ?? contracts_2.ZLinkObjectRole.None;
|
|
97
91
|
const placementWeight = descriptor?.placementWeight ?? 0;
|
|
98
|
-
const capacityAvailable = descriptor !== undefined
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const placementAvailable = objectRole === contracts_2.ZLinkObjectRole.Server
|
|
104
|
-
|
|
105
|
-
&&
|
|
106
|
-
&&
|
|
107
|
-
&&
|
|
108
|
-
|
|
92
|
+
const capacityAvailable = descriptor !== undefined &&
|
|
93
|
+
populationCapacity !== undefined &&
|
|
94
|
+
hasRemainingCapacity(descriptor.activationConcurrency) &&
|
|
95
|
+
(hasRemainingCapacity(populationCapacity.actors) ||
|
|
96
|
+
hasRemainingCapacity(populationCapacity.spots));
|
|
97
|
+
const placementAvailable = objectRole === contracts_2.ZLinkObjectRole.Server &&
|
|
98
|
+
placementWeight > 0 &&
|
|
99
|
+
capacityAvailable &&
|
|
100
|
+
locationStoreHealthy &&
|
|
101
|
+
hostReady &&
|
|
102
|
+
localTopologyState === contracts_1.ZLinkTopologyState.Ready;
|
|
109
103
|
const snapshot = {
|
|
110
104
|
meshName,
|
|
111
105
|
state,
|
|
112
106
|
isReady: (0, runtime_state_projections_1.topologyRuntimeIsReady)(hostState, state === contracts_1.ZLinkTopologyState.Ready ? 1 : 0),
|
|
113
|
-
readyPeerCount: peers.filter(peer => peer.state === contracts_1.ZLinkPeerState.Ready).length,
|
|
114
|
-
channels: hostReady
|
|
115
|
-
? channels
|
|
116
|
-
: channels.map(channel => ({ ...channel, isReady: false })),
|
|
107
|
+
readyPeerCount: peers.filter((peer) => peer.state === contracts_1.ZLinkPeerState.Ready).length,
|
|
108
|
+
channels: hostReady ? channels : channels.map((channel) => ({ ...channel, isReady: false })),
|
|
117
109
|
peers,
|
|
118
110
|
placement: {
|
|
119
111
|
isAvailable: placementAvailable,
|
|
@@ -174,15 +166,13 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
174
166
|
let terminal;
|
|
175
167
|
try {
|
|
176
168
|
const current = this.snapshot(meshName);
|
|
177
|
-
const terminalSequence = current.sequence >= state.sequence
|
|
178
|
-
? current.sequence + 1n
|
|
179
|
-
: state.sequence;
|
|
169
|
+
const terminalSequence = current.sequence >= state.sequence ? current.sequence + 1n : state.sequence;
|
|
180
170
|
state.sequence = terminalSequence;
|
|
181
171
|
terminal = {
|
|
182
172
|
...current,
|
|
183
173
|
state: contracts_1.ZLinkTopologyState.Stopped,
|
|
184
174
|
isReady: false,
|
|
185
|
-
channels: current.channels.map(channel => ({
|
|
175
|
+
channels: current.channels.map((channel) => ({
|
|
186
176
|
...channel,
|
|
187
177
|
isReady: false
|
|
188
178
|
})),
|
|
@@ -198,15 +188,13 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
198
188
|
catch {
|
|
199
189
|
const current = state.lastSnapshot;
|
|
200
190
|
if (current !== undefined) {
|
|
201
|
-
const terminalSequence = current.sequence >= state.sequence
|
|
202
|
-
? current.sequence + 1n
|
|
203
|
-
: state.sequence;
|
|
191
|
+
const terminalSequence = current.sequence >= state.sequence ? current.sequence + 1n : state.sequence;
|
|
204
192
|
state.sequence = terminalSequence;
|
|
205
193
|
terminal = {
|
|
206
194
|
...current,
|
|
207
195
|
state: contracts_1.ZLinkTopologyState.Stopped,
|
|
208
196
|
isReady: false,
|
|
209
|
-
channels: current.channels.map(channel => ({
|
|
197
|
+
channels: current.channels.map((channel) => ({
|
|
210
198
|
...channel,
|
|
211
199
|
isReady: false
|
|
212
200
|
})),
|
|
@@ -243,7 +231,8 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
243
231
|
const state = this.requireState(meshName);
|
|
244
232
|
if (this.states.size > 1)
|
|
245
233
|
return Promise.reject(multiMeshDrainError());
|
|
246
|
-
const operation = state.operation ??
|
|
234
|
+
const operation = state.operation ??
|
|
235
|
+
new Promise((resolve) => state.waiters.push(resolve));
|
|
247
236
|
return waitForOperation(operation, signal);
|
|
248
237
|
}
|
|
249
238
|
drainHost(deadlineMs = 30_000, signal) {
|
|
@@ -371,7 +360,9 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
371
360
|
const classified = drainFailureReason(error);
|
|
372
361
|
const reason = classified !== 'teardown_failed'
|
|
373
362
|
? classified
|
|
374
|
-
: deadline.signal.aborted
|
|
363
|
+
: deadline.signal.aborted
|
|
364
|
+
? 'deadline_exceeded'
|
|
365
|
+
: classified;
|
|
375
366
|
await this.options.forceStopResources(meshName).catch(() => undefined);
|
|
376
367
|
result = { kind: 'forceStopped', reason };
|
|
377
368
|
this.transition(meshName, state, contracts_1.ZLinkTopologyState.Failed);
|
|
@@ -419,7 +410,9 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
419
410
|
const classified = drainFailureReason(error);
|
|
420
411
|
const reason = classified !== 'teardown_failed'
|
|
421
412
|
? classified
|
|
422
|
-
: deadline.signal.aborted
|
|
413
|
+
: deadline.signal.aborted
|
|
414
|
+
? 'deadline_exceeded'
|
|
415
|
+
: classified;
|
|
423
416
|
await Promise.all(entries.map(([meshName]) => this.options.forceStopResources(meshName).catch(() => undefined)));
|
|
424
417
|
result = { kind: 'forceStopped', reason };
|
|
425
418
|
for (const [meshName, state] of entries) {
|
|
@@ -438,12 +431,9 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
438
431
|
return result;
|
|
439
432
|
}
|
|
440
433
|
async performHostShutdown(cleanupDeadline, remainingTimeoutMs) {
|
|
441
|
-
const timeoutMs = Math.max(0, remainingTimeoutMs ??
|
|
442
|
-
? cleanupDeadline.getTime() - Date.now()
|
|
443
|
-
|
|
444
|
-
const deadlineAt = cleanupDeadline instanceof Date
|
|
445
|
-
? cleanupDeadline
|
|
446
|
-
: new Date(Date.now() + cleanupDeadline);
|
|
434
|
+
const timeoutMs = Math.max(0, remainingTimeoutMs ??
|
|
435
|
+
(cleanupDeadline instanceof Date ? cleanupDeadline.getTime() - Date.now() : cleanupDeadline));
|
|
436
|
+
const deadlineAt = cleanupDeadline instanceof Date ? cleanupDeadline : new Date(Date.now() + cleanupDeadline);
|
|
447
437
|
const entries = [...this.states.entries()];
|
|
448
438
|
if (entries.length === 0)
|
|
449
439
|
return { kind: 'drained' };
|
|
@@ -472,7 +462,9 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
472
462
|
const classified = drainFailureReason(error);
|
|
473
463
|
const reason = classified !== 'teardown_failed'
|
|
474
464
|
? classified
|
|
475
|
-
: deadline.signal.aborted
|
|
465
|
+
: deadline.signal.aborted
|
|
466
|
+
? 'deadline_exceeded'
|
|
467
|
+
: classified;
|
|
476
468
|
await Promise.all(entries.map(([meshName]) => this.options.forceStopResources(meshName).catch(() => undefined)));
|
|
477
469
|
result = { kind: 'forceStopped', reason };
|
|
478
470
|
for (const [meshName, state] of entries) {
|
|
@@ -507,15 +499,13 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
507
499
|
const terminal = next === contracts_1.ZLinkTopologyState.Stopped || next === contracts_1.ZLinkTopologyState.Failed;
|
|
508
500
|
if (current !== undefined) {
|
|
509
501
|
if (terminal) {
|
|
510
|
-
const terminalSequence = current.sequence >= state.sequence
|
|
511
|
-
? current.sequence + 1n
|
|
512
|
-
: state.sequence;
|
|
502
|
+
const terminalSequence = current.sequence >= state.sequence ? current.sequence + 1n : state.sequence;
|
|
513
503
|
state.sequence = terminalSequence;
|
|
514
504
|
const terminalStatus = {
|
|
515
505
|
...current,
|
|
516
506
|
state: next,
|
|
517
507
|
isReady: false,
|
|
518
|
-
channels: current.channels.map(channel => ({
|
|
508
|
+
channels: current.channels.map((channel) => ({
|
|
519
509
|
...channel,
|
|
520
510
|
isReady: false
|
|
521
511
|
})),
|
|
@@ -594,10 +584,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
|
|
|
594
584
|
const peers = node?.peers() ?? [];
|
|
595
585
|
const nextPeers = peerFingerprintMap(peers);
|
|
596
586
|
this.peerFingerprints.set(meshName, nextPeers);
|
|
597
|
-
for (const peerRid of new Set([
|
|
598
|
-
...previousPeers.keys(),
|
|
599
|
-
...nextPeers.keys()
|
|
600
|
-
])) {
|
|
587
|
+
for (const peerRid of new Set([...previousPeers.keys(), ...nextPeers.keys()])) {
|
|
601
588
|
if (previousPeers.get(peerRid) === nextPeers.get(peerRid))
|
|
602
589
|
continue;
|
|
603
590
|
state.sequence += 1n;
|
|
@@ -655,11 +642,10 @@ function placementFingerprint(descriptor) {
|
|
|
655
642
|
]);
|
|
656
643
|
}
|
|
657
644
|
function hasRemainingCapacity(capacity) {
|
|
658
|
-
return capacity.limit === 0
|
|
659
|
-
|| capacity.active + (capacity.reserved ?? 0) < capacity.limit;
|
|
645
|
+
return capacity.limit === 0 || capacity.active + (capacity.reserved ?? 0) < capacity.limit;
|
|
660
646
|
}
|
|
661
647
|
function peerFingerprintMap(peers) {
|
|
662
|
-
return new Map(peers.map(peer => [
|
|
648
|
+
return new Map(peers.map((peer) => [
|
|
663
649
|
String(peer.routingId),
|
|
664
650
|
JSON.stringify([
|
|
665
651
|
peer.lifecycleGeneration.toString(),
|
|
@@ -685,20 +671,28 @@ function multiMeshDrainError() {
|
|
|
685
671
|
}
|
|
686
672
|
function backendState(state) {
|
|
687
673
|
switch (state) {
|
|
688
|
-
case 1:
|
|
674
|
+
case 1:
|
|
675
|
+
return contracts_1.ZLinkTopologyState.Starting;
|
|
689
676
|
case 2:
|
|
690
677
|
case 3:
|
|
691
|
-
case 4:
|
|
692
|
-
|
|
693
|
-
case
|
|
694
|
-
|
|
678
|
+
case 4:
|
|
679
|
+
return contracts_1.ZLinkTopologyState.Ready;
|
|
680
|
+
case 5:
|
|
681
|
+
return contracts_1.ZLinkTopologyState.Stopping;
|
|
682
|
+
case 6:
|
|
683
|
+
return contracts_1.ZLinkTopologyState.Stopped;
|
|
684
|
+
default:
|
|
685
|
+
return contracts_1.ZLinkTopologyState.Failed;
|
|
695
686
|
}
|
|
696
687
|
}
|
|
697
688
|
function peerState(state) {
|
|
698
689
|
switch (state) {
|
|
699
|
-
case 3:
|
|
700
|
-
|
|
701
|
-
case
|
|
690
|
+
case 3:
|
|
691
|
+
return contracts_1.ZLinkPeerState.Ready;
|
|
692
|
+
case 4:
|
|
693
|
+
return contracts_1.ZLinkPeerState.Draining;
|
|
694
|
+
case 6:
|
|
695
|
+
return contracts_1.ZLinkPeerState.NotRequired;
|
|
702
696
|
case 1:
|
|
703
697
|
case 2:
|
|
704
698
|
return contracts_1.ZLinkPeerState.Connecting;
|
|
@@ -721,8 +715,9 @@ function drainFailureReason(error) {
|
|
|
721
715
|
const name = error instanceof Error ? error.name : '';
|
|
722
716
|
if (name === 'ZLinkDrainingStatePublishError')
|
|
723
717
|
return 'drain_state_publish_failed';
|
|
724
|
-
if (name === 'ZLinkOwnerCleanupError' ||
|
|
725
|
-
|
|
718
|
+
if (name === 'ZLinkOwnerCleanupError' ||
|
|
719
|
+
(error instanceof AggregateError &&
|
|
720
|
+
error.errors.some((nested) => nested instanceof Error && nested.name === 'ZLinkOwnerCleanupError'))) {
|
|
726
721
|
return 'owner_cleanup_failed';
|
|
727
722
|
}
|
|
728
723
|
return 'teardown_failed';
|
|
@@ -63,6 +63,5 @@ async function runShutdownStep(errors, step) {
|
|
|
63
63
|
function isShutdownAbort(error) {
|
|
64
64
|
if ((0, abort_1.isAbortError)(error))
|
|
65
65
|
return true;
|
|
66
|
-
return error instanceof AggregateError
|
|
67
|
-
&& error.errors.every((nested) => isShutdownAbort(nested));
|
|
66
|
+
return error instanceof AggregateError && error.errors.every((nested) => isShutdownAbort(nested));
|
|
68
67
|
}
|