@zlink-systems/framework 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.js +16 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +28 -0
- package/dist/runtime/activation-admission.js +57 -0
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +19 -17
- package/dist/runtime/actors/actor-handoff.d.ts +13 -7
- package/dist/runtime/actors/actor-handoff.js +36 -25
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +85 -123
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
- package/dist/runtime/actors/actor-remote-joiner.js +11 -17
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
- package/dist/runtime/actors/deferred-join-completion.js +21 -0
- package/dist/runtime/actors/index.d.ts +10 -8
- package/dist/runtime/actors/index.js +101 -73
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +7 -1
- package/dist/runtime/admission.js +11 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +8 -33
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
- package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -9
- package/dist/runtime/channels/channel-clients.js +68 -60
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -18
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
- package/dist/runtime/channels/channel-runtime-manager.js +4 -12
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
- package/dist/runtime/channels/channel-socket-registry.js +296 -235
- package/dist/runtime/channels/channel-transports.d.ts +11 -20
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +133 -81
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +22 -9
- package/dist/runtime/execution/index.js +107 -37
- package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
- package/dist/runtime/execution/serial-execution-queue.js +99 -26
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/listener-records.d.ts +11 -0
- package/dist/runtime/foundation/listener-records.js +20 -0
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
- package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
- package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
- package/dist/runtime/foundation/service-topology-registry.js +22 -61
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
- package/dist/runtime/host/actor-transfer-runtime.js +210 -256
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +19 -14
- package/dist/runtime/host/index.js +234 -175
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +11 -23
- package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
- package/dist/runtime/host/route-mesh-runtime.js +178 -257
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
- package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
- package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
- package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
- package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +5 -10
- package/dist/runtime/locations/lifecycle.js +4 -33
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +44 -30
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
- package/dist/runtime/locations/spot-location-claims.js +40 -23
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
- package/dist/runtime/spots/index.d.ts +29 -29
- package/dist/runtime/spots/index.js +441 -313
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
- package/dist/runtime/spots/spot-activation-registry.js +27 -60
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
- package/dist/runtime/spots/spot-activation-state.js +4 -17
- package/dist/runtime/spots/spot-activation.d.ts +10 -9
- package/dist/runtime/spots/spot-activation.js +103 -81
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
- package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
- package/dist/runtime/spots/spot-actor-membership.js +44 -53
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-entry-activation.js +9 -21
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +6 -5
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
- package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +10 -37
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
- package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
- package/dist/runtime/spots/spot-serial-executor.js +9 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
- package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
- package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -19
- package/dist/runtime/streams/index.d.ts +15 -14
- package/dist/runtime/streams/index.js +38 -39
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/session-serial-executor.js +2 -2
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +15 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +72 -0
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +45 -39
- package/src/runtime/actors/actor-handoff.ts +55 -45
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +174 -215
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +15 -36
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/actor-source-transfer.ts +5 -18
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +44 -0
- package/src/runtime/actors/index.ts +122 -88
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +13 -2
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +15 -42
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
- package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
- package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
- package/src/runtime/backend/raw-binding-port.ts +14 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -31
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +8 -15
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +369 -262
- package/src/runtime/channels/channel-transports.ts +161 -115
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +175 -106
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +116 -38
- package/src/runtime/execution/serial-execution-queue.ts +179 -34
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/listener-records.ts +21 -0
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
- package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
- package/src/runtime/foundation/service-topology-registry.ts +30 -79
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +266 -418
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +408 -312
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +12 -44
- package/src/runtime/host/route-mesh-runtime.ts +236 -275
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
- package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
- package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +16 -45
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +90 -58
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +54 -26
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
- package/src/runtime/spots/index.ts +687 -437
- package/src/runtime/spots/spot-activation-registry.ts +42 -71
- package/src/runtime/spots/spot-activation-state.ts +4 -16
- package/src/runtime/spots/spot-activation.ts +167 -115
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
- package/src/runtime/spots/spot-actor-membership.ts +107 -75
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -33
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +29 -21
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
- package/src/runtime/spots/spot-outbound.ts +47 -68
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +10 -43
- package/src/runtime/spots/spot-serial-executor.ts +10 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +23 -37
- package/src/runtime/streams/index.ts +102 -88
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/session-serial-executor.ts +2 -2
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
- package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -31,8 +31,11 @@ import type { Message } from '../../contracts/Common/Message';
|
|
|
31
31
|
import type { ZLinkMessageFollowOrigin } from '../foundation/service-runtime-contracts';
|
|
32
32
|
import { throwIfAborted } from '../abort';
|
|
33
33
|
import { ZLinkConfigurationException } from '../configuration';
|
|
34
|
+
import {
|
|
35
|
+
ZLinkFrameworkInternalErrorKind,
|
|
36
|
+
createInternalFrameworkException
|
|
37
|
+
} from '../framework-errors-internal';
|
|
34
38
|
import type {
|
|
35
|
-
ZLinkBackendReceived,
|
|
36
39
|
ZLinkBackendSpot,
|
|
37
40
|
ZLinkBackendSpotNode,
|
|
38
41
|
ZLinkBackendTopicMessage
|
|
@@ -77,7 +80,7 @@ import type {
|
|
|
77
80
|
} from './spot-actor-join-dispatch';
|
|
78
81
|
import { ZLinkSpotActorAdmissionCoordinator } from './spot-actor-admission-coordinator';
|
|
79
82
|
import type { ZLinkRouteToActorJoinPrewarm } from './spot-actor-packet-dispatch';
|
|
80
|
-
import { ZLinkSpotActivation
|
|
83
|
+
import { ZLinkSpotActivation } from './spot-activation-state';
|
|
81
84
|
import type { ZLinkSpotLocationClaim } from './spot-location-claim';
|
|
82
85
|
import type {
|
|
83
86
|
ZLinkSpotActorHandoffRuntime,
|
|
@@ -111,9 +114,9 @@ export interface ZLinkSpotActivationLifecycleOptions {
|
|
|
111
114
|
readonly routedTransport?: ZLinkSpotRoutedTransport;
|
|
112
115
|
readonly addressTransport?: ZLinkSpotAddressTransport;
|
|
113
116
|
readonly spotRouterChannelIdForMesh?: (meshName: string) => string;
|
|
114
|
-
readonly channelMeshNameForChannel?: (channelName: string) => string | undefined;
|
|
115
117
|
readonly providerResolver?: ZLinkProviderResolver;
|
|
116
118
|
readonly dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
119
|
+
readonly closeErrorSink?: import('../diagnostics/dispatch-error-port').ZLinkDispatchErrorSink;
|
|
117
120
|
readonly runtimeEventPublisher?: ZLinkRuntimeEventPublisher;
|
|
118
121
|
readonly workerRuntime: ZLinkWorkerRuntime;
|
|
119
122
|
readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
|
|
@@ -123,14 +126,13 @@ export interface ZLinkSpotActivationLifecycleOptions {
|
|
|
123
126
|
spotId: RoutingId,
|
|
124
127
|
authority?: ZLinkNativeSpotAuthority
|
|
125
128
|
) => ZLinkBackendSpot | undefined;
|
|
126
|
-
readonly createReceived?: () => ZLinkBackendReceived;
|
|
127
129
|
readonly createTopicMessage?: () => ZLinkBackendTopicMessage;
|
|
128
130
|
readonly nativeSpotNodeProvider?: (meshName: string) => ZLinkBackendSpotNode | undefined;
|
|
129
131
|
readonly actorResolver?: (actorId: string) => ZLinkActor | undefined;
|
|
130
132
|
readonly actorTransferRuntime?: ZLinkSpotActorTransferRuntime;
|
|
131
133
|
readonly boundSessionRuntime?: ZLinkSpotBoundSessionRuntime;
|
|
132
134
|
readonly actorHandoffRuntime?: ZLinkSpotActorHandoffRuntime;
|
|
133
|
-
readonly detachedTaskRunner
|
|
135
|
+
readonly detachedTaskRunner: ZLinkDetachedTaskRunner;
|
|
134
136
|
readonly admission?: ZLinkRuntimeAdmissionGate;
|
|
135
137
|
readonly statefulExecutionAllowed?: () => boolean;
|
|
136
138
|
readonly leaveActor: (
|
|
@@ -139,11 +141,11 @@ export interface ZLinkSpotActivationLifecycleOptions {
|
|
|
139
141
|
signal?: AbortSignal,
|
|
140
142
|
meshName?: string
|
|
141
143
|
) => Promise<void>;
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
144
|
+
/** Starts a context Close request after its calling turn has ended. */
|
|
145
|
+
readonly requestContextClose: (
|
|
146
|
+
activation: ZLinkSpotActivation,
|
|
147
|
+
objectGeneration: bigint,
|
|
148
|
+
signal?: AbortSignal
|
|
147
149
|
) => Promise<boolean>;
|
|
148
150
|
readonly registerActivation: (activation: ZLinkSpotActivation) => void;
|
|
149
151
|
readonly routeToActorJoinPrewarm?: ZLinkRouteToActorJoinPrewarm;
|
|
@@ -173,14 +175,19 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
173
175
|
{
|
|
174
176
|
closingAttempted: boolean;
|
|
175
177
|
timersDisposed: boolean;
|
|
178
|
+
serialDisposed: boolean;
|
|
176
179
|
handlersDisposed: boolean;
|
|
180
|
+
actorDispatchDisposed: boolean;
|
|
177
181
|
nativeDisposed: boolean;
|
|
178
182
|
locationReleased: boolean;
|
|
179
|
-
inFlight?: Promise<
|
|
183
|
+
inFlight?: Promise<unknown>;
|
|
180
184
|
}
|
|
181
185
|
>();
|
|
182
186
|
|
|
183
187
|
constructor(private readonly options: ZLinkSpotActivationLifecycleOptions) {
|
|
188
|
+
if ((options.detachedTaskRunner as unknown) === undefined) {
|
|
189
|
+
throw new ZLinkConfigurationException('Spot activation requires a detached task runner.');
|
|
190
|
+
}
|
|
184
191
|
this.actorAdmission = new ZLinkSpotActorAdmissionCoordinator(options);
|
|
185
192
|
}
|
|
186
193
|
|
|
@@ -249,7 +256,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
249
256
|
const common = {
|
|
250
257
|
meshName,
|
|
251
258
|
spotId,
|
|
252
|
-
objectGeneration:
|
|
259
|
+
objectGeneration: objectGeneration,
|
|
253
260
|
outbound,
|
|
254
261
|
timers,
|
|
255
262
|
serial,
|
|
@@ -259,7 +266,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
259
266
|
providerResolver: this.options.providerResolver,
|
|
260
267
|
runtimeEventPublisher: this.options.runtimeEventPublisher,
|
|
261
268
|
workerRuntime: this.options.workerRuntime,
|
|
262
|
-
close: this.contextClose(
|
|
269
|
+
close: this.contextClose(objectGeneration, () => activation)
|
|
263
270
|
};
|
|
264
271
|
const context =
|
|
265
272
|
objectKind === 'user_spot'
|
|
@@ -314,6 +321,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
314
321
|
objectKind === 'user_spot'
|
|
315
322
|
? {
|
|
316
323
|
kind: 'user',
|
|
324
|
+
objectGeneration,
|
|
317
325
|
executionMode,
|
|
318
326
|
relocationCoordinationMode:
|
|
319
327
|
this.options.userSpotRelocationCoordinationMode?.(
|
|
@@ -336,11 +344,22 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
336
344
|
this.options.registerActivation(activation);
|
|
337
345
|
return activation;
|
|
338
346
|
} catch (error) {
|
|
339
|
-
await
|
|
340
|
-
|
|
341
|
-
|
|
347
|
+
const cleanup = await Promise.allSettled([
|
|
348
|
+
timers.dispose(),
|
|
349
|
+
...(instance === undefined
|
|
350
|
+
? []
|
|
351
|
+
: [disposeLifecycleHandlers(instance, this.options.detachedTaskRunner)]),
|
|
352
|
+
...(nativeSpot === undefined ? [] : [Promise.resolve().then(() => nativeSpot.dispose())])
|
|
353
|
+
]);
|
|
354
|
+
const cleanupErrors = cleanup
|
|
355
|
+
.filter((result): result is PromiseRejectedResult => result.status === 'rejected')
|
|
356
|
+
.map((result) => result.reason);
|
|
357
|
+
if (cleanupErrors.length > 0) {
|
|
358
|
+
throw new AggregateError(
|
|
359
|
+
[error, ...cleanupErrors],
|
|
360
|
+
`Spot '${spotId}' relocation materialization cleanup failed.`
|
|
361
|
+
);
|
|
342
362
|
}
|
|
343
|
-
await nativeSpot?.dispose().catch(() => undefined);
|
|
344
363
|
throw error;
|
|
345
364
|
}
|
|
346
365
|
}
|
|
@@ -351,9 +370,10 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
351
370
|
implementation: Type<TSpot>,
|
|
352
371
|
spotId: RoutingId,
|
|
353
372
|
objectGeneration: bigint,
|
|
354
|
-
signal?: AbortSignal
|
|
373
|
+
signal?: AbortSignal,
|
|
374
|
+
serialOwner?: ZLinkSpotActivation
|
|
355
375
|
): Promise<ZLinkSpotActivation> {
|
|
356
|
-
const serial = new ZLinkSpotSerialTurnExecutor(true, spotId);
|
|
376
|
+
const serial = serialOwner?.serial ?? new ZLinkSpotSerialTurnExecutor(true, spotId);
|
|
357
377
|
const serialExecutor = new ZLinkSpotSerialExecutor(
|
|
358
378
|
serial,
|
|
359
379
|
ZLinkUserSpotExecutionMode.SpotWide,
|
|
@@ -387,7 +407,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
387
407
|
const context = createInstanceSpotContext({
|
|
388
408
|
meshName,
|
|
389
409
|
spotId,
|
|
390
|
-
objectGeneration:
|
|
410
|
+
objectGeneration: objectGeneration,
|
|
391
411
|
handlers: instanceHandlers,
|
|
392
412
|
outbound,
|
|
393
413
|
timers,
|
|
@@ -398,7 +418,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
398
418
|
providerResolver: this.options.providerResolver,
|
|
399
419
|
runtimeEventPublisher: this.options.runtimeEventPublisher,
|
|
400
420
|
workerRuntime: this.options.workerRuntime,
|
|
401
|
-
close: this.contextClose(
|
|
421
|
+
close: this.contextClose(objectGeneration, () => activation)
|
|
402
422
|
});
|
|
403
423
|
instance = await createFreshProviderInstance(
|
|
404
424
|
implementation,
|
|
@@ -421,6 +441,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
421
441
|
timers,
|
|
422
442
|
actorHandlers,
|
|
423
443
|
handlers,
|
|
444
|
+
executionBarrier: serialOwner?.executionBarrier,
|
|
424
445
|
externalActorCount: () => this.options.actorCountProvider?.(spotId) ?? 0
|
|
425
446
|
});
|
|
426
447
|
try {
|
|
@@ -438,14 +459,21 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
438
459
|
signal
|
|
439
460
|
}
|
|
440
461
|
);
|
|
441
|
-
await
|
|
462
|
+
await (serialOwner === undefined
|
|
463
|
+
? serial.execute(() => instance!.onInitialize?.())
|
|
464
|
+
: serial.postBarrierTurn(() => instance!.onInitialize?.()));
|
|
442
465
|
this.options.registerActivation(activation);
|
|
443
466
|
return activation;
|
|
444
467
|
} catch (error) {
|
|
445
|
-
await
|
|
446
|
-
|
|
468
|
+
const cleanup = await Promise.allSettled([
|
|
469
|
+
timers.dispose(),
|
|
470
|
+
disposeLifecycleHandlers(instance, this.options.detachedTaskRunner)
|
|
471
|
+
]);
|
|
472
|
+
const cleanupErrors = cleanup
|
|
473
|
+
.filter((result): result is PromiseRejectedResult => result.status === 'rejected')
|
|
474
|
+
.map((result) => result.reason);
|
|
447
475
|
throw new AggregateError(
|
|
448
|
-
[error],
|
|
476
|
+
[error, ...cleanupErrors],
|
|
449
477
|
`Instance Spot '${instanceType}' materialization failed for '${String(spotId)}'.`
|
|
450
478
|
);
|
|
451
479
|
}
|
|
@@ -474,7 +502,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
474
502
|
errors.push(error);
|
|
475
503
|
}
|
|
476
504
|
try {
|
|
477
|
-
await disposeLifecycleHandlers(activation.spot);
|
|
505
|
+
await disposeLifecycleHandlers(activation.spot, this.options.detachedTaskRunner);
|
|
478
506
|
} catch (error) {
|
|
479
507
|
errors.push(error);
|
|
480
508
|
}
|
|
@@ -487,16 +515,6 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
487
515
|
}
|
|
488
516
|
}
|
|
489
517
|
|
|
490
|
-
resourcesReleased(activation: ZLinkSpotActivation): boolean {
|
|
491
|
-
const state = this.cleanupStates.get(activation);
|
|
492
|
-
return (
|
|
493
|
-
state?.timersDisposed === true &&
|
|
494
|
-
state.handlersDisposed === true &&
|
|
495
|
-
state.nativeDisposed === true &&
|
|
496
|
-
state.locationReleased === true
|
|
497
|
-
);
|
|
498
|
-
}
|
|
499
|
-
|
|
500
518
|
async create<TSpot extends ZLinkSpot>(
|
|
501
519
|
meshName: string,
|
|
502
520
|
spotType: Type<TSpot>,
|
|
@@ -585,7 +603,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
585
603
|
const context = createSpotContext({
|
|
586
604
|
meshName,
|
|
587
605
|
spotId,
|
|
588
|
-
objectGeneration:
|
|
606
|
+
objectGeneration: spotGeneration,
|
|
589
607
|
handlers,
|
|
590
608
|
outbound,
|
|
591
609
|
timers,
|
|
@@ -607,7 +625,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
607
625
|
ensureOperationAllowed: () => activation?.ensureContextOperationAllowed(),
|
|
608
626
|
leaveActor: (actor, contextSignal) =>
|
|
609
627
|
this.options.leaveActor(spotId, actor, contextSignal, meshName),
|
|
610
|
-
close: this.contextClose(
|
|
628
|
+
close: this.contextClose(spotGeneration, () => activation)
|
|
611
629
|
});
|
|
612
630
|
try {
|
|
613
631
|
spot = await createFreshProviderInstance(spotType, this.options.providerResolver, context);
|
|
@@ -624,6 +642,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
624
642
|
spotId,
|
|
625
643
|
domain: {
|
|
626
644
|
kind: 'user',
|
|
645
|
+
objectGeneration: spotGeneration,
|
|
627
646
|
executionMode,
|
|
628
647
|
relocationCoordinationMode:
|
|
629
648
|
this.options.userSpotRelocationCoordinationMode?.(meshName, spotType) ??
|
|
@@ -667,9 +686,13 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
667
686
|
} else {
|
|
668
687
|
const partialCleanup = await Promise.allSettled([
|
|
669
688
|
timers.dispose(),
|
|
670
|
-
...(spot === undefined
|
|
671
|
-
|
|
672
|
-
|
|
689
|
+
...(spot === undefined
|
|
690
|
+
? []
|
|
691
|
+
: [disposeLifecycleHandlers(spot, this.options.detachedTaskRunner)]),
|
|
692
|
+
Promise.resolve().then(() => nativeSpot.dispose()),
|
|
693
|
+
Promise.resolve().then(() =>
|
|
694
|
+
this.options.locationClaim.release(locationClaim.meshName, spotId)
|
|
695
|
+
)
|
|
673
696
|
]);
|
|
674
697
|
const partialErrors = partialCleanup
|
|
675
698
|
.filter((result): result is PromiseRejectedResult => result.status === 'rejected')
|
|
@@ -716,7 +739,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
716
739
|
const context = createSpotContext({
|
|
717
740
|
meshName,
|
|
718
741
|
spotId,
|
|
719
|
-
objectGeneration:
|
|
742
|
+
objectGeneration: objectGeneration,
|
|
720
743
|
handlers,
|
|
721
744
|
outbound,
|
|
722
745
|
timers,
|
|
@@ -738,7 +761,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
738
761
|
ensureOperationAllowed: () => activation?.ensureContextOperationAllowed(),
|
|
739
762
|
leaveActor: (actor, contextSignal) =>
|
|
740
763
|
this.options.leaveActor(spotId, actor, contextSignal, meshName),
|
|
741
|
-
close: this.contextClose(
|
|
764
|
+
close: this.contextClose(objectGeneration, () => activation)
|
|
742
765
|
});
|
|
743
766
|
spot = await createFreshProviderInstance(spotType, this.options.providerResolver, context);
|
|
744
767
|
Object.defineProperty(spot, 'context', {
|
|
@@ -751,6 +774,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
751
774
|
spotId,
|
|
752
775
|
domain: {
|
|
753
776
|
kind: 'user',
|
|
777
|
+
objectGeneration,
|
|
754
778
|
executionMode,
|
|
755
779
|
relocationCoordinationMode:
|
|
756
780
|
this.options.userSpotRelocationCoordinationMode?.(meshName, spotType) ??
|
|
@@ -777,67 +801,59 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
777
801
|
}
|
|
778
802
|
|
|
779
803
|
private contextClose(
|
|
780
|
-
|
|
781
|
-
spotId: RoutingId,
|
|
804
|
+
objectGeneration: bigint,
|
|
782
805
|
activationProvider: () => ZLinkSpotActivation | undefined
|
|
783
806
|
): (signal?: AbortSignal) => Promise<boolean> {
|
|
784
|
-
return
|
|
807
|
+
return (signal) => {
|
|
785
808
|
const activation = activationProvider();
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
activation.requestClose();
|
|
791
|
-
const retry = activation.serial.post(() =>
|
|
792
|
-
this.options.closeSpot(meshName, spotId, signal)
|
|
809
|
+
if (activation === undefined) {
|
|
810
|
+
throw createInternalFrameworkException(
|
|
811
|
+
ZLinkFrameworkInternalErrorKind.InvalidOperation,
|
|
812
|
+
'Spot context Close requires its active generation.'
|
|
793
813
|
);
|
|
794
|
-
this.options.detachedTaskRunner?.runDetached(`spot close ${String(spotId)}`, async () => {
|
|
795
|
-
await retry;
|
|
796
|
-
});
|
|
797
|
-
if (this.options.detachedTaskRunner === undefined) {
|
|
798
|
-
void retry.catch(() => undefined);
|
|
799
|
-
}
|
|
800
|
-
return true;
|
|
801
814
|
}
|
|
802
|
-
return
|
|
815
|
+
return this.options.requestContextClose(activation, objectGeneration, signal);
|
|
803
816
|
};
|
|
804
817
|
}
|
|
805
818
|
|
|
806
|
-
async
|
|
819
|
+
async sealForClose(
|
|
807
820
|
activation: ZLinkSpotActivation,
|
|
808
|
-
|
|
809
|
-
|
|
821
|
+
seal: import('../execution').ZLinkExecutionBarrierSeal,
|
|
822
|
+
signal?: AbortSignal
|
|
810
823
|
): Promise<void> {
|
|
811
|
-
|
|
812
|
-
|
|
824
|
+
await activation.waitForExecutionQuiescence(seal, signal);
|
|
825
|
+
if (!activation.commitExecutionSeal(seal)) {
|
|
826
|
+
throw new Error(`Spot '${String(activation.spotId)}' close seal is stale.`);
|
|
827
|
+
}
|
|
813
828
|
}
|
|
814
829
|
|
|
815
|
-
|
|
830
|
+
/** Returns the OnClosing failure, which cleanup records and does not rethrow. */
|
|
831
|
+
async cleanupClosedActivation(
|
|
816
832
|
activation: ZLinkSpotActivation,
|
|
817
|
-
seal: import('../execution').ZLinkExecutionBarrierSeal,
|
|
818
|
-
signal?: AbortSignal,
|
|
819
833
|
reason = ZLinkSpotCloseReason.ExplicitClose,
|
|
820
834
|
deadline?: Date
|
|
821
|
-
): Promise<
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
835
|
+
): Promise<unknown> {
|
|
836
|
+
return await this.cleanupActivation(
|
|
837
|
+
activation,
|
|
838
|
+
activation.meshName,
|
|
839
|
+
true,
|
|
840
|
+
undefined,
|
|
841
|
+
reason,
|
|
842
|
+
deadline,
|
|
843
|
+
true
|
|
844
|
+
);
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
async cleanupFailedIncarnation(activation: ZLinkSpotActivation): Promise<void> {
|
|
848
|
+
await this.cleanupActivation(
|
|
849
|
+
activation,
|
|
850
|
+
activation.meshName,
|
|
851
|
+
false,
|
|
852
|
+
undefined,
|
|
853
|
+
ZLinkSpotCloseReason.ExplicitClose,
|
|
854
|
+
undefined,
|
|
855
|
+
true
|
|
856
|
+
);
|
|
841
857
|
}
|
|
842
858
|
|
|
843
859
|
async dispatchActorPacket(
|
|
@@ -961,13 +977,16 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
961
977
|
notifyClosing: boolean,
|
|
962
978
|
signal?: AbortSignal,
|
|
963
979
|
reason = ZLinkSpotCloseReason.ExplicitClose,
|
|
964
|
-
deadline?: Date
|
|
965
|
-
|
|
980
|
+
deadline?: Date,
|
|
981
|
+
owningLifecycle = false
|
|
982
|
+
): Promise<unknown> {
|
|
966
983
|
throwIfAborted(signal);
|
|
967
984
|
const state = this.cleanupStates.get(activation) ?? {
|
|
968
985
|
closingAttempted: false,
|
|
969
986
|
timersDisposed: false,
|
|
987
|
+
serialDisposed: false,
|
|
970
988
|
handlersDisposed: false,
|
|
989
|
+
actorDispatchDisposed: false,
|
|
971
990
|
nativeDisposed: false,
|
|
972
991
|
locationReleased: false
|
|
973
992
|
};
|
|
@@ -979,7 +998,8 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
979
998
|
notifyClosing,
|
|
980
999
|
reason,
|
|
981
1000
|
state,
|
|
982
|
-
deadline
|
|
1001
|
+
deadline,
|
|
1002
|
+
owningLifecycle
|
|
983
1003
|
).finally(() => {
|
|
984
1004
|
state.inFlight = undefined;
|
|
985
1005
|
});
|
|
@@ -994,13 +1014,17 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
994
1014
|
state: {
|
|
995
1015
|
closingAttempted: boolean;
|
|
996
1016
|
timersDisposed: boolean;
|
|
1017
|
+
serialDisposed: boolean;
|
|
997
1018
|
handlersDisposed: boolean;
|
|
1019
|
+
actorDispatchDisposed: boolean;
|
|
998
1020
|
nativeDisposed: boolean;
|
|
999
1021
|
locationReleased: boolean;
|
|
1000
1022
|
},
|
|
1001
|
-
deadline?: Date
|
|
1002
|
-
|
|
1023
|
+
deadline?: Date,
|
|
1024
|
+
owningLifecycle = false
|
|
1025
|
+
): Promise<unknown> {
|
|
1003
1026
|
const errors: unknown[] = [];
|
|
1027
|
+
let closingFailure: unknown;
|
|
1004
1028
|
const cleanup = async (operation: () => Promise<void> | void, completed: () => void) => {
|
|
1005
1029
|
try {
|
|
1006
1030
|
await operation();
|
|
@@ -1011,10 +1035,21 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
1011
1035
|
};
|
|
1012
1036
|
if (notifyClosing && !state.closingAttempted) {
|
|
1013
1037
|
state.closingAttempted = true;
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1038
|
+
try {
|
|
1039
|
+
// OnClosing is user code: it runs as a Framework turn through the
|
|
1040
|
+
// execution gate while the Close lifecycle item keeps its FIFO slot.
|
|
1041
|
+
await activation.serial.postBarrierTurn(() =>
|
|
1042
|
+
invokeSpotClosing(activation.spot.onClosing?.bind(activation.spot), reason, deadline)
|
|
1043
|
+
);
|
|
1044
|
+
} catch (error) {
|
|
1045
|
+
// An OnClosing failure is diagnostic and cleanup continues. It is
|
|
1046
|
+
// returned so host shutdown can classify its teardown outcome.
|
|
1047
|
+
this.options.closeErrorSink?.reportRuntimeTaskException(
|
|
1048
|
+
`spot ${String(activation.spotId)} onClosing`,
|
|
1049
|
+
error
|
|
1050
|
+
);
|
|
1051
|
+
closingFailure = error;
|
|
1052
|
+
}
|
|
1018
1053
|
}
|
|
1019
1054
|
if (!state.timersDisposed) {
|
|
1020
1055
|
await cleanup(
|
|
@@ -1024,23 +1059,34 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
1024
1059
|
}
|
|
1025
1060
|
);
|
|
1026
1061
|
}
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1062
|
+
if (!state.serialDisposed && state.timersDisposed) {
|
|
1063
|
+
await cleanup(
|
|
1064
|
+
() =>
|
|
1065
|
+
owningLifecycle
|
|
1066
|
+
? activation.serialExecutor.closeChildren()
|
|
1067
|
+
: activation.serialExecutor.close(),
|
|
1068
|
+
() => {
|
|
1069
|
+
state.serialDisposed = true;
|
|
1070
|
+
}
|
|
1071
|
+
);
|
|
1072
|
+
}
|
|
1031
1073
|
if (!state.handlersDisposed) {
|
|
1032
1074
|
await cleanup(
|
|
1033
|
-
() => disposeLifecycleHandlers(activation.spot),
|
|
1075
|
+
() => disposeLifecycleHandlers(activation.spot, this.options.detachedTaskRunner),
|
|
1034
1076
|
() => {
|
|
1035
1077
|
state.handlersDisposed = true;
|
|
1036
1078
|
}
|
|
1037
1079
|
);
|
|
1038
1080
|
}
|
|
1039
|
-
if (!state.
|
|
1081
|
+
if (!state.actorDispatchDisposed) {
|
|
1040
1082
|
await cleanup(
|
|
1041
1083
|
() => activation.actorDispatch?.dispose(),
|
|
1042
|
-
() =>
|
|
1084
|
+
() => {
|
|
1085
|
+
state.actorDispatchDisposed = true;
|
|
1086
|
+
}
|
|
1043
1087
|
);
|
|
1088
|
+
}
|
|
1089
|
+
if (!state.nativeDisposed) {
|
|
1044
1090
|
await cleanup(
|
|
1045
1091
|
() => activation.nativeSpot?.dispose(),
|
|
1046
1092
|
() => {
|
|
@@ -1048,7 +1094,21 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
1048
1094
|
}
|
|
1049
1095
|
);
|
|
1050
1096
|
}
|
|
1051
|
-
if (
|
|
1097
|
+
if (
|
|
1098
|
+
!state.locationReleased &&
|
|
1099
|
+
// Spot messaging §7 step 3: an Instance Spot's ExplicitClose releases its authority
|
|
1100
|
+
// through the Close operation's Closing fence; a User Spot still releases its location.
|
|
1101
|
+
!(
|
|
1102
|
+
owningLifecycle &&
|
|
1103
|
+
reason === ZLinkSpotCloseReason.ExplicitClose &&
|
|
1104
|
+
activation.domain.kind === 'instance'
|
|
1105
|
+
) &&
|
|
1106
|
+
state.timersDisposed &&
|
|
1107
|
+
state.serialDisposed &&
|
|
1108
|
+
state.handlersDisposed &&
|
|
1109
|
+
state.actorDispatchDisposed &&
|
|
1110
|
+
state.nativeDisposed
|
|
1111
|
+
) {
|
|
1052
1112
|
await cleanup(
|
|
1053
1113
|
() => this.options.releaseLocation(activation, locationMeshName, activation.spotId),
|
|
1054
1114
|
() => {
|
|
@@ -1060,6 +1120,7 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
1060
1120
|
if (errors.length > 1) {
|
|
1061
1121
|
throw new AggregateError(errors, `Spot '${activation.spotId}' cleanup failed.`);
|
|
1062
1122
|
}
|
|
1123
|
+
return closingFailure;
|
|
1063
1124
|
}
|
|
1064
1125
|
|
|
1065
1126
|
private decodeCreateReply(reply: unknown): unknown {
|
|
@@ -1079,12 +1140,3 @@ export class ZLinkSpotActivationLifecycle {
|
|
|
1079
1140
|
}
|
|
1080
1141
|
}
|
|
1081
1142
|
}
|
|
1082
|
-
|
|
1083
|
-
function toContextGeneration(generation: bigint): number {
|
|
1084
|
-
if (generation < 0n || generation > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
1085
|
-
throw new ZLinkConfigurationException(
|
|
1086
|
-
`Spot object generation '${generation}' cannot be represented by the Node.js public context.`
|
|
1087
|
-
);
|
|
1088
|
-
}
|
|
1089
|
-
return Number(generation);
|
|
1090
|
-
}
|
|
@@ -16,7 +16,6 @@ import { ZLinkSpotActivation } from './spot-activation-state';
|
|
|
16
16
|
import { ZLinkSpotActorJoinDispatch } from './spot-actor-join-dispatch';
|
|
17
17
|
import { ZLinkSpotActorPacketDispatch } from './spot-actor-packet-dispatch';
|
|
18
18
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
19
|
-
import type { ZLinkNativeActorJoinSnapshot } from './spot-runtime-ports';
|
|
20
19
|
|
|
21
20
|
type AdmissionOptions = Pick<
|
|
22
21
|
ZLinkSpotActivationLifecycleOptions,
|
|
@@ -30,7 +29,6 @@ type AdmissionOptions = Pick<
|
|
|
30
29
|
| 'locationClaim'
|
|
31
30
|
| 'messageSerializers'
|
|
32
31
|
| 'nativeSpotNodeProvider'
|
|
33
|
-
| 'createReceived'
|
|
34
32
|
| 'createTopicMessage'
|
|
35
33
|
| 'providerResolver'
|
|
36
34
|
| 'runtimeEventPublisher'
|
|
@@ -92,7 +90,6 @@ export class ZLinkSpotActorAdmissionCoordinator {
|
|
|
92
90
|
if (nativeSpot === undefined) return undefined;
|
|
93
91
|
const nativeDispatch = new ZLinkSpotActorJoinDispatch({
|
|
94
92
|
nativeSpot,
|
|
95
|
-
createReceived: requireBackendValueFactory(this.options.createReceived, 'Received'),
|
|
96
93
|
createTopicMessage: requireBackendValueFactory(
|
|
97
94
|
this.options.createTopicMessage,
|
|
98
95
|
'TopicMessage'
|
|
@@ -112,10 +109,9 @@ export class ZLinkSpotActorAdmissionCoordinator {
|
|
|
112
109
|
kind: 'enabled',
|
|
113
110
|
runtime: this.options.actorTransferRuntime
|
|
114
111
|
},
|
|
115
|
-
commitNativeActor: (actor) => this.commitNativeActorTransaction(activation, actor),
|
|
116
112
|
commitActorDeparture: (actorId) => activation.commitActorDeparture(actorId),
|
|
117
|
-
commitTransferredActor: (actor, backlog) =>
|
|
118
|
-
this.commitTransferredActorTransaction(activation, actor, backlog)
|
|
113
|
+
commitTransferredActor: (actor, backlog, sealedSession) =>
|
|
114
|
+
this.commitTransferredActorTransaction(activation, actor, backlog, sealedSession)
|
|
119
115
|
},
|
|
120
116
|
packets: {
|
|
121
117
|
handle: (delivery) =>
|
|
@@ -130,16 +126,6 @@ export class ZLinkSpotActorAdmissionCoordinator {
|
|
|
130
126
|
bindRemoteSession: (actor, sourceNodeRid, sourceSessionRid) => {
|
|
131
127
|
const node = this.options.nativeSpotNodeProvider?.(activation.meshName);
|
|
132
128
|
if (node === undefined || routingIdsEqual(sourceNodeRid, node.routingId)) return;
|
|
133
|
-
const target = this.options.boundSessionRuntime?.resolveRemoteBoundSessionTarget(
|
|
134
|
-
sourceNodeRid,
|
|
135
|
-
sourceSessionRid
|
|
136
|
-
);
|
|
137
|
-
if (target !== undefined) {
|
|
138
|
-
this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(
|
|
139
|
-
actor.actorId,
|
|
140
|
-
target
|
|
141
|
-
);
|
|
142
|
-
}
|
|
143
129
|
node.bindRemoteActorSession(actor, sourceNodeRid, sourceSessionRid);
|
|
144
130
|
},
|
|
145
131
|
replyNoBind: (info, parts, result) =>
|
|
@@ -251,8 +237,6 @@ export class ZLinkSpotActorAdmissionCoordinator {
|
|
|
251
237
|
: (activation.resolveJoinedActor(targetActorId) ??
|
|
252
238
|
this.options.actorResolver?.(targetActorId)),
|
|
253
239
|
actorLeft: (targetActorId) => activation.hasDepartedActor(targetActorId),
|
|
254
|
-
onRemoteBoundSessionTarget: (targetActorId, target) =>
|
|
255
|
-
this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(targetActorId, target),
|
|
256
240
|
onDisconnectActor: (actor) =>
|
|
257
241
|
activation.serial.execute(() => activation.spot.onDisconnectActor?.(actor)),
|
|
258
242
|
actorResponseSender: this.options.boundSessionRuntime?.sendActorResponse.bind(
|
|
@@ -275,47 +259,11 @@ export class ZLinkSpotActorAdmissionCoordinator {
|
|
|
275
259
|
);
|
|
276
260
|
}
|
|
277
261
|
|
|
278
|
-
private async commitNativeActorTransaction(
|
|
279
|
-
activation: ZLinkSpotActivation,
|
|
280
|
-
actor: ZLinkActor
|
|
281
|
-
): Promise<void> {
|
|
282
|
-
const transfer = this.options.actorTransferRuntime;
|
|
283
|
-
let snapshot: ZLinkNativeActorJoinSnapshot | undefined;
|
|
284
|
-
let rollbackMembership: (() => void) | undefined;
|
|
285
|
-
let routeSwitchStarted = false;
|
|
286
|
-
try {
|
|
287
|
-
snapshot = await transfer?.claimNativeActorLocation(
|
|
288
|
-
actor,
|
|
289
|
-
activation.spotId,
|
|
290
|
-
activation.meshName
|
|
291
|
-
);
|
|
292
|
-
transfer?.commitRoutedActor(actor, activation.spotId, activation.spot);
|
|
293
|
-
rollbackMembership = activation.commitActorJoin(actor);
|
|
294
|
-
activation.beginActorTransfer(actor.context.actorId);
|
|
295
|
-
await activation.serial.execute(() => activation.spot.onJoinedActor(actor));
|
|
296
|
-
routeSwitchStarted = true;
|
|
297
|
-
await transfer?.publishRoutedActorOwnership(actor);
|
|
298
|
-
await transfer?.openRoutedActorSession(actor);
|
|
299
|
-
activation.cancelActorTransfer(actor.context.actorId);
|
|
300
|
-
} catch (error) {
|
|
301
|
-
if (routeSwitchStarted) throw error;
|
|
302
|
-
rollbackMembership?.();
|
|
303
|
-
try {
|
|
304
|
-
if (snapshot !== undefined) await transfer?.rollbackNativeActorJoin(actor, snapshot);
|
|
305
|
-
} catch (rollbackError) {
|
|
306
|
-
throw new AggregateError(
|
|
307
|
-
[error, rollbackError],
|
|
308
|
-
'Native actor admission and rollback both failed.'
|
|
309
|
-
);
|
|
310
|
-
}
|
|
311
|
-
throw error;
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
|
|
315
262
|
private async commitTransferredActorTransaction(
|
|
316
263
|
activation: ZLinkSpotActivation,
|
|
317
264
|
actor: ZLinkActor,
|
|
318
|
-
backlog: readonly ZLinkActorHandoffPacket[]
|
|
265
|
+
backlog: readonly ZLinkActorHandoffPacket[],
|
|
266
|
+
sealedSession: ZLinkRemoteBoundSessionTarget | undefined
|
|
319
267
|
): Promise<readonly ZLinkActorHandoffResult[]> {
|
|
320
268
|
const transfer = this.options.actorTransferRuntime;
|
|
321
269
|
let routeSwitchStarted = false;
|
|
@@ -328,7 +276,7 @@ export class ZLinkSpotActorAdmissionCoordinator {
|
|
|
328
276
|
backlog.length === 0 ? [] : await this.replayActorBacklog(activation, actor, backlog);
|
|
329
277
|
await transfer?.claimRoutedActorLocation(actor, activation.spotId, activation.meshName);
|
|
330
278
|
routeSwitchStarted = true;
|
|
331
|
-
await transfer?.publishRoutedActorOwnership(actor);
|
|
279
|
+
await transfer?.publishRoutedActorOwnership(actor, sealedSession);
|
|
332
280
|
await transfer?.openRoutedActorSession(actor);
|
|
333
281
|
activation.cancelActorTransfer(actor.context.actorId);
|
|
334
282
|
return results;
|