@zlink-systems/framework 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +83 -105
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +2 -0
- package/dist/runtime/admission.js +7 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +6 -23
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -8
- package/dist/runtime/channels/channel-clients.js +68 -52
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -10
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.js +5 -2
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +248 -174
- package/dist/runtime/channels/channel-transports.d.ts +11 -17
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +130 -72
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +14 -13
- package/dist/runtime/host/index.js +190 -157
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +7 -20
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +9 -8
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +11 -1
- package/dist/runtime/streams/index.d.ts +14 -15
- package/dist/runtime/streams/index.js +20 -21
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +13 -29
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -85
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -23
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +6 -2
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +301 -192
- package/src/runtime/channels/channel-transports.ts +161 -112
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +172 -91
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +180 -260
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +327 -296
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +8 -41
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +45 -23
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +21 -1
- package/src/runtime/streams/index.ts +76 -64
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { ZLinkMessage } from '../../contracts';
|
|
3
|
-
import type { ZLinkAuthoritySnapshot, ZLinkLocationOwnerToken } from '../locations/internal-location-contracts';
|
|
4
|
-
import type { ZLinkAuthorityStore, ZLinkObjectCreationStore, ZLinkOwnerLeaseStore } from '../locations/internal-store-contracts';
|
|
1
|
+
import { type ActorRef, type RoutingId, type ZLinkActor, type ZLinkActorJoinOperationId, type ZLinkMessageSerializer, type ZLinkSpot, ZLinkMessage } from '../../contracts';
|
|
5
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
6
|
-
import type { ZLinkBackendActorRef, ZLinkBackendMeshNode } from '../backend';
|
|
7
3
|
import { type ZLinkActorHandoffCoordinator, type ZLinkActorHandoffReplayPreparation, type ZLinkActorRoutedJoinTransport, type ZLinkActorTransferRegistry, type ZLinkDeferredJoinCompletion, type ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
4
|
+
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult, ZLinkActorHandoffTerminalAcceptance, ZLinkActorHandoffTerminalAck } from '../actors/actor-handoff';
|
|
5
|
+
import { type ZLinkActorMessageFollowOwnerFence } from '../actors/actor-message-follow-context';
|
|
8
6
|
import type { ZLinkActorRuntimeState } from '../actors/actor-runtime-state';
|
|
7
|
+
import type { ZLinkBackendActorRef, ZLinkBackendMeshNode } from '../backend';
|
|
8
|
+
import { type ServiceSessionRelocationRoute, type ServiceSessionRelocationSeal, type ServiceSessionRelocationSealed, type ServiceWireOperationId } from '../foundation/service-stateful-wire-codec';
|
|
9
9
|
import type { ZLinkLocationLifecycle } from '../locations';
|
|
10
|
+
import type { ZLinkAuthoritySnapshot, ZLinkLocationOwnerToken } from '../locations/internal-location-contracts';
|
|
11
|
+
import type { ZLinkAuthorityStore, ZLinkObjectCreationStore, ZLinkOwnerLeaseStore } from '../locations/internal-store-contracts';
|
|
10
12
|
import type { DefaultZLinkSpotManager } from '../spots';
|
|
11
13
|
import type { ZLinkSpotRouteResolver, ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
|
|
12
|
-
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult, ZLinkActorHandoffTerminalAcceptance, ZLinkActorHandoffTerminalAck } from '../actors/actor-handoff';
|
|
13
|
-
import type { ZLinkNativeActorJoinSnapshot } from '../spots/spot-runtime-ports';
|
|
14
|
-
import { type ZLinkActorMessageFollowOwnerFence } from '../actors/actor-message-follow-context';
|
|
15
|
-
import type { ServiceSessionRelocationRoute, ServiceSessionRelocationSeal, ServiceSessionRelocationSealed, ServiceWireOperationId } from '../foundation/service-stateful-wire-codec';
|
|
16
14
|
interface ZLinkSessionRelocationWirePort {
|
|
17
15
|
requestSessionRelocationSeal(meshName: string, targetNodeRid: RoutingId, request: ServiceSessionRelocationSeal, signal?: AbortSignal): Promise<ServiceSessionRelocationSealed>;
|
|
18
16
|
sendSessionRelocationRoute(meshName: string, targetNodeRid: RoutingId, request: ServiceSessionRelocationRoute, signal?: AbortSignal): Promise<void>;
|
|
@@ -28,7 +26,7 @@ export interface ZLinkActorTransferRuntimeActorManager {
|
|
|
28
26
|
readonly actor: ZLinkActor;
|
|
29
27
|
readonly actorRef: ActorRef;
|
|
30
28
|
}>;
|
|
31
|
-
prepareRelocationActor(actorId: string, actorType: string, objectGeneration: bigint, authorityOwnerGeneration: bigint, spotId: RoutingId, spotGeneration: bigint, membershipEpoch: bigint, signal?: AbortSignal, transfer?: {
|
|
29
|
+
prepareRelocationActor(actorId: string, actorType: string, objectGeneration: bigint, authorityOwnerGeneration: bigint, spotId: RoutingId | undefined, spotGeneration: bigint, membershipEpoch: bigint, signal?: AbortSignal, transfer?: {
|
|
32
30
|
readonly adapterKey: string;
|
|
33
31
|
readonly state: ZLinkMessage;
|
|
34
32
|
}): Promise<ZLinkActor>;
|
|
@@ -65,7 +63,6 @@ export interface ZLinkActorTransferRuntimeOptions {
|
|
|
65
63
|
}
|
|
66
64
|
export declare class ZLinkActorTransferRuntime {
|
|
67
65
|
private readonly options;
|
|
68
|
-
private readonly sourceDepartureTasks;
|
|
69
66
|
private readonly coreSourceLeaves;
|
|
70
67
|
private readonly activeDeferredJoinTerminals;
|
|
71
68
|
private readonly deferredJoinTerminals;
|
|
@@ -76,12 +73,12 @@ export declare class ZLinkActorTransferRuntime {
|
|
|
76
73
|
cancelDeferredActorHandoff(actor: ZLinkActor, state: ZLinkActorRuntimeState): Promise<void>;
|
|
77
74
|
prepareDeferredJoinAccepted(actorId: string, operationId: ZLinkActorJoinOperationId, actorRef: ActorRef, rawReply: Uint8Array, replyContentType?: string): ZLinkDeferredJoinCompletion;
|
|
78
75
|
/**
|
|
79
|
-
* Runs the
|
|
76
|
+
* Runs the completion callback once in the target Actor mailbox.
|
|
80
77
|
* A repeated delivery of the same OperationId in this process observes the
|
|
81
78
|
* first terminal (completion idempotency only).
|
|
82
79
|
*/
|
|
83
|
-
|
|
84
|
-
private
|
|
80
|
+
deliverDeferredJoinCompletion(completion: ZLinkDeferredJoinCompletion, actor: ZLinkActor, actorRef: ActorRef, submitMailbox: <T>(operation: () => Promise<T>) => Promise<T>, signal?: AbortSignal): Promise<void>;
|
|
81
|
+
private deliverDeferredJoinCompletionCore;
|
|
85
82
|
private prepareSourceActorLeave;
|
|
86
83
|
private restoreSourceActor;
|
|
87
84
|
private beginSourceActorMove;
|
|
@@ -130,7 +127,6 @@ export declare class ZLinkActorTransferRuntime {
|
|
|
130
127
|
}>;
|
|
131
128
|
commitRoutedActorAuthority(actor: ZLinkActor, sourceActorRef: ActorRef, transferId: string, spotId: RoutingId, spotGeneration: bigint, membershipEpoch: bigint, deadlineUnixMs: number, signal?: AbortSignal): Promise<ZLinkAuthoritySnapshot>;
|
|
132
129
|
private readActorAuthorityForRelocation;
|
|
133
|
-
rememberRoutedActorTransferTarget(actorId: string, target: ZLinkRemoteBoundSessionTarget | undefined): void;
|
|
134
130
|
commitRoutedActor(actor: ZLinkActor, spotId: RoutingId, spot: ZLinkSpot): void;
|
|
135
131
|
bindRoutedActorRef(actor: ZLinkActor, actorRef: ActorRef): void;
|
|
136
132
|
claimRoutedActorLocation(actor: ZLinkActor, spotId: RoutingId, spotMeshName: string, joinedLocation?: {
|
|
@@ -138,11 +134,13 @@ export declare class ZLinkActorTransferRuntime {
|
|
|
138
134
|
readonly membershipEpoch: bigint;
|
|
139
135
|
}): Promise<void>;
|
|
140
136
|
private installNativeActorPacketTarget;
|
|
141
|
-
|
|
142
|
-
|
|
137
|
+
/**
|
|
138
|
+
* Publishes the committed route of the Session seal that the relocation
|
|
139
|
+
* operation carried to this target (command 44, Session–Actor binding §8.2).
|
|
140
|
+
*/
|
|
141
|
+
publishRoutedActorOwnership(actor: ZLinkActor, sealedSession: ZLinkRemoteBoundSessionTarget | undefined): Promise<void>;
|
|
143
142
|
openRoutedActorSession(_actor: ZLinkActor): Promise<void>;
|
|
144
143
|
clearRoutedActor(actor: ZLinkActor): void;
|
|
145
|
-
rollbackNativeActorJoin(actor: ZLinkActor, snapshot: ZLinkNativeActorJoinSnapshot): Promise<void>;
|
|
146
144
|
rollbackRoutedActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
|
|
147
145
|
actorEntryNodeRid(actor: ZLinkActor): RoutingId | undefined;
|
|
148
146
|
private requireActorManager;
|
|
@@ -4,16 +4,18 @@ exports.ZLinkActorTransferRuntime = void 0;
|
|
|
4
4
|
exports.committedActorOwnerFence = committedActorOwnerFence;
|
|
5
5
|
const node_crypto_1 = require("node:crypto");
|
|
6
6
|
const contracts_1 = require("../../contracts");
|
|
7
|
-
const runtime_message_1 = require("../backend/runtime-message");
|
|
8
|
-
const authority_key_codec_1 = require("../locations/authority-key-codec");
|
|
9
7
|
const actors_1 = require("../actors");
|
|
10
|
-
const actor_retry_delay_1 = require("../actors/actor-retry-delay");
|
|
11
|
-
const routing_id_1 = require("../routing-id");
|
|
12
|
-
const payload_codec_1 = require("../messaging/payload-codec");
|
|
13
8
|
const actor_message_follow_context_1 = require("../actors/actor-message-follow-context");
|
|
14
|
-
const
|
|
9
|
+
const runtime_message_1 = require("../backend/runtime-message");
|
|
10
|
+
const diagnostics_1 = require("../diagnostics");
|
|
15
11
|
const operation_identity_1 = require("../foundation/operation-identity");
|
|
12
|
+
const service_stateful_wire_codec_1 = require("../foundation/service-stateful-wire-codec");
|
|
13
|
+
const authority_key_codec_1 = require("../locations/authority-key-codec");
|
|
14
|
+
const payload_codec_1 = require("../messaging/payload-codec");
|
|
15
|
+
const routing_id_1 = require("../routing-id");
|
|
16
16
|
const bounded_replay_map_1 = require("./bounded-replay-map");
|
|
17
|
+
const TRANSFER_RESOLUTION_TIMEOUT_MS = 5_000;
|
|
18
|
+
const TRANSFER_POLL_INTERVAL_MS = 10;
|
|
17
19
|
const DEFERRED_JOIN_TERMINAL_CAPACITY = 4096;
|
|
18
20
|
/** Converts only committed actor authority evidence into a Message Follow fence. */
|
|
19
21
|
function committedActorOwnerFence(actorId, targetActorRef, authority) {
|
|
@@ -55,7 +57,6 @@ function createHandoffReplayGate() {
|
|
|
55
57
|
}
|
|
56
58
|
class ZLinkActorTransferRuntime {
|
|
57
59
|
options;
|
|
58
|
-
sourceDepartureTasks = new Map();
|
|
59
60
|
coreSourceLeaves = new Map();
|
|
60
61
|
// Spot Actor membership sections 4-5: Join completion idempotency is
|
|
61
62
|
// process-local. These maps end with the process; nothing is replayed.
|
|
@@ -90,11 +91,11 @@ class ZLinkActorTransferRuntime {
|
|
|
90
91
|
return (0, actors_1.createDeferredJoinCompletion)(actorId, operationId, actorRef, rawReply, replyContentType);
|
|
91
92
|
}
|
|
92
93
|
/**
|
|
93
|
-
* Runs the
|
|
94
|
+
* Runs the completion callback once in the target Actor mailbox.
|
|
94
95
|
* A repeated delivery of the same OperationId in this process observes the
|
|
95
96
|
* first terminal (completion idempotency only).
|
|
96
97
|
*/
|
|
97
|
-
async
|
|
98
|
+
async deliverDeferredJoinCompletion(completion, actor, actorRef, submitMailbox, signal) {
|
|
98
99
|
const terminalKey = deferredJoinTerminalKey(completion);
|
|
99
100
|
if (this.deferredJoinTerminals.get(terminalKey) !== undefined) {
|
|
100
101
|
this.deferredJoinTerminals.touch(terminalKey);
|
|
@@ -103,7 +104,7 @@ class ZLinkActorTransferRuntime {
|
|
|
103
104
|
const active = this.activeDeferredJoinTerminals.get(terminalKey);
|
|
104
105
|
if (active !== undefined)
|
|
105
106
|
return await waitForOperation(active, signal);
|
|
106
|
-
const delivery = this.
|
|
107
|
+
const delivery = this.deliverDeferredJoinCompletionCore(completion, actor, actorRef, submitMailbox);
|
|
107
108
|
this.activeDeferredJoinTerminals.set(terminalKey, delivery);
|
|
108
109
|
void delivery.then(() => {
|
|
109
110
|
this.deferredJoinTerminals.remember(terminalKey, true);
|
|
@@ -117,7 +118,7 @@ class ZLinkActorTransferRuntime {
|
|
|
117
118
|
});
|
|
118
119
|
return await waitForOperation(delivery, signal);
|
|
119
120
|
}
|
|
120
|
-
async
|
|
121
|
+
async deliverDeferredJoinCompletionCore(completion, actor, actorRef, submitMailbox) {
|
|
121
122
|
const targetActorRef = this.options
|
|
122
123
|
.actorManager()
|
|
123
124
|
?.getState(actor.context.actorId)?.nativeActorRef;
|
|
@@ -131,6 +132,14 @@ class ZLinkActorTransferRuntime {
|
|
|
131
132
|
`actor ${currentActorRef.actorId}/${currentActorRef.objectGeneration}).`);
|
|
132
133
|
}
|
|
133
134
|
await submitMailbox(async () => {
|
|
135
|
+
if (completion.status === 'failed') {
|
|
136
|
+
await actor.onJoinCompleted?.({
|
|
137
|
+
status: 'failed',
|
|
138
|
+
operationId: completion.operationId,
|
|
139
|
+
kind: completion.kind
|
|
140
|
+
});
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
134
143
|
await actor.onJoinCompleted?.({
|
|
135
144
|
status: 'accepted',
|
|
136
145
|
operationId: completion.operationId,
|
|
@@ -173,15 +182,19 @@ class ZLinkActorTransferRuntime {
|
|
|
173
182
|
}
|
|
174
183
|
try {
|
|
175
184
|
if (state.spotId !== undefined) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
185
|
+
if ((0, diagnostics_1.isRelocationDebugEnabled)()) {
|
|
186
|
+
(0, diagnostics_1.relocationDebug)('source_actor_move.await_spot_transfer', {
|
|
187
|
+
actorId: actor.context.actorId,
|
|
188
|
+
spotId: String(state.spotId)
|
|
189
|
+
});
|
|
190
|
+
}
|
|
180
191
|
await this.options.spotManager()?.beginActorTransfer(state.spotId, actor.context.actorId);
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
192
|
+
if ((0, diagnostics_1.isRelocationDebugEnabled)()) {
|
|
193
|
+
(0, diagnostics_1.relocationDebug)('source_actor_move.spot_transfer_complete', {
|
|
194
|
+
actorId: actor.context.actorId,
|
|
195
|
+
spotId: String(state.spotId)
|
|
196
|
+
});
|
|
197
|
+
}
|
|
185
198
|
}
|
|
186
199
|
}
|
|
187
200
|
catch (error) {
|
|
@@ -268,12 +281,12 @@ class ZLinkActorTransferRuntime {
|
|
|
268
281
|
: this.options.metrics?.startRelocation(state.meshName, 'actor', this.options.actorTransferRegistry.policy(state.actorType));
|
|
269
282
|
const sourceSpotId = state.spotId;
|
|
270
283
|
let sourceLeaveStarted = false;
|
|
271
|
-
|
|
284
|
+
// The relocation operation owns its Session seal; the Actor keeps only
|
|
285
|
+
// its current binding (Session–Actor binding §8.1).
|
|
286
|
+
let sealedSession;
|
|
272
287
|
try {
|
|
273
|
-
if (state.
|
|
274
|
-
|
|
275
|
-
const sealedTarget = await this.sealBoundSessionRoute(actor, state, signal, relocation);
|
|
276
|
-
state.setRemoteBoundSessionTarget(sealedTarget);
|
|
288
|
+
if (state.boundSession !== undefined) {
|
|
289
|
+
sealedSession = await this.sealBoundSessionRoute(actor, state, signal, relocation);
|
|
277
290
|
this.options.actorHandoff.sealConnectionBoundIngress(actor.context.actorId);
|
|
278
291
|
}
|
|
279
292
|
const transfer = await this.options.actorTransferRegistry.transferOut(actor, state.actorType, signal);
|
|
@@ -349,8 +362,7 @@ class ZLinkActorTransferRuntime {
|
|
|
349
362
|
// transition. Keep the source shell available for that
|
|
350
363
|
// callback, then release the old location and registry entry.
|
|
351
364
|
void sourceLeaveCompletion.then(() => this.scheduleSourceDeparture(actor, sourceSpotId, true), (error) => {
|
|
352
|
-
this.
|
|
353
|
-
this.scheduleSourceDeparture(actor, sourceSpotId, true);
|
|
365
|
+
this.scheduleSourceDeparture(actor, sourceSpotId, true, [error]);
|
|
354
366
|
});
|
|
355
367
|
}
|
|
356
368
|
else {
|
|
@@ -368,8 +380,8 @@ class ZLinkActorTransferRuntime {
|
|
|
368
380
|
try {
|
|
369
381
|
await this.cancelSourceActorMove(actor, state, deferredJoin, replayGate.start);
|
|
370
382
|
await this.restoreSourceActor(actor, sourceSpotId);
|
|
371
|
-
if (
|
|
372
|
-
await this.observeBoundSessionSealAbort(actor, state);
|
|
383
|
+
if (sealedSession !== undefined) {
|
|
384
|
+
await this.observeBoundSessionSealAbort(actor, state, sealedSession);
|
|
373
385
|
}
|
|
374
386
|
}
|
|
375
387
|
finally {
|
|
@@ -385,8 +397,8 @@ class ZLinkActorTransferRuntime {
|
|
|
385
397
|
await this.cancelSourceActorMove(actor, state, deferredJoin, replayGate.start);
|
|
386
398
|
if (sourceLeaveStarted)
|
|
387
399
|
await this.restoreSourceActor(actor, sourceSpotId);
|
|
388
|
-
if (
|
|
389
|
-
await this.observeBoundSessionSealAbort(actor, state);
|
|
400
|
+
if (sealedSession !== undefined) {
|
|
401
|
+
await this.observeBoundSessionSealAbort(actor, state, sealedSession);
|
|
390
402
|
}
|
|
391
403
|
}
|
|
392
404
|
catch (rollbackError) {
|
|
@@ -399,10 +411,12 @@ class ZLinkActorTransferRuntime {
|
|
|
399
411
|
}
|
|
400
412
|
}
|
|
401
413
|
async prepareMaintenanceSession(actor, state, signal, manageMembership = true, relocation) {
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
414
|
+
if ((0, diagnostics_1.isRelocationDebugEnabled)()) {
|
|
415
|
+
(0, diagnostics_1.relocationDebug)('maintenance_session.begin', {
|
|
416
|
+
actorId: actor.context.actorId,
|
|
417
|
+
spotId: state.spotId === undefined ? undefined : String(state.spotId)
|
|
418
|
+
});
|
|
419
|
+
}
|
|
406
420
|
if (manageMembership) {
|
|
407
421
|
await this.beginSourceActorMove(actor, state);
|
|
408
422
|
}
|
|
@@ -410,21 +424,22 @@ class ZLinkActorTransferRuntime {
|
|
|
410
424
|
state.beginMove();
|
|
411
425
|
this.options.actorHandoff.begin(actor.context.actorId, requireSourceObjectGeneration(actor.context.actorId, state));
|
|
412
426
|
}
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
427
|
+
if ((0, diagnostics_1.isRelocationDebugEnabled)()) {
|
|
428
|
+
(0, diagnostics_1.relocationDebug)('maintenance_session.source_move_complete', {
|
|
429
|
+
actorId: actor.context.actorId
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
let sealedSession;
|
|
417
433
|
try {
|
|
418
|
-
if (state.
|
|
419
|
-
|
|
420
|
-
state.setRemoteBoundSessionTarget(await this.sealBoundSessionRoute(actor, state, signal, relocation));
|
|
434
|
+
if (state.boundSession !== undefined) {
|
|
435
|
+
sealedSession = await this.sealBoundSessionRoute(actor, state, signal, relocation);
|
|
421
436
|
this.options.actorHandoff.sealConnectionBoundIngress(actor.context.actorId);
|
|
422
437
|
}
|
|
423
438
|
const handoffBacklog = this.options.actorHandoff.snapshot(actor.context.actorId);
|
|
424
439
|
let terminal = 'prepared';
|
|
425
440
|
let replayResults = [];
|
|
426
441
|
return {
|
|
427
|
-
target:
|
|
442
|
+
target: sealedSession,
|
|
428
443
|
handoffBacklog,
|
|
429
444
|
takeRelocationRelay: () => this.options.actorHandoff.takeRelocationRelay(actor.context.actorId),
|
|
430
445
|
setReplayResults: (results) => {
|
|
@@ -432,17 +447,36 @@ class ZLinkActorTransferRuntime {
|
|
|
432
447
|
replayResults = [...results];
|
|
433
448
|
},
|
|
434
449
|
commit: async (target, targetActorRef, targetOwnerFence) => {
|
|
435
|
-
if (terminal
|
|
450
|
+
if (terminal !== 'prepared')
|
|
436
451
|
return;
|
|
437
|
-
|
|
452
|
+
terminal = 'committed';
|
|
453
|
+
const failures = [];
|
|
454
|
+
try {
|
|
438
455
|
this.options.actorHandoff.complete(actor.context.actorId, target, targetActorRef, replayResults, targetOwnerFence);
|
|
456
|
+
}
|
|
457
|
+
catch (error) {
|
|
458
|
+
failures.push(error);
|
|
459
|
+
}
|
|
460
|
+
try {
|
|
439
461
|
if (manageMembership && state.spotId !== undefined) {
|
|
440
462
|
await this.options
|
|
441
463
|
.spotManager()
|
|
442
464
|
?.commitActorLeaveAfterTransfer(state.spotId, actor.context.actorId);
|
|
443
465
|
}
|
|
466
|
+
}
|
|
467
|
+
catch (error) {
|
|
468
|
+
failures.push(error);
|
|
469
|
+
}
|
|
470
|
+
try {
|
|
444
471
|
state.endMove();
|
|
445
|
-
|
|
472
|
+
}
|
|
473
|
+
catch (error) {
|
|
474
|
+
failures.push(error);
|
|
475
|
+
}
|
|
476
|
+
if (failures.length > 0) {
|
|
477
|
+
throw failures.length === 1
|
|
478
|
+
? failures[0]
|
|
479
|
+
: new AggregateError(failures, 'Actor source retirement failed.');
|
|
446
480
|
}
|
|
447
481
|
},
|
|
448
482
|
discard: (reason) => {
|
|
@@ -469,8 +503,8 @@ class ZLinkActorTransferRuntime {
|
|
|
469
503
|
state.endMove();
|
|
470
504
|
}
|
|
471
505
|
}
|
|
472
|
-
if (
|
|
473
|
-
await this.observeBoundSessionSealAbort(actor, state);
|
|
506
|
+
if (sealedSession !== undefined) {
|
|
507
|
+
await this.observeBoundSessionSealAbort(actor, state, sealedSession);
|
|
474
508
|
}
|
|
475
509
|
}
|
|
476
510
|
finally {
|
|
@@ -504,8 +538,8 @@ class ZLinkActorTransferRuntime {
|
|
|
504
538
|
state.endMove();
|
|
505
539
|
}
|
|
506
540
|
}
|
|
507
|
-
if (sourceRestored &&
|
|
508
|
-
await this.observeBoundSessionSealAbort(actor, state);
|
|
541
|
+
if (sourceRestored && sealedSession !== undefined) {
|
|
542
|
+
await this.observeBoundSessionSealAbort(actor, state, sealedSession);
|
|
509
543
|
}
|
|
510
544
|
}
|
|
511
545
|
finally {
|
|
@@ -557,7 +591,7 @@ class ZLinkActorTransferRuntime {
|
|
|
557
591
|
return this.options.actorHandoff.acceptRelocatedTerminalRelay(operationId, replyRouteId, undefined, result, sourceNodeRid, targetAuthorityOwnerGeneration);
|
|
558
592
|
}
|
|
559
593
|
async sealBoundSessionRoute(actor, state, signal, relocation) {
|
|
560
|
-
const target = state.
|
|
594
|
+
const target = state.boundSession;
|
|
561
595
|
const actorRef = state.nativeActorRef;
|
|
562
596
|
if (target === undefined ||
|
|
563
597
|
actorRef === undefined ||
|
|
@@ -637,12 +671,9 @@ class ZLinkActorTransferRuntime {
|
|
|
637
671
|
serviceWireRelocation: { relocation, coordinator, session }
|
|
638
672
|
};
|
|
639
673
|
}
|
|
640
|
-
async abortBoundSessionRouteSeal(actor, state,
|
|
641
|
-
const target = targetOverride ??
|
|
642
|
-
(0, actors_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget);
|
|
674
|
+
async abortBoundSessionRouteSeal(actor, state, target) {
|
|
643
675
|
const actorRef = state.nativeActorRef;
|
|
644
|
-
if (
|
|
645
|
-
actorRef === undefined ||
|
|
676
|
+
if (actorRef === undefined ||
|
|
646
677
|
target.bindingGeneration === undefined ||
|
|
647
678
|
target.previousAuthorityOwnerGeneration === undefined ||
|
|
648
679
|
target.previousOwnerLeaseGeneration === undefined) {
|
|
@@ -673,9 +704,9 @@ class ZLinkActorTransferRuntime {
|
|
|
673
704
|
}
|
|
674
705
|
await serviceWire.sendSessionRelocationRoute(target.routerChannelId, target.targetNodeRid, route, this.options.shutdownSignal?.());
|
|
675
706
|
}
|
|
676
|
-
async observeBoundSessionSealAbort(actor, state) {
|
|
707
|
+
async observeBoundSessionSealAbort(actor, state, sealedSession) {
|
|
677
708
|
try {
|
|
678
|
-
await this.abortBoundSessionRouteSeal(actor, state);
|
|
709
|
+
await this.abortBoundSessionRouteSeal(actor, state, sealedSession);
|
|
679
710
|
}
|
|
680
711
|
catch (error) {
|
|
681
712
|
try {
|
|
@@ -711,44 +742,52 @@ class ZLinkActorTransferRuntime {
|
|
|
711
742
|
});
|
|
712
743
|
return { completion: promise, submitted };
|
|
713
744
|
}
|
|
714
|
-
scheduleSourceDeparture(actor, sourceSpotId, releaseLocation) {
|
|
715
|
-
|
|
716
|
-
return;
|
|
717
|
-
const task = this.finishSourceDeparture(actor, sourceSpotId, releaseLocation).finally(() => this.sourceDepartureTasks.delete(actor.context.actorId));
|
|
718
|
-
this.sourceDepartureTasks.set(actor.context.actorId, task);
|
|
745
|
+
scheduleSourceDeparture(actor, sourceSpotId, releaseLocation, failures = []) {
|
|
746
|
+
void this.finishSourceDeparture(actor, sourceSpotId, releaseLocation, failures);
|
|
719
747
|
}
|
|
720
|
-
async finishSourceDeparture(actor, sourceSpotId, releaseLocation) {
|
|
721
|
-
|
|
722
|
-
while (this.options.shutdownSignal?.()?.aborted !== true) {
|
|
748
|
+
async finishSourceDeparture(actor, sourceSpotId, releaseLocation, failures) {
|
|
749
|
+
if (sourceSpotId !== undefined) {
|
|
723
750
|
try {
|
|
724
|
-
|
|
751
|
+
await this.options
|
|
752
|
+
.spotManager()
|
|
753
|
+
?.commitActorLeaveAfterTransfer(sourceSpotId, actor.context.actorId);
|
|
754
|
+
}
|
|
755
|
+
catch (error) {
|
|
756
|
+
failures.push(error);
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
if (releaseLocation) {
|
|
760
|
+
try {
|
|
761
|
+
const state = this.options.actorManager()?.getState(actor.context.actorId);
|
|
762
|
+
if (state?.actorType !== undefined && state.ownsLocation) {
|
|
725
763
|
await this.options
|
|
726
|
-
.
|
|
727
|
-
?.
|
|
764
|
+
.locationLifecycle()
|
|
765
|
+
?.releaseActor(state.actorType, actor.context.actorId);
|
|
766
|
+
state.markLocationReleased();
|
|
728
767
|
}
|
|
729
|
-
if (releaseLocation) {
|
|
730
|
-
const state = this.options.actorManager()?.getState(actor.context.actorId);
|
|
731
|
-
if (state?.actorType !== undefined && state.ownsLocation) {
|
|
732
|
-
await this.options
|
|
733
|
-
.locationLifecycle()
|
|
734
|
-
?.releaseActor(state.actorType, actor.context.actorId);
|
|
735
|
-
state.markLocationReleased();
|
|
736
|
-
}
|
|
737
|
-
// Message Follow owns the bounded stale route after the native leave.
|
|
738
|
-
// The source Actor shell must therefore be removed from the process
|
|
739
|
-
// registry so a later relocation can materialize the same Actor ID on
|
|
740
|
-
// this node without colliding with its previous incarnation.
|
|
741
|
-
await this.options.actorManager()?.completeCoreRelocationSource(actor.context.actorId);
|
|
742
|
-
}
|
|
743
|
-
this.options.onSourceDepartureCompleted?.(actor.context.actorId);
|
|
744
|
-
return;
|
|
745
768
|
}
|
|
746
769
|
catch (error) {
|
|
747
|
-
|
|
748
|
-
if (!(await retry.wait(this.options.shutdownSignal?.())))
|
|
749
|
-
return;
|
|
770
|
+
failures.push(error);
|
|
750
771
|
}
|
|
751
772
|
}
|
|
773
|
+
try {
|
|
774
|
+
// Message Follow keeps its route separately from the retired application instance.
|
|
775
|
+
await this.options.actorManager()?.completeCoreRelocationSource(actor.context.actorId);
|
|
776
|
+
}
|
|
777
|
+
catch (error) {
|
|
778
|
+
failures.push(error);
|
|
779
|
+
}
|
|
780
|
+
try {
|
|
781
|
+
this.options.onSourceDepartureCompleted?.(actor.context.actorId);
|
|
782
|
+
}
|
|
783
|
+
catch (error) {
|
|
784
|
+
failures.push(error);
|
|
785
|
+
}
|
|
786
|
+
if (failures.length > 0) {
|
|
787
|
+
this.options.reportPostCommitError?.(failures.length === 1
|
|
788
|
+
? failures[0]
|
|
789
|
+
: new AggregateError(failures, 'Actor source retirement failed.'));
|
|
790
|
+
}
|
|
752
791
|
}
|
|
753
792
|
async getOrCreateRoutedActor(actorId, actorType, actorRef, remoteBoundSessionTarget, actorCreateRequest, signal) {
|
|
754
793
|
const actorManager = this.requireActorManager('Routed actor join requires ZLINK_ACTOR_MANAGER.');
|
|
@@ -763,7 +802,9 @@ class ZLinkActorTransferRuntime {
|
|
|
763
802
|
}
|
|
764
803
|
if (actorRef !== undefined) {
|
|
765
804
|
state.setNativeActorRef(actorRef);
|
|
766
|
-
|
|
805
|
+
if (remoteBoundSessionTarget !== undefined) {
|
|
806
|
+
state.installBoundSessionBinding(remoteBoundSessionTarget);
|
|
807
|
+
}
|
|
767
808
|
return { actor, actorRef: actorRef };
|
|
768
809
|
}
|
|
769
810
|
return { actor, actorRef: state.ensureNativeActorRef(this.options.primaryMeshNode()) };
|
|
@@ -777,12 +818,10 @@ class ZLinkActorTransferRuntime {
|
|
|
777
818
|
}
|
|
778
819
|
if (actorEntryNodeRid !== undefined)
|
|
779
820
|
state.setEntryNodeRid(actorEntryNodeRid);
|
|
780
|
-
|
|
821
|
+
// The relocation delivers the binding it carried; the target installs it
|
|
822
|
+
// through the one install rule (Session–Actor binding §6, §8).
|
|
781
823
|
if (remoteBoundSessionTarget !== undefined) {
|
|
782
|
-
state.
|
|
783
|
-
}
|
|
784
|
-
if (remoteBoundSessionTarget?.bindingGeneration !== undefined) {
|
|
785
|
-
state.setBoundSessionBindingGeneration(remoteBoundSessionTarget.bindingGeneration);
|
|
824
|
+
state.installBoundSessionBinding(remoteBoundSessionTarget);
|
|
786
825
|
}
|
|
787
826
|
return {
|
|
788
827
|
actor: materialized.actor,
|
|
@@ -921,24 +960,11 @@ class ZLinkActorTransferRuntime {
|
|
|
921
960
|
return undefined;
|
|
922
961
|
}
|
|
923
962
|
}
|
|
924
|
-
rememberRoutedActorTransferTarget(actorId, target) {
|
|
925
|
-
if (target === undefined)
|
|
926
|
-
return;
|
|
927
|
-
const state = this.options.actorManager()?.getState(actorId);
|
|
928
|
-
if (state === undefined) {
|
|
929
|
-
return;
|
|
930
|
-
}
|
|
931
|
-
state.setBoundSessionTransferTarget(target);
|
|
932
|
-
state.setRemoteBoundSessionTarget((0, actors_1.mergeRemoteBoundSessionTarget)(target, state.remoteBoundSessionTarget));
|
|
933
|
-
if (target.bindingGeneration !== undefined) {
|
|
934
|
-
state.setBoundSessionBindingGeneration(target.bindingGeneration);
|
|
935
|
-
}
|
|
936
|
-
}
|
|
937
963
|
commitRoutedActor(actor, spotId, spot) {
|
|
938
964
|
const state = this.options.actorManager()?.getState(actor.context.actorId);
|
|
939
965
|
state?.setJoinedSpot(spotId, spot);
|
|
940
966
|
const actorRef = state?.nativeActorRef;
|
|
941
|
-
const binding = state?.
|
|
967
|
+
const binding = state?.boundSession;
|
|
942
968
|
if (actorRef !== undefined &&
|
|
943
969
|
binding?.sessionNodeRid !== undefined &&
|
|
944
970
|
binding.sessionRid !== undefined &&
|
|
@@ -982,7 +1008,7 @@ class ZLinkActorTransferRuntime {
|
|
|
982
1008
|
(0, routing_id_1.encodeRoutingIdStorageHex)(spotId))) {
|
|
983
1009
|
throw new Error(`Actor '${actor.context.actorId}' Core location does not match the committed target SPOT.`);
|
|
984
1010
|
}
|
|
985
|
-
const deadline = performance.now() +
|
|
1011
|
+
const deadline = performance.now() + TRANSFER_RESOLUTION_TIMEOUT_MS;
|
|
986
1012
|
const ownerNodeGeneration = node.status().lifecycleGeneration;
|
|
987
1013
|
if (ownerNodeGeneration <= 0n) {
|
|
988
1014
|
throw new Error(`Actor '${actor.context.actorId}' owner MeshNode has no valid lifecycle generation.`);
|
|
@@ -1006,7 +1032,7 @@ class ZLinkActorTransferRuntime {
|
|
|
1006
1032
|
if (claim.status !== 'conflict' || performance.now() >= deadline) {
|
|
1007
1033
|
break;
|
|
1008
1034
|
}
|
|
1009
|
-
await new Promise((resolve) => setTimeout(resolve,
|
|
1035
|
+
await new Promise((resolve) => setTimeout(resolve, TRANSFER_POLL_INTERVAL_MS));
|
|
1010
1036
|
}
|
|
1011
1037
|
if (claim.status === 'conflict') {
|
|
1012
1038
|
throw new Error(`Actor '${actor.context.actorId}' target location takeover was rejected.`);
|
|
@@ -1032,78 +1058,25 @@ class ZLinkActorTransferRuntime {
|
|
|
1032
1058
|
}
|
|
1033
1059
|
state.setRemoteActorPacketTarget(target);
|
|
1034
1060
|
}
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
const snapshot = {
|
|
1041
|
-
spotId: state?.spotId,
|
|
1042
|
-
spot: state?.spot,
|
|
1043
|
-
locationSpotId: previousLocation?.spotId,
|
|
1044
|
-
spotMeshName: previousLocation?.meshName,
|
|
1045
|
-
actorRef: previousLocation?.actorRef,
|
|
1046
|
-
spotGeneration: previousLocation?.spotGeneration,
|
|
1047
|
-
membershipEpoch: previousLocation?.membershipEpoch,
|
|
1048
|
-
ownerNodeGeneration: previousLocation?.ownerNodeGeneration
|
|
1049
|
-
};
|
|
1050
|
-
await this.claimRoutedActorLocation(actor, spotId, spotMeshName);
|
|
1051
|
-
return snapshot;
|
|
1052
|
-
}
|
|
1053
|
-
async publishRoutedActorOwnership(actor) {
|
|
1061
|
+
/**
|
|
1062
|
+
* Publishes the committed route of the Session seal that the relocation
|
|
1063
|
+
* operation carried to this target (command 44, Session–Actor binding §8.2).
|
|
1064
|
+
*/
|
|
1065
|
+
async publishRoutedActorOwnership(actor, sealedSession) {
|
|
1054
1066
|
const state = this.options.actorManager()?.getState(actor.context.actorId);
|
|
1055
1067
|
const actorRef = state?.nativeActorRef;
|
|
1056
1068
|
const generation = state?.locationGeneration;
|
|
1057
1069
|
if (state === undefined || actorRef === undefined || generation === undefined)
|
|
1058
1070
|
return;
|
|
1059
|
-
|
|
1060
|
-
if (boundSessionTarget?.serviceWireRelocation === undefined)
|
|
1071
|
+
if (sealedSession?.serviceWireRelocation === undefined)
|
|
1061
1072
|
return;
|
|
1062
|
-
await this.publishBoundSessionOwnership(actor.context.actorId, actorRef, generation,
|
|
1073
|
+
await this.publishBoundSessionOwnership(actor.context.actorId, actorRef, generation, sealedSession, state.ownerLeaseGeneration);
|
|
1063
1074
|
}
|
|
1064
1075
|
async openRoutedActorSession(_actor) { }
|
|
1065
1076
|
clearRoutedActor(actor) {
|
|
1066
1077
|
this.options.actorManager()?.getState(actor.context.actorId)?.clearJoinedSpot();
|
|
1067
1078
|
this.options.clearRemoteActorPacketTarget(actor.context.actorId);
|
|
1068
1079
|
}
|
|
1069
|
-
async rollbackNativeActorJoin(actor, snapshot) {
|
|
1070
|
-
const state = this.options.actorManager()?.getState(actor.context.actorId);
|
|
1071
|
-
const actorType = state?.actorType;
|
|
1072
|
-
const lifecycle = this.options.locationLifecycle();
|
|
1073
|
-
if (snapshot.spotId === undefined)
|
|
1074
|
-
state?.clearJoinedSpot();
|
|
1075
|
-
else
|
|
1076
|
-
state?.setJoinedSpot(snapshot.spotId, snapshot.spot);
|
|
1077
|
-
if (state?.ownsLocation !== true || actorType === undefined || lifecycle === undefined)
|
|
1078
|
-
return;
|
|
1079
|
-
if (snapshot.spotId === undefined) {
|
|
1080
|
-
if (snapshot.locationSpotId === undefined ||
|
|
1081
|
-
snapshot.spotGeneration === undefined ||
|
|
1082
|
-
snapshot.membershipEpoch === undefined ||
|
|
1083
|
-
snapshot.ownerNodeGeneration === undefined) {
|
|
1084
|
-
throw new Error(`Actor '${actor.context.actorId}' cannot restore its Entry SPOT location without its exact generation fields.`);
|
|
1085
|
-
}
|
|
1086
|
-
await lifecycle.notifyActorLeftSpot(actorType, actor.context.actorId, snapshot.locationSpotId, snapshot.spotGeneration, snapshot.membershipEpoch, snapshot.ownerNodeGeneration);
|
|
1087
|
-
return;
|
|
1088
|
-
}
|
|
1089
|
-
if (snapshot.actorRef === undefined) {
|
|
1090
|
-
throw new Error(`Actor '${actor.context.actorId}' cannot restore its previous SPOT location without a native ref.`);
|
|
1091
|
-
}
|
|
1092
|
-
if (snapshot.spotMeshName === undefined ||
|
|
1093
|
-
snapshot.spotGeneration === undefined ||
|
|
1094
|
-
snapshot.membershipEpoch === undefined ||
|
|
1095
|
-
snapshot.ownerNodeGeneration === undefined) {
|
|
1096
|
-
throw new Error(`Actor '${actor.context.actorId}' cannot restore its previous SPOT location without its exact generation fields.`);
|
|
1097
|
-
}
|
|
1098
|
-
const restored = await lifecycle.takeoverActorJoinedSpot(actorType, actor.context.actorId, snapshot.actorRef, snapshot.spotMeshName, snapshot.spotId, snapshot.spotGeneration, snapshot.membershipEpoch, snapshot.ownerNodeGeneration, async () => state.clearAfterDestroy());
|
|
1099
|
-
if (restored.status === 'conflict') {
|
|
1100
|
-
throw new Error(`Actor '${actor.context.actorId}' previous SPOT location could not be restored.`);
|
|
1101
|
-
}
|
|
1102
|
-
if (restored.generation !== undefined)
|
|
1103
|
-
state.setLocationGeneration(restored.generation);
|
|
1104
|
-
if (restored.claimed !== undefined)
|
|
1105
|
-
state.setOwnerLeaseGeneration(restored.claimed.leaseGeneration);
|
|
1106
|
-
}
|
|
1107
1080
|
async rollbackRoutedActor(actor, signal) {
|
|
1108
1081
|
const manager = this.options.actorManager();
|
|
1109
1082
|
const state = manager?.getState(actor.context.actorId);
|
|
@@ -1117,7 +1090,6 @@ class ZLinkActorTransferRuntime {
|
|
|
1117
1090
|
}
|
|
1118
1091
|
catch (error) {
|
|
1119
1092
|
locationError = error;
|
|
1120
|
-
void lifecycle.releaseActorEventually(actorType, actor.context.actorId);
|
|
1121
1093
|
}
|
|
1122
1094
|
}
|
|
1123
1095
|
try {
|
|
@@ -1196,11 +1168,6 @@ class ZLinkActorTransferRuntime {
|
|
|
1196
1168
|
}
|
|
1197
1169
|
}
|
|
1198
1170
|
exports.ZLinkActorTransferRuntime = ZLinkActorTransferRuntime;
|
|
1199
|
-
function relocationDebug(marker, detail) {
|
|
1200
|
-
if (process.env.ZLINK_DEBUG_FRAMEWORK_RELOCATION !== '1')
|
|
1201
|
-
return;
|
|
1202
|
-
console.error('[zlink.runtime.relocation]', marker, detail);
|
|
1203
|
-
}
|
|
1204
1171
|
function deferredJoinTerminalKey(completion) {
|
|
1205
1172
|
return (`${completion.actor.actorId}:${completion.actor.objectGeneration.toString()}:` +
|
|
1206
1173
|
(0, operation_identity_1.operationIdentityKey)(completion.operationId));
|
|
@@ -1243,7 +1210,7 @@ async function waitForActorAuthorityRetry(deadlineAtMs, signal, cause) {
|
|
|
1243
1210
|
throw new Error('Actor target authority deadline expired.', { cause });
|
|
1244
1211
|
}
|
|
1245
1212
|
await new Promise((resolve, reject) => {
|
|
1246
|
-
const timer = setTimeout(resolve, Math.min(
|
|
1213
|
+
const timer = setTimeout(resolve, Math.min(TRANSFER_POLL_INTERVAL_MS, remaining));
|
|
1247
1214
|
timer.unref();
|
|
1248
1215
|
const abort = () => {
|
|
1249
1216
|
clearTimeout(timer);
|