@zlink-systems/framework 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +43 -33
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +244 -227
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +208 -219
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +0 -1
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +138 -130
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +73 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +215 -197
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/flow-context.ts +12 -3
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +95 -76
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +593 -563
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -37,26 +37,25 @@ class ZLinkSpotActivationRegistry {
|
|
|
37
37
|
: this.activations.get(key);
|
|
38
38
|
}
|
|
39
39
|
resolveUnique(spotId) {
|
|
40
|
-
const matches = [...this.activations.values()]
|
|
41
|
-
.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
&& !this.failedClose.has(spotActivationKey(activation.meshName, activation.spotId)));
|
|
40
|
+
const matches = [...this.activations.values()].filter((activation) => String(activation.spotId) === String(spotId) &&
|
|
41
|
+
!this.staged.has(spotActivationKey(activation.meshName, activation.spotId)) &&
|
|
42
|
+
!this.closing.has(spotActivationKey(activation.meshName, activation.spotId)) &&
|
|
43
|
+
!this.failedClose.has(spotActivationKey(activation.meshName, activation.spotId)));
|
|
45
44
|
return matches.length === 1 ? matches[0] : undefined;
|
|
46
45
|
}
|
|
47
46
|
has(meshName, spotId) {
|
|
48
47
|
const key = spotActivationKey(meshName, spotId);
|
|
49
|
-
return !this.staged.has(key)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
return (!this.staged.has(key) &&
|
|
49
|
+
!this.closing.has(key) &&
|
|
50
|
+
!this.failedClose.has(key) &&
|
|
51
|
+
this.activations.has(key));
|
|
53
52
|
}
|
|
54
53
|
canClose(meshName, spotId) {
|
|
55
54
|
const key = spotActivationKey(meshName, spotId);
|
|
56
|
-
return !this.staged.has(key)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
return (!this.staged.has(key) &&
|
|
56
|
+
!this.closing.has(key) &&
|
|
57
|
+
!this.failedClose.has(key) &&
|
|
58
|
+
this.activations.get(key)?.canClose() === true);
|
|
60
59
|
}
|
|
61
60
|
list(meshName) {
|
|
62
61
|
return [...this.activations.values()]
|
|
@@ -169,7 +168,9 @@ class ZLinkSpotActivationRegistry {
|
|
|
169
168
|
let occupiedAfterQuiescence = false;
|
|
170
169
|
const ready = Promise.resolve()
|
|
171
170
|
.then(() => close(activation))
|
|
172
|
-
.then(() => {
|
|
171
|
+
.then(() => {
|
|
172
|
+
completed = true;
|
|
173
|
+
})
|
|
173
174
|
.catch((error) => {
|
|
174
175
|
// The seal's post-quiescence recheck (spot-activation.ts
|
|
175
176
|
// closeAfterSeal) found a new join and released the seal instead of
|
|
@@ -52,7 +52,9 @@ class ZLinkSpotActivation {
|
|
|
52
52
|
this.spotType = options.spotType;
|
|
53
53
|
this.spot = options.spot;
|
|
54
54
|
this.serial = options.serial;
|
|
55
|
-
this.serialExecutor =
|
|
55
|
+
this.serialExecutor =
|
|
56
|
+
options.serialExecutor ??
|
|
57
|
+
new spot_serial_executor_1.ZLinkSpotSerialExecutor(this.serial, this.executionMode, options.spotId);
|
|
56
58
|
this.executionBarrier = options.executionBarrier ?? new execution_1.ZLinkExecutionBarrier();
|
|
57
59
|
this.serialExecutor.setExecutionBarrier(this.executionBarrier);
|
|
58
60
|
if (typeof options.timers.setExecutionBarrier === 'function') {
|
|
@@ -66,9 +68,7 @@ class ZLinkSpotActivation {
|
|
|
66
68
|
this.actorDispatch = options.actorDispatch;
|
|
67
69
|
}
|
|
68
70
|
get objectGeneration() {
|
|
69
|
-
return this.domain.kind === 'instance'
|
|
70
|
-
? this.domain.objectGeneration
|
|
71
|
-
: undefined;
|
|
71
|
+
return this.domain.kind === 'instance' ? this.domain.objectGeneration : undefined;
|
|
72
72
|
}
|
|
73
73
|
get executionMode() {
|
|
74
74
|
return this.domain.kind === 'user'
|
|
@@ -83,15 +83,15 @@ class ZLinkSpotActivation {
|
|
|
83
83
|
relocationReadyCall() {
|
|
84
84
|
return {
|
|
85
85
|
defer: () => {
|
|
86
|
-
if (this.relocationCoordinationMode !==
|
|
86
|
+
if (this.relocationCoordinationMode !==
|
|
87
|
+
contracts_1.ZLinkSpotRelocationCoordinationMode.ApplicationSignaled) {
|
|
87
88
|
throw new configuration_1.ZLinkConfigurationException('relocationReady().defer() requires ApplicationSignaled relocation readiness.');
|
|
88
89
|
}
|
|
89
90
|
if (!this.serial.isCurrentTurn) {
|
|
90
91
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, 'relocationReady().defer() requires the current Spot handler turn.');
|
|
91
92
|
}
|
|
92
93
|
const turnId = this.serial.activeTurnId;
|
|
93
|
-
if (this.relocationReadyDeferredTurnId === turnId
|
|
94
|
-
|| this.relocationBoundaryConsumed) {
|
|
94
|
+
if (this.relocationReadyDeferredTurnId === turnId || this.relocationBoundaryConsumed) {
|
|
95
95
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, 'relocationReady().defer() was already called for this boundary.');
|
|
96
96
|
}
|
|
97
97
|
this.relocationReadyDeferredTurnId = turnId;
|
|
@@ -106,7 +106,8 @@ class ZLinkSpotActivation {
|
|
|
106
106
|
return;
|
|
107
107
|
}
|
|
108
108
|
const seal = this.executionBarrier.seal();
|
|
109
|
-
void this.serial
|
|
109
|
+
void this.serial
|
|
110
|
+
.postBarrierTurn(async () => {
|
|
110
111
|
try {
|
|
111
112
|
await this.notifyRelocationReadyCompleted(contracts_1.ZLinkSpotRelocationReadyOutcome.Continued);
|
|
112
113
|
}
|
|
@@ -114,7 +115,8 @@ class ZLinkSpotActivation {
|
|
|
114
115
|
this.relocationReadyDeferredTurnId = undefined;
|
|
115
116
|
this.executionBarrier.abort(seal);
|
|
116
117
|
}
|
|
117
|
-
})
|
|
118
|
+
})
|
|
119
|
+
.catch(() => undefined);
|
|
118
120
|
}
|
|
119
121
|
};
|
|
120
122
|
}
|
|
@@ -274,12 +276,12 @@ class ZLinkSpotActivation {
|
|
|
274
276
|
return this.idleEvictionRequested;
|
|
275
277
|
}
|
|
276
278
|
isIdleFor(nowMs, timeoutMs) {
|
|
277
|
-
return !this.idleEvictionRequested
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
279
|
+
return (!this.idleEvictionRequested &&
|
|
280
|
+
!this.closeRequested &&
|
|
281
|
+
!this.serial.isExecuting &&
|
|
282
|
+
!this.serial.hasPendingWork &&
|
|
283
|
+
!this.timers.hasActiveTimers &&
|
|
284
|
+
nowMs - this.serial.lastActivityAt >= timeoutMs);
|
|
283
285
|
}
|
|
284
286
|
async notifyRelocationReadyCompleted(outcome) {
|
|
285
287
|
await this.spot.onRelocationReadyCompleted?.({ outcome });
|
|
@@ -27,7 +27,7 @@ class ZLinkSpotActivationLifecycle {
|
|
|
27
27
|
}
|
|
28
28
|
async materializeRelocation(meshName, objectKind, stableType, implementation, spotId, objectGeneration, authorityOwnerGeneration, signal) {
|
|
29
29
|
const executionMode = objectKind === 'user_spot'
|
|
30
|
-
? this.options.userSpotExecutionMode?.(meshName, implementation) ?? contracts_1.ZLinkUserSpotExecutionMode.SpotWide
|
|
30
|
+
? (this.options.userSpotExecutionMode?.(meshName, implementation) ?? contracts_1.ZLinkUserSpotExecutionMode.SpotWide)
|
|
31
31
|
: contracts_1.ZLinkUserSpotExecutionMode.SpotWide;
|
|
32
32
|
const serial = new spot_serial_turn_executor_1.ZLinkSpotSerialTurnExecutor(executionMode === contracts_1.ZLinkUserSpotExecutionMode.SpotWide, spotId);
|
|
33
33
|
const serialExecutor = new spot_serial_executor_1.ZLinkSpotSerialExecutor(serial, executionMode, spotId);
|
|
@@ -190,7 +190,7 @@ class ZLinkSpotActivationLifecycle {
|
|
|
190
190
|
timers,
|
|
191
191
|
actorHandlers,
|
|
192
192
|
handlers,
|
|
193
|
-
externalActorCount: () => this.options.actorCountProvider?.(spotId) ?? 0
|
|
193
|
+
externalActorCount: () => this.options.actorCountProvider?.(spotId) ?? 0
|
|
194
194
|
});
|
|
195
195
|
try {
|
|
196
196
|
await instance.configure?.();
|
|
@@ -243,14 +243,14 @@ class ZLinkSpotActivationLifecycle {
|
|
|
243
243
|
}
|
|
244
244
|
resourcesReleased(activation) {
|
|
245
245
|
const state = this.cleanupStates.get(activation);
|
|
246
|
-
return state?.timersDisposed === true &&
|
|
246
|
+
return (state?.timersDisposed === true &&
|
|
247
247
|
state.handlersDisposed === true &&
|
|
248
248
|
state.nativeDisposed === true &&
|
|
249
|
-
state.locationReleased === true;
|
|
249
|
+
state.locationReleased === true);
|
|
250
250
|
}
|
|
251
251
|
async create(meshName, spotType, spotId, request, signal, authority) {
|
|
252
|
-
const executionMode = this.options.userSpotExecutionMode?.(meshName, spotType)
|
|
253
|
-
|
|
252
|
+
const executionMode = this.options.userSpotExecutionMode?.(meshName, spotType) ??
|
|
253
|
+
contracts_1.ZLinkUserSpotExecutionMode.SpotWide;
|
|
254
254
|
const serial = new spot_serial_turn_executor_1.ZLinkSpotSerialTurnExecutor(executionMode === contracts_1.ZLinkUserSpotExecutionMode.SpotWide, spotId);
|
|
255
255
|
const serialExecutor = new spot_serial_executor_1.ZLinkSpotSerialExecutor(serial, executionMode, spotId);
|
|
256
256
|
const actorHandlers = new actors_1.ZLinkSpotActorHandlerRegistryRuntime();
|
|
@@ -332,7 +332,8 @@ class ZLinkSpotActivationLifecycle {
|
|
|
332
332
|
domain: {
|
|
333
333
|
kind: 'user',
|
|
334
334
|
executionMode,
|
|
335
|
-
relocationCoordinationMode: this.options.userSpotRelocationCoordinationMode?.(meshName, spotType) ??
|
|
335
|
+
relocationCoordinationMode: this.options.userSpotRelocationCoordinationMode?.(meshName, spotType) ??
|
|
336
|
+
contracts_1.ZLinkSpotRelocationCoordinationMode.FrameworkManaged
|
|
336
337
|
},
|
|
337
338
|
spotType,
|
|
338
339
|
spot,
|
|
@@ -410,14 +411,19 @@ class ZLinkSpotActivationLifecycle {
|
|
|
410
411
|
close: this.contextClose(meshName, spotId, () => activation)
|
|
411
412
|
});
|
|
412
413
|
spot = await (0, spot_provider_1.createFreshProviderInstance)(spotType, this.options.providerResolver, context);
|
|
413
|
-
Object.defineProperty(spot, 'context', {
|
|
414
|
+
Object.defineProperty(spot, 'context', {
|
|
415
|
+
configurable: true,
|
|
416
|
+
enumerable: false,
|
|
417
|
+
value: context
|
|
418
|
+
});
|
|
414
419
|
activation = new spot_activation_state_1.ZLinkSpotActivation({
|
|
415
420
|
meshName,
|
|
416
421
|
spotId,
|
|
417
422
|
domain: {
|
|
418
423
|
kind: 'user',
|
|
419
424
|
executionMode,
|
|
420
|
-
relocationCoordinationMode: this.options.userSpotRelocationCoordinationMode?.(meshName, spotType) ??
|
|
425
|
+
relocationCoordinationMode: this.options.userSpotRelocationCoordinationMode?.(meshName, spotType) ??
|
|
426
|
+
contracts_1.ZLinkSpotRelocationCoordinationMode.FrameworkManaged
|
|
421
427
|
},
|
|
422
428
|
spotType,
|
|
423
429
|
spot,
|
|
@@ -440,7 +446,9 @@ class ZLinkSpotActivationLifecycle {
|
|
|
440
446
|
if (activation?.serial.isExecuting === true && !activation.serial.isCurrentTurn) {
|
|
441
447
|
activation.requestClose();
|
|
442
448
|
const retry = activation.serial.post(() => this.options.closeSpot(meshName, spotId, signal));
|
|
443
|
-
this.options.detachedTaskRunner?.runDetached(`spot close ${String(spotId)}`, async () => {
|
|
449
|
+
this.options.detachedTaskRunner?.runDetached(`spot close ${String(spotId)}`, async () => {
|
|
450
|
+
await retry;
|
|
451
|
+
});
|
|
444
452
|
if (this.options.detachedTaskRunner === undefined) {
|
|
445
453
|
void retry.catch(() => undefined);
|
|
446
454
|
}
|
|
@@ -540,8 +548,9 @@ class ZLinkSpotActivationLifecycle {
|
|
|
540
548
|
this.cleanupStates.set(activation, state);
|
|
541
549
|
if (state.inFlight !== undefined)
|
|
542
550
|
return await state.inFlight;
|
|
543
|
-
state.inFlight = this.runCleanup(activation, locationMeshName, notifyClosing, reason, state, deadline)
|
|
544
|
-
|
|
551
|
+
state.inFlight = this.runCleanup(activation, locationMeshName, notifyClosing, reason, state, deadline).finally(() => {
|
|
552
|
+
state.inFlight = undefined;
|
|
553
|
+
});
|
|
545
554
|
return await state.inFlight;
|
|
546
555
|
}
|
|
547
556
|
async runCleanup(activation, locationMeshName, notifyClosing, reason, state, deadline) {
|
|
@@ -560,18 +569,26 @@ class ZLinkSpotActivationLifecycle {
|
|
|
560
569
|
await cleanup(() => (0, spot_closing_1.invokeSpotClosing)(activation.spot.onClosing?.bind(activation.spot), reason, deadline), () => undefined);
|
|
561
570
|
}
|
|
562
571
|
if (!state.timersDisposed) {
|
|
563
|
-
await cleanup(() => activation.timers.dispose(), () => {
|
|
572
|
+
await cleanup(() => activation.timers.dispose(), () => {
|
|
573
|
+
state.timersDisposed = true;
|
|
574
|
+
});
|
|
564
575
|
}
|
|
565
576
|
await cleanup(() => activation.serialExecutor.close(), () => undefined);
|
|
566
577
|
if (!state.handlersDisposed) {
|
|
567
|
-
await cleanup(() => (0, handler_instance_scope_1.disposeLifecycleHandlers)(activation.spot), () => {
|
|
578
|
+
await cleanup(() => (0, handler_instance_scope_1.disposeLifecycleHandlers)(activation.spot), () => {
|
|
579
|
+
state.handlersDisposed = true;
|
|
580
|
+
});
|
|
568
581
|
}
|
|
569
582
|
if (!state.nativeDisposed) {
|
|
570
583
|
await cleanup(() => activation.actorDispatch?.dispose(), () => undefined);
|
|
571
|
-
await cleanup(() => activation.nativeSpot?.dispose(), () => {
|
|
584
|
+
await cleanup(() => activation.nativeSpot?.dispose(), () => {
|
|
585
|
+
state.nativeDisposed = true;
|
|
586
|
+
});
|
|
572
587
|
}
|
|
573
588
|
if (!state.locationReleased) {
|
|
574
|
-
await cleanup(() => this.options.releaseLocation(activation, locationMeshName, activation.spotId), () => {
|
|
589
|
+
await cleanup(() => this.options.releaseLocation(activation, locationMeshName, activation.spotId), () => {
|
|
590
|
+
state.locationReleased = true;
|
|
591
|
+
});
|
|
575
592
|
}
|
|
576
593
|
if (errors.length === 1)
|
|
577
594
|
throw errors[0];
|
|
@@ -27,13 +27,15 @@ class ZLinkSpotActorAdmissionCoordinator {
|
|
|
27
27
|
actors: {
|
|
28
28
|
resolveActor: (actorId) => activation.hasDepartedActor(actorId)
|
|
29
29
|
? undefined
|
|
30
|
-
: activation.resolveJoinedActor(actorId) ?? this.options.actorResolver?.(actorId),
|
|
30
|
+
: (activation.resolveJoinedActor(actorId) ?? this.options.actorResolver?.(actorId)),
|
|
31
31
|
getTarget: () => activation.spot,
|
|
32
32
|
defaultAccept: false,
|
|
33
|
-
transfer: this.options.actorTransferRuntime === undefined
|
|
34
|
-
kind: '
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
transfer: this.options.actorTransferRuntime === undefined
|
|
34
|
+
? { kind: 'disabled' }
|
|
35
|
+
: {
|
|
36
|
+
kind: 'enabled',
|
|
37
|
+
runtime: this.options.actorTransferRuntime
|
|
38
|
+
},
|
|
37
39
|
commitNativeActor: (actor) => this.commitNativeActorTransaction(activation, actor),
|
|
38
40
|
commitActorDeparture: (actorId) => activation.commitActorDeparture(actorId),
|
|
39
41
|
commitTransferredActor: (actor, backlog) => this.commitTransferredActorTransaction(activation, actor, backlog)
|
|
@@ -50,7 +52,9 @@ class ZLinkSpotActorAdmissionCoordinator {
|
|
|
50
52
|
}
|
|
51
53
|
node.bindRemoteActorSession(actor, sourceNodeRid, sourceSessionRid);
|
|
52
54
|
},
|
|
53
|
-
replyNoBind: (info, parts, result) => this.options
|
|
55
|
+
replyNoBind: (info, parts, result) => this.options
|
|
56
|
+
.nativeSpotNodeProvider?.(activation.meshName)
|
|
57
|
+
?.replyActorNoBind(info, parts, result)
|
|
54
58
|
},
|
|
55
59
|
boundSessionRuntime: this.options.boundSessionRuntime,
|
|
56
60
|
messageSerializers: this.options.messageSerializers,
|
|
@@ -66,7 +70,7 @@ class ZLinkSpotActorAdmissionCoordinator {
|
|
|
66
70
|
}
|
|
67
71
|
/** @internal Dispatches a coordinator-owned replay without recapturing it. */
|
|
68
72
|
dispatchActorPacketDirect(activation, actorId, parts, returnResponse = false, remoteBoundSessionTarget, fallbackActorRef, requestTerminal) {
|
|
69
|
-
return activation.executeActor(actorId, actorSerial => this.dispatchActorPacketInActorTurn(activation, actorSerial, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal));
|
|
73
|
+
return activation.executeActor(actorId, (actorSerial) => this.dispatchActorPacketInActorTurn(activation, actorSerial, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal));
|
|
70
74
|
}
|
|
71
75
|
/**
|
|
72
76
|
* Atomically restores one durable packet prefix at the Actor FIFO tail.
|
|
@@ -76,13 +80,13 @@ class ZLinkSpotActorAdmissionCoordinator {
|
|
|
76
80
|
* @internal
|
|
77
81
|
*/
|
|
78
82
|
admitActorPacketPrefix(activation, actorId, records) {
|
|
79
|
-
const terminals = activation.admitActorDurablePrefix(actorId, records.map(record => ({
|
|
80
|
-
operation: executeChild => record.drain((parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef) => executeChild(actorSerial => this.dispatchActorPacketInActorTurn(activation, actorSerial, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef))),
|
|
83
|
+
const terminals = activation.admitActorDurablePrefix(actorId, records.map((record) => ({
|
|
84
|
+
operation: (executeChild) => record.drain((parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef) => executeChild((actorSerial) => this.dispatchActorPacketInActorTurn(activation, actorSerial, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef))),
|
|
81
85
|
preparation: record.preparation,
|
|
82
86
|
workOptions: { payloadBytes: record.payloadBytes }
|
|
83
87
|
})));
|
|
84
|
-
const terminal = Promise.allSettled(terminals).then(outcomes => {
|
|
85
|
-
const errors = outcomes.flatMap(outcome => outcome.status === 'rejected' ? [outcome.reason] : []);
|
|
88
|
+
const terminal = Promise.allSettled(terminals).then((outcomes) => {
|
|
89
|
+
const errors = outcomes.flatMap((outcome) => outcome.status === 'rejected' ? [outcome.reason] : []);
|
|
86
90
|
if (errors.length === 1)
|
|
87
91
|
throw errors[0];
|
|
88
92
|
if (errors.length > 1) {
|
|
@@ -99,7 +103,8 @@ class ZLinkSpotActorAdmissionCoordinator {
|
|
|
99
103
|
serial: actorSerial,
|
|
100
104
|
resolveActor: (targetActorId) => activation.hasDepartedActor(targetActorId)
|
|
101
105
|
? undefined
|
|
102
|
-
: activation.resolveJoinedActor(targetActorId) ??
|
|
106
|
+
: (activation.resolveJoinedActor(targetActorId) ??
|
|
107
|
+
this.options.actorResolver?.(targetActorId)),
|
|
103
108
|
actorLeft: (targetActorId) => activation.hasDepartedActor(targetActorId),
|
|
104
109
|
onRemoteBoundSessionTarget: (targetActorId, target) => this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(targetActorId, target),
|
|
105
110
|
onDisconnectActor: (actor) => activation.serial.execute(() => activation.spot.onDisconnectActor?.(actor)),
|
|
@@ -149,9 +154,7 @@ class ZLinkSpotActorAdmissionCoordinator {
|
|
|
149
154
|
activation.commitActorJoin(actor);
|
|
150
155
|
activation.beginActorTransfer(actor.context.actorId);
|
|
151
156
|
await activation.serial.execute(() => activation.spot.onJoinedActor(actor));
|
|
152
|
-
const results = backlog.length === 0
|
|
153
|
-
? []
|
|
154
|
-
: await this.replayActorBacklog(activation, actor, backlog);
|
|
157
|
+
const results = backlog.length === 0 ? [] : await this.replayActorBacklog(activation, actor, backlog);
|
|
155
158
|
await transfer?.claimRoutedActorLocation(actor, activation.spotId, activation.meshName);
|
|
156
159
|
routeSwitchStarted = true;
|
|
157
160
|
await transfer?.publishRoutedActorOwnership(actor);
|
|
@@ -58,9 +58,7 @@ class ZLinkSpotActorMembership {
|
|
|
58
58
|
this.options.entryNodeRidProvider?.() ??
|
|
59
59
|
this.options.entryNodeRid ??
|
|
60
60
|
this.options.nodeRid;
|
|
61
|
-
const entrySpotId = meshName === undefined
|
|
62
|
-
? undefined
|
|
63
|
-
: this.options.entrySpotIdProvider?.(meshName);
|
|
61
|
+
const entrySpotId = meshName === undefined ? undefined : this.options.entrySpotIdProvider?.(meshName);
|
|
64
62
|
const resolvedEntry = entrySpotId === undefined
|
|
65
63
|
? undefined
|
|
66
64
|
: await this.options.spotRouteResolver?.resolve(entrySpotId, signal);
|
|
@@ -39,9 +39,10 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
39
39
|
let requestDeadlineUnixMs;
|
|
40
40
|
try {
|
|
41
41
|
header = (0, protocol_1.decodeStreamHeader)((0, protocol_1.messageToBytes)(parts[0]), flowEnabled);
|
|
42
|
-
requestDeadlineUnixMs =
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
requestDeadlineUnixMs =
|
|
43
|
+
header.kind === protocol_1.ZLinkStreamMessageKind.Request
|
|
44
|
+
? (0, protocol_1.decodeActorRequestDeadlineUnixMs)((0, protocol_1.messageToBytes)(parts[0]))
|
|
45
|
+
: undefined;
|
|
45
46
|
}
|
|
46
47
|
catch (error) {
|
|
47
48
|
this.reportInvalidFrame(actorId, ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.ActorSend, error);
|
|
@@ -59,8 +60,8 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
59
60
|
header.name === actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
|
|
60
61
|
return undefined;
|
|
61
62
|
}
|
|
62
|
-
if (remoteBoundSessionTarget !== undefined
|
|
63
|
-
|
|
63
|
+
if (remoteBoundSessionTarget !== undefined &&
|
|
64
|
+
(0, actors_1.actorMessageFollowContext)(fallbackActorRef) === undefined) {
|
|
64
65
|
// A replayed handoff/Message Follow packet keeps its captured Session
|
|
65
66
|
// route solely for that packet's response. It cannot republish the
|
|
66
67
|
// predecessor route over a binding already confirmed by a later Actor
|
|
@@ -85,14 +86,14 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
85
86
|
});
|
|
86
87
|
}
|
|
87
88
|
async handleMissingActor(actorId, parts, header, messageKind, action, returnResponse, fallbackBoundSessionTarget, fallbackActorRef, requestTerminal) {
|
|
88
|
-
if (this.options.routeToActorJoinPrewarm !== undefined
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
if (this.options.routeToActorJoinPrewarm !== undefined &&
|
|
90
|
+
fallbackActorRef !== undefined &&
|
|
91
|
+
parts.length >= 2 &&
|
|
91
92
|
// A Request without a terminal has no way to complete once
|
|
92
93
|
// migrated later — parking it would leave the caller hanging
|
|
93
94
|
// forever with no reply route. Fall through to the existing
|
|
94
95
|
// missing-actor handling for that shape instead.
|
|
95
|
-
|
|
96
|
+
(messageKind !== ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.ActorRequest || requestTerminal !== undefined)) {
|
|
96
97
|
const parked = this.parkForActorJoinPrewarm(actorId, parts, messageKind, returnResponse, fallbackBoundSessionTarget, fallbackActorRef, requestTerminal);
|
|
97
98
|
if (parked !== undefined)
|
|
98
99
|
return parked;
|
|
@@ -111,7 +112,9 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
111
112
|
return undefined;
|
|
112
113
|
}
|
|
113
114
|
const missingActorError = (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorDispatchHandlerNotFound, `SPOT actor is not registered locally: ${actorId}`);
|
|
114
|
-
if (header.requestSeq !== undefined &&
|
|
115
|
+
if (header.requestSeq !== undefined &&
|
|
116
|
+
!returnResponse &&
|
|
117
|
+
this.options.actorErrorSender !== undefined) {
|
|
115
118
|
await this.options.actorErrorSender(actorId, header.name, header.requestSeq, missingActorError, header.metadata, fallbackBoundSessionTarget, fallbackActorRef);
|
|
116
119
|
return undefined;
|
|
117
120
|
}
|
|
@@ -177,9 +180,7 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
177
180
|
return () => (0, payload_codec_1.decodeFrameworkTypedPayloadMessage)(message, this.options.messageSerializers, undefined, (0, protocol_1.streamCodecContentType)(header.codec), header.name);
|
|
178
181
|
}
|
|
179
182
|
async dispatchActorPacket(actor, actorId, decodePayload, header, messageKind, action, returnResponse, fallbackBoundSessionTarget, fallbackActorRef, requestTerminal, requestDeadlineUnixMs, workOptions) {
|
|
180
|
-
const spot = typeof this.options.spot === 'function'
|
|
181
|
-
? this.options.spot()
|
|
182
|
-
: this.options.spot;
|
|
183
|
+
const spot = typeof this.options.spot === 'function' ? this.options.spot() : this.options.spot;
|
|
183
184
|
const dispatcher = new actors_1.ZLinkSpotActorDispatcher({
|
|
184
185
|
registry: this.options.registry,
|
|
185
186
|
spot,
|
|
@@ -192,9 +193,9 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
192
193
|
// A transferred backlog is returned to the Actor queue as one FIFO
|
|
193
194
|
// prefix. Check the request deadline when its owner turn actually
|
|
194
195
|
// starts, not when that prefix is admitted.
|
|
195
|
-
if (messageKind === ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.ActorRequest
|
|
196
|
-
|
|
197
|
-
|
|
196
|
+
if (messageKind === ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.ActorRequest &&
|
|
197
|
+
requestDeadlineUnixMs !== undefined &&
|
|
198
|
+
Date.now() >= requestDeadlineUnixMs) {
|
|
198
199
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Actor request '${actorId}' expired before handler admission.`);
|
|
199
200
|
}
|
|
200
201
|
(0, application_job_queue_scope_1.releaseApplicationJobPermitBeforeHandler)();
|
|
@@ -265,11 +266,13 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
265
266
|
this.options.dispatchErrors?.report({
|
|
266
267
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotActor,
|
|
267
268
|
messageKind,
|
|
268
|
-
reason: error instanceof contracts_1.ZLinkFrameworkException
|
|
269
|
-
|
|
269
|
+
reason: error instanceof contracts_1.ZLinkFrameworkException &&
|
|
270
|
+
(0, framework_errors_internal_1.internalFrameworkErrorKind)(error) ===
|
|
271
|
+
framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorDispatchHandlerNotFound
|
|
270
272
|
? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerMissing
|
|
271
|
-
: error instanceof contracts_1.ZLinkFrameworkException
|
|
272
|
-
|
|
273
|
+
: error instanceof contracts_1.ZLinkFrameworkException &&
|
|
274
|
+
(0, framework_errors_internal_1.internalFrameworkErrorKind)(error) ===
|
|
275
|
+
framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed
|
|
273
276
|
? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.PayloadDecodeFailed
|
|
274
277
|
: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException,
|
|
275
278
|
action,
|
|
@@ -102,15 +102,15 @@ class ZLinkSpotActorPacketDrain {
|
|
|
102
102
|
this.continuations.clear();
|
|
103
103
|
}
|
|
104
104
|
createNoBindReplyInfo(actor, sourceNodeRid, sourceSessionRid, requestId, flags, parts) {
|
|
105
|
-
if (actor === undefined
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
105
|
+
if (actor === undefined ||
|
|
106
|
+
sourceNodeRid === undefined ||
|
|
107
|
+
sourceSessionRid === undefined ||
|
|
108
|
+
requestId === undefined ||
|
|
109
|
+
requestId === 0n ||
|
|
110
|
+
flags === undefined ||
|
|
111
|
+
(flags & ZLINK_SPOT_ACTOR_RECV_INFO_NO_BIND) === 0 ||
|
|
112
|
+
this.options.replyActorNoBind === undefined ||
|
|
113
|
+
!this.isActorRequest(parts)) {
|
|
114
114
|
return undefined;
|
|
115
115
|
}
|
|
116
116
|
return { actor, sourceNodeRid, sourceSessionRid, requestId, flags };
|
|
@@ -138,7 +138,9 @@ class ZLinkSpotActorPacketDrain {
|
|
|
138
138
|
this.options.replyActorNoBind?.(info, [this.encodeActorReplyFrame(parts[0], protocol_1.ZLinkStreamMessageKind.Response, response)], runtime_values_1.RequestResult.Ok);
|
|
139
139
|
}
|
|
140
140
|
catch (error) {
|
|
141
|
-
this.options.replyActorNoBind?.(info, [
|
|
141
|
+
this.options.replyActorNoBind?.(info, [
|
|
142
|
+
this.encodeActorReplyFrame(parts[0], protocol_1.ZLinkStreamMessageKind.Error, frameworkErrorPayload(error))
|
|
143
|
+
], runtime_values_1.RequestResult.Ok);
|
|
142
144
|
}
|
|
143
145
|
}
|
|
144
146
|
encodeActorReplyFrame(requestHeaderPart, kind, payload) {
|
|
@@ -59,8 +59,8 @@ class ZLinkSpotActorPacketRelayDispatch {
|
|
|
59
59
|
}
|
|
60
60
|
return true;
|
|
61
61
|
}
|
|
62
|
-
if (actorPacketRelay.messageFollowContext?.deadlineUnixMs !== undefined
|
|
63
|
-
|
|
62
|
+
if (actorPacketRelay.messageFollowContext?.deadlineUnixMs !== undefined &&
|
|
63
|
+
Date.now() >= actorPacketRelay.messageFollowContext.deadlineUnixMs) {
|
|
64
64
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Actor request '${actorPacketRelay.actorId}' expired before target handler admission.`);
|
|
65
65
|
}
|
|
66
66
|
// Spec 28 §5.2/§10 — a Message Follow relay is a one-way send that
|
|
@@ -71,9 +71,9 @@ class ZLinkSpotActorPacketRelayDispatch {
|
|
|
71
71
|
// actorErrorSender instead of returning it locally, where it would
|
|
72
72
|
// be discarded. Non-follow relays keep the synchronous-return path.
|
|
73
73
|
const outerReplyable = (0, spot_route_replies_1.hasReplyToken)(received.replyToken);
|
|
74
|
-
const followedBoundSessionReply = !outerReplyable
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
const followedBoundSessionReply = !outerReplyable &&
|
|
75
|
+
actorPacketRelay.messageFollowContext !== undefined &&
|
|
76
|
+
remoteBoundSessionTarget !== undefined;
|
|
77
77
|
const response = await this.options.actorPacketHandler({
|
|
78
78
|
actorId: actorPacketRelay.actorId,
|
|
79
79
|
parts: [header, payload],
|
|
@@ -83,7 +83,11 @@ class ZLinkSpotActorPacketRelayDispatch {
|
|
|
83
83
|
});
|
|
84
84
|
const actorPacketTarget = this.actorPacketTarget(actorPacketRelay.actorId);
|
|
85
85
|
if ((0, spot_route_replies_1.hasReplyToken)(received.replyToken)) {
|
|
86
|
-
(0, spot_route_replies_1.submitSpotRouteBridgeReply)(received, actorPacketRelay.envelope, {
|
|
86
|
+
(0, spot_route_replies_1.submitSpotRouteBridgeReply)(received, actorPacketRelay.envelope, {
|
|
87
|
+
ok: true,
|
|
88
|
+
response,
|
|
89
|
+
actorPacketTarget
|
|
90
|
+
});
|
|
87
91
|
}
|
|
88
92
|
return true;
|
|
89
93
|
}
|
|
@@ -5,15 +5,11 @@ const DEFAULT_CLEANUP_TIMEOUT_MS = 30_000;
|
|
|
5
5
|
async function invokeSpotClosing(callback, reason, cleanupDeadline = DEFAULT_CLEANUP_TIMEOUT_MS) {
|
|
6
6
|
if (callback === undefined)
|
|
7
7
|
return;
|
|
8
|
-
const deadline = new Date(cleanupDeadline instanceof Date
|
|
9
|
-
|
|
10
|
-
: Date.now() + cleanupDeadline);
|
|
11
|
-
const timeoutMs = Math.max(0, cleanupDeadline instanceof Date
|
|
12
|
-
? cleanupDeadline.getTime() - Date.now()
|
|
13
|
-
: cleanupDeadline);
|
|
8
|
+
const deadline = new Date(cleanupDeadline instanceof Date ? cleanupDeadline.getTime() : Date.now() + cleanupDeadline);
|
|
9
|
+
const timeoutMs = Math.max(0, cleanupDeadline instanceof Date ? cleanupDeadline.getTime() - Date.now() : cleanupDeadline);
|
|
14
10
|
const controller = new AbortController();
|
|
15
11
|
let timer;
|
|
16
|
-
const expired = new Promise(resolve => {
|
|
12
|
+
const expired = new Promise((resolve) => {
|
|
17
13
|
timer = setTimeout(() => {
|
|
18
14
|
controller.abort();
|
|
19
15
|
resolve();
|
|
@@ -44,11 +44,11 @@ function createSpotContext(options) {
|
|
|
44
44
|
},
|
|
45
45
|
relocationReady: () => {
|
|
46
46
|
options.ensureOperationAllowed?.();
|
|
47
|
-
return options.relocationReady?.() ?? {
|
|
47
|
+
return (options.relocationReady?.() ?? {
|
|
48
48
|
defer() {
|
|
49
49
|
throw new configuration_1.ZLinkConfigurationException('Spot relocation readiness is not configured for application signaling.');
|
|
50
50
|
}
|
|
51
|
-
};
|
|
51
|
+
});
|
|
52
52
|
},
|
|
53
53
|
leaveActor: (actor, signal) => {
|
|
54
54
|
options.ensureOperationAllowed?.();
|
|
@@ -191,8 +191,7 @@ class ZLinkEntrySpotActivation {
|
|
|
191
191
|
}
|
|
192
192
|
notifyCreateActor(actor, createRequest, signal) {
|
|
193
193
|
(0, abort_1.throwIfAborted)(signal);
|
|
194
|
-
return this.serial.execute(async () => await this.entrySpot.onCreateActor?.(actor, createRequest)
|
|
195
|
-
?? { accepted: true });
|
|
194
|
+
return this.serial.execute(async () => (await this.entrySpot.onCreateActor?.(actor, createRequest)) ?? { accepted: true });
|
|
196
195
|
}
|
|
197
196
|
notifyJoinActor(actor, signal) {
|
|
198
197
|
(0, abort_1.throwIfAborted)(signal);
|
|
@@ -231,10 +230,12 @@ class ZLinkEntrySpotActivation {
|
|
|
231
230
|
resolveActor: (actorId) => this.options.entryActorRuntime?.resolveActor(actorId),
|
|
232
231
|
getTarget: () => this.entrySpot,
|
|
233
232
|
defaultAccept: true,
|
|
234
|
-
transfer: this.options.actorTransferRuntime === undefined
|
|
235
|
-
kind: '
|
|
236
|
-
|
|
237
|
-
|
|
233
|
+
transfer: this.options.actorTransferRuntime === undefined
|
|
234
|
+
? { kind: 'disabled' }
|
|
235
|
+
: {
|
|
236
|
+
kind: 'enabled',
|
|
237
|
+
runtime: this.options.actorTransferRuntime
|
|
238
|
+
},
|
|
238
239
|
commitNativeActor: (actor) => this.commitEntryActorTransaction(actor),
|
|
239
240
|
commitTransferredActor: async (actor, backlog) => {
|
|
240
241
|
await this.commitEntryActorTransaction(actor);
|
|
@@ -247,8 +248,8 @@ class ZLinkEntrySpotActivation {
|
|
|
247
248
|
if ((0, routing_id_1.routingIdsEqual)(sourceNodeRid, this.options.nativeNode.routingId)) {
|
|
248
249
|
return;
|
|
249
250
|
}
|
|
250
|
-
const target = declaredTarget
|
|
251
|
-
|
|
251
|
+
const target = declaredTarget ??
|
|
252
|
+
this.options.boundSessionRuntime?.resolveRemoteBoundSessionTarget(sourceNodeRid, sourceSessionRid);
|
|
252
253
|
if (target !== undefined) {
|
|
253
254
|
this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(actor.actorId, {
|
|
254
255
|
...target,
|
|
@@ -325,9 +326,7 @@ class ZLinkEntrySpotActivation {
|
|
|
325
326
|
exports.ZLinkEntrySpotActivation = ZLinkEntrySpotActivation;
|
|
326
327
|
function notifyEntryActorJoined(entrySpot, actor) {
|
|
327
328
|
const callback = entrySpot.onJoinedActor;
|
|
328
|
-
return callback === undefined
|
|
329
|
-
? Promise.resolve()
|
|
330
|
-
: callback.call(entrySpot, actor);
|
|
329
|
+
return callback === undefined ? Promise.resolve() : callback.call(entrySpot, actor);
|
|
331
330
|
}
|
|
332
331
|
function toContextGeneration(generation) {
|
|
333
332
|
if (generation < 0n || generation > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
@@ -336,7 +335,7 @@ function toContextGeneration(generation) {
|
|
|
336
335
|
return Number(generation);
|
|
337
336
|
}
|
|
338
337
|
function entrySpotGeneration(spot) {
|
|
339
|
-
return spot.lifecycleGeneration
|
|
340
|
-
|
|
341
|
-
|
|
338
|
+
return (spot.lifecycleGeneration ??
|
|
339
|
+
spot.status?.().lifecycleGeneration ??
|
|
340
|
+
0n);
|
|
342
341
|
}
|
|
@@ -17,14 +17,17 @@ function createSpotHandle(spotId, initialOrRefresh, refresh) {
|
|
|
17
17
|
}
|
|
18
18
|
async function resolveSpotHandle(handle, signal) {
|
|
19
19
|
const state = requireHandleState(handle);
|
|
20
|
-
return state.current ?? await refreshSpotHandle(handle, signal);
|
|
20
|
+
return state.current ?? (await refreshSpotHandle(handle, signal));
|
|
21
21
|
}
|
|
22
22
|
async function refreshSpotHandle(handle, signal) {
|
|
23
23
|
const state = requireHandleState(handle);
|
|
24
|
-
state.refreshing ??= state
|
|
24
|
+
state.refreshing ??= state
|
|
25
|
+
.refresh(signal)
|
|
26
|
+
.then((resolved) => {
|
|
25
27
|
state.current = resolved;
|
|
26
28
|
return resolved;
|
|
27
|
-
})
|
|
29
|
+
})
|
|
30
|
+
.finally(() => {
|
|
28
31
|
state.refreshing = undefined;
|
|
29
32
|
});
|
|
30
33
|
return await state.refreshing;
|