@zlink-systems/framework 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.js +16 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +28 -0
- package/dist/runtime/activation-admission.js +57 -0
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +19 -17
- package/dist/runtime/actors/actor-handoff.d.ts +13 -7
- package/dist/runtime/actors/actor-handoff.js +36 -25
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +85 -123
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
- package/dist/runtime/actors/actor-remote-joiner.js +11 -17
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
- package/dist/runtime/actors/deferred-join-completion.js +21 -0
- package/dist/runtime/actors/index.d.ts +10 -8
- package/dist/runtime/actors/index.js +101 -73
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +7 -1
- package/dist/runtime/admission.js +11 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +8 -33
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
- package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -9
- package/dist/runtime/channels/channel-clients.js +68 -60
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -18
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
- package/dist/runtime/channels/channel-runtime-manager.js +4 -12
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
- package/dist/runtime/channels/channel-socket-registry.js +296 -235
- package/dist/runtime/channels/channel-transports.d.ts +11 -20
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +133 -81
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +22 -9
- package/dist/runtime/execution/index.js +107 -37
- package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
- package/dist/runtime/execution/serial-execution-queue.js +99 -26
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/listener-records.d.ts +11 -0
- package/dist/runtime/foundation/listener-records.js +20 -0
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
- package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
- package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
- package/dist/runtime/foundation/service-topology-registry.js +22 -61
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
- package/dist/runtime/host/actor-transfer-runtime.js +210 -256
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +19 -14
- package/dist/runtime/host/index.js +234 -175
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +11 -23
- package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
- package/dist/runtime/host/route-mesh-runtime.js +178 -257
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
- package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
- package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
- package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
- package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +5 -10
- package/dist/runtime/locations/lifecycle.js +4 -33
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +44 -30
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
- package/dist/runtime/locations/spot-location-claims.js +40 -23
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
- package/dist/runtime/spots/index.d.ts +29 -29
- package/dist/runtime/spots/index.js +441 -313
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
- package/dist/runtime/spots/spot-activation-registry.js +27 -60
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
- package/dist/runtime/spots/spot-activation-state.js +4 -17
- package/dist/runtime/spots/spot-activation.d.ts +10 -9
- package/dist/runtime/spots/spot-activation.js +103 -81
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
- package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
- package/dist/runtime/spots/spot-actor-membership.js +44 -53
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-entry-activation.js +9 -21
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +6 -5
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
- package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +10 -37
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
- package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
- package/dist/runtime/spots/spot-serial-executor.js +9 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
- package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
- package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -19
- package/dist/runtime/streams/index.d.ts +15 -14
- package/dist/runtime/streams/index.js +38 -39
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/session-serial-executor.js +2 -2
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +15 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +72 -0
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +45 -39
- package/src/runtime/actors/actor-handoff.ts +55 -45
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +174 -215
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +15 -36
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/actor-source-transfer.ts +5 -18
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +44 -0
- package/src/runtime/actors/index.ts +122 -88
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +13 -2
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +15 -42
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
- package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
- package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
- package/src/runtime/backend/raw-binding-port.ts +14 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -31
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +8 -15
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +369 -262
- package/src/runtime/channels/channel-transports.ts +161 -115
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +175 -106
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +116 -38
- package/src/runtime/execution/serial-execution-queue.ts +179 -34
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/listener-records.ts +21 -0
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
- package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
- package/src/runtime/foundation/service-topology-registry.ts +30 -79
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +266 -418
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +408 -312
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +12 -44
- package/src/runtime/host/route-mesh-runtime.ts +236 -275
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
- package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
- package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +16 -45
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +90 -58
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +54 -26
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
- package/src/runtime/spots/index.ts +687 -437
- package/src/runtime/spots/spot-activation-registry.ts +42 -71
- package/src/runtime/spots/spot-activation-state.ts +4 -16
- package/src/runtime/spots/spot-activation.ts +167 -115
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
- package/src/runtime/spots/spot-actor-membership.ts +107 -75
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -33
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +29 -21
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
- package/src/runtime/spots/spot-outbound.ts +47 -68
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +10 -43
- package/src/runtime/spots/spot-serial-executor.ts +10 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +23 -37
- package/src/runtime/streams/index.ts +102 -88
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/session-serial-executor.ts +2 -2
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
- package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import type { ActorRef } from '../../contracts';
|
|
2
|
-
import type {
|
|
3
|
-
import type { ZLinkActorSessionAuthorityFence, ZLinkActorSessionAcceptedProducerProof, ZLinkActorSessionRelocationClaim, ZLinkActorSessionRelocationSnapshot, ZLinkActorSessionRetainedOutbound, ZLinkActorSessionRouteFence } from './actor-session-binding-registry';
|
|
2
|
+
import type { ZLinkActorSessionAuthorityFence, ZLinkActorSessionRelocationClaim, ZLinkActorSessionRelocationSnapshot, ZLinkActorSessionRouteFence } from './actor-session-binding-registry';
|
|
4
3
|
export interface ZLinkActorSessionBindingRuntimeOwner {
|
|
5
4
|
actorSlot(actorId: string, sessionRid: string): Promise<number | undefined>;
|
|
6
5
|
sealRelocation(claim: ZLinkActorSessionRelocationClaim, expected: ZLinkActorSessionRouteFence, signal?: AbortSignal): Promise<void>;
|
|
7
6
|
relocationSnapshot(actorId: string, sealId: string): Promise<ZLinkActorSessionRelocationSnapshot | undefined>;
|
|
8
|
-
|
|
9
|
-
admitRelocationOutbound(claim: ServiceSessionBindingAdmissionClaim, operation: ZLinkActorSessionRetainedOutbound): Promise<ServiceSessionBindingAdmissionResult>;
|
|
10
|
-
discardRelocationOutbound(actorId: string, sealId: string, error: unknown): Promise<void>;
|
|
11
|
-
applyRelocation(actorId: string, sealId: string, applyFingerprint: string, action: 'commit' | 'abort', commitOwnerTransition: () => Promise<void>, acceptedProducerProof?: ZLinkActorSessionAcceptedProducerProof): Promise<void>;
|
|
7
|
+
applyRelocation(actorId: string, sealId: string, applyFingerprint: string, commitOwnerTransition: () => Promise<void>): Promise<void>;
|
|
12
8
|
observeRelocationTerminal(actorId: string, sealId: string, applyFingerprint: string): Promise<void>;
|
|
13
9
|
clearRelocation(actorId: string, error: unknown): Promise<void>;
|
|
14
10
|
committedRoute(actorId: string): Promise<{
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import type { ZLinkMessage, ZLinkMessageSerializer, ZLinkSessionActor } from '../../contracts';
|
|
2
|
-
import { type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
3
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
4
|
-
import {
|
|
3
|
+
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
4
|
+
import { type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
5
5
|
import { ZLinkActorSessionBindingRegistry } from './actor-session-binding-registry';
|
|
6
6
|
import { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
|
|
7
|
+
import { type ZLinkStreamFrameHeader } from './protocol';
|
|
7
8
|
import { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './session-context';
|
|
8
9
|
import { ZLinkStreamFrameMessageFactory } from './stream-frame-factory';
|
|
10
|
+
export declare const DEFAULT_RELAY_ACTOR_BIND_TIMEOUT_MS = 2000;
|
|
9
11
|
export interface ZLinkBoundActorRelaySenderOptions {
|
|
12
|
+
readonly dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
10
13
|
readonly actorBindTimeoutMs?: number;
|
|
11
14
|
readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
|
|
12
15
|
readonly relay?: (actor: ZLinkSessionActor, header: ZLinkStreamFrameHeader, payload: Message, signal?: AbortSignal) => Promise<boolean>;
|
|
@@ -19,6 +22,7 @@ export declare class ZLinkBoundActorRelaySender {
|
|
|
19
22
|
private readonly lifecycle;
|
|
20
23
|
constructor(routes: ZLinkActorSessionBindingRegistry<DefaultZLinkSessionContext, DefaultZLinkSessionActor>, frameMessages: ZLinkStreamFrameMessageFactory, options?: ZLinkBoundActorRelaySenderOptions, lifecycle?: ZLinkActorSessionLifecycleCoordinator);
|
|
21
24
|
relay(actor: DefaultZLinkSessionActor, payload: ZLinkMessage, signal?: AbortSignal, dispatchHeader?: ZLinkStreamFrameHeader): Promise<ZLinkSubmitResult>;
|
|
25
|
+
private traceHeldDrop;
|
|
22
26
|
private relayAcceptedFrame;
|
|
23
27
|
private currentHeader;
|
|
24
28
|
private requireDispatchHeader;
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ZLinkBoundActorRelaySender = void 0;
|
|
4
|
-
const
|
|
5
|
-
const payload_codec_1 = require("../messaging/payload-codec");
|
|
6
|
-
const protocol_1 = require("./protocol");
|
|
3
|
+
exports.ZLinkBoundActorRelaySender = exports.DEFAULT_RELAY_ACTOR_BIND_TIMEOUT_MS = void 0;
|
|
4
|
+
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
7
5
|
const abort_1 = require("../abort");
|
|
8
|
-
const
|
|
6
|
+
const diagnostics_1 = require("../diagnostics");
|
|
7
|
+
const payload_codec_1 = require("../messaging/payload-codec");
|
|
8
|
+
const submission_result_1 = require("../messaging/submission-result");
|
|
9
9
|
const actor_session_binding_registry_1 = require("./actor-session-binding-registry");
|
|
10
10
|
const actor_session_lifecycle_coordinator_1 = require("./actor-session-lifecycle-coordinator");
|
|
11
11
|
const managed_stream_1 = require("./managed-stream");
|
|
12
|
+
const protocol_1 = require("./protocol");
|
|
13
|
+
exports.DEFAULT_RELAY_ACTOR_BIND_TIMEOUT_MS = 2000;
|
|
12
14
|
class ZLinkBoundActorRelaySender {
|
|
13
15
|
routes;
|
|
14
16
|
frameMessages;
|
|
@@ -34,37 +36,58 @@ class ZLinkBoundActorRelaySender {
|
|
|
34
36
|
await admission.complete();
|
|
35
37
|
}
|
|
36
38
|
};
|
|
37
|
-
if ((await this.routes.isSealed(actor.actorId)) &&
|
|
38
|
-
(0, execution_1.captureZLinkExecutionTurn)() !== undefined) {
|
|
39
|
-
void operation().catch(() => undefined);
|
|
40
|
-
return { status: submission_result_1.ZLinkSubmitStatus.Submitted };
|
|
41
|
-
}
|
|
42
39
|
return await operation();
|
|
43
40
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
41
|
+
(0, abort_1.throwIfAborted)(signal);
|
|
42
|
+
const held = await this.routes.acceptOneWay(actor.actorId, actor.bindingToken, () => {
|
|
43
|
+
let heldMessage = (0, payload_codec_1.encodeFrameworkPayloadMessage)(payload, this.options.messageSerializers);
|
|
44
|
+
return {
|
|
45
|
+
deliver: async () => {
|
|
46
|
+
try {
|
|
47
|
+
const result = await this.routes.runAcceptedFrameWhenReady(actor.actorId, actor.bindingToken, () => this.relayAcceptedFrame(actor, payload, undefined, header, undefined, heldMessage));
|
|
48
|
+
if (result.status !== submission_result_1.ZLinkSubmitStatus.Submitted) {
|
|
49
|
+
this.traceHeldDrop(header, result.status === submission_result_1.ZLinkSubmitStatus.Backpressured ||
|
|
50
|
+
result.status === submission_result_1.ZLinkSubmitStatus.TimedOut
|
|
51
|
+
? 'backpressure'
|
|
52
|
+
: result.status === submission_result_1.ZLinkSubmitStatus.Shutdown
|
|
53
|
+
? 'shutdown'
|
|
54
|
+
: 'stale_target');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
heldMessage?.close();
|
|
59
|
+
heldMessage = undefined;
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
drop: (reason, error) => {
|
|
63
|
+
heldMessage?.close();
|
|
64
|
+
heldMessage = undefined;
|
|
65
|
+
this.traceHeldDrop(header, reason, error);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
if (held) {
|
|
60
70
|
return { status: submission_result_1.ZLinkSubmitStatus.Submitted };
|
|
61
71
|
}
|
|
62
72
|
return this.routes.runAcceptedFrameWhenReady(actor.actorId, actor.bindingToken, () => this.relayAcceptedFrame(actor, payload, signal), signal);
|
|
63
73
|
}
|
|
64
|
-
|
|
74
|
+
traceHeldDrop(header, reason, error) {
|
|
75
|
+
(0, diagnostics_1.flowIfEnabled)(this.options.dispatchErrors?.flow, ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped, undefined, header.flowId)?.trace({
|
|
76
|
+
outcome: ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped,
|
|
77
|
+
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.StreamSession,
|
|
78
|
+
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
|
|
79
|
+
packetName: header.name,
|
|
80
|
+
flowId: header.flowId,
|
|
81
|
+
flowOrigin: header.flowOrigin,
|
|
82
|
+
correlationId: header.correlationId,
|
|
83
|
+
errorReason: reason,
|
|
84
|
+
...(error instanceof Error ? { errorType: error.name, errorMessage: error.message } : {})
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
async relayAcceptedFrame(actor, payload, signal, header, requestAdmission, acceptedPayload) {
|
|
65
88
|
const activeHeader = header ?? (await this.currentHeader(actor));
|
|
66
89
|
const started = await this.lifecycle.run(actor.actorId, async () => {
|
|
67
|
-
const completion = this.relayInsideLifecycle(actor, payload, signal, activeHeader, requestAdmission);
|
|
90
|
+
const completion = this.relayInsideLifecycle(actor, payload, signal, activeHeader, requestAdmission, acceptedPayload);
|
|
68
91
|
if (activeHeader.kind === protocol_1.ZLinkStreamMessageKind.Request &&
|
|
69
92
|
activeHeader.requestSeq !== undefined) {
|
|
70
93
|
// A routed REQUEST only needs this lane while its ordered submission
|
|
@@ -96,13 +119,13 @@ class ZLinkBoundActorRelaySender {
|
|
|
96
119
|
}
|
|
97
120
|
return header;
|
|
98
121
|
}
|
|
99
|
-
async relayInsideLifecycle(actor, payload, signal, currentHeader, requestAdmission) {
|
|
122
|
+
async relayInsideLifecycle(actor, payload, signal, currentHeader, requestAdmission, acceptedPayload) {
|
|
100
123
|
const header = currentHeader ?? (await this.currentHeader(actor));
|
|
101
124
|
const held = requestAdmission?.beginSubmission(signal);
|
|
102
125
|
if (held !== undefined)
|
|
103
126
|
await held;
|
|
104
127
|
(0, abort_1.throwIfAborted)(signal);
|
|
105
|
-
const payloadMessage = (0, payload_codec_1.encodeFrameworkPayloadMessage)(payload, this.options.messageSerializers);
|
|
128
|
+
const payloadMessage = acceptedPayload ?? (0, payload_codec_1.encodeFrameworkPayloadMessage)(payload, this.options.messageSerializers);
|
|
106
129
|
try {
|
|
107
130
|
if (this.options.relay !== undefined) {
|
|
108
131
|
const handled = await this.options.relay(actor, header, payloadMessage, signal);
|
|
@@ -125,7 +148,8 @@ class ZLinkBoundActorRelaySender {
|
|
|
125
148
|
}
|
|
126
149
|
}
|
|
127
150
|
finally {
|
|
128
|
-
|
|
151
|
+
if (acceptedPayload === undefined)
|
|
152
|
+
payloadMessage.close();
|
|
129
153
|
}
|
|
130
154
|
}
|
|
131
155
|
async notifyDisconnected(actor, signal) {
|
|
@@ -141,13 +165,13 @@ class ZLinkBoundActorRelaySender {
|
|
|
141
165
|
if (unbindNative &&
|
|
142
166
|
detached.bindingToken === actor.bindingToken &&
|
|
143
167
|
detached.context.stream instanceof managed_stream_1.ZLinkManagedStream) {
|
|
144
|
-
await detached.context.stream.unbindActor(actor.actorId, this.options.actorBindTimeoutMs ??
|
|
168
|
+
await detached.context.stream.unbindActor(actor.actorId, this.options.actorBindTimeoutMs ?? exports.DEFAULT_RELAY_ACTOR_BIND_TIMEOUT_MS, signal);
|
|
145
169
|
}
|
|
146
170
|
await this.options.notifyDisconnected?.(actor, signal);
|
|
147
171
|
}
|
|
148
172
|
async notifyPhysicalDisconnect(context) {
|
|
149
173
|
const snapshot = [...context.boundActors];
|
|
150
|
-
const timeoutMs = this.options.actorBindTimeoutMs ??
|
|
174
|
+
const timeoutMs = this.options.actorBindTimeoutMs ?? exports.DEFAULT_RELAY_ACTOR_BIND_TIMEOUT_MS;
|
|
151
175
|
await Promise.allSettled(snapshot.map(async (actor) => {
|
|
152
176
|
const detached = await this.lifecycle.run(actor.actorId, async () => {
|
|
153
177
|
const route = await this.routes.route(actor.actorId);
|
|
@@ -5,6 +5,7 @@ import { ZLinkActorSessionBindingRegistry } from './actor-session-binding-regist
|
|
|
5
5
|
import type { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './session-context';
|
|
6
6
|
import { ZLinkStreamFrameMessageFactory } from './stream-frame-factory';
|
|
7
7
|
import { ZLinkManagedStream } from './managed-stream';
|
|
8
|
+
import type { ZLinkSessionBindingIdentity } from './stream-binding-runtime-ports';
|
|
8
9
|
export interface ZLinkBoundSessionTransport {
|
|
9
10
|
send(actorId: string, message: unknown, options: ZLinkBoundSessionSendOptions): Promise<ZLinkSubmitResult>;
|
|
10
11
|
disconnect(actorId: string, options: ZLinkBoundSessionDisconnectOptions): Promise<void>;
|
|
@@ -39,6 +40,12 @@ export declare class ZLinkBoundSessionService {
|
|
|
39
40
|
sendNativeBoundSessionError(node: ZLinkBackendActorSessionNode, actorRef: ActorRef, packetName: string, requestSeq: bigint, error: unknown, metadata: ReadonlyMap<string, string>, signal?: AbortSignal): Promise<void>;
|
|
40
41
|
disconnectNativeBoundSession(node: ZLinkBackendActorSessionNode, actorRef: ActorRef, signal?: AbortSignal): Promise<void>;
|
|
41
42
|
disconnectBoundSession(actorId: string, signal?: AbortSignal): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Closes the physical Session of one exact binding after its relocation
|
|
45
|
+
* failed (Session–Actor binding §8.1). A newer binding of the same Actor is
|
|
46
|
+
* not selected.
|
|
47
|
+
*/
|
|
48
|
+
closeSessionBinding(actorId: string, expected: ZLinkSessionBindingIdentity, signal?: AbortSignal): Promise<void>;
|
|
42
49
|
relayRemoteBoundSessionBind(stream: ZLinkManagedStream, actorRef: ActorRef): Promise<void>;
|
|
43
50
|
private writeLocalBoundSessionFrame;
|
|
44
51
|
private sendNativeBoundSessionPayload;
|
|
@@ -7,6 +7,7 @@ const submission_result_1 = require("../messaging/submission-result");
|
|
|
7
7
|
const abort_1 = require("../abort");
|
|
8
8
|
const protocol_1 = require("./protocol");
|
|
9
9
|
const bound_session_response_target_1 = require("./bound-session-response-target");
|
|
10
|
+
const spot_remote_codec_1 = require("../spots/spot-remote-codec");
|
|
10
11
|
const ZLINK_SEND_DONT_WAIT = 1;
|
|
11
12
|
class ZLinkBoundSessionService {
|
|
12
13
|
routes;
|
|
@@ -102,12 +103,21 @@ class ZLinkBoundSessionService {
|
|
|
102
103
|
await this.routes.unbind(actorId, route.context, route.bindingToken);
|
|
103
104
|
}
|
|
104
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Closes the physical Session of one exact binding after its relocation
|
|
108
|
+
* failed (Session–Actor binding §8.1). A newer binding of the same Actor is
|
|
109
|
+
* not selected.
|
|
110
|
+
*/
|
|
111
|
+
async closeSessionBinding(actorId, expected, signal) {
|
|
112
|
+
const route = await this.routes.routeForSessionBinding(actorId, expected.sessionRid, expected.bindingGeneration);
|
|
113
|
+
await route?.context.close(signal);
|
|
114
|
+
}
|
|
105
115
|
async relayRemoteBoundSessionBind(stream, actorRef) {
|
|
106
116
|
const encodedBindHeader = (0, protocol_1.encodeStreamHeader)({
|
|
107
117
|
kind: protocol_1.ZLinkStreamMessageKind.Send,
|
|
108
118
|
codec: protocol_1.ZLinkStreamCodec.Raw,
|
|
109
119
|
flags: protocol_1.ZLinkStreamHeaderFlags.None,
|
|
110
|
-
name:
|
|
120
|
+
name: spot_remote_codec_1.REMOTE_BOUND_SESSION_BIND_PACKET,
|
|
111
121
|
metadata: new Map()
|
|
112
122
|
});
|
|
113
123
|
// encodeStreamHeader returns a fresh, unaliased array; view it without re-copying.
|
|
@@ -157,7 +167,7 @@ class ZLinkBoundSessionService {
|
|
|
157
167
|
async submitNativeBoundSessionFrame(node, actorRef, frame, signal) {
|
|
158
168
|
const backendActorRef = toBoundSessionSendActorRef(actorRef);
|
|
159
169
|
(0, abort_1.throwIfAborted)(signal);
|
|
160
|
-
return await node.sendActorBoundSession(backendActorRef, requireBoundSessionGeneration(actorRef), [frame], ZLINK_SEND_DONT_WAIT
|
|
170
|
+
return await node.sendActorBoundSession(backendActorRef, requireBoundSessionGeneration(actorRef), [frame], ZLINK_SEND_DONT_WAIT);
|
|
161
171
|
}
|
|
162
172
|
requireTransport() {
|
|
163
173
|
if (this.options.transport === undefined) {
|
|
@@ -184,20 +194,3 @@ function toBoundSessionSendActorRef(actor) {
|
|
|
184
194
|
generation: actor.objectGeneration
|
|
185
195
|
};
|
|
186
196
|
}
|
|
187
|
-
function boundSessionSendFence(node, backendActor, actor) {
|
|
188
|
-
const internal = actor;
|
|
189
|
-
const ownerNodeGeneration = internal.ownerNodeGeneration ?? node.actorNodeGeneration?.(backendActor);
|
|
190
|
-
if (internal.ownershipGeneration === undefined ||
|
|
191
|
-
internal.ownershipGeneration <= 0n ||
|
|
192
|
-
internal.ownerLeaseGeneration === undefined ||
|
|
193
|
-
internal.ownerLeaseGeneration <= 0n ||
|
|
194
|
-
ownerNodeGeneration === undefined ||
|
|
195
|
-
ownerNodeGeneration <= 0n) {
|
|
196
|
-
return undefined;
|
|
197
|
-
}
|
|
198
|
-
return Object.freeze({
|
|
199
|
-
targetNodeGeneration: ownerNodeGeneration,
|
|
200
|
-
authorityOwnerGeneration: internal.ownershipGeneration,
|
|
201
|
-
ownerLeaseGeneration: internal.ownerLeaseGeneration
|
|
202
|
-
});
|
|
203
|
-
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
3
|
-
import type { ZLinkSubmitResult } from '../messaging/submission-result';
|
|
4
|
-
import { ZLinkMessage } from '../../contracts';
|
|
1
|
+
import { type ActorRef, type ZLinkActor, type ZLinkBoundSession, type ZLinkMessageSerializer, type ZLinkSessionActor, type ZLinkStreamCompressionOptions, ZLinkMessage } from '../../contracts';
|
|
5
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import type { ZLinkBackendAdapterFactory, ZLinkBackendActorSessionNode, ZLinkBackendContext, ZLinkBackendMeshNode } from '../backend/contracts';
|
|
3
|
+
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
4
|
+
import type { ZLinkBackendActorSessionNode, ZLinkBackendAdapterFactory, ZLinkBackendContext, ZLinkBackendMeshNode } from '../backend/contracts';
|
|
9
5
|
import type { ZLinkMeshCompletionTable } from '../backend/mesh-completion-table';
|
|
10
|
-
import {
|
|
11
|
-
import { type
|
|
6
|
+
import { ZLinkDispatchErrorReporter } from '../channels';
|
|
7
|
+
import { type ZLinkFrameworkRegistration } from '../configuration';
|
|
8
|
+
import type { ZLinkListenerRecords } from '../foundation/listener-records';
|
|
12
9
|
import { ApplicationJobQueue } from '../host/application-job-queue';
|
|
13
|
-
import {
|
|
10
|
+
import type { ZLinkSubmitResult } from '../messaging/submission-result';
|
|
11
|
+
import { type ZLinkActorSessionAuthorityFence } from './actor-session-binding-registry';
|
|
14
12
|
import { type ZLinkBoundSessionResponseTarget } from './bound-session-response-target';
|
|
15
13
|
import { type ZLinkBoundSessionTransport } from './bound-session-service';
|
|
16
14
|
import { ZLinkManagedStream } from './managed-stream';
|
|
15
|
+
import { ZLinkStreamCodec, ZLinkStreamMessageKind, type ZLinkStreamFrameHeader, type ZLinkStreamReplyMessageKind } from './protocol';
|
|
16
|
+
import { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './session-context';
|
|
17
|
+
import type { ZLinkActorRouteCommitOptions, ZLinkSessionBindingConfirmationOptions, ZLinkSessionBindingIdentity } from './stream-binding-runtime-ports';
|
|
17
18
|
import { ZLinkStreamSessionNodeRuntime as ZLinkStreamSessionNodeRuntimeCore, ZLinkStreamSessionRuntime as ZLinkStreamSessionRuntimeCore, type ZLinkStreamSessionNodeRuntimeOptions as ZLinkStreamSessionNodeRuntimeCoreOptions, type ZLinkStreamSessionRuntimeOptions as ZLinkStreamSessionRuntimeCoreOptions } from './stream-session-runtime';
|
|
18
|
-
import type { ZLinkActorRouteCommitOptions } from './stream-binding-runtime-ports';
|
|
19
19
|
export { ZLinkPendingSessionRequest } from './session-requests';
|
|
20
20
|
export { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
|
|
21
21
|
export { ZLinkActorSessionBindingRegistry } from './actor-session-binding-registry';
|
|
@@ -25,6 +25,7 @@ export { DefaultZLinkBoundSession, DefaultZLinkBoundSessionFactory, DefaultZLink
|
|
|
25
25
|
export type { ZLinkBoundSessionResponseTarget } from './bound-session-response-target';
|
|
26
26
|
export type { ZLinkBoundSessionDisconnectOptions, ZLinkBoundSessionSendOptions, ZLinkBoundSessionTransport } from './bound-session-service';
|
|
27
27
|
export interface ZLinkStreamBindingRuntimeOptions {
|
|
28
|
+
readonly dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
28
29
|
readonly transport?: ZLinkBoundSessionTransport;
|
|
29
30
|
readonly messageFactory?: ZLinkStreamMessageFactory;
|
|
30
31
|
readonly streamPayloadCodec?: ZLinkStreamPayloadCodec;
|
|
@@ -40,9 +41,7 @@ export interface ZLinkStreamBindingRuntimeOptions {
|
|
|
40
41
|
readonly routingId: unknown;
|
|
41
42
|
};
|
|
42
43
|
} | undefined;
|
|
43
|
-
readonly confirmRemoteActorSessionBinding?: (actor: ActorRef, sessionRid: ActorRef['nodeRid'], signal?: AbortSignal, options?:
|
|
44
|
-
readonly waitForAcknowledgement?: boolean;
|
|
45
|
-
}) => Promise<void>;
|
|
44
|
+
readonly confirmRemoteActorSessionBinding?: (actor: ActorRef, sessionRid: ActorRef['nodeRid'], signal?: AbortSignal, options?: ZLinkSessionBindingConfirmationOptions) => Promise<void>;
|
|
46
45
|
readonly errorSink?: () => {
|
|
47
46
|
reportRuntimeTaskException(taskName: string, error: unknown): void;
|
|
48
47
|
} | undefined;
|
|
@@ -68,6 +67,7 @@ export interface ZLinkStreamSessionNodeRuntimeOptions extends Omit<ZLinkStreamSe
|
|
|
68
67
|
readonly bindingRuntime?: ZLinkStreamBindingRuntime;
|
|
69
68
|
}
|
|
70
69
|
export interface ZLinkStreamRuntimeManagerOptions {
|
|
70
|
+
readonly listenerRecords?: ZLinkListenerRecords;
|
|
71
71
|
readonly registration: ZLinkFrameworkRegistration;
|
|
72
72
|
readonly backendAdapterFactory: ZLinkBackendAdapterFactory;
|
|
73
73
|
readonly context: ZLinkBackendContext;
|
|
@@ -142,6 +142,7 @@ export declare class ZLinkStreamBindingRuntime {
|
|
|
142
142
|
sendNativeBoundSessionError(node: ZLinkBackendActorSessionNode, actorRef: ActorRef, packetName: string, requestSeq: bigint, error: unknown, metadata: ReadonlyMap<string, string>, signal?: AbortSignal): Promise<void>;
|
|
143
143
|
disconnectNativeBoundSession(node: ZLinkBackendActorSessionNode, actorRef: ActorRef, signal?: AbortSignal): Promise<void>;
|
|
144
144
|
disconnectBoundSession(actorId: string, signal?: AbortSignal): Promise<void>;
|
|
145
|
+
closeSessionBinding(actorId: string, expected: ZLinkSessionBindingIdentity, signal?: AbortSignal): Promise<void>;
|
|
145
146
|
relay(actor: DefaultZLinkSessionActor, payload: ZLinkMessage, signal?: AbortSignal, dispatchHeader?: ZLinkStreamFrameHeader): Promise<ZLinkSubmitResult>;
|
|
146
147
|
notifyDisconnected(actor: DefaultZLinkSessionActor, signal?: AbortSignal): Promise<void>;
|
|
147
148
|
createTextMessage(payload: string): Message;
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkStreamBindingRuntime = exports.ZLinkStreamSessionNodeRuntime = exports.ZLinkStreamSessionRuntime = exports.ZLinkStreamRuntimeManager = exports.DefaultZLinkSessionContext = exports.DefaultZLinkSessionActor = exports.DefaultZLinkBoundSessionFactory = exports.DefaultZLinkBoundSession = exports.ZLinkManagedStream = exports.zlinkStreamLz4CompressionCodec = exports.ZLinkActorSessionBindingRegistry = exports.ZLinkActorSessionLifecycleCoordinator = exports.ZLinkPendingSessionRequest = void 0;
|
|
4
|
+
const InternalDefaults_1 = require("../../contracts/Configuration/InternalDefaults");
|
|
5
|
+
const Options_1 = require("../../contracts/Locations/Options");
|
|
4
6
|
const configuration_1 = require("../configuration");
|
|
5
7
|
const service_session_binding_ingress_port_1 = require("../foundation/service-session-binding-ingress-port");
|
|
6
|
-
const
|
|
8
|
+
const application_job_queue_1 = require("../host/application-job-queue");
|
|
7
9
|
const actor_session_binding_registry_1 = require("./actor-session-binding-registry");
|
|
8
10
|
const actor_session_binding_runtime_owner_1 = require("./actor-session-binding-runtime-owner");
|
|
9
11
|
const actor_session_lifecycle_coordinator_1 = require("./actor-session-lifecycle-coordinator");
|
|
10
|
-
const
|
|
11
|
-
const application_job_queue_1 = require("../host/application-job-queue");
|
|
12
|
-
const stream_message_utils_1 = require("./stream-message-utils");
|
|
13
|
-
const session_context_1 = require("./session-context");
|
|
12
|
+
const bound_actor_relay_sender_1 = require("./bound-actor-relay-sender");
|
|
14
13
|
const bound_session_response_target_1 = require("./bound-session-response-target");
|
|
15
14
|
const bound_session_service_1 = require("./bound-session-service");
|
|
15
|
+
const protocol_1 = require("./protocol");
|
|
16
16
|
const session_actor_coordinator_1 = require("./session-actor-coordinator");
|
|
17
|
-
const
|
|
17
|
+
const session_context_1 = require("./session-context");
|
|
18
18
|
const session_provider_1 = require("./session-provider");
|
|
19
|
-
const
|
|
19
|
+
const stream_frame_factory_1 = require("./stream-frame-factory");
|
|
20
|
+
const stream_message_utils_1 = require("./stream-message-utils");
|
|
20
21
|
const stream_session_runtime_1 = require("./stream-session-runtime");
|
|
22
|
+
const DEFAULT_STREAM_SERVICE_SHUTDOWN_TIMEOUT_MS = 1000;
|
|
21
23
|
var session_requests_1 = require("./session-requests");
|
|
22
24
|
Object.defineProperty(exports, "ZLinkPendingSessionRequest", { enumerable: true, get: function () { return session_requests_1.ZLinkPendingSessionRequest; } });
|
|
23
25
|
var actor_session_lifecycle_coordinator_2 = require("./actor-session-lifecycle-coordinator");
|
|
@@ -56,6 +58,12 @@ class ZLinkStreamRuntimeManager {
|
|
|
56
58
|
const nativeMeshNode = actorDispatchEnabled ? this.options.nativeMeshNode : undefined;
|
|
57
59
|
const meshCompletions = actorDispatchEnabled ? this.options.meshCompletions : undefined;
|
|
58
60
|
const socket = streamAdapter.createStreamSocket(this.options.context);
|
|
61
|
+
const node = {
|
|
62
|
+
meshName: applicationMeshName,
|
|
63
|
+
socket,
|
|
64
|
+
nativeSessionServices: []
|
|
65
|
+
};
|
|
66
|
+
this.nodes.set(nodeName, node);
|
|
59
67
|
// Core uses -1 as the explicit unlimited value. The Framework value 0
|
|
60
68
|
// means that it adds no separate STREAM cap, so preserve that meaning
|
|
61
69
|
// when applying the socket option.
|
|
@@ -71,7 +79,6 @@ class ZLinkStreamRuntimeManager {
|
|
|
71
79
|
if (advertisedEndpoint === undefined) {
|
|
72
80
|
throw new configuration_1.ZLinkConfigurationException(`STREAM node '${nodeName}' advertised host requires a TCP endpoint, received '${boundEndpoint}'.`);
|
|
73
81
|
}
|
|
74
|
-
const readablePoller = streamAdapter.createReadablePoller(socket);
|
|
75
82
|
const nativeSessionRoutes = new Map();
|
|
76
83
|
if (actorDispatchEnabled) {
|
|
77
84
|
for (const [meshName, mesh] of this.options.registration.spotNodes) {
|
|
@@ -86,11 +93,10 @@ class ZLinkStreamRuntimeManager {
|
|
|
86
93
|
if (typeof createService !== 'function' || completions === undefined)
|
|
87
94
|
continue;
|
|
88
95
|
const service = createService.call(meshNode, socket.nativeInstance);
|
|
96
|
+
node.nativeSessionServices.push(service);
|
|
89
97
|
const bindingOwner = (0, actor_session_binding_runtime_owner_1.actorSessionBindingRuntimeOwner)(this.options.bindingRuntime);
|
|
90
98
|
(0, service_session_binding_ingress_port_1.registerServiceSessionBindingIngressPort)(service, {
|
|
91
|
-
actorSlot: (actorId, sessionRid) => bindingOwner.actorSlot(actorId, sessionRid)
|
|
92
|
-
retainOutbound: (claim, delivery) => bindingOwner.admitRelocationOutbound(claim, delivery),
|
|
93
|
-
clearOutbound: (actorId, error) => bindingOwner.clearRelocation(actorId, error)
|
|
99
|
+
actorSlot: (actorId, sessionRid) => bindingOwner.actorSlot(actorId, sessionRid)
|
|
94
100
|
});
|
|
95
101
|
nativeSessionRoutes.set(meshName, {
|
|
96
102
|
service,
|
|
@@ -102,8 +108,12 @@ class ZLinkStreamRuntimeManager {
|
|
|
102
108
|
? undefined
|
|
103
109
|
: nativeSessionRoutes.get(applicationMeshName)?.service;
|
|
104
110
|
const monitor = monitoringAdapter.openSocketMonitor(socket);
|
|
111
|
+
node.monitor = monitor;
|
|
105
112
|
const sessionType = streamNode.session;
|
|
106
113
|
const sessionHandlerTypes = streamNode[Symbol.for('@zlink-systems/framework:session-handler-types')] ?? [];
|
|
114
|
+
// The runtime disposes the poller, so the poller is created where nothing
|
|
115
|
+
// can fail before the runtime owns it.
|
|
116
|
+
const readablePoller = streamAdapter.createReadablePoller(socket);
|
|
107
117
|
const runtime = new stream_session_runtime_1.ZLinkStreamSessionNodeRuntime({
|
|
108
118
|
nodeName,
|
|
109
119
|
socket,
|
|
@@ -123,42 +133,33 @@ class ZLinkStreamRuntimeManager {
|
|
|
123
133
|
replacementCallbackTimeoutMs: this.options.registration.sessionReplacementCallbackTimeoutMs,
|
|
124
134
|
sessionFactory: (context) => (0, session_provider_1.createStreamSessionInstance)(sessionType, this.options.providerResolver, context, sessionHandlerTypes)
|
|
125
135
|
});
|
|
136
|
+
node.runtime = runtime;
|
|
126
137
|
runtime.start();
|
|
127
|
-
this.
|
|
128
|
-
meshName: applicationMeshName,
|
|
129
|
-
advertisedEndpoint,
|
|
130
|
-
runtime,
|
|
131
|
-
socket,
|
|
132
|
-
monitor,
|
|
133
|
-
nativeSessionService,
|
|
134
|
-
nativeSessionServices: [...nativeSessionRoutes.values()].map((route) => route.service)
|
|
135
|
-
});
|
|
138
|
+
this.options.listenerRecords?.record('stream', nodeName, advertisedEndpoint);
|
|
136
139
|
}
|
|
137
140
|
}
|
|
138
141
|
async dispose() {
|
|
139
142
|
const nodes = [...this.nodes.values()];
|
|
140
|
-
this.nodes.clear();
|
|
141
143
|
for (const node of nodes.reverse()) {
|
|
142
|
-
await node.runtime
|
|
143
|
-
const
|
|
144
|
-
(
|
|
145
|
-
for (const service of nativeServices) {
|
|
146
|
-
service.shutdown(1000);
|
|
144
|
+
await node.runtime?.dispose();
|
|
145
|
+
for (const service of node.nativeSessionServices) {
|
|
146
|
+
service.shutdown(DEFAULT_STREAM_SERVICE_SHUTDOWN_TIMEOUT_MS);
|
|
147
147
|
service.close();
|
|
148
148
|
}
|
|
149
|
-
await node.monitor
|
|
149
|
+
await node.monitor?.dispose();
|
|
150
150
|
await node.socket.dispose();
|
|
151
151
|
}
|
|
152
|
+
this.nodes.clear();
|
|
152
153
|
}
|
|
153
154
|
async notifyServerDrain(meshName) {
|
|
154
155
|
await Promise.all([...this.nodes.values()]
|
|
155
156
|
.filter((node) => node.meshName === meshName)
|
|
156
|
-
.map((node) => node.runtime
|
|
157
|
+
.map((node) => node.runtime?.drainCloseSessions()));
|
|
157
158
|
}
|
|
158
159
|
async notifyUnscopedServerDrain() {
|
|
159
160
|
await Promise.all([...this.nodes.values()]
|
|
160
161
|
.filter((node) => node.meshName === undefined)
|
|
161
|
-
.map((node) => node.runtime
|
|
162
|
+
.map((node) => node.runtime?.drainCloseSessions()));
|
|
162
163
|
}
|
|
163
164
|
}
|
|
164
165
|
exports.ZLinkStreamRuntimeManager = ZLinkStreamRuntimeManager;
|
|
@@ -169,6 +170,7 @@ class ZLinkStreamSessionRuntime extends stream_session_runtime_1.ZLinkStreamSess
|
|
|
169
170
|
// dispatch-error flow tracer.
|
|
170
171
|
const bindingRuntime = options.bindingRuntime ??
|
|
171
172
|
new ZLinkStreamBindingRuntime({
|
|
173
|
+
dispatchErrors: options.dispatchErrors,
|
|
172
174
|
flowCreationEnabled: () => options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
173
175
|
});
|
|
174
176
|
super({
|
|
@@ -186,6 +188,7 @@ class ZLinkStreamSessionNodeRuntime extends stream_session_runtime_1.ZLinkStream
|
|
|
186
188
|
// process diagnostics Off gate (see ZLinkStreamSessionRuntime above).
|
|
187
189
|
const bindingRuntime = options.bindingRuntime ??
|
|
188
190
|
new ZLinkStreamBindingRuntime({
|
|
191
|
+
dispatchErrors: options.dispatchErrors,
|
|
189
192
|
flowCreationEnabled: () => options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
190
193
|
});
|
|
191
194
|
super({
|
|
@@ -207,7 +210,8 @@ class ZLinkStreamBindingRuntime {
|
|
|
207
210
|
...options,
|
|
208
211
|
actorBindTimeoutMs: options.actorBindTimeoutMs ?? DEFAULT_ACTOR_BIND_TIMEOUT_MS
|
|
209
212
|
};
|
|
210
|
-
this.routes = new actor_session_binding_registry_1.ZLinkActorSessionBindingRegistry(
|
|
213
|
+
this.routes = new actor_session_binding_registry_1.ZLinkActorSessionBindingRegistry(actor_session_binding_registry_1.DEFAULT_TERMINAL_RELOCATION_CAPACITY, runtimeOptions.sessionRelocationSealTimeoutMs ??
|
|
214
|
+
Options_1.zlinkDefaultLocationOptions.sessionRelocationSealTimeoutMs, runtimeOptions.errorSink);
|
|
211
215
|
this.compressionCodec = (0, stream_frame_factory_1.resolveStreamCompressionCodec)(runtimeOptions.streamCompression);
|
|
212
216
|
this.frameMessages = new stream_frame_factory_1.ZLinkStreamFrameMessageFactory(runtimeOptions);
|
|
213
217
|
this.boundSessions = new bound_session_service_1.ZLinkBoundSessionService(this.routes, this.frameMessages, runtimeOptions);
|
|
@@ -215,17 +219,9 @@ class ZLinkStreamBindingRuntime {
|
|
|
215
219
|
this.sessionActors = new session_actor_coordinator_1.ZLinkSessionActorCoordinator(this.routes, this, runtimeOptions, actorSessionLifecycle);
|
|
216
220
|
this.boundActorRelay = new bound_actor_relay_sender_1.ZLinkBoundActorRelaySender(this.routes, this.frameMessages, runtimeOptions, actorSessionLifecycle);
|
|
217
221
|
(0, actor_session_binding_runtime_owner_1.registerActorSessionBindingRuntimeOwner)(this, {
|
|
218
|
-
actorSlot: async (actorId, sessionRid) =>
|
|
219
|
-
const route = await this.routes.route(actorId);
|
|
220
|
-
return route !== undefined && route.sessionIdentity === sessionRid
|
|
221
|
-
? route.actorSlot
|
|
222
|
-
: undefined;
|
|
223
|
-
},
|
|
222
|
+
actorSlot: async (actorId, sessionRid) => (await this.routes.routeForSessionBinding(actorId, sessionRid))?.actorSlot,
|
|
224
223
|
sealRelocation: (claim, expected, signal) => this.routes.sealRelocation(claim, expected, signal),
|
|
225
224
|
relocationSnapshot: (actorId, sealId) => this.routes.relocationSnapshot(actorId, sealId),
|
|
226
|
-
retainRelocationOutbound: (actorId, operation, sealId) => this.routes.retainRelocationOutbound(actorId, operation, sealId),
|
|
227
|
-
admitRelocationOutbound: (claim, operation) => this.routes.admitRelocationOutbound(claim, operation),
|
|
228
|
-
discardRelocationOutbound: (actorId, sealId, error) => this.routes.discardRelocationOutbound(actorId, sealId, error),
|
|
229
225
|
applyRelocation: (...args) => this.routes.applyRelocation(...args),
|
|
230
226
|
observeRelocationTerminal: (...args) => this.routes.observeRelocationTerminal(...args),
|
|
231
227
|
clearRelocation: (actorId, error) => this.routes.clearRelocation(actorId, error),
|
|
@@ -328,6 +324,9 @@ class ZLinkStreamBindingRuntime {
|
|
|
328
324
|
async disconnectBoundSession(actorId, signal) {
|
|
329
325
|
await this.boundSessions.disconnectBoundSession(actorId, signal);
|
|
330
326
|
}
|
|
327
|
+
async closeSessionBinding(actorId, expected, signal) {
|
|
328
|
+
await this.boundSessions.closeSessionBinding(actorId, expected, signal);
|
|
329
|
+
}
|
|
331
330
|
async relay(actor, payload, signal, dispatchHeader) {
|
|
332
331
|
return await this.boundActorRelay.relay(actor, payload, signal, dispatchHeader);
|
|
333
332
|
}
|
|
@@ -5,6 +5,7 @@ import type { ZLinkBackendSendFlags, ZLinkBackendStreamSocket } from '../backend
|
|
|
5
5
|
import type { StreamSessionService } from '../foundation/service-runtime-contracts';
|
|
6
6
|
import type { ServiceRetiredBoundSessionRouteFence } from '../foundation/service-stateful-wire-codec';
|
|
7
7
|
import type { ServiceActorRef } from '../foundation/service-stateful-registry';
|
|
8
|
+
import type { ServiceStreamSessionBinding } from '../foundation/service-runtime-contracts';
|
|
8
9
|
import { type ZLinkMeshCompletionTable } from '../backend/mesh-completion-table';
|
|
9
10
|
import { ZLinkStreamCloseReasonCode } from './protocol';
|
|
10
11
|
import type { ZLinkActorSessionAuthorityFence } from './actor-session-binding-registry';
|
|
@@ -29,6 +30,8 @@ export declare class ZLinkManagedStream implements ZLinkStream {
|
|
|
29
30
|
get routingId(): RoutingId;
|
|
30
31
|
get actorBindingRoutingId(): RoutingId;
|
|
31
32
|
actorBindingGeneration(actorId: string): bigint | undefined;
|
|
33
|
+
/** The Session owner's registry snapshot of the Actor's current native binding. */
|
|
34
|
+
actorBinding(actorId: string): ServiceStreamSessionBinding | undefined;
|
|
32
35
|
private isTransportClosed;
|
|
33
36
|
get localAddr(): string | undefined;
|
|
34
37
|
get remoteAddr(): string | undefined;
|
|
@@ -8,6 +8,7 @@ const abort_1 = require("../abort");
|
|
|
8
8
|
const payload_codec_1 = require("../messaging/payload-codec");
|
|
9
9
|
const runtime_values_1 = require("../backend/runtime-values");
|
|
10
10
|
const runtime_message_1 = require("../backend/runtime-message");
|
|
11
|
+
const diagnostic_text_1 = require("../diagnostics/diagnostic-text");
|
|
11
12
|
const mesh_completion_table_1 = require("../backend/mesh-completion-table");
|
|
12
13
|
const protocol_1 = require("./protocol");
|
|
13
14
|
const ZLINK_SEND_DONT_WAIT = 1;
|
|
@@ -47,7 +48,11 @@ class ZLinkManagedStream {
|
|
|
47
48
|
return this.backendSessionRoutingId;
|
|
48
49
|
}
|
|
49
50
|
actorBindingGeneration(actorId) {
|
|
50
|
-
return this.nativeActorBindings.get(actorId)?.bindingGeneration;
|
|
51
|
+
return this.nativeActorBindings.get(actorId)?.binding?.bindingGeneration;
|
|
52
|
+
}
|
|
53
|
+
/** The Session owner's registry snapshot of the Actor's current native binding. */
|
|
54
|
+
actorBinding(actorId) {
|
|
55
|
+
return this.nativeActorBindings.get(actorId)?.binding;
|
|
51
56
|
}
|
|
52
57
|
isTransportClosed() {
|
|
53
58
|
return this.transportClosed;
|
|
@@ -77,8 +82,9 @@ class ZLinkManagedStream {
|
|
|
77
82
|
return { status: submission_result_1.ZLinkSubmitStatus.Submitted };
|
|
78
83
|
}
|
|
79
84
|
catch (error) {
|
|
80
|
-
if ((0, runtime_values_1.
|
|
81
|
-
return
|
|
85
|
+
if ((0, runtime_values_1.isZLinkBackendResultError)(error) && error.operation === 'submit') {
|
|
86
|
+
return (0, submission_result_1.classifySubmitResult)(error.result, 'STREAM submit', error.phase);
|
|
87
|
+
}
|
|
82
88
|
throw error;
|
|
83
89
|
}
|
|
84
90
|
}
|
|
@@ -157,7 +163,7 @@ class ZLinkManagedStream {
|
|
|
157
163
|
}
|
|
158
164
|
this.nativeActorBindings.set(actor.actorId, {
|
|
159
165
|
actor: nativeActor,
|
|
160
|
-
|
|
166
|
+
binding,
|
|
161
167
|
route
|
|
162
168
|
});
|
|
163
169
|
return;
|
|
@@ -179,7 +185,9 @@ class ZLinkManagedStream {
|
|
|
179
185
|
String(resolved.nodeRid) !== String(actor.nodeRid)) {
|
|
180
186
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorRouteNotFound, `Actor '${actor.actorId}' native route fence does not match its ActorRef ` +
|
|
181
187
|
`(expected ${String(actor.nodeRid)}/${actor.objectGeneration}, ` +
|
|
182
|
-
`resolved ${
|
|
188
|
+
`resolved ${(0, diagnostic_text_1.diagnosticTextOrAbsent)(resolved === undefined
|
|
189
|
+
? undefined
|
|
190
|
+
: `${String(resolved.nodeRid)}/${resolved.generation}`)}, ` +
|
|
183
191
|
`terminal=${completion.terminalResult}, failure=${completion.failureErrno}).`);
|
|
184
192
|
}
|
|
185
193
|
}
|
|
@@ -198,12 +206,13 @@ class ZLinkManagedStream {
|
|
|
198
206
|
const binding = this.nativeActorBindings.get(actorId);
|
|
199
207
|
if (binding?.route !== undefined) {
|
|
200
208
|
const route = binding.route;
|
|
201
|
-
|
|
209
|
+
const bindingGeneration = binding.binding.bindingGeneration;
|
|
210
|
+
if (!this.hasNativeBinding(route, actorId, bindingGeneration)) {
|
|
202
211
|
this.nativeActorBindings.delete(actorId);
|
|
203
212
|
return;
|
|
204
213
|
}
|
|
205
214
|
try {
|
|
206
|
-
await this.requireSuccessfulCompletion(route.completions.submit(() => route.service.unbindActor(this.backendRoutingId(), binding.actor,
|
|
215
|
+
await this.requireSuccessfulCompletion(route.completions.submit(() => route.service.unbindActor(this.backendRoutingId(), binding.actor, bindingGeneration, timeoutMs), signal), `Actor '${actorId}' native session unbind`,
|
|
207
216
|
// Destroy can remove the actor registry entry before the old
|
|
208
217
|
// session owner processes its cleanup. Both a disconnected route and
|
|
209
218
|
// that stale actor route are idempotent unbind outcomes.
|
|
@@ -214,7 +223,7 @@ class ZLinkManagedStream {
|
|
|
214
223
|
// tombstone. A transport teardown can therefore report an internal
|
|
215
224
|
// completion after the exact binding is already gone. Treat only that
|
|
216
225
|
// exact missing binding as stale cleanup; preserve other failures.
|
|
217
|
-
if (this.hasNativeBinding(route, actorId,
|
|
226
|
+
if (this.hasNativeBinding(route, actorId, bindingGeneration)) {
|
|
218
227
|
throw error;
|
|
219
228
|
}
|
|
220
229
|
}
|