@zlink-systems/framework 0.21.0 → 0.23.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/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
- 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 +28 -22
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
- package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
- 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 +160 -130
- 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/contracts/index.d.ts +1 -0
- 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.d.ts +3 -0
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
- 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 +12 -20
- 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 +46 -42
- 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.d.ts +1 -0
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
- 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/dispatch-error-details.d.ts +6 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
- package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
- package/dist/runtime/diagnostics/flow-context.js +2 -2
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +58 -42
- 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 -27
- 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.d.ts +4 -2
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
- 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-session-binding-ingress-port.d.ts +1 -0
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
- package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
- package/dist/runtime/foundation/service-topology-registry.js +105 -96
- 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 +245 -228
- 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/protocol/service_wire_pilot_codec.generated.js +20 -18
- 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 +209 -220
- 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.d.ts +2 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
- package/dist/runtime/spots/spot-actor-packet-drain.js +14 -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 +79 -86
- 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 +17 -15
- 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 +2 -3
- 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 +6 -6
- package/dist/runtime/spots/spot-timer.js +26 -30
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
- package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
- package/dist/runtime/streams/bound-session-response-target.js +8 -1
- package/dist/runtime/streams/bound-session-service.d.ts +1 -0
- package/dist/runtime/streams/bound-session-service.js +14 -12
- package/dist/runtime/streams/index.js +28 -20
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +52 -31
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.d.ts +5 -1
- package/dist/runtime/streams/protocol.js +68 -20
- package/dist/runtime/streams/session-actor-coordinator.js +37 -41
- package/dist/runtime/streams/session-context.d.ts +9 -2
- package/dist/runtime/streams/session-context.js +50 -32
- package/dist/runtime/streams/session-local-actors.d.ts +3 -1
- package/dist/runtime/streams/session-local-actors.js +17 -2
- 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.d.ts +1 -1
- package/dist/runtime/streams/stream-frame-factory.js +14 -7
- package/dist/runtime/streams/stream-session-runtime.js +112 -78
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +3 -3
- 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 +2 -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 +2 -2
- 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 +142 -134
- 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 +1 -32
- 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 +353 -326
- 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 +77 -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 +370 -390
- 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 +44 -44
- 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 +218 -206
- 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 +12 -47
- 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/dispatch-error-details.ts +62 -0
- package/src/runtime/diagnostics/flow-context.ts +18 -7
- 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 +107 -79
- 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 -55
- 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 +364 -396
- 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 +2 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +170 -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 +19 -18
- 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 +595 -564
- 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 +196 -148
- package/src/runtime/spots/spot-actor-packet-drain.ts +56 -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 +235 -222
- 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 +129 -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 +13 -18
- 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 +58 -47
- package/src/runtime/spots/spot-timer.ts +103 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
- package/src/runtime/streams/bound-session-response-target.ts +39 -9
- package/src/runtime/streams/bound-session-service.ts +52 -42
- package/src/runtime/streams/index.ts +183 -100
- package/src/runtime/streams/managed-stream.ts +123 -90
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +115 -46
- package/src/runtime/streams/session-actor-coordinator.ts +109 -93
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +96 -51
- package/src/runtime/streams/session-local-actors.ts +19 -3
- 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 +59 -40
- package/src/runtime/streams/stream-session-runtime.ts +317 -214
- package/src/runtime/workers/index.ts +68 -29
|
@@ -33,8 +33,7 @@ class ZLinkActorPacketRelay {
|
|
|
33
33
|
const node = options.spotNodeRuntime()?.primaryMeshNode;
|
|
34
34
|
return node === undefined ? undefined : String(node.status().routingId);
|
|
35
35
|
},
|
|
36
|
-
spotRouterChannelIdForMesh: spotRouterChannelIdByMesh?.call(options.meshRouters)
|
|
37
|
-
?? ((meshName) => meshName)
|
|
36
|
+
spotRouterChannelIdForMesh: spotRouterChannelIdByMesh?.call(options.meshRouters) ?? ((meshName) => meshName)
|
|
38
37
|
});
|
|
39
38
|
}
|
|
40
39
|
async notifyBoundActorDisconnected(actor, signal) {
|
|
@@ -43,9 +42,9 @@ class ZLinkActorPacketRelay {
|
|
|
43
42
|
? undefined
|
|
44
43
|
: (0, actor_runtime_state_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget);
|
|
45
44
|
const currentRemoteActorPacketTarget = state?.spotId === undefined ? undefined : state.remoteActorPacketTarget;
|
|
46
|
-
const remoteTarget = currentRemoteBoundSessionTarget
|
|
47
|
-
??
|
|
48
|
-
|
|
45
|
+
const remoteTarget = currentRemoteBoundSessionTarget ??
|
|
46
|
+
currentRemoteActorPacketTarget ??
|
|
47
|
+
(state?.spotId === undefined ? undefined : this.targets.cachedTargetForActor(actor));
|
|
49
48
|
if (remoteTarget !== undefined) {
|
|
50
49
|
await this.notifyRemoteActorDisconnected(actor.actorId, remoteTarget, signal, actor.ref);
|
|
51
50
|
return;
|
|
@@ -76,7 +75,7 @@ class ZLinkActorPacketRelay {
|
|
|
76
75
|
const state = this.options.actorManager()?.getState(actorId);
|
|
77
76
|
const remoteTarget = state === undefined
|
|
78
77
|
? undefined
|
|
79
|
-
: (0, actor_runtime_state_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget) ?? state.remoteActorPacketTarget;
|
|
78
|
+
: ((0, actor_runtime_state_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget) ?? state.remoteActorPacketTarget);
|
|
80
79
|
if (remoteTarget !== undefined) {
|
|
81
80
|
await this.notifyRemoteActorDisconnected(actorId, remoteTarget, signal);
|
|
82
81
|
return;
|
|
@@ -119,19 +118,16 @@ class ZLinkActorPacketRelay {
|
|
|
119
118
|
const frameHeader = (0, protocol_1.decodeStreamHeader)((0, protocol_1.messageToBytes)(header), this.options.flowCreationEnabled?.() ?? true);
|
|
120
119
|
const messageFollowContext = relay.messageFollowContext;
|
|
121
120
|
if (messageFollowContext !== undefined) {
|
|
122
|
-
if (messageFollowContext.deadlineUnixMs !== undefined
|
|
123
|
-
|
|
121
|
+
if (messageFollowContext.deadlineUnixMs !== undefined &&
|
|
122
|
+
Date.now() >= messageFollowContext.deadlineUnixMs) {
|
|
124
123
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Actor request '${relay.actorId}' exceeded its Message Follow deadline.`);
|
|
125
124
|
}
|
|
126
125
|
(0, actor_message_follow_context_1.verifyActorMessageFollowPayload)(messageFollowContext, [header, body]);
|
|
127
126
|
}
|
|
128
127
|
const relayNodeRid = relay.actorNodeRid ?? relay.bindingActorNodeRid;
|
|
129
|
-
const relayNodeRidHex = relay.actorNodeRid === undefined
|
|
130
|
-
? relay.bindingActorNodeRidHex
|
|
131
|
-
: relay.actorNodeRidHex;
|
|
128
|
+
const relayNodeRidHex = relay.actorNodeRid === undefined ? relay.bindingActorNodeRidHex : relay.actorNodeRidHex;
|
|
132
129
|
const relayGeneration = relay.actorGeneration ?? relay.bindingActorGeneration;
|
|
133
|
-
const fallbackActorRef = relayNodeRid === undefined
|
|
134
|
-
|| relayGeneration === undefined
|
|
130
|
+
const fallbackActorRef = relayNodeRid === undefined || relayGeneration === undefined
|
|
135
131
|
? undefined
|
|
136
132
|
: messageFollowContext === undefined
|
|
137
133
|
? {
|
|
@@ -190,7 +186,10 @@ class ZLinkActorPacketRelay {
|
|
|
190
186
|
}
|
|
191
187
|
if (frameHeader.name === actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
|
|
192
188
|
this.requireCurrentRemoteBinding(relay, _routeContext);
|
|
193
|
-
this.options
|
|
189
|
+
this.options
|
|
190
|
+
.actorManager()
|
|
191
|
+
?.getState(relay.actorId)
|
|
192
|
+
?.setRemoteBoundSessionTarget(undefined);
|
|
194
193
|
await this.notifyLocalActorDisconnectedById(relay.actorId);
|
|
195
194
|
return {
|
|
196
195
|
ok: true,
|
|
@@ -219,7 +218,9 @@ class ZLinkActorPacketRelay {
|
|
|
219
218
|
await dispatch;
|
|
220
219
|
}
|
|
221
220
|
catch (error) {
|
|
222
|
-
this.options
|
|
221
|
+
this.options
|
|
222
|
+
.errorSink()
|
|
223
|
+
.reportRuntimeTaskException('remote actor packet relay', error);
|
|
223
224
|
}
|
|
224
225
|
finally {
|
|
225
226
|
header.close();
|
|
@@ -231,9 +232,9 @@ class ZLinkActorPacketRelay {
|
|
|
231
232
|
actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId, relay.routerChannelId))
|
|
232
233
|
};
|
|
233
234
|
}
|
|
234
|
-
if (frameHeader.kind === protocol_1.ZLinkStreamMessageKind.Request
|
|
235
|
-
|
|
236
|
-
|
|
235
|
+
if (frameHeader.kind === protocol_1.ZLinkStreamMessageKind.Request &&
|
|
236
|
+
frameHeader.requestSeq !== undefined &&
|
|
237
|
+
relay.returnResponse !== true) {
|
|
237
238
|
const dispatch = state?.spotId === undefined
|
|
238
239
|
? this.requireSpotNodeRuntime().dispatchEntryActorPacket(relay.actorId, [header, body], false, remoteBoundSessionTarget, fallbackActorRef)
|
|
239
240
|
: this.requireSpotManager().dispatchRoutedActorPacket(state.spotId, relay.actorId, [header, body], false, remoteBoundSessionTarget, fallbackActorRef);
|
|
@@ -241,7 +242,8 @@ class ZLinkActorPacketRelay {
|
|
|
241
242
|
const deferredPacketName = frameHeader.name;
|
|
242
243
|
const deferredRequestSeq = frameHeader.requestSeq;
|
|
243
244
|
const deferredMetadata = frameHeader.metadata;
|
|
244
|
-
void dispatch
|
|
245
|
+
void dispatch
|
|
246
|
+
.catch(async (error) => {
|
|
245
247
|
// Spec 32 §5 — an accepted Request must end in exactly one
|
|
246
248
|
// terminal completion. deferredResponse already told the source
|
|
247
249
|
// the reply will arrive on the bound-session route, so a routed
|
|
@@ -251,18 +253,21 @@ class ZLinkActorPacketRelay {
|
|
|
251
253
|
// past that boundary already produce their own terminal through
|
|
252
254
|
// the inner actorErrorSender path — also sending here would emit
|
|
253
255
|
// a duplicate terminal for the same requestSeq.
|
|
254
|
-
if (error instanceof ConfigurationException_1.ZLinkConfigurationException
|
|
255
|
-
|
|
256
|
+
if (error instanceof ConfigurationException_1.ZLinkConfigurationException &&
|
|
257
|
+
this.options.actorErrorSender !== undefined) {
|
|
256
258
|
try {
|
|
257
259
|
await this.options.actorErrorSender(relay.actorId, deferredPacketName, deferredRequestSeq, error, deferredMetadata, remoteBoundSessionTarget, fallbackActorRef);
|
|
258
260
|
return;
|
|
259
261
|
}
|
|
260
262
|
catch (sendFailure) {
|
|
261
|
-
this.options
|
|
263
|
+
this.options
|
|
264
|
+
.errorSink()
|
|
265
|
+
.reportRuntimeTaskException('remote actor packet relay error reply', sendFailure);
|
|
262
266
|
}
|
|
263
267
|
}
|
|
264
268
|
this.options.errorSink().reportRuntimeTaskException('remote actor packet relay', error);
|
|
265
|
-
})
|
|
269
|
+
})
|
|
270
|
+
.finally(() => {
|
|
266
271
|
header.close();
|
|
267
272
|
body.close();
|
|
268
273
|
});
|
|
@@ -314,14 +319,12 @@ class ZLinkActorPacketRelay {
|
|
|
314
319
|
return await this.relayLocalActorPacket(actor, frameHeader, payload, signal);
|
|
315
320
|
}
|
|
316
321
|
catch (error) {
|
|
317
|
-
if (!(error instanceof Error
|
|
318
|
-
|
|
319
|
-
|| performance.now() >= fenceRetryDeadlineMs) {
|
|
322
|
+
if (!(error instanceof Error && error.message.includes('no complete Ready authority fence')) ||
|
|
323
|
+
performance.now() >= fenceRetryDeadlineMs) {
|
|
320
324
|
throw error;
|
|
321
325
|
}
|
|
322
326
|
this.targets.clear(actor.actorId);
|
|
323
|
-
this.options.actorManager()?.getState(actor.actorId)
|
|
324
|
-
?.setRemoteActorPacketTarget(undefined);
|
|
327
|
+
this.options.actorManager()?.getState(actor.actorId)?.setRemoteActorPacketTarget(undefined);
|
|
325
328
|
await new Promise((resolve) => setTimeout(resolve, 25));
|
|
326
329
|
}
|
|
327
330
|
}
|
|
@@ -351,7 +354,8 @@ class ZLinkActorPacketRelay {
|
|
|
351
354
|
return;
|
|
352
355
|
}
|
|
353
356
|
const reply = await this.requestRemoteTarget(withDefaultSpotKind(target), request, `Remote actor session binding is not available for '${actor.actorId}'.`, (parts) => JSON.parse(parts[0]?.getString('utf8') ?? '{}'), signal);
|
|
354
|
-
if (reply.ok === false ||
|
|
357
|
+
if (reply.ok === false ||
|
|
358
|
+
(reply.response?.acknowledged !== true && reply.acknowledged !== true)) {
|
|
355
359
|
// An {ok:false} (or unacknowledged) reply here is an immediate remote
|
|
356
360
|
// rejection — the transport wait itself throws on timeout — so spec 32
|
|
357
361
|
// reserves DeadlineExceeded for the deadline path and this reply
|
|
@@ -359,8 +363,7 @@ class ZLinkActorPacketRelay {
|
|
|
359
363
|
// reply's errorKind when it carries a valid framework kind, else
|
|
360
364
|
// RequestFailed, matching how other acknowledged relay replies map
|
|
361
365
|
// {ok:false} (actorRelayError / remoteRelayErrorKind).
|
|
362
|
-
const remoteKind = Object.values(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind)
|
|
363
|
-
.includes(reply.errorKind)
|
|
366
|
+
const remoteKind = Object.values(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind).includes(reply.errorKind)
|
|
364
367
|
? reply.errorKind
|
|
365
368
|
: framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed;
|
|
366
369
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(remoteKind, `Actor '${actor.actorId}' did not acknowledge its remote session binding: ${JSON.stringify(reply)}`, reply.error);
|
|
@@ -368,7 +371,9 @@ class ZLinkActorPacketRelay {
|
|
|
368
371
|
}
|
|
369
372
|
async retryRemoteSessionBindingSend(target, request, deadline, delayMs) {
|
|
370
373
|
try {
|
|
371
|
-
await this.options.routeTransport.sendToSpot(target, request, {
|
|
374
|
+
await this.options.routeTransport.sendToSpot(target, request, {
|
|
375
|
+
packetName: actors_1.ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET
|
|
376
|
+
});
|
|
372
377
|
}
|
|
373
378
|
catch (error) {
|
|
374
379
|
if (performance.now() >= deadline) {
|
|
@@ -376,7 +381,9 @@ class ZLinkActorPacketRelay {
|
|
|
376
381
|
// exhaustion on the one-way bind send remains diagnostics-only but
|
|
377
382
|
// the caller waits for its bounded submission terminal so later
|
|
378
383
|
// application relay cannot overtake it.
|
|
379
|
-
this.options
|
|
384
|
+
this.options
|
|
385
|
+
.errorSink()
|
|
386
|
+
.reportRuntimeTaskException('remote session binding send', (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, 'Remote actor session binding send retries exceeded their deadline.', error));
|
|
380
387
|
return;
|
|
381
388
|
}
|
|
382
389
|
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
@@ -390,18 +397,16 @@ class ZLinkActorPacketRelay {
|
|
|
390
397
|
const localNodeRid = localNode === undefined ? undefined : String(localNode.status().routingId);
|
|
391
398
|
const storedRoute = await streamRuntime.sessionRouteFence(actor.actorId);
|
|
392
399
|
const aggregateOwner = (0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwnerIfRegistered)(streamRuntime);
|
|
393
|
-
const aggregateRoute = aggregateOwner === undefined
|
|
394
|
-
? undefined
|
|
395
|
-
: await aggregateOwner.committedRoute(actor.actorId);
|
|
400
|
+
const aggregateRoute = aggregateOwner === undefined ? undefined : await aggregateOwner.committedRoute(actor.actorId);
|
|
396
401
|
const storedActorRef = aggregateRoute?.actor ?? storedRoute?.actor ?? actor.ref;
|
|
397
402
|
const capturedTenureKey = this.targets.tenureKeyForActorRef(actor.actorId, storedActorRef);
|
|
398
|
-
if (localNodeRid !== undefined
|
|
399
|
-
|
|
400
|
-
|
|
403
|
+
if (localNodeRid !== undefined &&
|
|
404
|
+
(0, routing_id_1.routingIdsEqual)(storedActorRef.nodeRid, localNodeRid) &&
|
|
405
|
+
this.options.actorManager()?.getState(actor.actorId)?.actor !== undefined) {
|
|
401
406
|
return false;
|
|
402
407
|
}
|
|
403
|
-
const remoteTarget = this.options.actorManager()?.getState(actor.actorId)?.remoteActorPacketTarget
|
|
404
|
-
|
|
408
|
+
const remoteTarget = this.options.actorManager()?.getState(actor.actorId)?.remoteActorPacketTarget ??
|
|
409
|
+
this.targets.cachedTargetForActor(actor);
|
|
405
410
|
if (remoteTarget === undefined) {
|
|
406
411
|
return false;
|
|
407
412
|
}
|
|
@@ -415,8 +420,7 @@ class ZLinkActorPacketRelay {
|
|
|
415
420
|
let request;
|
|
416
421
|
try {
|
|
417
422
|
const authority = aggregateRoute?.authorityFence;
|
|
418
|
-
const messageFollowContext = authority?.ownerId === undefined
|
|
419
|
-
|| authority.ownerNodeGeneration === undefined
|
|
423
|
+
const messageFollowContext = authority?.ownerId === undefined || authority.ownerNodeGeneration === undefined
|
|
420
424
|
? undefined
|
|
421
425
|
: (0, actor_message_follow_context_1.createInitialActorMessageFollowContext)({
|
|
422
426
|
meshName: storedActorRef.meshName,
|
|
@@ -453,9 +457,9 @@ class ZLinkActorPacketRelay {
|
|
|
453
457
|
spotId: remoteTarget.spotId,
|
|
454
458
|
spotKind: remoteTarget.spotKind ?? contracts_1.ZLinkSpotKind.User
|
|
455
459
|
};
|
|
456
|
-
if ((frameHeader.kind === protocol_1.ZLinkStreamMessageKind.Send || frameHeader.requestSeq === undefined)
|
|
457
|
-
|
|
458
|
-
|
|
460
|
+
if ((frameHeader.kind === protocol_1.ZLinkStreamMessageKind.Send || frameHeader.requestSeq === undefined) &&
|
|
461
|
+
remoteAddress.spotKind === contracts_1.ZLinkSpotKind.Entry &&
|
|
462
|
+
this.options.routeTransport.submit !== undefined) {
|
|
459
463
|
const result = await this.options.routeTransport.submit(remoteAddress.routerChannelId, String(remoteAddress.targetNodeRid), actors_1.ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET, request, signal);
|
|
460
464
|
if (result.status !== submission_result_1.ZLinkSubmitStatus.Submitted) {
|
|
461
465
|
throw new Error(`Actor '${actor.actorId}' remote node relay was not admitted.`);
|
|
@@ -478,17 +482,14 @@ class ZLinkActorPacketRelay {
|
|
|
478
482
|
}, signal);
|
|
479
483
|
const actorPacketTarget = this.targets.decodeFromWire(reply.actorPacketTarget);
|
|
480
484
|
const currentStoredRoute = await streamRuntime.sessionRouteFence(actor.actorId);
|
|
481
|
-
const currentAggregateRoute = aggregateOwner === undefined
|
|
482
|
-
? undefined
|
|
483
|
-
: await aggregateOwner.committedRoute(actor.actorId);
|
|
485
|
+
const currentAggregateRoute = aggregateOwner === undefined ? undefined : await aggregateOwner.committedRoute(actor.actorId);
|
|
484
486
|
const currentActorRef = currentAggregateRoute?.actor ?? currentStoredRoute?.actor ?? actor.ref;
|
|
485
|
-
const currentTenure = this.targets.tenureKeyForActorRef(actor.actorId, currentActorRef)
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
actorPacketTarget
|
|
491
|
-
(localNodeRid === undefined || !(0, routing_id_1.routingIdsEqual)(actorPacketTarget.targetNodeRid, localNodeRid))) {
|
|
487
|
+
const currentTenure = this.targets.tenureKeyForActorRef(actor.actorId, currentActorRef) === capturedTenureKey;
|
|
488
|
+
if (currentTenure &&
|
|
489
|
+
this.targets.tenureKeyForActor(actor) === capturedTenureKey &&
|
|
490
|
+
actorPacketTarget !== undefined &&
|
|
491
|
+
(localNodeRid === undefined ||
|
|
492
|
+
!(0, routing_id_1.routingIdsEqual)(actorPacketTarget.targetNodeRid, localNodeRid))) {
|
|
492
493
|
this.targets.rememberActorTarget(actor, actorPacketTarget, capturedTenureKey);
|
|
493
494
|
}
|
|
494
495
|
else if (currentTenure && reply.ok !== false) {
|
|
@@ -546,12 +547,12 @@ class ZLinkActorPacketRelay {
|
|
|
546
547
|
const current = state === undefined
|
|
547
548
|
? undefined
|
|
548
549
|
: (0, actor_runtime_state_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget);
|
|
549
|
-
if (current === undefined
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
550
|
+
if (current === undefined ||
|
|
551
|
+
current.sessionNodeRid === undefined ||
|
|
552
|
+
!(0, routing_id_1.routingIdsEqual)(current.sessionNodeRid, routeContext.sourceNodeRid) ||
|
|
553
|
+
current.bindingGeneration === undefined ||
|
|
554
|
+
relay.bindingGeneration === undefined ||
|
|
555
|
+
current.bindingGeneration !== BigInt(relay.bindingGeneration)) {
|
|
555
556
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorSessionNotBound, `Actor '${relay.actorId}' bound session identity is stale.`, true);
|
|
556
557
|
}
|
|
557
558
|
}
|
|
@@ -584,13 +585,14 @@ class ZLinkActorPacketRelay {
|
|
|
584
585
|
!(0, routing_id_1.routingIdsEqual)(actorRef.nodeRid, localNodeRid)) {
|
|
585
586
|
return false;
|
|
586
587
|
}
|
|
587
|
-
const responseTarget = await this.options
|
|
588
|
+
const responseTarget = await this.options
|
|
589
|
+
.streamBindingRuntime()
|
|
590
|
+
.captureBoundSessionResponseTarget(actor);
|
|
588
591
|
const encodedHeader = (0, protocol_1.encodeStreamHeader)(frameHeader);
|
|
589
592
|
// encodeStreamHeader returns a fresh, unaliased array; view it without re-copying.
|
|
590
593
|
const header = runtime_message_1.ZLinkBufferMessage.fromOwned(Buffer.from(encodedHeader.buffer, encodedHeader.byteOffset, encodedHeader.byteLength));
|
|
591
594
|
const body = runtime_message_1.ZLinkBufferMessage.fromOwned(Buffer.from((0, protocol_1.messageToBytes)(payload)));
|
|
592
|
-
const returnResponse = frameHeader.kind === protocol_1.ZLinkStreamMessageKind.Request
|
|
593
|
-
&& frameHeader.requestSeq !== undefined;
|
|
595
|
+
const returnResponse = frameHeader.kind === protocol_1.ZLinkStreamMessageKind.Request && frameHeader.requestSeq !== undefined;
|
|
594
596
|
try {
|
|
595
597
|
this.options.detachedTaskRunner.runDetached('local actor packet relay', async () => {
|
|
596
598
|
try {
|
|
@@ -627,12 +629,16 @@ class ZLinkActorPacketRelay {
|
|
|
627
629
|
}
|
|
628
630
|
async sendCapturedOrCurrentBoundSessionResponse(target, actorId, packetName, requestSeq, response, metadata) {
|
|
629
631
|
return target === undefined
|
|
630
|
-
? await this.options
|
|
632
|
+
? await this.options
|
|
633
|
+
.streamBindingRuntime()
|
|
634
|
+
.sendLocalBoundSessionResponse(actorId, packetName, requestSeq, response, metadata, false)
|
|
631
635
|
: await target.sendResponse(packetName, requestSeq, response, metadata);
|
|
632
636
|
}
|
|
633
637
|
async sendCapturedOrCurrentBoundSessionError(target, actorId, packetName, requestSeq, error, metadata) {
|
|
634
638
|
return target === undefined
|
|
635
|
-
? await this.options
|
|
639
|
+
? await this.options
|
|
640
|
+
.streamBindingRuntime()
|
|
641
|
+
.sendLocalBoundSessionError(actorId, packetName, requestSeq, error, metadata)
|
|
636
642
|
: await target.sendError(packetName, requestSeq, error, metadata);
|
|
637
643
|
}
|
|
638
644
|
requireSpotNodeRuntime() {
|
|
@@ -652,9 +658,7 @@ class ZLinkActorPacketRelay {
|
|
|
652
658
|
}
|
|
653
659
|
exports.ZLinkActorPacketRelay = ZLinkActorPacketRelay;
|
|
654
660
|
function isValidMessageFollowId(value) {
|
|
655
|
-
return value !== undefined
|
|
656
|
-
&& /^[0-9a-f]{32}$/.test(value)
|
|
657
|
-
&& !/^0+$/.test(value);
|
|
661
|
+
return value !== undefined && /^[0-9a-f]{32}$/.test(value) && !/^0+$/.test(value);
|
|
658
662
|
}
|
|
659
663
|
/** Reuses the target when it already carries a spot kind instead of spreading a copy per call. */
|
|
660
664
|
function withDefaultSpotKind(target) {
|
|
@@ -12,8 +12,7 @@ const user_spot_creation_coordinator_1 = require("./user-spot-creation-coordinat
|
|
|
12
12
|
const service_wire_codec_generated_1 = require("../protocol/service_wire_codec.generated");
|
|
13
13
|
const CREATION_TERMINAL_CODEC_CONTEXT = {
|
|
14
14
|
effectiveCompleteMessageBytesMinusActualEnvelopeOverhead: 1024 * 1024,
|
|
15
|
-
effectiveCompleteMessageBytes: 1024 * 1024
|
|
16
|
-
runtimePredicates: {}
|
|
15
|
+
effectiveCompleteMessageBytes: 1024 * 1024
|
|
17
16
|
};
|
|
18
17
|
class ZLinkActorPlacementCoordinator {
|
|
19
18
|
options;
|
|
@@ -104,21 +103,20 @@ class ZLinkActorPlacementCoordinator {
|
|
|
104
103
|
}
|
|
105
104
|
if (remote === undefined)
|
|
106
105
|
throw transportFailure;
|
|
107
|
-
if (remote.terminalResult !== runtime_values_1.RequestResult.Ok
|
|
108
|
-
|| remote.failureCode !== 0) {
|
|
106
|
+
if (remote.terminalResult !== runtime_values_1.RequestResult.Ok || remote.failureCode !== 0) {
|
|
109
107
|
// Classify the (terminal, fine failure code) pair via the shared
|
|
110
108
|
// ownership-aware translator instead of collapsing every non-OK
|
|
111
109
|
// remote create to InternalFailure (spec 32-framework-error-model:
|
|
112
110
|
// 83-118, 99-108). Backpressured(113) still surfaces as target
|
|
113
111
|
// placement capacity -> Unavailable through the shared path.
|
|
114
|
-
throw (0, framework_errors_internal_1.wireReplyFailureException)(remote.terminalResult, remote.failureCode, `Remote Actor '${actorId}' creation failed with result ${remote.terminalResult}, `
|
|
115
|
-
|
|
112
|
+
throw (0, framework_errors_internal_1.wireReplyFailureException)(remote.terminalResult, remote.failureCode, `Remote Actor '${actorId}' creation failed with result ${remote.terminalResult}, ` +
|
|
113
|
+
`failure code ${remote.failureCode}, and tail ${remote.tail?.kind ?? 'none'}.`);
|
|
116
114
|
}
|
|
117
115
|
if (remote.tail?.kind !== 'actorCreate') {
|
|
118
116
|
// An OK terminal whose reply lacks the actorCreate tail is a
|
|
119
117
|
// protocol violation, not a create failure.
|
|
120
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, `Remote Actor '${actorId}' create reply carried tail `
|
|
121
|
-
|
|
118
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, `Remote Actor '${actorId}' create reply carried tail ` +
|
|
119
|
+
`${remote.tail?.kind ?? 'none'} on an OK terminal.`);
|
|
122
120
|
}
|
|
123
121
|
if (remote.tail.createResult === 'rejected') {
|
|
124
122
|
return {
|
|
@@ -126,8 +124,8 @@ class ZLinkActorPlacementCoordinator {
|
|
|
126
124
|
...(remote.payload === undefined
|
|
127
125
|
? {}
|
|
128
126
|
: {
|
|
129
|
-
reply: this.options.decodeRemoteReply?.(remote.payload.payload)
|
|
130
|
-
|
|
127
|
+
reply: this.options.decodeRemoteReply?.(remote.payload.payload) ??
|
|
128
|
+
Buffer.from(remote.payload.payload)
|
|
131
129
|
})
|
|
132
130
|
};
|
|
133
131
|
}
|
|
@@ -149,8 +147,8 @@ class ZLinkActorPlacementCoordinator {
|
|
|
149
147
|
...(remote.payload === undefined
|
|
150
148
|
? {}
|
|
151
149
|
: {
|
|
152
|
-
reply: this.options.decodeRemoteReply?.(remote.payload.payload)
|
|
153
|
-
|
|
150
|
+
reply: this.options.decodeRemoteReply?.(remote.payload.payload) ??
|
|
151
|
+
Buffer.from(remote.payload.payload)
|
|
154
152
|
})
|
|
155
153
|
};
|
|
156
154
|
}
|
|
@@ -279,10 +277,10 @@ function existingActor(reserved, actorId, stableType) {
|
|
|
279
277
|
: reserved.kind === 'conflict' && reserved.current.kind === 'snapshot'
|
|
280
278
|
? reserved.current
|
|
281
279
|
: undefined;
|
|
282
|
-
if (snapshot === undefined
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
280
|
+
if (snapshot === undefined ||
|
|
281
|
+
snapshot.allocation.state !== 'active' ||
|
|
282
|
+
snapshot.allocation.objectKind !== 'actor' ||
|
|
283
|
+
snapshot.allocation.stableType !== stableType) {
|
|
286
284
|
return undefined;
|
|
287
285
|
}
|
|
288
286
|
const identity = (0, actor_authority_publication_1.decodeActorAuthorityIdentity)(snapshot.payload, snapshot.objectGeneration);
|
|
@@ -342,18 +340,18 @@ function reservationTarget(target) {
|
|
|
342
340
|
}
|
|
343
341
|
function requireExactReservation(current, record) {
|
|
344
342
|
const pending = current.kind === 'snapshot' ? current.pendingCreation : undefined;
|
|
345
|
-
if (current.kind !== 'snapshot'
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
343
|
+
if (current.kind !== 'snapshot' ||
|
|
344
|
+
current.allocation.objectKind !== 'actor' ||
|
|
345
|
+
current.allocation.stableType !== record.stableType ||
|
|
346
|
+
current.objectGeneration !== record.reservation.objectGeneration ||
|
|
347
|
+
current.authorityOwnerGeneration !== record.reservation.authorityOwnerGeneration ||
|
|
348
|
+
String(current.allocation.descriptor.rid) !== record.reservation.targetNodeRid ||
|
|
349
|
+
current.allocation.descriptorLifecycleGeneration !== record.reservation.targetNodeGeneration ||
|
|
350
|
+
current.ownerId !== record.reservation.targetOwnerId ||
|
|
351
|
+
current.ownerLeaseGeneration !== record.reservation.targetOwnerLeaseGeneration ||
|
|
352
|
+
(current.allocation.state === 'reserved' &&
|
|
353
|
+
(current.storeVersion.value !== record.reservation.expectedStoreVersion ||
|
|
354
|
+
pending?.reservationId !== record.reservation.reservationId))) {
|
|
357
355
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorCreateFailed, `Actor '${record.actorId}' reservation fence is stale.`, true);
|
|
358
356
|
}
|
|
359
357
|
}
|
|
@@ -386,9 +384,9 @@ function actorResult(createResult, actor, reply) {
|
|
|
386
384
|
};
|
|
387
385
|
}
|
|
388
386
|
function isCompletedActorCreate(result) {
|
|
389
|
-
return result.terminalResult === runtime_values_1.RequestResult.Ok
|
|
390
|
-
|
|
391
|
-
|
|
387
|
+
return (result.terminalResult === runtime_values_1.RequestResult.Ok &&
|
|
388
|
+
result.failureCode === 0 &&
|
|
389
|
+
result.tail?.kind === 'actorCreate');
|
|
392
390
|
}
|
|
393
391
|
function encodeActorTerminal(terminal) {
|
|
394
392
|
if (terminal.result === 'failed') {
|
|
@@ -30,7 +30,7 @@ class ZLinkActorRuntimeOptionsFactory {
|
|
|
30
30
|
postCommitErrorReporter: this.options.reportPostCommitError,
|
|
31
31
|
sourceTransfer: this.options.actorTransferRuntime,
|
|
32
32
|
actorJoinRelocation: this.options.actorJoinRelocation,
|
|
33
|
-
entrySpotIdProvider: meshName => {
|
|
33
|
+
entrySpotIdProvider: (meshName) => {
|
|
34
34
|
const resolvedMeshName = meshName ?? this.options.primaryMeshName();
|
|
35
35
|
return resolvedMeshName === undefined
|
|
36
36
|
? undefined
|
|
@@ -55,12 +55,12 @@ class ZLinkActorRuntimeOptionsFactory {
|
|
|
55
55
|
actorRefProvider: () => {
|
|
56
56
|
const state = this.options.actorManager()?.getState(actorId);
|
|
57
57
|
const actorRef = state?.nativeActorRef;
|
|
58
|
-
const meshName = state?.meshName
|
|
59
|
-
|
|
58
|
+
const meshName = state?.meshName ??
|
|
59
|
+
(state?.actorType === undefined
|
|
60
60
|
? undefined
|
|
61
61
|
: this.options.actorMeshName(state.actorType));
|
|
62
|
-
const objectGeneration = actorRef?.generation
|
|
63
|
-
|
|
62
|
+
const objectGeneration = actorRef?.generation ??
|
|
63
|
+
actorRef
|
|
64
64
|
?.objectGeneration;
|
|
65
65
|
return actorRef === undefined || objectGeneration === undefined
|
|
66
66
|
? undefined
|
|
@@ -76,8 +76,8 @@ class ZLinkActorRuntimeOptionsFactory {
|
|
|
76
76
|
},
|
|
77
77
|
nativeActorNodeProvider: () => {
|
|
78
78
|
const state = this.options.actorManager()?.getState(actorId);
|
|
79
|
-
const meshName = state?.meshName
|
|
80
|
-
|
|
79
|
+
const meshName = state?.meshName ??
|
|
80
|
+
(state?.actorType === undefined
|
|
81
81
|
? undefined
|
|
82
82
|
: this.options.actorMeshName(state.actorType));
|
|
83
83
|
const node = meshName === undefined
|
|
@@ -86,9 +86,7 @@ class ZLinkActorRuntimeOptionsFactory {
|
|
|
86
86
|
const completions = meshName === undefined
|
|
87
87
|
? this.options.primaryMeshCompletions()
|
|
88
88
|
: this.options.meshCompletions(meshName);
|
|
89
|
-
return node === undefined
|
|
90
|
-
? undefined
|
|
91
|
-
: (0, backend_1.meshActorSessionNodeAdapter)(node, completions);
|
|
89
|
+
return node === undefined ? undefined : (0, backend_1.meshActorSessionNodeAdapter)(node, completions);
|
|
92
90
|
},
|
|
93
91
|
localActorProvider: () => this.options.actorManager()?.getState(actorId)?.actor !== undefined,
|
|
94
92
|
remoteBoundSessionTargetProvider: () => {
|
|
@@ -135,10 +133,10 @@ class ZLinkActorRuntimeOptionsFactory {
|
|
|
135
133
|
messageSerializers: this.options.registration.messageSerializers,
|
|
136
134
|
defaultRequestTimeoutMs: this.options.registration.requestTimeoutMs,
|
|
137
135
|
staleActorRefReporter: (_meshName, actorId) => this.options.actorHandoff.recordStaleFailure(actorId),
|
|
138
|
-
staleActorRefPredicate: (meshName, actor) => this.actorBelongsToMesh(meshName, actor.actorId)
|
|
139
|
-
|
|
140
|
-
handoffCapture: (meshName, actorId, parts, returnResponse, actor, deadlineUnixMs) => this.actorBelongsToMesh(meshName, actorId)
|
|
141
|
-
|
|
136
|
+
staleActorRefPredicate: (meshName, actor) => this.actorBelongsToMesh(meshName, actor.actorId) &&
|
|
137
|
+
this.options.actorHandoff.isKnownStale(actor),
|
|
138
|
+
handoffCapture: (meshName, actorId, parts, returnResponse, actor, deadlineUnixMs) => this.actorBelongsToMesh(meshName, actorId) &&
|
|
139
|
+
!this.options.actorHandoff.isProvisional(actorId)
|
|
142
140
|
? this.options.actorHandoff.capture(actorId, parts, returnResponse, undefined, actor, deadlineUnixMs)
|
|
143
141
|
: undefined,
|
|
144
142
|
sendErrorReporter: this.options.reportPostCommitError
|
|
@@ -24,8 +24,9 @@ class ZLinkActorTransferAuthorityRuntime {
|
|
|
24
24
|
const ownerId = this.requireOwnerId();
|
|
25
25
|
const actorId = control.actor.actorId;
|
|
26
26
|
const transferId = transferIdString(control.transferId.high, control.transferId.low);
|
|
27
|
-
if (control.role === service_runtime_contracts_1.ActorTransferRole.Target
|
|
28
|
-
|
|
27
|
+
if (control.role === service_runtime_contracts_1.ActorTransferRole.Target &&
|
|
28
|
+
(control.phase === service_runtime_contracts_1.ActorTransferPhase.Preparing ||
|
|
29
|
+
control.phase === service_runtime_contracts_1.ActorTransferPhase.Fenced)) {
|
|
29
30
|
await this.prepare(store, ownerId, meshName, actorId, transferId, control.actor, control.membershipEpoch, signal);
|
|
30
31
|
return;
|
|
31
32
|
}
|
|
@@ -56,10 +57,7 @@ class ZLinkActorTransferAuthorityRuntime {
|
|
|
56
57
|
target,
|
|
57
58
|
expectedActorGeneration: location.actorRef.objectGeneration,
|
|
58
59
|
expectedMembershipEpoch: location.membershipEpoch,
|
|
59
|
-
participants: new Set([
|
|
60
|
-
location.actorRef.nodeRid,
|
|
61
|
-
target.nodeRid
|
|
62
|
-
]),
|
|
60
|
+
participants: new Set([location.actorRef.nodeRid, target.nodeRid]),
|
|
63
61
|
recoveryOwnerId: ownerId,
|
|
64
62
|
recoveryLeaseTtlMs: this.options.recoveryLeaseTtlMs
|
|
65
63
|
}, signal);
|
|
@@ -112,9 +110,9 @@ class ZLinkActorTransferAuthorityRuntime {
|
|
|
112
110
|
}
|
|
113
111
|
exports.ZLinkActorTransferAuthorityRuntime = ZLinkActorTransferAuthorityRuntime;
|
|
114
112
|
function validateTarget(location, target, membershipEpoch, transferId) {
|
|
115
|
-
if (target.actorId !== location.actorId
|
|
116
|
-
|
|
117
|
-
|
|
113
|
+
if (target.actorId !== location.actorId ||
|
|
114
|
+
target.objectGeneration !== location.actorRef.objectGeneration ||
|
|
115
|
+
membershipEpoch !== location.membershipEpoch) {
|
|
118
116
|
throw new Error(`Actor transfer '${transferId}' does not match the source Actor generation and membership epoch.`);
|
|
119
117
|
}
|
|
120
118
|
}
|