@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,24 +1,10 @@
|
|
|
1
|
+
import { ZLinkFrameworkException, ZLinkSpotKind, type RoutingId } from '../../contracts';
|
|
1
2
|
import {
|
|
2
|
-
ZLinkFrameworkInternalErrorKind,
|
|
3
|
-
createInternalFrameworkException,
|
|
4
|
-
internalFrameworkErrorKind,
|
|
5
|
-
internalFrameworkErrorKindFromWireReply,
|
|
6
|
-
isCanonicalWireReplyTerminal
|
|
7
|
-
} from '../framework-errors-internal';
|
|
8
|
-
import {
|
|
9
|
-
RequestResult,
|
|
10
|
-
SubmitResult,
|
|
11
|
-
type ZLinkBackendMessageLike as MessageLike
|
|
12
|
-
} from '../backend/runtime-values';
|
|
13
|
-
import { ZLinkFrameworkException, type RoutingId } from '../../contracts';
|
|
14
|
-
import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
15
|
-
import { ZLinkSpotKind } from '../../contracts';
|
|
16
|
-
import {
|
|
17
|
-
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
|
|
18
3
|
ZLinkRuntimeDispatchErrorAction as ZLinkDispatchErrorAction,
|
|
19
4
|
ZLinkRuntimeDispatchErrorReason as ZLinkDispatchErrorReason,
|
|
20
5
|
ZLinkDispatchErrorSurface,
|
|
21
|
-
ZLinkDispatchMessageKind
|
|
6
|
+
ZLinkDispatchMessageKind,
|
|
7
|
+
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome
|
|
22
8
|
} from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
23
9
|
import { awaitWithAbort } from '../abort';
|
|
24
10
|
import type { ZLinkBackendMeshNode } from '../backend/contracts';
|
|
@@ -27,16 +13,32 @@ import {
|
|
|
27
13
|
type ZLinkMeshCompletionTable
|
|
28
14
|
} from '../backend/mesh-completion-table';
|
|
29
15
|
import {
|
|
16
|
+
RequestResult,
|
|
17
|
+
type ZLinkBackendMessageLike as MessageLike
|
|
18
|
+
} from '../backend/runtime-values';
|
|
19
|
+
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
20
|
+
import {
|
|
21
|
+
ZLinkChannelMessageKind,
|
|
30
22
|
decodeChannelReply,
|
|
31
23
|
encodeChannelEnvelopeParts,
|
|
32
24
|
encodeChannelEnvelopePartsAtDeadline,
|
|
33
|
-
type ZLinkChannelEnvelopeCodecRegistry
|
|
34
|
-
ZLinkChannelMessageKind
|
|
25
|
+
type ZLinkChannelEnvelopeCodecRegistry
|
|
35
26
|
} from '../channels/channel-envelope';
|
|
36
|
-
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
37
27
|
import { flowIfEnabled } from '../diagnostics';
|
|
38
28
|
import { runWithOutboundFlow } from '../diagnostics/flow-context';
|
|
29
|
+
import {
|
|
30
|
+
ZLinkFrameworkInternalErrorKind,
|
|
31
|
+
createInternalFrameworkException,
|
|
32
|
+
internalFrameworkErrorKind,
|
|
33
|
+
internalFrameworkErrorKindFromWireReply,
|
|
34
|
+
isCanonicalWireReplyTerminal
|
|
35
|
+
} from '../framework-errors-internal';
|
|
39
36
|
import { resolveFrameworkPacketName } from '../messaging/packet-name';
|
|
37
|
+
import {
|
|
38
|
+
ZLinkSubmitStatus,
|
|
39
|
+
classifySubmitResult,
|
|
40
|
+
type ZLinkSubmitResult
|
|
41
|
+
} from '../messaging/submission-result';
|
|
40
42
|
import type {
|
|
41
43
|
ZLinkSpotAddressCallOptions,
|
|
42
44
|
ZLinkSpotAddressTransport,
|
|
@@ -84,11 +86,6 @@ type MissingTargetSelection =
|
|
|
84
86
|
| { readonly kind: 'capacity' }
|
|
85
87
|
| { readonly kind: 'unavailable' };
|
|
86
88
|
|
|
87
|
-
// Only a synchronous target-admission rejection is safe to retry. A
|
|
88
|
-
// completion with the same public error kind may already represent an
|
|
89
|
-
// admitted application operation, so it must not enter the retry loop.
|
|
90
|
-
const PRE_ADMISSION_MISSING_INSTANCE_ERRORS = new WeakSet<ZLinkFrameworkException>();
|
|
91
|
-
|
|
92
89
|
/** Owns global Spot authority lookup and Missing Instance placement. */
|
|
93
90
|
export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport {
|
|
94
91
|
constructor(private readonly options: ZLinkHostSpotAddressTransportOptions) {}
|
|
@@ -123,6 +120,7 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
123
120
|
try {
|
|
124
121
|
const result = await awaitWithAbort(
|
|
125
122
|
this.options.routed.sendToSpot(existing, message, {
|
|
123
|
+
instanceSpot: call.instanceSpot,
|
|
126
124
|
timeoutMs: deadline.requireRemaining(),
|
|
127
125
|
signal: deadline.signal,
|
|
128
126
|
metadata: call.metadata
|
|
@@ -226,7 +224,7 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
226
224
|
const encoded = this.encode(ZLinkChannelMessageKind.Command, selected.meshName, message);
|
|
227
225
|
const sourceSpotId =
|
|
228
226
|
call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId);
|
|
229
|
-
const mapped =
|
|
227
|
+
const mapped = classifySubmitResult(
|
|
230
228
|
await awaitWithAbort(
|
|
231
229
|
selected.node.sendToMissingInstanceSpot(
|
|
232
230
|
selected.target,
|
|
@@ -236,7 +234,8 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
236
234
|
call.metadata
|
|
237
235
|
),
|
|
238
236
|
deadline.signal
|
|
239
|
-
)
|
|
237
|
+
),
|
|
238
|
+
'Instance Spot submission'
|
|
240
239
|
);
|
|
241
240
|
this.traceInstanceAddress(
|
|
242
241
|
submitResultFlowOutcome(mapped.status),
|
|
@@ -280,57 +279,41 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
280
279
|
const timeoutMs = call.timeoutMs ?? this.options.defaultRequestTimeoutMs;
|
|
281
280
|
const deadline = createSpotAddressDeadline(timeoutMs, call.signal);
|
|
282
281
|
try {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
}
|
|
295
|
-
const recovery = await this.recoverStaleInstanceRoute(
|
|
296
|
-
spotId,
|
|
297
|
-
call,
|
|
298
|
-
deadline,
|
|
299
|
-
error,
|
|
300
|
-
existing
|
|
301
|
-
);
|
|
302
|
-
if (recovery.kind === 'route') {
|
|
303
|
-
// Retry only after the resolver exposes a different route. The
|
|
304
|
-
// stale target cannot have admitted the application operation.
|
|
305
|
-
continue;
|
|
306
|
-
}
|
|
307
|
-
if (recovery.kind !== 'cold') {
|
|
308
|
-
this.reportInstanceRequestError(
|
|
309
|
-
spotId,
|
|
310
|
-
request,
|
|
311
|
-
error,
|
|
312
|
-
existing.routerChannelId,
|
|
313
|
-
existing.targetNodeRid,
|
|
314
|
-
existing.stableType,
|
|
315
|
-
addressedInstanceErrorReason(error)
|
|
316
|
-
);
|
|
317
|
-
throw error;
|
|
318
|
-
}
|
|
319
|
-
// The logical authority is no longer Ready, so the Instance
|
|
320
|
-
// intent path below may submit the original operation once.
|
|
321
|
-
}
|
|
282
|
+
const existing = await this.resolveExisting(spotId, deadline.signal);
|
|
283
|
+
deadline.requireRemaining();
|
|
284
|
+
if (existing === undefined) {
|
|
285
|
+
return await this.requestToMissingInstance(spotId, request, call, deadline);
|
|
286
|
+
}
|
|
287
|
+
this.validateExisting(existing, call);
|
|
288
|
+
try {
|
|
289
|
+
return await this.requestToExistingSpot(spotId, request, call, existing, deadline);
|
|
290
|
+
} catch (error) {
|
|
291
|
+
if (isSpotRouteRefreshError(error)) {
|
|
292
|
+
this.options.resolver()?.invalidate?.(spotId);
|
|
322
293
|
}
|
|
323
|
-
|
|
324
|
-
|
|
294
|
+
// Failover policy §4.4: SpotMoving is the owner's Ready owner-fence
|
|
295
|
+
// refusal, made before admission. With Instance intent, one authority
|
|
296
|
+
// read under the same deadline decides: Missing means Close released
|
|
297
|
+
// the incarnation, so the request activates a new one. Any other
|
|
298
|
+
// answer, and any message the owner admitted, keeps this terminal.
|
|
299
|
+
if (
|
|
300
|
+
call.instanceSpot &&
|
|
301
|
+
isOwnerFenceRefusal(error) &&
|
|
302
|
+
(await this.resolveExisting(spotId, deadline.signal)) === undefined
|
|
303
|
+
) {
|
|
304
|
+
deadline.requireRemaining();
|
|
325
305
|
return await this.requestToMissingInstance(spotId, request, call, deadline);
|
|
326
|
-
} catch (error) {
|
|
327
|
-
if (!isMissingInstanceRetryError(error)) throw error;
|
|
328
|
-
// A placement node can finish cleanup before its stale native result
|
|
329
|
-
// reaches this process. Refresh authority and select again under the
|
|
330
|
-
// same end-to-end deadline; the old envelope was not admitted.
|
|
331
|
-
this.options.resolver()?.invalidate?.(spotId);
|
|
332
|
-
await waitForSpotRouteRefresh(Math.min(10, deadline.requireRemaining()), deadline.signal);
|
|
333
306
|
}
|
|
307
|
+
this.reportInstanceRequestError(
|
|
308
|
+
spotId,
|
|
309
|
+
request,
|
|
310
|
+
error,
|
|
311
|
+
existing.routerChannelId,
|
|
312
|
+
existing.targetNodeRid,
|
|
313
|
+
existing.stableType,
|
|
314
|
+
addressedInstanceErrorReason(error)
|
|
315
|
+
);
|
|
316
|
+
throw error;
|
|
334
317
|
}
|
|
335
318
|
} catch (error) {
|
|
336
319
|
if (
|
|
@@ -372,6 +355,7 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
372
355
|
);
|
|
373
356
|
const reply = await awaitWithAbort(
|
|
374
357
|
this.options.routed.requestToSpot<TReply>(existing, request, {
|
|
358
|
+
instanceSpot: call.instanceSpot,
|
|
375
359
|
timeoutMs: deadline.requireRemaining(),
|
|
376
360
|
signal: deadline.signal,
|
|
377
361
|
metadata: call.metadata
|
|
@@ -446,28 +430,17 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
446
430
|
const table = this.options.completions(selected.meshName);
|
|
447
431
|
if (table === undefined)
|
|
448
432
|
throw new Error(`MeshNode '${selected.meshName}' completion table is not started.`);
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
deadline.signal
|
|
461
|
-
);
|
|
462
|
-
} catch (error) {
|
|
463
|
-
if (
|
|
464
|
-
error instanceof ZLinkFrameworkException &&
|
|
465
|
-
internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound
|
|
466
|
-
) {
|
|
467
|
-
PRE_ADMISSION_MISSING_INSTANCE_ERRORS.add(error);
|
|
468
|
-
}
|
|
469
|
-
throw error;
|
|
470
|
-
}
|
|
433
|
+
const completionPromise = table.submit(
|
|
434
|
+
() =>
|
|
435
|
+
selected.node.requestToMissingInstanceSpot(
|
|
436
|
+
selected.target,
|
|
437
|
+
encoded,
|
|
438
|
+
deadlineUnixMs,
|
|
439
|
+
call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId),
|
|
440
|
+
call.metadata
|
|
441
|
+
),
|
|
442
|
+
deadline.signal
|
|
443
|
+
);
|
|
471
444
|
this.traceInstanceAddress(
|
|
472
445
|
ZLinkMessageFlowOutcome.Sent,
|
|
473
446
|
ZLinkDispatchMessageKind.Request,
|
|
@@ -580,35 +553,6 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
580
553
|
}
|
|
581
554
|
}
|
|
582
555
|
|
|
583
|
-
private async recoverStaleInstanceRoute(
|
|
584
|
-
spotId: RoutingId,
|
|
585
|
-
call: ZLinkSpotAddressCallOptions,
|
|
586
|
-
deadline: ZLinkSpotAddressDeadline,
|
|
587
|
-
error: unknown,
|
|
588
|
-
staleRoute: ZLinkSpotRouteTarget
|
|
589
|
-
): Promise<
|
|
590
|
-
| { readonly kind: 'route'; readonly route: ZLinkSpotRouteTarget }
|
|
591
|
-
| { readonly kind: 'cold' }
|
|
592
|
-
| { readonly kind: 'fail' }
|
|
593
|
-
> {
|
|
594
|
-
if (
|
|
595
|
-
!call.instanceSpot ||
|
|
596
|
-
!(error instanceof ZLinkFrameworkException) ||
|
|
597
|
-
!isInstanceRouteStaleError(error)
|
|
598
|
-
) {
|
|
599
|
-
return { kind: 'fail' };
|
|
600
|
-
}
|
|
601
|
-
for (;;) {
|
|
602
|
-
deadline.requireRemaining();
|
|
603
|
-
const current = await this.resolveExisting(spotId, deadline.signal);
|
|
604
|
-
if (current === undefined) return { kind: 'cold' };
|
|
605
|
-
if (!sameSpotRouteSnapshot(current, staleRoute)) {
|
|
606
|
-
return { kind: 'route', route: current };
|
|
607
|
-
}
|
|
608
|
-
await waitForSpotRouteRefresh(Math.min(10, deadline.requireRemaining()), deadline.signal);
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
|
|
612
556
|
private selectMissingTarget(
|
|
613
557
|
spotId: RoutingId,
|
|
614
558
|
call: ZLinkSpotAddressCallOptions
|
|
@@ -771,25 +715,6 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
771
715
|
}
|
|
772
716
|
}
|
|
773
717
|
|
|
774
|
-
function isInstanceRouteStaleError(error: unknown): error is ZLinkFrameworkException {
|
|
775
|
-
if (!(error instanceof ZLinkFrameworkException)) return false;
|
|
776
|
-
const kind = internalFrameworkErrorKind(error);
|
|
777
|
-
// RequestTargetNotFound from an existing route is a pre-admission route
|
|
778
|
-
// lookup failure. A stale owner result is terminal for this application
|
|
779
|
-
// operation: the routed request may already have crossed the transport
|
|
780
|
-
// boundary, so refreshing the route and resubmitting it could execute the
|
|
781
|
-
// same operation twice. Instance cold activation is selected only when the
|
|
782
|
-
// authority resolver itself reports that the Ready route is absent.
|
|
783
|
-
if (kind === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound) return true;
|
|
784
|
-
return false;
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
function isMissingInstanceRetryError(error: unknown): error is ZLinkFrameworkException {
|
|
788
|
-
return (
|
|
789
|
-
error instanceof ZLinkFrameworkException && PRE_ADMISSION_MISSING_INSTANCE_ERRORS.has(error)
|
|
790
|
-
);
|
|
791
|
-
}
|
|
792
|
-
|
|
793
718
|
function missingInstanceRequestFailure(
|
|
794
719
|
result: number,
|
|
795
720
|
nativeErrno: number
|
|
@@ -819,27 +744,6 @@ function missingInstanceRequestFailure(
|
|
|
819
744
|
);
|
|
820
745
|
}
|
|
821
746
|
|
|
822
|
-
function mapSubmitResult(result: number): ZLinkSubmitResult {
|
|
823
|
-
switch (result) {
|
|
824
|
-
case SubmitResult.Ok:
|
|
825
|
-
return { status: ZLinkSubmitStatus.Submitted };
|
|
826
|
-
case SubmitResult.Backpressured:
|
|
827
|
-
case SubmitResult.NotAdmitted:
|
|
828
|
-
return { status: ZLinkSubmitStatus.Backpressured };
|
|
829
|
-
case SubmitResult.NotFound:
|
|
830
|
-
return { status: ZLinkSubmitStatus.TargetNotFound };
|
|
831
|
-
case SubmitResult.NotConnected:
|
|
832
|
-
return { status: ZLinkSubmitStatus.RouteNotConnected };
|
|
833
|
-
case SubmitResult.Terminated:
|
|
834
|
-
return { status: ZLinkSubmitStatus.Shutdown };
|
|
835
|
-
default:
|
|
836
|
-
throw createInternalFrameworkException(
|
|
837
|
-
ZLinkFrameworkInternalErrorKind.RequestFailed,
|
|
838
|
-
`Instance Spot submission failed with result ${result}.`
|
|
839
|
-
);
|
|
840
|
-
}
|
|
841
|
-
}
|
|
842
|
-
|
|
843
747
|
function missingInstancePlacementCapacity(
|
|
844
748
|
spotId: RoutingId,
|
|
845
749
|
stableType: string | undefined
|
|
@@ -877,39 +781,13 @@ function isSpotRouteRefreshError(error: unknown): error is ZLinkFrameworkExcepti
|
|
|
877
781
|
);
|
|
878
782
|
}
|
|
879
783
|
|
|
880
|
-
function
|
|
784
|
+
function isOwnerFenceRefusal(error: unknown): boolean {
|
|
881
785
|
return (
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
left.routerChannelId === right.routerChannelId &&
|
|
885
|
-
left.spotKind === right.spotKind &&
|
|
886
|
-
left.stableType === right.stableType &&
|
|
887
|
-
left.targetSpotGeneration === right.targetSpotGeneration &&
|
|
888
|
-
left.targetNodeGeneration === right.targetNodeGeneration &&
|
|
889
|
-
left.authorityOwnerGeneration === right.authorityOwnerGeneration &&
|
|
890
|
-
left.targetOwnerId === right.targetOwnerId &&
|
|
891
|
-
left.ownerLeaseGeneration === right.ownerLeaseGeneration &&
|
|
892
|
-
left.authorityStoreVersion === right.authorityStoreVersion
|
|
786
|
+
error instanceof ZLinkFrameworkException &&
|
|
787
|
+
internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.SpotMoving
|
|
893
788
|
);
|
|
894
789
|
}
|
|
895
790
|
|
|
896
|
-
function waitForSpotRouteRefresh(delayMs: number, signal: AbortSignal): Promise<void> {
|
|
897
|
-
return new Promise((resolve, reject) => {
|
|
898
|
-
const finish = () => {
|
|
899
|
-
signal.removeEventListener('abort', abort);
|
|
900
|
-
resolve();
|
|
901
|
-
};
|
|
902
|
-
const abort = () => {
|
|
903
|
-
clearTimeout(timer);
|
|
904
|
-
signal.removeEventListener('abort', abort);
|
|
905
|
-
reject(signal.reason);
|
|
906
|
-
};
|
|
907
|
-
const timer = setTimeout(finish, delayMs);
|
|
908
|
-
signal.addEventListener('abort', abort, { once: true });
|
|
909
|
-
if (signal.aborted) abort();
|
|
910
|
-
});
|
|
911
|
-
}
|
|
912
|
-
|
|
913
791
|
function submitResultReason(status: ZLinkSubmitStatus): ZLinkDispatchErrorReason {
|
|
914
792
|
switch (status) {
|
|
915
793
|
case ZLinkSubmitStatus.Backpressured:
|
|
@@ -51,7 +51,8 @@ export interface ZLinkSpotNodeRuntimeOptionsFactoryOptions {
|
|
|
51
51
|
export class ZLinkSpotNodeRuntimeOptionsFactory {
|
|
52
52
|
constructor(private readonly options: ZLinkSpotNodeRuntimeOptionsFactoryOptions) {}
|
|
53
53
|
|
|
54
|
-
create(): ZLinkSpotNodeRuntimeManagerOptions {
|
|
54
|
+
create(): Omit<ZLinkSpotNodeRuntimeManagerOptions, 'errorSink'> {
|
|
55
|
+
const spotRouterChannelIdForMesh = this.options.meshRouters.spotRouterChannelIdByMesh();
|
|
55
56
|
return {
|
|
56
57
|
registration: this.options.registration,
|
|
57
58
|
primaryMeshName: this.options.meshRouters.primaryMeshName(),
|
|
@@ -59,7 +60,9 @@ export class ZLinkSpotNodeRuntimeOptionsFactory {
|
|
|
59
60
|
context: this.options.context,
|
|
60
61
|
channelClient: new DefaultZLinkChannelClient(
|
|
61
62
|
this.options.registration,
|
|
62
|
-
this.options.channelTransport
|
|
63
|
+
this.options.channelTransport,
|
|
64
|
+
this.options.routeTransport,
|
|
65
|
+
spotRouterChannelIdForMesh
|
|
63
66
|
),
|
|
64
67
|
fanoutClient: new DefaultZLinkFanoutClient(
|
|
65
68
|
this.options.registration,
|
|
@@ -70,7 +73,7 @@ export class ZLinkSpotNodeRuntimeOptionsFactory {
|
|
|
70
73
|
this.options.spotPublisherTransport
|
|
71
74
|
),
|
|
72
75
|
routedTransport: this.options.routeTransport,
|
|
73
|
-
spotRouterChannelIdForMesh
|
|
76
|
+
spotRouterChannelIdForMesh,
|
|
74
77
|
providerResolver: this.options.providerResolver,
|
|
75
78
|
dispatchErrors: this.options.dispatchErrors,
|
|
76
79
|
runtimeEventPublisher: this.options.runtimeEventPublisher,
|
|
@@ -49,12 +49,26 @@ export interface ZLinkSpotRuntimeOptionsFactoryOptions {
|
|
|
49
49
|
) => Promise<void>;
|
|
50
50
|
readonly beginInstanceIdleClosingAuthority: (
|
|
51
51
|
meshName: string,
|
|
52
|
-
spotId: string
|
|
53
|
-
|
|
52
|
+
spotId: string,
|
|
53
|
+
onCommitted: () => void
|
|
54
|
+
) => Promise<
|
|
55
|
+
import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined
|
|
56
|
+
>;
|
|
54
57
|
readonly beginInstanceClosingAuthority: (
|
|
55
58
|
meshName: string,
|
|
56
|
-
spotId: string
|
|
57
|
-
|
|
59
|
+
spotId: string,
|
|
60
|
+
onCommitted: () => void
|
|
61
|
+
) => Promise<
|
|
62
|
+
import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined
|
|
63
|
+
>;
|
|
64
|
+
readonly beginUserClosingAuthority: (
|
|
65
|
+
meshName: string,
|
|
66
|
+
spotId: string,
|
|
67
|
+
objectGeneration: bigint,
|
|
68
|
+
onCommitted: () => void
|
|
69
|
+
) => Promise<
|
|
70
|
+
import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined
|
|
71
|
+
>;
|
|
58
72
|
readonly createLocationSpotRouteResolver: () => ZLinkSpotRouteResolver | undefined;
|
|
59
73
|
readonly boundSessionRelay: ZLinkBoundSessionRelay;
|
|
60
74
|
readonly actorHandoff: ZLinkActorHandoffCoordinator;
|
|
@@ -63,13 +77,14 @@ export interface ZLinkSpotRuntimeOptionsFactoryOptions {
|
|
|
63
77
|
readonly detachedTaskRunner: ZLinkDetachedTaskRunner;
|
|
64
78
|
readonly metrics: import('../diagnostics').ZLinkRuntimeMetrics;
|
|
65
79
|
readonly admission: ZLinkRuntimeAdmissionGate;
|
|
66
|
-
readonly
|
|
80
|
+
readonly statefulExecution: NonNullable<ZLinkSpotManagerOptions['statefulExecution']>;
|
|
67
81
|
}
|
|
68
82
|
|
|
69
83
|
export class ZLinkSpotRuntimeOptionsFactory {
|
|
70
84
|
constructor(private readonly options: ZLinkSpotRuntimeOptionsFactoryOptions) {}
|
|
71
85
|
|
|
72
86
|
create(actorTransferRuntime: ZLinkActorTransferRuntime): Partial<ZLinkSpotManagerOptions> {
|
|
87
|
+
const spotRouterChannelIdForMesh = this.options.meshRouters.spotRouterChannelIdByMesh();
|
|
73
88
|
return {
|
|
74
89
|
nodeRid: undefined,
|
|
75
90
|
nodeRidProvider: (meshName) => this.meshNodeRoutingId(meshName),
|
|
@@ -120,9 +135,20 @@ export class ZLinkSpotRuntimeOptionsFactory {
|
|
|
120
135
|
}
|
|
121
136
|
await runtime.dispatchEntryActorJoin(meshName, actor, handoffBacklog);
|
|
122
137
|
},
|
|
138
|
+
executeEntryActor: (meshName, actorId, operation) => {
|
|
139
|
+
const runtime = this.options.spotNodeRuntime();
|
|
140
|
+
if (runtime === undefined) {
|
|
141
|
+
throw new ZLinkConfigurationException(
|
|
142
|
+
'Entry Spot Actor completion requires the MeshNode runtime.'
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
return runtime.executeEntryActor(meshName, actorId, operation);
|
|
146
|
+
},
|
|
123
147
|
channelClient: new DefaultZLinkChannelClient(
|
|
124
148
|
this.options.registration,
|
|
125
|
-
this.options.channelTransport
|
|
149
|
+
this.options.channelTransport,
|
|
150
|
+
this.options.routeTransport,
|
|
151
|
+
spotRouterChannelIdForMesh
|
|
126
152
|
),
|
|
127
153
|
fanoutClient: new DefaultZLinkFanoutClient(
|
|
128
154
|
this.options.registration,
|
|
@@ -134,25 +160,70 @@ export class ZLinkSpotRuntimeOptionsFactory {
|
|
|
134
160
|
),
|
|
135
161
|
routedTransport: this.options.routeTransport,
|
|
136
162
|
addressTransport: this.options.addressTransport,
|
|
137
|
-
spotRouterChannelIdForMesh
|
|
138
|
-
channelMeshNameForChannel: (channelName) => {
|
|
139
|
-
const matches = [...this.options.registration.spotNodes.entries()]
|
|
140
|
-
.filter(([, node]) =>
|
|
141
|
-
Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, channelName)
|
|
142
|
-
)
|
|
143
|
-
.map(([meshName]) => meshName);
|
|
144
|
-
return matches.length === 1 ? matches[0] : undefined;
|
|
145
|
-
},
|
|
163
|
+
spotRouterChannelIdForMesh,
|
|
146
164
|
messageSerializers: this.options.registration.messageSerializers,
|
|
147
165
|
runtimeEventPublisher: this.options.runtimeEventPublisher,
|
|
148
166
|
detachedTaskRunner: this.options.detachedTaskRunner,
|
|
149
167
|
locationLifecycle: this.options.locationLifecycle(),
|
|
150
168
|
releaseInstanceAuthority: (meshName, spotId, objectGeneration) =>
|
|
151
169
|
this.options.releaseInstanceAuthority(meshName, String(spotId), objectGeneration),
|
|
152
|
-
beginInstanceIdleClosingAuthority: (meshName, spotId) =>
|
|
153
|
-
this.options.beginInstanceIdleClosingAuthority(meshName, String(spotId)),
|
|
154
|
-
beginInstanceClosingAuthority: (meshName, spotId) =>
|
|
155
|
-
this.options.beginInstanceClosingAuthority(
|
|
170
|
+
beginInstanceIdleClosingAuthority: (meshName, spotId, onCommitted) =>
|
|
171
|
+
this.options.beginInstanceIdleClosingAuthority(meshName, String(spotId), onCommitted),
|
|
172
|
+
beginInstanceClosingAuthority: async (meshName, spotId, onCommitted, objectGeneration) => {
|
|
173
|
+
const authority = await this.options.beginInstanceClosingAuthority(
|
|
174
|
+
meshName,
|
|
175
|
+
String(spotId),
|
|
176
|
+
onCommitted
|
|
177
|
+
);
|
|
178
|
+
if (authority === undefined) return undefined;
|
|
179
|
+
// A Close without Reincarnate ends this incarnation. The Instance authority
|
|
180
|
+
// release also forgets the node's Ready projection, so a request on a cached
|
|
181
|
+
// Ready route is refused instead of rematerializing the closed generation.
|
|
182
|
+
const release = () =>
|
|
183
|
+
this.options.releaseInstanceAuthority(meshName, String(spotId), objectGeneration);
|
|
184
|
+
if (authority.reincarnate === undefined) return { release };
|
|
185
|
+
return {
|
|
186
|
+
release,
|
|
187
|
+
reincarnate: async (initialize) => {
|
|
188
|
+
const current = await authority.reincarnate!(initialize);
|
|
189
|
+
const node = this.options.spotNodeRuntime()?.meshNode(meshName);
|
|
190
|
+
const route = {
|
|
191
|
+
targetSpotId: String(spotId),
|
|
192
|
+
targetNodeRid: String(current.allocation.descriptor.rid),
|
|
193
|
+
targetNodeGeneration: current.allocation.descriptorLifecycleGeneration,
|
|
194
|
+
objectGeneration: current.objectGeneration,
|
|
195
|
+
authorityOwnerGeneration: current.authorityOwnerGeneration,
|
|
196
|
+
ownerId: current.ownerId,
|
|
197
|
+
leaseGeneration: current.ownerLeaseGeneration,
|
|
198
|
+
storeVersion: current.storeVersion.value
|
|
199
|
+
};
|
|
200
|
+
node?.restoreSpotAuthority?.(
|
|
201
|
+
String(spotId),
|
|
202
|
+
'instance_spot',
|
|
203
|
+
current.stableType,
|
|
204
|
+
current.objectGeneration,
|
|
205
|
+
current.authorityOwnerGeneration
|
|
206
|
+
);
|
|
207
|
+
node?.registerInstanceIntent?.(current.stableType, route);
|
|
208
|
+
node?.rememberSpotRoute?.({
|
|
209
|
+
spot: { spotId: String(spotId), generation: current.objectGeneration },
|
|
210
|
+
targetNodeRid: route.targetNodeRid,
|
|
211
|
+
targetNodeGeneration: route.targetNodeGeneration,
|
|
212
|
+
authorityOwnerGeneration: route.authorityOwnerGeneration,
|
|
213
|
+
ownerLeaseGeneration: route.leaseGeneration,
|
|
214
|
+
storeVersion: route.storeVersion
|
|
215
|
+
});
|
|
216
|
+
return current;
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
},
|
|
220
|
+
beginUserClosingAuthority: (meshName, spotId, objectGeneration, onCommitted) =>
|
|
221
|
+
this.options.beginUserClosingAuthority(
|
|
222
|
+
meshName,
|
|
223
|
+
String(spotId),
|
|
224
|
+
objectGeneration,
|
|
225
|
+
onCommitted
|
|
226
|
+
),
|
|
156
227
|
instanceSpotApplicationTargetProvider: (meshName, spotId) =>
|
|
157
228
|
this.options
|
|
158
229
|
.spotNodeRuntime()
|
|
@@ -196,11 +267,6 @@ export class ZLinkSpotRuntimeOptionsFactory {
|
|
|
196
267
|
}
|
|
197
268
|
} as never;
|
|
198
269
|
},
|
|
199
|
-
createReceived: () => {
|
|
200
|
-
const runtime = this.options.spotNodeRuntime();
|
|
201
|
-
if (runtime === undefined) throw new Error('Spot backend runtime is not initialized.');
|
|
202
|
-
return runtime.createReceived();
|
|
203
|
-
},
|
|
204
270
|
createTopicMessage: () => {
|
|
205
271
|
const runtime = this.options.spotNodeRuntime();
|
|
206
272
|
if (runtime === undefined) throw new Error('Spot backend runtime is not initialized.');
|
|
@@ -264,17 +330,13 @@ export class ZLinkSpotRuntimeOptionsFactory {
|
|
|
264
330
|
ZLinkSpotRelocationCoordinationMode.FrameworkManaged
|
|
265
331
|
);
|
|
266
332
|
},
|
|
267
|
-
actorBindingGenerationObserver: (actorId, generation) =>
|
|
268
|
-
this.options
|
|
269
|
-
.actorManager()
|
|
270
|
-
?.getState(actorId)
|
|
271
|
-
?.setBoundSessionBindingGeneration(generation),
|
|
272
333
|
actorTransferRuntime,
|
|
273
334
|
boundSessionRuntime: this.options.boundSessionRelay.boundSessions,
|
|
274
335
|
actorHandoffRuntime: this.options.actorHandoff,
|
|
275
336
|
metrics: this.options.metrics,
|
|
276
337
|
admission: this.options.admission,
|
|
277
|
-
|
|
338
|
+
statefulExecution: this.options.statefulExecution,
|
|
339
|
+
closeErrorSink: this.options.runtimeOrPreStartErrorSink,
|
|
278
340
|
dispatchErrors: this.options.dispatchErrorReporter(this.options.runtimeOrPreStartErrorSink)
|
|
279
341
|
};
|
|
280
342
|
}
|
|
@@ -19,6 +19,7 @@ import type {
|
|
|
19
19
|
} from '../foundation/service-stateful-wire-codec';
|
|
20
20
|
import { routingIdsEqual } from '../routing-id';
|
|
21
21
|
import {
|
|
22
|
+
decodeServiceClosingSpotAuthority,
|
|
22
23
|
decodeServiceInstanceAuthorityPayload,
|
|
23
24
|
decodeServiceReadySpotAuthority,
|
|
24
25
|
type ServiceActivationRecoveryState
|
|
@@ -74,6 +75,7 @@ interface StatefulAuthorityRouteSink {
|
|
|
74
75
|
|
|
75
76
|
interface AppliedAuthorityRoute {
|
|
76
77
|
readonly kind: 'user_spot' | 'instance_spot';
|
|
78
|
+
readonly closing: boolean;
|
|
77
79
|
readonly stableType: string;
|
|
78
80
|
readonly meshName: string;
|
|
79
81
|
readonly spotRoute: ServiceDirectSpotRouteFence;
|
|
@@ -189,7 +191,7 @@ export class ZLinkStatefulAuthorityRouteRuntime {
|
|
|
189
191
|
const expectedInstanceRoute =
|
|
190
192
|
previousRoute?.kind === 'instance_spot' ? previousRoute.instanceRoute : null;
|
|
191
193
|
sink.rememberSpotRoute(route.spotRoute, expectedSpotRoute);
|
|
192
|
-
if (route.kind === 'instance_spot') {
|
|
194
|
+
if (route.kind === 'instance_spot' && !route.closing) {
|
|
193
195
|
const status = sink.status();
|
|
194
196
|
if (
|
|
195
197
|
routingIdsEqual(status.routingId, route.instanceRoute.targetNodeRid) &&
|
|
@@ -555,9 +557,9 @@ function pendingInstanceActivation(
|
|
|
555
557
|
|
|
556
558
|
function authorityRoute(snapshot: ZLinkAuthoritySnapshot): AppliedAuthorityRoute | undefined {
|
|
557
559
|
const allocation = snapshot.allocation;
|
|
558
|
-
const
|
|
559
|
-
|
|
560
|
-
);
|
|
560
|
+
const payload = serviceRelocationAuthorityApplicationPayload(snapshot.payload);
|
|
561
|
+
const ready = decodeServiceReadySpotAuthority(payload);
|
|
562
|
+
const decoded = ready ?? decodeServiceClosingSpotAuthority(payload);
|
|
561
563
|
if (
|
|
562
564
|
allocation.state !== 'active' ||
|
|
563
565
|
allocation.objectKind === 'actor' ||
|
|
@@ -585,6 +587,7 @@ function authorityRoute(snapshot: ZLinkAuthoritySnapshot): AppliedAuthorityRoute
|
|
|
585
587
|
};
|
|
586
588
|
return {
|
|
587
589
|
kind: allocation.objectKind,
|
|
590
|
+
closing: ready === undefined,
|
|
588
591
|
stableType: allocation.stableType,
|
|
589
592
|
meshName: allocation.descriptor.meshName,
|
|
590
593
|
spotRoute,
|
|
@@ -617,6 +620,7 @@ function sameAppliedRoute(
|
|
|
617
620
|
if (right === undefined) return false;
|
|
618
621
|
return (
|
|
619
622
|
left.kind === right.kind &&
|
|
623
|
+
left.closing === right.closing &&
|
|
620
624
|
left.stableType === right.stableType &&
|
|
621
625
|
left.meshName === right.meshName &&
|
|
622
626
|
left.instanceRoute.targetNodeRid === right.instanceRoute.targetNodeRid &&
|