@zlink-systems/framework 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +83 -105
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +2 -0
- package/dist/runtime/admission.js +7 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +6 -23
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -8
- package/dist/runtime/channels/channel-clients.js +68 -52
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -10
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.js +5 -2
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +248 -174
- package/dist/runtime/channels/channel-transports.d.ts +11 -17
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +130 -72
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +14 -13
- package/dist/runtime/host/index.js +190 -157
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +7 -20
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +9 -8
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +11 -1
- package/dist/runtime/streams/index.d.ts +14 -15
- package/dist/runtime/streams/index.js +20 -21
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +13 -29
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -85
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -23
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +6 -2
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +301 -192
- package/src/runtime/channels/channel-transports.ts +161 -112
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +172 -91
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +180 -260
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +327 -296
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +8 -41
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +45 -23
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +21 -1
- package/src/runtime/streams/index.ts +76 -64
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,69 +1,72 @@
|
|
|
1
|
-
import { createHash
|
|
2
|
-
import
|
|
3
|
-
ActorRef,
|
|
4
|
-
RoutingId,
|
|
5
|
-
ZLinkActor,
|
|
6
|
-
ZLinkActorJoinOperationId,
|
|
7
|
-
ZLinkMessageSerializer,
|
|
8
|
-
ZLinkSpot
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import {
|
|
3
|
+
type ActorRef,
|
|
4
|
+
type RoutingId,
|
|
5
|
+
type ZLinkActor,
|
|
6
|
+
type ZLinkActorJoinOperationId,
|
|
7
|
+
type ZLinkMessageSerializer,
|
|
8
|
+
type ZLinkSpot,
|
|
9
|
+
ZLinkEncodedPayload,
|
|
10
|
+
ZLinkMessage,
|
|
11
|
+
ZLinkSpotKind
|
|
9
12
|
} from '../../contracts';
|
|
10
|
-
|
|
11
|
-
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
12
|
-
import type {
|
|
13
|
-
ZLinkAggregateId,
|
|
14
|
-
ZLinkAuthoritySnapshot,
|
|
15
|
-
ZLinkLocationOwnerToken
|
|
16
|
-
} from '../locations/internal-location-contracts';
|
|
17
|
-
import type {
|
|
18
|
-
ZLinkAuthorityStore,
|
|
19
|
-
ZLinkObjectCreationStore,
|
|
20
|
-
ZLinkOwnerLeaseStore
|
|
21
|
-
} from '../locations/internal-store-contracts';
|
|
22
|
-
import { encodeAuthorityKey } from '../locations/authority-key-codec';
|
|
13
|
+
|
|
23
14
|
import type { Message } from '../../contracts/Common/Message';
|
|
24
|
-
import type { ZLinkBackendActorRef, ZLinkBackendMeshNode } from '../backend';
|
|
25
15
|
import {
|
|
16
|
+
createDeferredJoinCompletion,
|
|
17
|
+
rewriteActorAuthorityRoute,
|
|
26
18
|
toFrameworkActorRef,
|
|
27
|
-
mergeRemoteBoundSessionTarget,
|
|
28
|
-
preferredRemoteBoundSessionTarget,
|
|
29
19
|
type ZLinkActorHandoffCoordinator,
|
|
30
20
|
type ZLinkActorHandoffPrefixAdmission,
|
|
31
21
|
type ZLinkActorHandoffPrefixQueue,
|
|
32
22
|
type ZLinkActorHandoffReplayPreparation,
|
|
33
23
|
type ZLinkActorRoutedJoinTransport,
|
|
34
24
|
type ZLinkActorTransferRegistry,
|
|
35
|
-
createDeferredJoinCompletion,
|
|
36
|
-
rewriteActorAuthorityRoute,
|
|
37
25
|
type ZLinkDeferredJoinCompletion,
|
|
38
26
|
type ZLinkRemoteBoundSessionTarget
|
|
39
27
|
} from '../actors';
|
|
40
|
-
import type { ZLinkActorRuntimeState } from '../actors/actor-runtime-state';
|
|
41
|
-
import { ZLinkActorRetryDelay } from '../actors/actor-retry-delay';
|
|
42
|
-
import { encodeRoutingIdStorageHex, routingIdsEqual } from '../routing-id';
|
|
43
|
-
import type { ZLinkLocationLifecycle } from '../locations';
|
|
44
|
-
import { wrapFrameworkPayloadMessage } from '../messaging/payload-codec';
|
|
45
|
-
import type { DefaultZLinkSpotManager } from '../spots';
|
|
46
|
-
import type { ZLinkSpotRouteResolver, ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
|
|
47
28
|
import type {
|
|
48
29
|
ZLinkActorHandoffPacket,
|
|
49
30
|
ZLinkActorHandoffResult,
|
|
50
31
|
ZLinkActorHandoffTerminalAcceptance,
|
|
51
32
|
ZLinkActorHandoffTerminalAck
|
|
52
33
|
} from '../actors/actor-handoff';
|
|
53
|
-
import type { ZLinkNativeActorJoinSnapshot } from '../spots/spot-runtime-ports';
|
|
54
34
|
import {
|
|
55
35
|
ownerFence,
|
|
56
36
|
type ZLinkActorMessageFollowOwnerFence
|
|
57
37
|
} from '../actors/actor-message-follow-context';
|
|
58
|
-
import type {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
ServiceWireOperationId
|
|
63
|
-
} from '../foundation/service-stateful-wire-codec';
|
|
64
|
-
import { serviceSessionRelocationIdentityKey } from '../foundation/service-stateful-wire-codec';
|
|
38
|
+
import type { ZLinkActorRuntimeState } from '../actors/actor-runtime-state';
|
|
39
|
+
import type { ZLinkBackendActorRef, ZLinkBackendMeshNode } from '../backend';
|
|
40
|
+
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
41
|
+
import { isRelocationDebugEnabled, relocationDebug } from '../diagnostics';
|
|
65
42
|
import { operationIdentityKey } from '../foundation/operation-identity';
|
|
43
|
+
import {
|
|
44
|
+
type ServiceSessionRelocationRoute,
|
|
45
|
+
type ServiceSessionRelocationSeal,
|
|
46
|
+
type ServiceSessionRelocationSealed,
|
|
47
|
+
type ServiceWireOperationId,
|
|
48
|
+
serviceSessionRelocationIdentityKey
|
|
49
|
+
} from '../foundation/service-stateful-wire-codec';
|
|
50
|
+
|
|
51
|
+
import type { ZLinkLocationLifecycle } from '../locations';
|
|
52
|
+
import { encodeAuthorityKey } from '../locations/authority-key-codec';
|
|
53
|
+
import type {
|
|
54
|
+
ZLinkAggregateId,
|
|
55
|
+
ZLinkAuthoritySnapshot,
|
|
56
|
+
ZLinkLocationOwnerToken
|
|
57
|
+
} from '../locations/internal-location-contracts';
|
|
58
|
+
import type {
|
|
59
|
+
ZLinkAuthorityStore,
|
|
60
|
+
ZLinkObjectCreationStore,
|
|
61
|
+
ZLinkOwnerLeaseStore
|
|
62
|
+
} from '../locations/internal-store-contracts';
|
|
63
|
+
import { wrapFrameworkPayloadMessage } from '../messaging/payload-codec';
|
|
64
|
+
import { encodeRoutingIdStorageHex, routingIdsEqual } from '../routing-id';
|
|
65
|
+
import type { DefaultZLinkSpotManager } from '../spots';
|
|
66
|
+
import type { ZLinkSpotRouteResolver, ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
|
|
66
67
|
import { BoundedReplayMap } from './bounded-replay-map';
|
|
68
|
+
const TRANSFER_RESOLUTION_TIMEOUT_MS = 5_000;
|
|
69
|
+
const TRANSFER_POLL_INTERVAL_MS = 10;
|
|
67
70
|
|
|
68
71
|
const DEFERRED_JOIN_TERMINAL_CAPACITY = 4096;
|
|
69
72
|
|
|
@@ -165,7 +168,7 @@ export interface ZLinkActorTransferRuntimeActorManager {
|
|
|
165
168
|
actorType: string,
|
|
166
169
|
objectGeneration: bigint,
|
|
167
170
|
authorityOwnerGeneration: bigint,
|
|
168
|
-
spotId: RoutingId,
|
|
171
|
+
spotId: RoutingId | undefined,
|
|
169
172
|
spotGeneration: bigint,
|
|
170
173
|
membershipEpoch: bigint,
|
|
171
174
|
signal?: AbortSignal,
|
|
@@ -212,7 +215,6 @@ export interface ZLinkActorTransferRuntimeOptions {
|
|
|
212
215
|
}
|
|
213
216
|
|
|
214
217
|
export class ZLinkActorTransferRuntime {
|
|
215
|
-
private readonly sourceDepartureTasks = new Map<string, Promise<void>>();
|
|
216
218
|
private readonly coreSourceLeaves = new Map<
|
|
217
219
|
string,
|
|
218
220
|
{
|
|
@@ -284,11 +286,11 @@ export class ZLinkActorTransferRuntime {
|
|
|
284
286
|
}
|
|
285
287
|
|
|
286
288
|
/**
|
|
287
|
-
* Runs the
|
|
289
|
+
* Runs the completion callback once in the target Actor mailbox.
|
|
288
290
|
* A repeated delivery of the same OperationId in this process observes the
|
|
289
291
|
* first terminal (completion idempotency only).
|
|
290
292
|
*/
|
|
291
|
-
async
|
|
293
|
+
async deliverDeferredJoinCompletion(
|
|
292
294
|
completion: ZLinkDeferredJoinCompletion,
|
|
293
295
|
actor: ZLinkActor,
|
|
294
296
|
actorRef: ActorRef,
|
|
@@ -302,7 +304,7 @@ export class ZLinkActorTransferRuntime {
|
|
|
302
304
|
}
|
|
303
305
|
const active = this.activeDeferredJoinTerminals.get(terminalKey);
|
|
304
306
|
if (active !== undefined) return await waitForOperation(active, signal);
|
|
305
|
-
const delivery = this.
|
|
307
|
+
const delivery = this.deliverDeferredJoinCompletionCore(
|
|
306
308
|
completion,
|
|
307
309
|
actor,
|
|
308
310
|
actorRef,
|
|
@@ -325,7 +327,7 @@ export class ZLinkActorTransferRuntime {
|
|
|
325
327
|
return await waitForOperation(delivery, signal);
|
|
326
328
|
}
|
|
327
329
|
|
|
328
|
-
private async
|
|
330
|
+
private async deliverDeferredJoinCompletionCore(
|
|
329
331
|
completion: ZLinkDeferredJoinCompletion,
|
|
330
332
|
actor: ZLinkActor,
|
|
331
333
|
actorRef: ActorRef,
|
|
@@ -349,6 +351,14 @@ export class ZLinkActorTransferRuntime {
|
|
|
349
351
|
);
|
|
350
352
|
}
|
|
351
353
|
await submitMailbox(async () => {
|
|
354
|
+
if (completion.status === 'failed') {
|
|
355
|
+
await actor.onJoinCompleted?.({
|
|
356
|
+
status: 'failed',
|
|
357
|
+
operationId: completion.operationId,
|
|
358
|
+
kind: completion.kind
|
|
359
|
+
});
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
352
362
|
await actor.onJoinCompleted?.({
|
|
353
363
|
status: 'accepted',
|
|
354
364
|
operationId: completion.operationId,
|
|
@@ -416,15 +426,19 @@ export class ZLinkActorTransferRuntime {
|
|
|
416
426
|
}
|
|
417
427
|
try {
|
|
418
428
|
if (state.spotId !== undefined) {
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
429
|
+
if (isRelocationDebugEnabled()) {
|
|
430
|
+
relocationDebug('source_actor_move.await_spot_transfer', {
|
|
431
|
+
actorId: actor.context.actorId,
|
|
432
|
+
spotId: String(state.spotId)
|
|
433
|
+
});
|
|
434
|
+
}
|
|
423
435
|
await this.options.spotManager()?.beginActorTransfer(state.spotId, actor.context.actorId);
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
436
|
+
if (isRelocationDebugEnabled()) {
|
|
437
|
+
relocationDebug('source_actor_move.spot_transfer_complete', {
|
|
438
|
+
actorId: actor.context.actorId,
|
|
439
|
+
spotId: String(state.spotId)
|
|
440
|
+
});
|
|
441
|
+
}
|
|
428
442
|
}
|
|
429
443
|
} catch (error) {
|
|
430
444
|
if (!deferredJoin) {
|
|
@@ -549,12 +563,12 @@ export class ZLinkActorTransferRuntime {
|
|
|
549
563
|
);
|
|
550
564
|
const sourceSpotId = state.spotId;
|
|
551
565
|
let sourceLeaveStarted = false;
|
|
552
|
-
|
|
566
|
+
// The relocation operation owns its Session seal; the Actor keeps only
|
|
567
|
+
// its current binding (Session–Actor binding §8.1).
|
|
568
|
+
let sealedSession: ZLinkRemoteBoundSessionTarget | undefined;
|
|
553
569
|
try {
|
|
554
|
-
if (state.
|
|
555
|
-
|
|
556
|
-
const sealedTarget = await this.sealBoundSessionRoute(actor, state, signal, relocation);
|
|
557
|
-
state.setRemoteBoundSessionTarget(sealedTarget);
|
|
570
|
+
if (state.boundSession !== undefined) {
|
|
571
|
+
sealedSession = await this.sealBoundSessionRoute(actor, state, signal, relocation);
|
|
558
572
|
this.options.actorHandoff.sealConnectionBoundIngress(actor.context.actorId);
|
|
559
573
|
}
|
|
560
574
|
const transfer = await this.options.actorTransferRegistry.transferOut(
|
|
@@ -667,8 +681,7 @@ export class ZLinkActorTransferRuntime {
|
|
|
667
681
|
void sourceLeaveCompletion.then(
|
|
668
682
|
() => this.scheduleSourceDeparture(actor, sourceSpotId, true),
|
|
669
683
|
(error) => {
|
|
670
|
-
this.
|
|
671
|
-
this.scheduleSourceDeparture(actor, sourceSpotId, true);
|
|
684
|
+
this.scheduleSourceDeparture(actor, sourceSpotId, true, [error]);
|
|
672
685
|
}
|
|
673
686
|
);
|
|
674
687
|
} else {
|
|
@@ -685,8 +698,8 @@ export class ZLinkActorTransferRuntime {
|
|
|
685
698
|
try {
|
|
686
699
|
await this.cancelSourceActorMove(actor, state, deferredJoin, replayGate.start);
|
|
687
700
|
await this.restoreSourceActor(actor, sourceSpotId);
|
|
688
|
-
if (
|
|
689
|
-
await this.observeBoundSessionSealAbort(actor, state);
|
|
701
|
+
if (sealedSession !== undefined) {
|
|
702
|
+
await this.observeBoundSessionSealAbort(actor, state, sealedSession);
|
|
690
703
|
}
|
|
691
704
|
} finally {
|
|
692
705
|
replayGate.open();
|
|
@@ -699,8 +712,8 @@ export class ZLinkActorTransferRuntime {
|
|
|
699
712
|
try {
|
|
700
713
|
await this.cancelSourceActorMove(actor, state, deferredJoin, replayGate.start);
|
|
701
714
|
if (sourceLeaveStarted) await this.restoreSourceActor(actor, sourceSpotId);
|
|
702
|
-
if (
|
|
703
|
-
await this.observeBoundSessionSealAbort(actor, state);
|
|
715
|
+
if (sealedSession !== undefined) {
|
|
716
|
+
await this.observeBoundSessionSealAbort(actor, state, sealedSession);
|
|
704
717
|
}
|
|
705
718
|
} catch (rollbackError) {
|
|
706
719
|
throw new AggregateError(
|
|
@@ -733,10 +746,12 @@ export class ZLinkActorTransferRuntime {
|
|
|
733
746
|
rollback(): Promise<void>;
|
|
734
747
|
discard(reason: unknown): void;
|
|
735
748
|
}> {
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
749
|
+
if (isRelocationDebugEnabled()) {
|
|
750
|
+
relocationDebug('maintenance_session.begin', {
|
|
751
|
+
actorId: actor.context.actorId,
|
|
752
|
+
spotId: state.spotId === undefined ? undefined : String(state.spotId)
|
|
753
|
+
});
|
|
754
|
+
}
|
|
740
755
|
if (manageMembership) {
|
|
741
756
|
await this.beginSourceActorMove(actor, state);
|
|
742
757
|
} else {
|
|
@@ -746,23 +761,22 @@ export class ZLinkActorTransferRuntime {
|
|
|
746
761
|
requireSourceObjectGeneration(actor.context.actorId, state)
|
|
747
762
|
);
|
|
748
763
|
}
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
764
|
+
if (isRelocationDebugEnabled()) {
|
|
765
|
+
relocationDebug('maintenance_session.source_move_complete', {
|
|
766
|
+
actorId: actor.context.actorId
|
|
767
|
+
});
|
|
768
|
+
}
|
|
769
|
+
let sealedSession: ZLinkRemoteBoundSessionTarget | undefined;
|
|
753
770
|
try {
|
|
754
|
-
if (state.
|
|
755
|
-
|
|
756
|
-
state.setRemoteBoundSessionTarget(
|
|
757
|
-
await this.sealBoundSessionRoute(actor, state, signal, relocation)
|
|
758
|
-
);
|
|
771
|
+
if (state.boundSession !== undefined) {
|
|
772
|
+
sealedSession = await this.sealBoundSessionRoute(actor, state, signal, relocation);
|
|
759
773
|
this.options.actorHandoff.sealConnectionBoundIngress(actor.context.actorId);
|
|
760
774
|
}
|
|
761
775
|
const handoffBacklog = this.options.actorHandoff.snapshot(actor.context.actorId);
|
|
762
776
|
let terminal: 'prepared' | 'committed' | 'rolledBack' = 'prepared';
|
|
763
777
|
let replayResults: readonly import('../actors').ZLinkActorHandoffResult[] = [];
|
|
764
778
|
return {
|
|
765
|
-
target:
|
|
779
|
+
target: sealedSession,
|
|
766
780
|
handoffBacklog,
|
|
767
781
|
takeRelocationRelay: () =>
|
|
768
782
|
this.options.actorHandoff.takeRelocationRelay(actor.context.actorId),
|
|
@@ -770,8 +784,10 @@ export class ZLinkActorTransferRuntime {
|
|
|
770
784
|
if (terminal === 'prepared') replayResults = [...results];
|
|
771
785
|
},
|
|
772
786
|
commit: async (target, targetActorRef, targetOwnerFence) => {
|
|
773
|
-
if (terminal
|
|
774
|
-
|
|
787
|
+
if (terminal !== 'prepared') return;
|
|
788
|
+
terminal = 'committed';
|
|
789
|
+
const failures: unknown[] = [];
|
|
790
|
+
try {
|
|
775
791
|
this.options.actorHandoff.complete(
|
|
776
792
|
actor.context.actorId,
|
|
777
793
|
target,
|
|
@@ -779,13 +795,27 @@ export class ZLinkActorTransferRuntime {
|
|
|
779
795
|
replayResults,
|
|
780
796
|
targetOwnerFence
|
|
781
797
|
);
|
|
798
|
+
} catch (error) {
|
|
799
|
+
failures.push(error);
|
|
800
|
+
}
|
|
801
|
+
try {
|
|
782
802
|
if (manageMembership && state.spotId !== undefined) {
|
|
783
803
|
await this.options
|
|
784
804
|
.spotManager()
|
|
785
805
|
?.commitActorLeaveAfterTransfer(state.spotId, actor.context.actorId);
|
|
786
806
|
}
|
|
807
|
+
} catch (error) {
|
|
808
|
+
failures.push(error);
|
|
809
|
+
}
|
|
810
|
+
try {
|
|
787
811
|
state.endMove();
|
|
788
|
-
|
|
812
|
+
} catch (error) {
|
|
813
|
+
failures.push(error);
|
|
814
|
+
}
|
|
815
|
+
if (failures.length > 0) {
|
|
816
|
+
throw failures.length === 1
|
|
817
|
+
? failures[0]
|
|
818
|
+
: new AggregateError(failures, 'Actor source retirement failed.');
|
|
789
819
|
}
|
|
790
820
|
},
|
|
791
821
|
discard: (reason) => {
|
|
@@ -808,8 +838,8 @@ export class ZLinkActorTransferRuntime {
|
|
|
808
838
|
state.endMove();
|
|
809
839
|
}
|
|
810
840
|
}
|
|
811
|
-
if (
|
|
812
|
-
await this.observeBoundSessionSealAbort(actor, state);
|
|
841
|
+
if (sealedSession !== undefined) {
|
|
842
|
+
await this.observeBoundSessionSealAbort(actor, state, sealedSession);
|
|
813
843
|
}
|
|
814
844
|
} finally {
|
|
815
845
|
replayGate.open();
|
|
@@ -837,8 +867,8 @@ export class ZLinkActorTransferRuntime {
|
|
|
837
867
|
state.endMove();
|
|
838
868
|
}
|
|
839
869
|
}
|
|
840
|
-
if (sourceRestored &&
|
|
841
|
-
await this.observeBoundSessionSealAbort(actor, state);
|
|
870
|
+
if (sourceRestored && sealedSession !== undefined) {
|
|
871
|
+
await this.observeBoundSessionSealAbort(actor, state, sealedSession);
|
|
842
872
|
}
|
|
843
873
|
} finally {
|
|
844
874
|
replayGate.open();
|
|
@@ -927,7 +957,7 @@ export class ZLinkActorTransferRuntime {
|
|
|
927
957
|
signal?: AbortSignal,
|
|
928
958
|
relocation?: ServiceWireOperationId
|
|
929
959
|
): Promise<ZLinkRemoteBoundSessionTarget> {
|
|
930
|
-
const target = state.
|
|
960
|
+
const target = state.boundSession;
|
|
931
961
|
const actorRef = state.nativeActorRef;
|
|
932
962
|
if (
|
|
933
963
|
target === undefined ||
|
|
@@ -1028,17 +1058,10 @@ export class ZLinkActorTransferRuntime {
|
|
|
1028
1058
|
private async abortBoundSessionRouteSeal(
|
|
1029
1059
|
actor: ZLinkActor,
|
|
1030
1060
|
state: ZLinkActorRuntimeState,
|
|
1031
|
-
|
|
1061
|
+
target: ZLinkRemoteBoundSessionTarget
|
|
1032
1062
|
): Promise<void> {
|
|
1033
|
-
const target =
|
|
1034
|
-
targetOverride ??
|
|
1035
|
-
preferredRemoteBoundSessionTarget(
|
|
1036
|
-
state.remoteBoundSessionTarget,
|
|
1037
|
-
state.boundSessionTransferTarget
|
|
1038
|
-
);
|
|
1039
1063
|
const actorRef = state.nativeActorRef;
|
|
1040
1064
|
if (
|
|
1041
|
-
target === undefined ||
|
|
1042
1065
|
actorRef === undefined ||
|
|
1043
1066
|
target.bindingGeneration === undefined ||
|
|
1044
1067
|
target.previousAuthorityOwnerGeneration === undefined ||
|
|
@@ -1085,10 +1108,11 @@ export class ZLinkActorTransferRuntime {
|
|
|
1085
1108
|
|
|
1086
1109
|
private async observeBoundSessionSealAbort(
|
|
1087
1110
|
actor: ZLinkActor,
|
|
1088
|
-
state: ZLinkActorRuntimeState
|
|
1111
|
+
state: ZLinkActorRuntimeState,
|
|
1112
|
+
sealedSession: ZLinkRemoteBoundSessionTarget
|
|
1089
1113
|
): Promise<void> {
|
|
1090
1114
|
try {
|
|
1091
|
-
await this.abortBoundSessionRouteSeal(actor, state);
|
|
1115
|
+
await this.abortBoundSessionRouteSeal(actor, state, sealedSession);
|
|
1092
1116
|
} catch (error) {
|
|
1093
1117
|
try {
|
|
1094
1118
|
this.options.reportPostCommitError?.(error);
|
|
@@ -1130,49 +1154,58 @@ export class ZLinkActorTransferRuntime {
|
|
|
1130
1154
|
private scheduleSourceDeparture(
|
|
1131
1155
|
actor: ZLinkActor,
|
|
1132
1156
|
sourceSpotId: RoutingId | undefined,
|
|
1133
|
-
releaseLocation: boolean
|
|
1157
|
+
releaseLocation: boolean,
|
|
1158
|
+
failures: unknown[] = []
|
|
1134
1159
|
): void {
|
|
1135
|
-
|
|
1136
|
-
const task = this.finishSourceDeparture(actor, sourceSpotId, releaseLocation).finally(() =>
|
|
1137
|
-
this.sourceDepartureTasks.delete(actor.context.actorId)
|
|
1138
|
-
);
|
|
1139
|
-
this.sourceDepartureTasks.set(actor.context.actorId, task);
|
|
1160
|
+
void this.finishSourceDeparture(actor, sourceSpotId, releaseLocation, failures);
|
|
1140
1161
|
}
|
|
1141
1162
|
|
|
1142
1163
|
private async finishSourceDeparture(
|
|
1143
1164
|
actor: ZLinkActor,
|
|
1144
1165
|
sourceSpotId: RoutingId | undefined,
|
|
1145
|
-
releaseLocation: boolean
|
|
1166
|
+
releaseLocation: boolean,
|
|
1167
|
+
failures: unknown[]
|
|
1146
1168
|
): Promise<void> {
|
|
1147
|
-
|
|
1148
|
-
|
|
1169
|
+
if (sourceSpotId !== undefined) {
|
|
1170
|
+
try {
|
|
1171
|
+
await this.options
|
|
1172
|
+
.spotManager()
|
|
1173
|
+
?.commitActorLeaveAfterTransfer(sourceSpotId, actor.context.actorId);
|
|
1174
|
+
} catch (error) {
|
|
1175
|
+
failures.push(error);
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
if (releaseLocation) {
|
|
1149
1179
|
try {
|
|
1150
|
-
|
|
1180
|
+
const state = this.options.actorManager()?.getState(actor.context.actorId);
|
|
1181
|
+
if (state?.actorType !== undefined && state.ownsLocation) {
|
|
1151
1182
|
await this.options
|
|
1152
|
-
.
|
|
1153
|
-
?.
|
|
1154
|
-
|
|
1155
|
-
if (releaseLocation) {
|
|
1156
|
-
const state = this.options.actorManager()?.getState(actor.context.actorId);
|
|
1157
|
-
if (state?.actorType !== undefined && state.ownsLocation) {
|
|
1158
|
-
await this.options
|
|
1159
|
-
.locationLifecycle()
|
|
1160
|
-
?.releaseActor(state.actorType, actor.context.actorId);
|
|
1161
|
-
state.markLocationReleased();
|
|
1162
|
-
}
|
|
1163
|
-
// Message Follow owns the bounded stale route after the native leave.
|
|
1164
|
-
// The source Actor shell must therefore be removed from the process
|
|
1165
|
-
// registry so a later relocation can materialize the same Actor ID on
|
|
1166
|
-
// this node without colliding with its previous incarnation.
|
|
1167
|
-
await this.options.actorManager()?.completeCoreRelocationSource(actor.context.actorId);
|
|
1183
|
+
.locationLifecycle()
|
|
1184
|
+
?.releaseActor(state.actorType, actor.context.actorId);
|
|
1185
|
+
state.markLocationReleased();
|
|
1168
1186
|
}
|
|
1169
|
-
this.options.onSourceDepartureCompleted?.(actor.context.actorId);
|
|
1170
|
-
return;
|
|
1171
1187
|
} catch (error) {
|
|
1172
|
-
|
|
1173
|
-
if (!(await retry.wait(this.options.shutdownSignal?.()))) return;
|
|
1188
|
+
failures.push(error);
|
|
1174
1189
|
}
|
|
1175
1190
|
}
|
|
1191
|
+
try {
|
|
1192
|
+
// Message Follow keeps its route separately from the retired application instance.
|
|
1193
|
+
await this.options.actorManager()?.completeCoreRelocationSource(actor.context.actorId);
|
|
1194
|
+
} catch (error) {
|
|
1195
|
+
failures.push(error);
|
|
1196
|
+
}
|
|
1197
|
+
try {
|
|
1198
|
+
this.options.onSourceDepartureCompleted?.(actor.context.actorId);
|
|
1199
|
+
} catch (error) {
|
|
1200
|
+
failures.push(error);
|
|
1201
|
+
}
|
|
1202
|
+
if (failures.length > 0) {
|
|
1203
|
+
this.options.reportPostCommitError?.(
|
|
1204
|
+
failures.length === 1
|
|
1205
|
+
? failures[0]
|
|
1206
|
+
: new AggregateError(failures, 'Actor source retirement failed.')
|
|
1207
|
+
);
|
|
1208
|
+
}
|
|
1176
1209
|
}
|
|
1177
1210
|
|
|
1178
1211
|
async getOrCreateRoutedActor(
|
|
@@ -1204,7 +1237,9 @@ export class ZLinkActorTransferRuntime {
|
|
|
1204
1237
|
}
|
|
1205
1238
|
if (actorRef !== undefined) {
|
|
1206
1239
|
state.setNativeActorRef(actorRef as unknown as ZLinkBackendActorRef);
|
|
1207
|
-
|
|
1240
|
+
if (remoteBoundSessionTarget !== undefined) {
|
|
1241
|
+
state.installBoundSessionBinding(remoteBoundSessionTarget);
|
|
1242
|
+
}
|
|
1208
1243
|
return { actor, actorRef: actorRef as unknown as ZLinkBackendActorRef };
|
|
1209
1244
|
}
|
|
1210
1245
|
return { actor, actorRef: state.ensureNativeActorRef(this.options.primaryMeshNode()) };
|
|
@@ -1234,14 +1269,10 @@ export class ZLinkActorTransferRuntime {
|
|
|
1234
1269
|
throw new Error(`Actor '${actorId}' transfer state was not created.`);
|
|
1235
1270
|
}
|
|
1236
1271
|
if (actorEntryNodeRid !== undefined) state.setEntryNodeRid(actorEntryNodeRid);
|
|
1237
|
-
|
|
1272
|
+
// The relocation delivers the binding it carried; the target installs it
|
|
1273
|
+
// through the one install rule (Session–Actor binding §6, §8).
|
|
1238
1274
|
if (remoteBoundSessionTarget !== undefined) {
|
|
1239
|
-
state.
|
|
1240
|
-
mergeRemoteBoundSessionTarget(remoteBoundSessionTarget, state.remoteBoundSessionTarget)
|
|
1241
|
-
);
|
|
1242
|
-
}
|
|
1243
|
-
if (remoteBoundSessionTarget?.bindingGeneration !== undefined) {
|
|
1244
|
-
state.setBoundSessionBindingGeneration(remoteBoundSessionTarget.bindingGeneration);
|
|
1275
|
+
state.installBoundSessionBinding(remoteBoundSessionTarget);
|
|
1245
1276
|
}
|
|
1246
1277
|
return {
|
|
1247
1278
|
actor: materialized.actor,
|
|
@@ -1419,29 +1450,11 @@ export class ZLinkActorTransferRuntime {
|
|
|
1419
1450
|
}
|
|
1420
1451
|
}
|
|
1421
1452
|
|
|
1422
|
-
rememberRoutedActorTransferTarget(
|
|
1423
|
-
actorId: string,
|
|
1424
|
-
target: ZLinkRemoteBoundSessionTarget | undefined
|
|
1425
|
-
): void {
|
|
1426
|
-
if (target === undefined) return;
|
|
1427
|
-
const state = this.options.actorManager()?.getState(actorId);
|
|
1428
|
-
if (state === undefined) {
|
|
1429
|
-
return;
|
|
1430
|
-
}
|
|
1431
|
-
state.setBoundSessionTransferTarget(target);
|
|
1432
|
-
state.setRemoteBoundSessionTarget(
|
|
1433
|
-
mergeRemoteBoundSessionTarget(target, state.remoteBoundSessionTarget)
|
|
1434
|
-
);
|
|
1435
|
-
if (target.bindingGeneration !== undefined) {
|
|
1436
|
-
state.setBoundSessionBindingGeneration(target.bindingGeneration);
|
|
1437
|
-
}
|
|
1438
|
-
}
|
|
1439
|
-
|
|
1440
1453
|
commitRoutedActor(actor: ZLinkActor, spotId: RoutingId, spot: ZLinkSpot): void {
|
|
1441
1454
|
const state = this.options.actorManager()?.getState(actor.context.actorId);
|
|
1442
1455
|
state?.setJoinedSpot(spotId, spot);
|
|
1443
1456
|
const actorRef = state?.nativeActorRef;
|
|
1444
|
-
const binding = state?.
|
|
1457
|
+
const binding = state?.boundSession;
|
|
1445
1458
|
if (
|
|
1446
1459
|
actorRef !== undefined &&
|
|
1447
1460
|
binding?.sessionNodeRid !== undefined &&
|
|
@@ -1509,7 +1522,7 @@ export class ZLinkActorTransferRuntime {
|
|
|
1509
1522
|
`Actor '${actor.context.actorId}' Core location does not match the committed target SPOT.`
|
|
1510
1523
|
);
|
|
1511
1524
|
}
|
|
1512
|
-
const deadline = performance.now() +
|
|
1525
|
+
const deadline = performance.now() + TRANSFER_RESOLUTION_TIMEOUT_MS;
|
|
1513
1526
|
const ownerNodeGeneration = node.status().lifecycleGeneration;
|
|
1514
1527
|
if (ownerNodeGeneration <= 0n) {
|
|
1515
1528
|
throw new Error(
|
|
@@ -1547,7 +1560,7 @@ export class ZLinkActorTransferRuntime {
|
|
|
1547
1560
|
if (claim.status !== 'conflict' || performance.now() >= deadline) {
|
|
1548
1561
|
break;
|
|
1549
1562
|
}
|
|
1550
|
-
await new Promise<void>((resolve) => setTimeout(resolve,
|
|
1563
|
+
await new Promise<void>((resolve) => setTimeout(resolve, TRANSFER_POLL_INTERVAL_MS));
|
|
1551
1564
|
}
|
|
1552
1565
|
if (claim.status === 'conflict') {
|
|
1553
1566
|
throw new Error(`Actor '${actor.context.actorId}' target location takeover was rejected.`);
|
|
@@ -1581,44 +1594,24 @@ export class ZLinkActorTransferRuntime {
|
|
|
1581
1594
|
state.setRemoteActorPacketTarget(target);
|
|
1582
1595
|
}
|
|
1583
1596
|
|
|
1584
|
-
|
|
1597
|
+
/**
|
|
1598
|
+
* Publishes the committed route of the Session seal that the relocation
|
|
1599
|
+
* operation carried to this target (command 44, Session–Actor binding §8.2).
|
|
1600
|
+
*/
|
|
1601
|
+
async publishRoutedActorOwnership(
|
|
1585
1602
|
actor: ZLinkActor,
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
): Promise<ZLinkNativeActorJoinSnapshot> {
|
|
1589
|
-
const state = this.options.actorManager()?.getState(actor.context.actorId);
|
|
1590
|
-
const previousLocation = this.options
|
|
1591
|
-
.locationLifecycle()
|
|
1592
|
-
?.actorLocationSnapshot(actor.context.actorId);
|
|
1593
|
-
const snapshot = {
|
|
1594
|
-
spotId: state?.spotId,
|
|
1595
|
-
spot: state?.spot,
|
|
1596
|
-
locationSpotId: previousLocation?.spotId,
|
|
1597
|
-
spotMeshName: previousLocation?.meshName,
|
|
1598
|
-
actorRef: previousLocation?.actorRef,
|
|
1599
|
-
spotGeneration: previousLocation?.spotGeneration,
|
|
1600
|
-
membershipEpoch: previousLocation?.membershipEpoch,
|
|
1601
|
-
ownerNodeGeneration: previousLocation?.ownerNodeGeneration
|
|
1602
|
-
};
|
|
1603
|
-
await this.claimRoutedActorLocation(actor, spotId, spotMeshName);
|
|
1604
|
-
return snapshot;
|
|
1605
|
-
}
|
|
1606
|
-
|
|
1607
|
-
async publishRoutedActorOwnership(actor: ZLinkActor): Promise<void> {
|
|
1603
|
+
sealedSession: ZLinkRemoteBoundSessionTarget | undefined
|
|
1604
|
+
): Promise<void> {
|
|
1608
1605
|
const state = this.options.actorManager()?.getState(actor.context.actorId);
|
|
1609
1606
|
const actorRef = state?.nativeActorRef;
|
|
1610
1607
|
const generation = state?.locationGeneration;
|
|
1611
1608
|
if (state === undefined || actorRef === undefined || generation === undefined) return;
|
|
1612
|
-
|
|
1613
|
-
state.remoteBoundSessionTarget,
|
|
1614
|
-
state.boundSessionTransferTarget
|
|
1615
|
-
);
|
|
1616
|
-
if (boundSessionTarget?.serviceWireRelocation === undefined) return;
|
|
1609
|
+
if (sealedSession?.serviceWireRelocation === undefined) return;
|
|
1617
1610
|
await this.publishBoundSessionOwnership(
|
|
1618
1611
|
actor.context.actorId,
|
|
1619
1612
|
actorRef,
|
|
1620
1613
|
generation,
|
|
1621
|
-
|
|
1614
|
+
sealedSession,
|
|
1622
1615
|
state.ownerLeaseGeneration
|
|
1623
1616
|
);
|
|
1624
1617
|
}
|
|
@@ -1630,73 +1623,6 @@ export class ZLinkActorTransferRuntime {
|
|
|
1630
1623
|
this.options.clearRemoteActorPacketTarget(actor.context.actorId);
|
|
1631
1624
|
}
|
|
1632
1625
|
|
|
1633
|
-
async rollbackNativeActorJoin(
|
|
1634
|
-
actor: ZLinkActor,
|
|
1635
|
-
snapshot: ZLinkNativeActorJoinSnapshot
|
|
1636
|
-
): Promise<void> {
|
|
1637
|
-
const state = this.options.actorManager()?.getState(actor.context.actorId);
|
|
1638
|
-
const actorType = state?.actorType;
|
|
1639
|
-
const lifecycle = this.options.locationLifecycle();
|
|
1640
|
-
if (snapshot.spotId === undefined) state?.clearJoinedSpot();
|
|
1641
|
-
else state?.setJoinedSpot(snapshot.spotId, snapshot.spot);
|
|
1642
|
-
if (state?.ownsLocation !== true || actorType === undefined || lifecycle === undefined) return;
|
|
1643
|
-
if (snapshot.spotId === undefined) {
|
|
1644
|
-
if (
|
|
1645
|
-
snapshot.locationSpotId === undefined ||
|
|
1646
|
-
snapshot.spotGeneration === undefined ||
|
|
1647
|
-
snapshot.membershipEpoch === undefined ||
|
|
1648
|
-
snapshot.ownerNodeGeneration === undefined
|
|
1649
|
-
) {
|
|
1650
|
-
throw new Error(
|
|
1651
|
-
`Actor '${actor.context.actorId}' cannot restore its Entry SPOT location without its exact generation fields.`
|
|
1652
|
-
);
|
|
1653
|
-
}
|
|
1654
|
-
await lifecycle.notifyActorLeftSpot(
|
|
1655
|
-
actorType,
|
|
1656
|
-
actor.context.actorId,
|
|
1657
|
-
snapshot.locationSpotId,
|
|
1658
|
-
snapshot.spotGeneration,
|
|
1659
|
-
snapshot.membershipEpoch,
|
|
1660
|
-
snapshot.ownerNodeGeneration
|
|
1661
|
-
);
|
|
1662
|
-
return;
|
|
1663
|
-
}
|
|
1664
|
-
if (snapshot.actorRef === undefined) {
|
|
1665
|
-
throw new Error(
|
|
1666
|
-
`Actor '${actor.context.actorId}' cannot restore its previous SPOT location without a native ref.`
|
|
1667
|
-
);
|
|
1668
|
-
}
|
|
1669
|
-
if (
|
|
1670
|
-
snapshot.spotMeshName === undefined ||
|
|
1671
|
-
snapshot.spotGeneration === undefined ||
|
|
1672
|
-
snapshot.membershipEpoch === undefined ||
|
|
1673
|
-
snapshot.ownerNodeGeneration === undefined
|
|
1674
|
-
) {
|
|
1675
|
-
throw new Error(
|
|
1676
|
-
`Actor '${actor.context.actorId}' cannot restore its previous SPOT location without its exact generation fields.`
|
|
1677
|
-
);
|
|
1678
|
-
}
|
|
1679
|
-
const restored = await lifecycle.takeoverActorJoinedSpot(
|
|
1680
|
-
actorType,
|
|
1681
|
-
actor.context.actorId,
|
|
1682
|
-
snapshot.actorRef,
|
|
1683
|
-
snapshot.spotMeshName,
|
|
1684
|
-
snapshot.spotId,
|
|
1685
|
-
snapshot.spotGeneration,
|
|
1686
|
-
snapshot.membershipEpoch,
|
|
1687
|
-
snapshot.ownerNodeGeneration,
|
|
1688
|
-
async () => state.clearAfterDestroy()
|
|
1689
|
-
);
|
|
1690
|
-
if (restored.status === 'conflict') {
|
|
1691
|
-
throw new Error(
|
|
1692
|
-
`Actor '${actor.context.actorId}' previous SPOT location could not be restored.`
|
|
1693
|
-
);
|
|
1694
|
-
}
|
|
1695
|
-
if (restored.generation !== undefined) state.setLocationGeneration(restored.generation);
|
|
1696
|
-
if (restored.claimed !== undefined)
|
|
1697
|
-
state.setOwnerLeaseGeneration(restored.claimed.leaseGeneration);
|
|
1698
|
-
}
|
|
1699
|
-
|
|
1700
1626
|
async rollbackRoutedActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void> {
|
|
1701
1627
|
const manager = this.options.actorManager();
|
|
1702
1628
|
const state = manager?.getState(actor.context.actorId);
|
|
@@ -1709,7 +1635,6 @@ export class ZLinkActorTransferRuntime {
|
|
|
1709
1635
|
state.markLocationReleased();
|
|
1710
1636
|
} catch (error) {
|
|
1711
1637
|
locationError = error;
|
|
1712
|
-
void lifecycle.releaseActorEventually(actorType, actor.context.actorId);
|
|
1713
1638
|
}
|
|
1714
1639
|
}
|
|
1715
1640
|
try {
|
|
@@ -1808,11 +1733,6 @@ export class ZLinkActorTransferRuntime {
|
|
|
1808
1733
|
}
|
|
1809
1734
|
}
|
|
1810
1735
|
|
|
1811
|
-
function relocationDebug(marker: string, detail: Record<string, unknown>): void {
|
|
1812
|
-
if (process.env.ZLINK_DEBUG_FRAMEWORK_RELOCATION !== '1') return;
|
|
1813
|
-
console.error('[zlink.runtime.relocation]', marker, detail);
|
|
1814
|
-
}
|
|
1815
|
-
|
|
1816
1736
|
function deferredJoinTerminalKey(completion: ZLinkDeferredJoinCompletion): string {
|
|
1817
1737
|
return (
|
|
1818
1738
|
`${completion.actor.actorId}:${completion.actor.objectGeneration.toString()}:` +
|
|
@@ -1870,7 +1790,7 @@ async function waitForActorAuthorityRetry(
|
|
|
1870
1790
|
throw new Error('Actor target authority deadline expired.', { cause });
|
|
1871
1791
|
}
|
|
1872
1792
|
await new Promise<void>((resolve, reject) => {
|
|
1873
|
-
const timer = setTimeout(resolve, Math.min(
|
|
1793
|
+
const timer = setTimeout(resolve, Math.min(TRANSFER_POLL_INTERVAL_MS, remaining));
|
|
1874
1794
|
timer.unref();
|
|
1875
1795
|
const abort = () => {
|
|
1876
1796
|
clearTimeout(timer);
|