@zlink-systems/framework 0.26.0 → 0.28.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/Actors/ZLinkActorClient.d.ts +1 -1
- package/dist/contracts/Channels/Calls.d.ts +1 -1
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/Builders.d.ts +0 -1
- package/dist/contracts/Configuration/Configs.d.ts +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -5
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/Spots/Contracts.d.ts +2 -2
- package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
- package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +49 -153
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +83 -105
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +1 -0
- package/dist/runtime/actors/actor-request-deadline.js +6 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +2 -0
- package/dist/runtime/admission.js +7 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +7 -27
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +41 -34
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -8
- package/dist/runtime/channels/channel-clients.js +73 -59
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.d.ts +1 -1
- package/dist/runtime/channels/channel-envelope.js +51 -39
- package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
- package/dist/runtime/channels/channel-outbound-operations.js +25 -42
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.d.ts +4 -4
- package/dist/runtime/channels/channel-runtime-manager.js +13 -10
- package/dist/runtime/channels/channel-socket-options.js +3 -12
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +240 -177
- package/dist/runtime/channels/channel-transports.d.ts +21 -31
- package/dist/runtime/channels/channel-transports.js +80 -62
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +130 -72
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +1 -3
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
- package/dist/runtime/channels/source-spot-router.d.ts +1 -1
- package/dist/runtime/channels/source-spot-router.js +2 -4
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.d.ts +1 -1
- package/dist/runtime/channels/spot-node-route-transport.js +5 -5
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
- package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +79 -94
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +11 -8
- package/dist/runtime/host/actor-packet-relay.js +54 -99
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +14 -13
- package/dist/runtime/host/index.js +190 -171
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +15 -28
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +3 -12
- package/dist/runtime/host/spot-address-transport.js +78 -220
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +309 -336
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/request-deadline.d.ts +3 -0
- package/dist/runtime/messaging/request-deadline.js +39 -0
- package/dist/runtime/messaging/submission-result.d.ts +4 -0
- package/dist/runtime/messaging/submission-result.js +56 -1
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +7 -8
- package/dist/runtime/spots/spot-outbound.js +21 -23
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -2
- package/dist/runtime/streams/index.d.ts +16 -17
- package/dist/runtime/streams/index.js +22 -23
- package/dist/runtime/streams/managed-stream.d.ts +5 -2
- package/dist/runtime/streams/managed-stream.js +20 -13
- package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +6 -8
- package/dist/runtime/streams/session-calls.js +6 -22
- package/dist/runtime/streams/session-context.d.ts +10 -10
- package/dist/runtime/streams/session-context.js +25 -10
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +1 -1
- package/src/contracts/Channels/Calls.ts +1 -1
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/Builders.ts +0 -1
- package/src/contracts/Configuration/Configs.ts +0 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -71
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/Spots/Contracts.ts +2 -2
- package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
- package/src/contracts/Streams/IZLinkSession.ts +2 -3
- package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +85 -218
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +4 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +14 -37
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +67 -10
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +44 -49
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +139 -102
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +74 -57
- package/src/runtime/channels/channel-outbound-operations.ts +40 -55
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +12 -30
- package/src/runtime/channels/channel-socket-options.ts +8 -15
- package/src/runtime/channels/channel-socket-registry.ts +291 -196
- package/src/runtime/channels/channel-transports.ts +168 -145
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +172 -91
- package/src/runtime/channels/local-spot-route-transport.ts +1 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
- package/src/runtime/channels/source-spot-router.ts +2 -9
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +7 -9
- package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +127 -125
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +63 -160
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +180 -260
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +327 -320
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +16 -57
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
- package/src/runtime/host/spot-address-transport.ts +175 -356
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +457 -482
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/request-deadline.ts +58 -0
- package/src/runtime/messaging/submission-result.ts +72 -2
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +59 -47
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +98 -66
- package/src/runtime/streams/bound-session-service.ts +22 -2
- package/src/runtime/streams/index.ts +78 -68
- package/src/runtime/streams/managed-stream.ts +32 -23
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +11 -36
- package/src/runtime/streams/session-context.ts +60 -25
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AsyncLocalStorage, AsyncResource } from 'node:async_hooks';
|
|
2
2
|
import type { Type, ZLinkMessageContext } from '../../contracts';
|
|
3
3
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
4
|
-
import {
|
|
4
|
+
import type { ZLinkDetachedTaskRunner } from '../spots/spot-actor-join-dispatch';
|
|
5
5
|
|
|
6
6
|
export interface ZLinkHandlerInstanceScope {
|
|
7
7
|
resolve<T>(type: Type<T>): Promise<T>;
|
|
@@ -22,16 +22,6 @@ interface Deferred<T> {
|
|
|
22
22
|
readonly reject: (error: unknown) => void;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
interface HandlerResolution<T> {
|
|
26
|
-
readonly promise: Promise<T>;
|
|
27
|
-
readonly activation?: Deferred<unknown>;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
interface HandlerScopeDisposal {
|
|
31
|
-
readonly pending: readonly Promise<unknown>[];
|
|
32
|
-
readonly owned: readonly unknown[];
|
|
33
|
-
}
|
|
34
|
-
|
|
35
25
|
interface LifecycleScopeDisposal {
|
|
36
26
|
readonly completion: Promise<void>;
|
|
37
27
|
readonly deferred?: Deferred<void>;
|
|
@@ -41,9 +31,9 @@ interface LifecycleScopeDisposal {
|
|
|
41
31
|
const HANDLER_SCOPE_FACTORY = Symbol.for('@zlink-systems/framework.handler-instance-scope-factory');
|
|
42
32
|
const activeHandlerScope = new AsyncLocalStorage<ActiveHandlerScope>();
|
|
43
33
|
const activeLifecycleScope = new AsyncLocalStorage<LifecycleHandlerInstanceScope>();
|
|
44
|
-
const
|
|
34
|
+
const detachedLifecycleResource = new AsyncResource('zlink:handler-instance-scope');
|
|
45
35
|
const dispatchScopes = new WeakMap<object, ZLinkHandlerInstanceScope>();
|
|
46
|
-
const lifecycleScopes = new WeakMap<object,
|
|
36
|
+
const lifecycleScopes = new WeakMap<object, LifecycleHandlerInstanceScope>();
|
|
47
37
|
|
|
48
38
|
export async function runInHandlerInstanceScope<T>(
|
|
49
39
|
providerResolver: ZLinkProviderResolver | undefined,
|
|
@@ -80,14 +70,7 @@ export async function resolveLifecycleHandler<T>(
|
|
|
80
70
|
type: Type<T>,
|
|
81
71
|
providerResolver?: ZLinkProviderResolver
|
|
82
72
|
): Promise<T> {
|
|
83
|
-
|
|
84
|
-
if (scope === undefined) {
|
|
85
|
-
scope = Promise.resolve(
|
|
86
|
-
new LifecycleHandlerInstanceScope(createHandlerInstanceScope(providerResolver))
|
|
87
|
-
);
|
|
88
|
-
lifecycleScopes.set(owner, scope);
|
|
89
|
-
}
|
|
90
|
-
return (await scope).resolve(type);
|
|
73
|
+
return lifecycleHandlerScope(owner, providerResolver).resolve(type);
|
|
91
74
|
}
|
|
92
75
|
|
|
93
76
|
export async function runWithLifecycleHandler<THandler, TResult>(
|
|
@@ -96,25 +79,34 @@ export async function runWithLifecycleHandler<THandler, TResult>(
|
|
|
96
79
|
providerResolver: ZLinkProviderResolver | undefined,
|
|
97
80
|
callback: (handler: THandler) => Promise<TResult>
|
|
98
81
|
): Promise<TResult> {
|
|
82
|
+
return lifecycleHandlerScope(owner, providerResolver).run(type, callback);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function lifecycleHandlerScope(
|
|
86
|
+
owner: object,
|
|
87
|
+
providerResolver?: ZLinkProviderResolver
|
|
88
|
+
): LifecycleHandlerInstanceScope {
|
|
99
89
|
let scope = lifecycleScopes.get(owner);
|
|
100
90
|
if (scope === undefined) {
|
|
101
|
-
scope =
|
|
102
|
-
new LifecycleHandlerInstanceScope(createHandlerInstanceScope(providerResolver))
|
|
103
|
-
);
|
|
91
|
+
scope = new LifecycleHandlerInstanceScope(createHandlerInstanceScope(providerResolver));
|
|
104
92
|
lifecycleScopes.set(owner, scope);
|
|
105
93
|
}
|
|
106
|
-
return
|
|
94
|
+
return scope;
|
|
107
95
|
}
|
|
108
96
|
|
|
109
|
-
export async function disposeLifecycleHandlers(
|
|
97
|
+
export async function disposeLifecycleHandlers(
|
|
98
|
+
owner: object,
|
|
99
|
+
detachedTaskRunner: ZLinkDetachedTaskRunner
|
|
100
|
+
): Promise<void> {
|
|
101
|
+
if ((detachedTaskRunner as unknown) === undefined) {
|
|
102
|
+
throw new Error('Lifecycle handler disposal requires a detached task runner.');
|
|
103
|
+
}
|
|
110
104
|
const scope = lifecycleScopes.get(owner);
|
|
111
105
|
if (scope === undefined) return;
|
|
112
|
-
|
|
113
|
-
await resolved.dispose();
|
|
106
|
+
await scope.dispose(detachedTaskRunner);
|
|
114
107
|
// Keep the closed scope as a tombstone for the lifetime of the owner object.
|
|
115
108
|
// A late dispatch must fail instead of creating a second activation.
|
|
116
109
|
}
|
|
117
|
-
|
|
118
110
|
function createHandlerInstanceScope(
|
|
119
111
|
providerResolver?: ZLinkProviderResolver,
|
|
120
112
|
context?: ZLinkMessageContext
|
|
@@ -138,72 +130,47 @@ function isHandlerInstanceScopeFactory(value: unknown): value is ZLinkHandlerIns
|
|
|
138
130
|
}
|
|
139
131
|
|
|
140
132
|
class DefaultHandlerInstanceScope implements ZLinkHandlerInstanceScope {
|
|
141
|
-
private readonly lane = new ZLinkStateLane();
|
|
142
133
|
private readonly instances = new Map<Type, Promise<unknown>>();
|
|
143
134
|
private readonly owned: unknown[] = [];
|
|
144
135
|
private disposed = false;
|
|
145
136
|
|
|
146
137
|
constructor(private readonly providerResolver?: ZLinkProviderResolver) {}
|
|
147
138
|
|
|
148
|
-
|
|
149
|
-
const resolution = await this.lane.run(() => this.resolveCore(type));
|
|
150
|
-
if (resolution.activation !== undefined) {
|
|
151
|
-
startOutsideStateLane(() => {
|
|
152
|
-
void this.activate(type, resolution.activation!);
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
return await resolution.promise;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
async dispose(): Promise<void> {
|
|
159
|
-
const disposal = await this.lane.run(() => this.beginDisposeCore());
|
|
160
|
-
if (disposal === undefined) return;
|
|
161
|
-
|
|
162
|
-
await Promise.allSettled(disposal.pending);
|
|
163
|
-
for (const instance of disposal.owned) {
|
|
164
|
-
await disposeOwnedInstance(instance);
|
|
165
|
-
}
|
|
166
|
-
await this.lane.run(() => this.completeDisposeCore());
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
private resolveCore<T>(type: Type<T>): HandlerResolution<T> {
|
|
139
|
+
resolve<T>(type: Type<T>): Promise<T> {
|
|
170
140
|
if (this.disposed) {
|
|
171
|
-
|
|
141
|
+
return Promise.reject(new Error('Handler instance scope is already disposed.'));
|
|
172
142
|
}
|
|
173
|
-
|
|
174
|
-
if (
|
|
175
|
-
|
|
143
|
+
const existing = this.instances.get(type) as Promise<T> | undefined;
|
|
144
|
+
if (existing !== undefined) return existing;
|
|
176
145
|
const activation = createDeferred<unknown>();
|
|
177
|
-
instance = activation.promise as Promise<T>;
|
|
178
146
|
this.instances.set(type, activation.promise);
|
|
179
|
-
|
|
147
|
+
void this.activate(type, activation);
|
|
148
|
+
return activation.promise as Promise<T>;
|
|
180
149
|
}
|
|
181
150
|
|
|
182
|
-
|
|
183
|
-
if (this.disposed) return
|
|
151
|
+
async dispose(): Promise<void> {
|
|
152
|
+
if (this.disposed) return;
|
|
184
153
|
this.disposed = true;
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
this.owned.length = 0;
|
|
193
|
-
this.instances.clear();
|
|
154
|
+
await Promise.allSettled(this.instances.values());
|
|
155
|
+
try {
|
|
156
|
+
await disposeOwnedInstances(this.owned);
|
|
157
|
+
} finally {
|
|
158
|
+
this.owned.length = 0;
|
|
159
|
+
this.instances.clear();
|
|
160
|
+
}
|
|
194
161
|
}
|
|
195
|
-
|
|
196
162
|
private async activate<T>(type: Type<T>, activation: Deferred<unknown>): Promise<void> {
|
|
197
163
|
let instance: T;
|
|
198
164
|
try {
|
|
199
|
-
|
|
165
|
+
const created = this.providerResolver?.create?.(type);
|
|
166
|
+
instance = created === undefined ? new type() : await created;
|
|
200
167
|
} catch (error) {
|
|
201
168
|
activation.reject(error);
|
|
202
169
|
return;
|
|
203
170
|
}
|
|
204
171
|
|
|
205
|
-
|
|
206
|
-
|
|
172
|
+
if (!this.disposed) {
|
|
173
|
+
this.owned.push(instance);
|
|
207
174
|
activation.resolve(instance);
|
|
208
175
|
return;
|
|
209
176
|
}
|
|
@@ -214,16 +181,9 @@ class DefaultHandlerInstanceScope implements ZLinkHandlerInstanceScope {
|
|
|
214
181
|
activation.reject(error);
|
|
215
182
|
}
|
|
216
183
|
}
|
|
217
|
-
|
|
218
|
-
private acceptActivationCore(instance: unknown): boolean {
|
|
219
|
-
if (this.disposed) return false;
|
|
220
|
-
this.owned.push(instance);
|
|
221
|
-
return true;
|
|
222
|
-
}
|
|
223
184
|
}
|
|
224
185
|
|
|
225
186
|
class LifecycleHandlerInstanceScope {
|
|
226
|
-
private readonly lane = new ZLinkStateLane();
|
|
227
187
|
private activeInvocations = 0;
|
|
228
188
|
private closing = false;
|
|
229
189
|
private idle?: Promise<void>;
|
|
@@ -232,12 +192,7 @@ class LifecycleHandlerInstanceScope {
|
|
|
232
192
|
|
|
233
193
|
constructor(private readonly instances: ZLinkHandlerInstanceScope) {}
|
|
234
194
|
|
|
235
|
-
|
|
236
|
-
const resolution = await this.lane.run(() => ({ promise: this.resolveCore(type) }));
|
|
237
|
-
return await resolution.promise;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
private resolveCore<T>(type: Type<T>): Promise<T> {
|
|
195
|
+
resolve<T>(type: Type<T>): Promise<T> {
|
|
241
196
|
this.throwIfClosingCore();
|
|
242
197
|
return this.instances.resolve(type);
|
|
243
198
|
}
|
|
@@ -246,29 +201,34 @@ class LifecycleHandlerInstanceScope {
|
|
|
246
201
|
type: Type<THandler>,
|
|
247
202
|
callback: (handler: THandler) => Promise<TResult>
|
|
248
203
|
): Promise<TResult> {
|
|
249
|
-
|
|
204
|
+
this.beginInvocationCore();
|
|
250
205
|
try {
|
|
251
206
|
return await activeLifecycleScope.run(this, async () =>
|
|
252
207
|
callback(await this.instances.resolve(type))
|
|
253
208
|
);
|
|
254
209
|
} finally {
|
|
255
|
-
|
|
210
|
+
this.completeInvocationCore();
|
|
256
211
|
}
|
|
257
212
|
}
|
|
258
213
|
|
|
259
|
-
async dispose(): Promise<void> {
|
|
214
|
+
async dispose(detachedTaskRunner: ZLinkDetachedTaskRunner): Promise<void> {
|
|
260
215
|
const disposeFromActiveInvocation = activeLifecycleScope.getStore() === this;
|
|
261
|
-
const disposal =
|
|
216
|
+
const disposal = this.beginDisposeCore();
|
|
262
217
|
if (disposal.deferred !== undefined) {
|
|
263
|
-
|
|
218
|
+
startOutsideLifecycleInvocation(() => {
|
|
264
219
|
void this.disposeWhenIdle(disposal);
|
|
220
|
+
if (disposeFromActiveInvocation) {
|
|
221
|
+
detachedTaskRunner.runDetached(
|
|
222
|
+
LifecycleHandlerInstanceScope.name,
|
|
223
|
+
() => disposal.completion
|
|
224
|
+
);
|
|
225
|
+
}
|
|
265
226
|
});
|
|
266
227
|
}
|
|
267
228
|
if (disposeFromActiveInvocation) {
|
|
268
229
|
// Waiting here would make the current handler wait for its own terminal
|
|
269
230
|
// completion. The same disposal promise continues after run() releases
|
|
270
231
|
// the final active invocation.
|
|
271
|
-
void disposal.completion.catch(() => undefined);
|
|
272
232
|
return;
|
|
273
233
|
}
|
|
274
234
|
await disposal.completion;
|
|
@@ -318,7 +278,7 @@ class LifecycleHandlerInstanceScope {
|
|
|
318
278
|
await this.instances.dispose();
|
|
319
279
|
deferred.resolve();
|
|
320
280
|
} catch (error) {
|
|
321
|
-
|
|
281
|
+
this.failDisposalCore(deferred.promise);
|
|
322
282
|
deferred.reject(error);
|
|
323
283
|
}
|
|
324
284
|
}
|
|
@@ -340,8 +300,8 @@ function createDeferred<T>(): Deferred<T> {
|
|
|
340
300
|
return { promise, resolve, reject };
|
|
341
301
|
}
|
|
342
302
|
|
|
343
|
-
function
|
|
344
|
-
return
|
|
303
|
+
function startOutsideLifecycleInvocation<T>(work: () => T): T {
|
|
304
|
+
return detachedLifecycleResource.runInAsyncScope(work);
|
|
345
305
|
}
|
|
346
306
|
|
|
347
307
|
export async function disposeOwnedInstance(instance: unknown): Promise<void> {
|
|
@@ -359,3 +319,16 @@ export async function disposeOwnedInstance(instance: unknown): Promise<void> {
|
|
|
359
319
|
await value.onModuleDestroy();
|
|
360
320
|
}
|
|
361
321
|
}
|
|
322
|
+
|
|
323
|
+
export async function disposeOwnedInstances(instances: readonly unknown[]): Promise<void> {
|
|
324
|
+
const failures: unknown[] = [];
|
|
325
|
+
for (let index = instances.length - 1; index >= 0; index -= 1) {
|
|
326
|
+
try {
|
|
327
|
+
await disposeOwnedInstance(instances[index]);
|
|
328
|
+
} catch (error) {
|
|
329
|
+
failures.push(error);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
if (failures.length === 1) throw failures[0];
|
|
333
|
+
if (failures.length > 1) throw new AggregateError(failures, 'Handler scope cleanup failed.');
|
|
334
|
+
}
|
|
@@ -20,10 +20,6 @@ import {
|
|
|
20
20
|
type ZLinkRemoteActorPacketTarget,
|
|
21
21
|
type ZLinkRemoteBoundSessionTarget
|
|
22
22
|
} from '../actors';
|
|
23
|
-
import {
|
|
24
|
-
mergeRemoteBoundSessionTarget,
|
|
25
|
-
preferredRemoteBoundSessionTarget
|
|
26
|
-
} from '../actors/actor-runtime-state';
|
|
27
23
|
import type { DefaultZLinkActorManager } from '../actors';
|
|
28
24
|
import {
|
|
29
25
|
decodeRemoteActorSessionBinding,
|
|
@@ -44,13 +40,14 @@ import { streamMetadataMap } from '../actors/bound-session-wire';
|
|
|
44
40
|
import { decodeRoutingId, normalizeRoutingId, routingIdsEqual } from '../routing-id';
|
|
45
41
|
import { ZLinkSubmitStatus } from '../messaging/submission-result';
|
|
46
42
|
import type { DefaultZLinkSpotManager, ZLinkSpotNodeRuntimeManager } from '../spots';
|
|
47
|
-
import type { ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
|
|
48
43
|
import type { ZLinkDetachedTaskRunner } from '../spots/spot-actor-join-dispatch';
|
|
49
44
|
import type { ZLinkBoundSessionResponseTarget } from '../streams';
|
|
50
45
|
import type {
|
|
51
46
|
ZLinkBoundSessionResponsePort,
|
|
47
|
+
ZLinkSessionBindingConfirmationOptions,
|
|
52
48
|
ZLinkStreamActorLookupPort
|
|
53
49
|
} from '../streams/stream-binding-runtime-ports';
|
|
50
|
+
import type { ServiceStreamSessionBinding } from '../foundation/service-runtime-contracts';
|
|
54
51
|
import { actorSessionBindingRuntimeOwnerIfRegistered } from '../streams/actor-session-binding-runtime-owner';
|
|
55
52
|
import {
|
|
56
53
|
decodeStreamHeader,
|
|
@@ -65,10 +62,6 @@ import type { MeshRouterResolver } from './mesh-router-resolver';
|
|
|
65
62
|
import { ZLinkRemoteActorPacketTargetStore } from './remote-actor-packet-target-store';
|
|
66
63
|
import type { ZLinkStoreLocationResolvers } from '../locations';
|
|
67
64
|
|
|
68
|
-
const REMOTE_SESSION_BIND_RETRY_DEADLINE_MS = 30_000;
|
|
69
|
-
const REMOTE_SESSION_BIND_RETRY_INITIAL_DELAY_MS = 25;
|
|
70
|
-
const REMOTE_SESSION_BIND_RETRY_MAX_DELAY_MS = 1_000;
|
|
71
|
-
|
|
72
65
|
export interface ZLinkActorPacketRelayOptions {
|
|
73
66
|
readonly requestTimeoutMs?: number;
|
|
74
67
|
readonly routeTransport: ZLinkActorRoutedJoinTransport;
|
|
@@ -120,12 +113,7 @@ export class ZLinkActorPacketRelay {
|
|
|
120
113
|
): Promise<void> {
|
|
121
114
|
const state = this.options.actorManager()?.getState(actor.actorId);
|
|
122
115
|
const currentRemoteBoundSessionTarget =
|
|
123
|
-
state?.spotId === undefined
|
|
124
|
-
? undefined
|
|
125
|
-
: preferredRemoteBoundSessionTarget(
|
|
126
|
-
state.remoteBoundSessionTarget,
|
|
127
|
-
state.boundSessionTransferTarget
|
|
128
|
-
);
|
|
116
|
+
state?.spotId === undefined ? undefined : state.remoteBoundSessionTarget;
|
|
129
117
|
const currentRemoteActorPacketTarget =
|
|
130
118
|
state?.spotId === undefined ? undefined : state.remoteActorPacketTarget;
|
|
131
119
|
const remoteTarget =
|
|
@@ -162,11 +150,8 @@ export class ZLinkActorPacketRelay {
|
|
|
162
150
|
await this.targets.updateFromWire(actorId, value);
|
|
163
151
|
}
|
|
164
152
|
|
|
165
|
-
actorPacketTargetForState(
|
|
166
|
-
actorId
|
|
167
|
-
routerChannelIdHint?: string
|
|
168
|
-
): ZLinkRemoteActorPacketTarget | undefined {
|
|
169
|
-
return this.targets.targetForState(actorId, routerChannelIdHint);
|
|
153
|
+
actorPacketTargetForState(actorId: string): ZLinkRemoteActorPacketTarget | undefined {
|
|
154
|
+
return this.targets.targetForState(actorId);
|
|
170
155
|
}
|
|
171
156
|
|
|
172
157
|
async notifyActorDisconnectedById(actorId: string, signal?: AbortSignal): Promise<void> {
|
|
@@ -174,10 +159,7 @@ export class ZLinkActorPacketRelay {
|
|
|
174
159
|
const remoteTarget =
|
|
175
160
|
state === undefined
|
|
176
161
|
? undefined
|
|
177
|
-
: (
|
|
178
|
-
state.remoteBoundSessionTarget,
|
|
179
|
-
state.boundSessionTransferTarget
|
|
180
|
-
) ?? state.remoteActorPacketTarget);
|
|
162
|
+
: (state.remoteBoundSessionTarget ?? state.remoteActorPacketTarget);
|
|
181
163
|
if (remoteTarget !== undefined) {
|
|
182
164
|
await this.notifyRemoteActorDisconnected(actorId, remoteTarget, signal);
|
|
183
165
|
return;
|
|
@@ -288,66 +270,28 @@ export class ZLinkActorPacketRelay {
|
|
|
288
270
|
if (frameHeader.kind !== ZLinkStreamMessageKind.Send) {
|
|
289
271
|
throw new Error('Remote actor session binding requires a send frame.');
|
|
290
272
|
}
|
|
291
|
-
const { sessionNodeRid
|
|
292
|
-
messageToBytes(body)
|
|
293
|
-
);
|
|
273
|
+
const { sessionNodeRid } = decodeRemoteActorSessionBinding(messageToBytes(body));
|
|
294
274
|
if (!routingIdsEqual(sessionNodeRid, _routeContext.sourceNodeRid)) {
|
|
295
275
|
throw new Error(
|
|
296
276
|
'Remote actor session binding source did not match the declared session node.'
|
|
297
277
|
);
|
|
298
278
|
}
|
|
279
|
+
// The Actor owner installs the binding from the Session owner's
|
|
280
|
+
// command 38 (Session–Actor binding §5); this relay confirmation only
|
|
281
|
+
// acknowledges that the Actor is still owned here.
|
|
299
282
|
const state = this.options.actorManager()?.getState(relay.actorId);
|
|
300
|
-
|
|
301
|
-
if (state === undefined || actorRef === undefined) {
|
|
283
|
+
if (state?.nativeActorRef === undefined) {
|
|
302
284
|
throw new Error(`Actor '${relay.actorId}' does not have a concrete actor ref.`);
|
|
303
285
|
}
|
|
304
|
-
if (this.requireSpotNodeRuntime().primaryMeshNode === undefined) {
|
|
305
|
-
throw new Error('MeshNode actor runtime is not started.');
|
|
306
|
-
}
|
|
307
|
-
const target =
|
|
308
|
-
relay.routerChannelId === undefined
|
|
309
|
-
? this.options.meshRouters.remoteBoundSessionTargetForSource(sessionNodeRid)
|
|
310
|
-
: {
|
|
311
|
-
routerChannelId: relay.routerChannelId,
|
|
312
|
-
targetNodeRid: sessionNodeRid,
|
|
313
|
-
spotId: sessionNodeRid
|
|
314
|
-
};
|
|
315
|
-
if (target === undefined) {
|
|
316
|
-
throw new Error('Remote actor session binding did not declare a return router.');
|
|
317
|
-
}
|
|
318
|
-
const bindingGeneration = (
|
|
319
|
-
fallbackActorRef as
|
|
320
|
-
| (ActorRef & {
|
|
321
|
-
readonly bindingGeneration?: bigint;
|
|
322
|
-
})
|
|
323
|
-
| undefined
|
|
324
|
-
)?.bindingGeneration;
|
|
325
|
-
const refreshedTarget = mergeRemoteBoundSessionTarget(
|
|
326
|
-
{
|
|
327
|
-
...target,
|
|
328
|
-
sessionNodeRid,
|
|
329
|
-
sessionRid,
|
|
330
|
-
...(bindingGeneration === undefined ? {} : { bindingGeneration })
|
|
331
|
-
},
|
|
332
|
-
preferredRemoteBoundSessionTarget(
|
|
333
|
-
state.remoteBoundSessionTarget,
|
|
334
|
-
state.boundSessionTransferTarget
|
|
335
|
-
)
|
|
336
|
-
);
|
|
337
|
-
state.setRemoteBoundSessionTarget(refreshedTarget);
|
|
338
286
|
return { ok: true, response: { acknowledged: true } };
|
|
339
287
|
}
|
|
340
288
|
if (frameHeader.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
|
|
341
289
|
this.requireCurrentRemoteBinding(relay, _routeContext);
|
|
342
|
-
this.options
|
|
343
|
-
.actorManager()
|
|
344
|
-
?.getState(relay.actorId)
|
|
345
|
-
?.setRemoteBoundSessionTarget(undefined);
|
|
346
290
|
await this.notifyLocalActorDisconnectedById(relay.actorId);
|
|
347
291
|
return {
|
|
348
292
|
ok: true,
|
|
349
293
|
actorPacketTarget: encodeRemoteActorPacketTarget(
|
|
350
|
-
this.actorPacketTargetForState(relay.actorId
|
|
294
|
+
this.actorPacketTargetForState(relay.actorId)
|
|
351
295
|
)
|
|
352
296
|
};
|
|
353
297
|
}
|
|
@@ -400,7 +344,7 @@ export class ZLinkActorPacketRelay {
|
|
|
400
344
|
return {
|
|
401
345
|
ok: true,
|
|
402
346
|
actorPacketTarget: encodeRemoteActorPacketTarget(
|
|
403
|
-
this.actorPacketTargetForState(relay.actorId
|
|
347
|
+
this.actorPacketTargetForState(relay.actorId)
|
|
404
348
|
)
|
|
405
349
|
};
|
|
406
350
|
}
|
|
@@ -472,7 +416,7 @@ export class ZLinkActorPacketRelay {
|
|
|
472
416
|
ok: true,
|
|
473
417
|
deferredResponse: true,
|
|
474
418
|
actorPacketTarget: encodeRemoteActorPacketTarget(
|
|
475
|
-
this.actorPacketTargetForState(relay.actorId
|
|
419
|
+
this.actorPacketTargetForState(relay.actorId)
|
|
476
420
|
)
|
|
477
421
|
};
|
|
478
422
|
}
|
|
@@ -497,7 +441,7 @@ export class ZLinkActorPacketRelay {
|
|
|
497
441
|
ok: true,
|
|
498
442
|
response,
|
|
499
443
|
actorPacketTarget: encodeRemoteActorPacketTarget(
|
|
500
|
-
this.actorPacketTargetForState(relay.actorId
|
|
444
|
+
this.actorPacketTargetForState(relay.actorId)
|
|
501
445
|
)
|
|
502
446
|
};
|
|
503
447
|
} catch (error) {
|
|
@@ -520,37 +464,12 @@ export class ZLinkActorPacketRelay {
|
|
|
520
464
|
async relayActorPacket(
|
|
521
465
|
actor: ZLinkSessionActor,
|
|
522
466
|
frameHeader: ZLinkStreamFrameHeader,
|
|
523
|
-
payload: Message
|
|
524
|
-
signal?: AbortSignal
|
|
467
|
+
payload: Message
|
|
525
468
|
): Promise<boolean> {
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
// relocation the cached packet target can carry a transiently
|
|
529
|
-
// incomplete Ready authority fence (route publication still
|
|
530
|
-
// converging); failing the request on the fence check would surface a
|
|
531
|
-
// NotFound for a Spot that exists and is Ready on its owner. Clear the
|
|
532
|
-
// stale hint and re-resolve with a short bound instead.
|
|
533
|
-
const fenceRetryDeadlineMs = performance.now() + 1_000;
|
|
534
|
-
for (;;) {
|
|
535
|
-
try {
|
|
536
|
-
if (await this.relayRemoteActorPacket(actor, frameHeader, payload, signal)) {
|
|
537
|
-
return true;
|
|
538
|
-
}
|
|
539
|
-
return await this.relayLocalActorPacket(actor, frameHeader, payload, signal);
|
|
540
|
-
} catch (error) {
|
|
541
|
-
if (
|
|
542
|
-
!(
|
|
543
|
-
error instanceof Error && error.message.includes('no complete Ready authority fence')
|
|
544
|
-
) ||
|
|
545
|
-
performance.now() >= fenceRetryDeadlineMs
|
|
546
|
-
) {
|
|
547
|
-
throw error;
|
|
548
|
-
}
|
|
549
|
-
this.targets.clear(actor.actorId);
|
|
550
|
-
this.options.actorManager()?.getState(actor.actorId)?.setRemoteActorPacketTarget(undefined);
|
|
551
|
-
await new Promise<void>((resolve) => setTimeout(resolve, 25));
|
|
552
|
-
}
|
|
469
|
+
if (await this.relayRemoteActorPacket(actor, frameHeader, payload)) {
|
|
470
|
+
return true;
|
|
553
471
|
}
|
|
472
|
+
return this.relayLocalActorPacket(actor, frameHeader, payload);
|
|
554
473
|
}
|
|
555
474
|
|
|
556
475
|
async confirmRemoteSessionBinding(
|
|
@@ -558,10 +477,13 @@ export class ZLinkActorPacketRelay {
|
|
|
558
477
|
sessionNodeRid: RoutingId,
|
|
559
478
|
sessionRid: RoutingId,
|
|
560
479
|
signal?: AbortSignal,
|
|
561
|
-
options?:
|
|
480
|
+
options?: ZLinkSessionBindingConfirmationOptions
|
|
562
481
|
): Promise<void> {
|
|
563
482
|
const target = this.targets.targetForActorRef(actor);
|
|
564
|
-
if (target === undefined)
|
|
483
|
+
if (target === undefined) {
|
|
484
|
+
this.installSameNodeSessionBinding(actor.actorId, options?.binding);
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
565
487
|
const header = encodeStreamHeader({
|
|
566
488
|
kind: ZLinkStreamMessageKind.Send,
|
|
567
489
|
codec: ZLinkStreamCodec.Json,
|
|
@@ -579,12 +501,9 @@ export class ZLinkActorPacketRelay {
|
|
|
579
501
|
payload: encodeRemoteActorSessionBinding({ sessionNodeRid, sessionRid })
|
|
580
502
|
});
|
|
581
503
|
if (options?.waitForAcknowledgement === false) {
|
|
582
|
-
await this.
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
performance.now() + REMOTE_SESSION_BIND_RETRY_DEADLINE_MS,
|
|
586
|
-
REMOTE_SESSION_BIND_RETRY_INITIAL_DELAY_MS
|
|
587
|
-
);
|
|
504
|
+
await this.options.routeTransport.sendToSpot(withDefaultSpotKind(target), request, {
|
|
505
|
+
packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET
|
|
506
|
+
});
|
|
588
507
|
return;
|
|
589
508
|
}
|
|
590
509
|
const reply = await this.requestRemoteTarget<{
|
|
@@ -624,49 +543,44 @@ export class ZLinkActorPacketRelay {
|
|
|
624
543
|
}
|
|
625
544
|
}
|
|
626
545
|
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
|
|
649
|
-
'Remote actor session binding send retries exceeded their deadline.',
|
|
650
|
-
error
|
|
651
|
-
)
|
|
652
|
-
);
|
|
653
|
-
return;
|
|
654
|
-
}
|
|
655
|
-
await new Promise<void>((resolve) => setTimeout(resolve, delayMs));
|
|
656
|
-
await this.retryRemoteSessionBindingSend(
|
|
657
|
-
target,
|
|
658
|
-
request,
|
|
659
|
-
deadline,
|
|
660
|
-
Math.min(delayMs * 2, REMOTE_SESSION_BIND_RETRY_MAX_DELAY_MS)
|
|
546
|
+
/**
|
|
547
|
+
* Session–Actor binding §5·§6 (.NET ZLinkSessionActorCoordinator rule): a
|
|
548
|
+
* same-node bind installs the Session owner's registry identity through the
|
|
549
|
+
* same install a remote command 38 uses, so relocation seals and carries it.
|
|
550
|
+
*/
|
|
551
|
+
private installSameNodeSessionBinding(
|
|
552
|
+
actorId: string,
|
|
553
|
+
binding: ServiceStreamSessionBinding | undefined
|
|
554
|
+
): void {
|
|
555
|
+
// The Actor is gone (destroyed or relocated away): nothing to record.
|
|
556
|
+
const state = this.options.actorManager()?.getState(actorId);
|
|
557
|
+
// No registry binding exists only for a native-fallback bind, which has no
|
|
558
|
+
// Session owner registry (managed-stream.ts `bindActor` fallback).
|
|
559
|
+
if (state === undefined || binding === undefined) return;
|
|
560
|
+
const route = this.options.meshRouters.remoteBoundSessionTargetForSource(
|
|
561
|
+
binding.sessionOwnerNodeRid
|
|
562
|
+
);
|
|
563
|
+
if (route === undefined) {
|
|
564
|
+
throw createInternalFrameworkException(
|
|
565
|
+
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
566
|
+
`Actor '${actorId}' Session route is unavailable.`
|
|
661
567
|
);
|
|
662
568
|
}
|
|
569
|
+
state.installBoundSessionBinding({
|
|
570
|
+
...route,
|
|
571
|
+
sessionNodeRid: binding.sessionOwnerNodeRid,
|
|
572
|
+
sessionRid: binding.sessionRid,
|
|
573
|
+
sessionOwnerNodeGeneration: binding.sessionOwnerNodeGeneration,
|
|
574
|
+
sessionOwnerId: binding.sessionOwnerId,
|
|
575
|
+
sessionOwnerLeaseGeneration: binding.sessionOwnerLeaseGeneration,
|
|
576
|
+
bindingGeneration: binding.bindingGeneration
|
|
577
|
+
});
|
|
663
578
|
}
|
|
664
579
|
|
|
665
580
|
async relayRemoteActorPacket(
|
|
666
581
|
actor: ZLinkSessionActor,
|
|
667
582
|
frameHeader: ZLinkStreamFrameHeader,
|
|
668
|
-
payload: Message
|
|
669
|
-
signal?: AbortSignal
|
|
583
|
+
payload: Message
|
|
670
584
|
): Promise<boolean> {
|
|
671
585
|
const streamRuntime = this.options.streamBindingRuntime();
|
|
672
586
|
const responseTarget = await streamRuntime.captureBoundSessionResponseTarget(actor);
|
|
@@ -755,8 +669,7 @@ export class ZLinkActorPacketRelay {
|
|
|
755
669
|
remoteAddress.routerChannelId,
|
|
756
670
|
String(remoteAddress.targetNodeRid),
|
|
757
671
|
ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
|
|
758
|
-
request
|
|
759
|
-
signal
|
|
672
|
+
request
|
|
760
673
|
);
|
|
761
674
|
if (result.status !== ZLinkSubmitStatus.Submitted) {
|
|
762
675
|
throw new Error(`Actor '${actor.actorId}' remote node relay was not admitted.`);
|
|
@@ -765,8 +678,7 @@ export class ZLinkActorPacketRelay {
|
|
|
765
678
|
}
|
|
766
679
|
if (frameHeader.kind === ZLinkStreamMessageKind.Send || frameHeader.requestSeq === undefined) {
|
|
767
680
|
await this.options.routeTransport.sendToSpot(remoteAddress, request, {
|
|
768
|
-
packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET
|
|
769
|
-
signal
|
|
681
|
+
packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET
|
|
770
682
|
});
|
|
771
683
|
return true;
|
|
772
684
|
}
|
|
@@ -786,8 +698,7 @@ export class ZLinkActorPacketRelay {
|
|
|
786
698
|
throw new Error(`Remote actor packet relay reply was empty for '${actor.actorId}'.`);
|
|
787
699
|
}
|
|
788
700
|
return JSON.parse(parts[0].getString('utf8')) as typeof reply;
|
|
789
|
-
}
|
|
790
|
-
signal
|
|
701
|
+
}
|
|
791
702
|
);
|
|
792
703
|
const actorPacketTarget = this.targets.decodeFromWire(reply.actorPacketTarget);
|
|
793
704
|
const currentStoredRoute = await streamRuntime.sessionRouteFence(actor.actorId);
|
|
@@ -894,13 +805,7 @@ export class ZLinkActorPacketRelay {
|
|
|
894
805
|
routeContext: ZLinkRouteMessageContext
|
|
895
806
|
): void {
|
|
896
807
|
const state = this.options.actorManager()?.getState(relay.actorId);
|
|
897
|
-
const current =
|
|
898
|
-
state === undefined
|
|
899
|
-
? undefined
|
|
900
|
-
: preferredRemoteBoundSessionTarget(
|
|
901
|
-
state.remoteBoundSessionTarget,
|
|
902
|
-
state.boundSessionTransferTarget
|
|
903
|
-
);
|
|
808
|
+
const current = state?.boundSession;
|
|
904
809
|
if (
|
|
905
810
|
current === undefined ||
|
|
906
811
|
current.sessionNodeRid === undefined ||
|
|
@@ -953,10 +858,8 @@ export class ZLinkActorPacketRelay {
|
|
|
953
858
|
private async relayLocalActorPacket(
|
|
954
859
|
actor: ZLinkSessionActor,
|
|
955
860
|
frameHeader: ZLinkStreamFrameHeader,
|
|
956
|
-
payload: Message
|
|
957
|
-
signal?: AbortSignal
|
|
861
|
+
payload: Message
|
|
958
862
|
): Promise<boolean> {
|
|
959
|
-
void signal;
|
|
960
863
|
const state = this.options.actorManager()?.getState(actor.actorId);
|
|
961
864
|
const spotId = state?.spotId as RoutingId | undefined;
|
|
962
865
|
const hasActiveSpot =
|