@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,3 +1,5 @@
|
|
|
1
|
+
import { ZLINK_MAX_SPOT_ID_BYTES } from '../../contracts/Common/CoreTypes';
|
|
2
|
+
import { ZlinkStreamContentType } from '@zlink-systems/stream-wire';
|
|
1
3
|
import type { ZLinkBackendActorRef } from '../backend/contracts';
|
|
2
4
|
import { decodeActorMessageFollowContext, type ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
3
5
|
import type { RoutingId, ZLinkActor } from '../../contracts';
|
|
@@ -146,7 +148,7 @@ export function decodeRemoteActorJoinPayload(
|
|
|
146
148
|
requestContentType:
|
|
147
149
|
typeof payload.requestContentType === 'string'
|
|
148
150
|
? payload.requestContentType
|
|
149
|
-
:
|
|
151
|
+
: ZlinkStreamContentType.Json
|
|
150
152
|
};
|
|
151
153
|
}
|
|
152
154
|
|
|
@@ -302,8 +304,10 @@ function decodeBoundSessionServiceWireRelocation(
|
|
|
302
304
|
|
|
303
305
|
function requireSpotId(value: string): string {
|
|
304
306
|
const bytes = Buffer.byteLength(value, 'utf8');
|
|
305
|
-
if (bytes < 1 || bytes >
|
|
306
|
-
throw new Error(
|
|
307
|
+
if (bytes < 1 || bytes > ZLINK_MAX_SPOT_ID_BYTES) {
|
|
308
|
+
throw new Error(
|
|
309
|
+
`Remote bound session SpotId must contain 1..${ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes.`
|
|
310
|
+
);
|
|
307
311
|
}
|
|
308
312
|
return value;
|
|
309
313
|
}
|
|
@@ -1,21 +1,31 @@
|
|
|
1
|
-
import
|
|
2
|
-
Type,
|
|
3
|
-
ZLinkMessageSerializer,
|
|
4
|
-
ZLinkSpot,
|
|
5
|
-
ZLinkSpotPacketHandler,
|
|
6
|
-
ZLinkSpotRequestHandler
|
|
1
|
+
import {
|
|
2
|
+
type Type,
|
|
3
|
+
type ZLinkMessageSerializer,
|
|
4
|
+
type ZLinkSpot,
|
|
5
|
+
type ZLinkSpotPacketHandler,
|
|
6
|
+
type ZLinkSpotRequestHandler,
|
|
7
|
+
ZLinkFrameworkException,
|
|
8
|
+
zlinkMessageMetadata
|
|
7
9
|
} from '../../contracts';
|
|
10
|
+
|
|
11
|
+
import type { Message } from '../../contracts/Common/Message';
|
|
8
12
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
9
|
-
import { ZLinkFrameworkException, zlinkMessageMetadata } from '../../contracts';
|
|
10
13
|
import {
|
|
11
14
|
ZLinkRuntimeDispatchErrorAction as ZLinkDispatchErrorAction,
|
|
12
15
|
ZLinkRuntimeDispatchErrorReason as ZLinkDispatchErrorReason,
|
|
13
16
|
ZLinkDispatchErrorSurface,
|
|
14
17
|
ZLinkDispatchMessageKind
|
|
15
18
|
} from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
19
|
+
import {
|
|
20
|
+
ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
|
|
21
|
+
ZLINK_REMOTE_BOUND_SESSION_ERROR_PACKET,
|
|
22
|
+
ZLINK_REMOTE_BOUND_SESSION_RESPONSE_PACKET,
|
|
23
|
+
ZLINK_REMOTE_BOUND_SESSION_SEND_PACKET
|
|
24
|
+
} from '../actors';
|
|
25
|
+
import type { ZLinkApplicationWorkClaim } from '../admission';
|
|
26
|
+
import { releaseApplicationJobPermitBeforeHandler } from '../application-jobs/application-job-queue-scope';
|
|
16
27
|
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
17
28
|
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
18
|
-
import type { Message } from '../../contracts/Common/Message';
|
|
19
29
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
20
30
|
import {
|
|
21
31
|
decodeChannelEnvelope,
|
|
@@ -27,25 +37,18 @@ import {
|
|
|
27
37
|
ZLinkChannelMessageKind,
|
|
28
38
|
type ZLinkChannelEnvelopeCodecRegistry
|
|
29
39
|
} from '../channels/channel-envelope';
|
|
40
|
+
import { SPOT_DIRECT_ENVELOPE } from '../channels/spot-direct-envelope';
|
|
41
|
+
import { createInboundFlow, runWithFlow } from '../diagnostics/flow-context';
|
|
42
|
+
import { zlinkMetadataByteLength, zlinkSerialWorkOptions } from '../execution/serial-work-size';
|
|
30
43
|
import {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
ZLINK_REMOTE_BOUND_SESSION_SEND_PACKET
|
|
35
|
-
} from '../actors';
|
|
44
|
+
internalFrameworkErrorKind,
|
|
45
|
+
ZLinkFrameworkInternalErrorKind
|
|
46
|
+
} from '../framework-errors-internal';
|
|
36
47
|
import { resolveLifecycleHandler } from '../handlers/handler-instance-scope';
|
|
37
48
|
import type { ZLinkSpotHandlerRegistration } from './spot-handler-registry';
|
|
38
|
-
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
39
|
-
import type { ZLinkApplicationWorkClaim } from '../admission';
|
|
40
|
-
import { zlinkMetadataByteLength, zlinkSerialWorkOptions } from '../execution/serial-work-size';
|
|
41
49
|
import { REMOTE_ACTOR_JOIN_PACKET } from './spot-remote-codec';
|
|
42
50
|
import { appendRouteReplyParts, hasReplyToken, submitRouteReply } from './spot-route-replies';
|
|
43
|
-
import {
|
|
44
|
-
import {
|
|
45
|
-
ZLinkFrameworkInternalErrorKind,
|
|
46
|
-
internalFrameworkErrorKind
|
|
47
|
-
} from '../framework-errors-internal';
|
|
48
|
-
import { releaseApplicationJobPermitBeforeHandler } from '../application-jobs/application-job-queue-scope';
|
|
51
|
+
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
49
52
|
|
|
50
53
|
interface ZLinkSpotRoutePacketDispatchOptions {
|
|
51
54
|
readonly packetHandlers: ReadonlyMap<string, readonly ZLinkSpotHandlerRegistration[]>;
|
|
@@ -58,8 +61,6 @@ interface ZLinkSpotRoutePacketDispatchOptions {
|
|
|
58
61
|
readonly claimApplicationWork?: () => ZLinkApplicationWorkClaim;
|
|
59
62
|
}
|
|
60
63
|
|
|
61
|
-
const SPOT_DIRECT_ENVELOPE = 'zlink.framework.spot-direct.v1';
|
|
62
|
-
|
|
63
64
|
/** D5: reply metadata attached only to framework-self-generated errors. */
|
|
64
65
|
const FRAMEWORK_ORIGIN_REPLY_METADATA: Readonly<Record<string, string>> = Object.freeze({
|
|
65
66
|
[ZLINK_FRAMEWORK_ORIGIN_METADATA_KEY]: ZLINK_FRAMEWORK_ORIGIN_METADATA_VALUE
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { constants as osConstants } from 'node:os';
|
|
1
2
|
import type {
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
ZLinkBackendReceived as BackendReceived,
|
|
4
|
+
ZLinkBackendMessageLike as MessageLike
|
|
4
5
|
} from '../backend/runtime-values';
|
|
5
6
|
import {
|
|
6
7
|
decodeChannelEnvelope,
|
|
@@ -8,8 +9,9 @@ import {
|
|
|
8
9
|
encodeChannelReplyParts
|
|
9
10
|
} from '../channels/channel-envelope';
|
|
10
11
|
import { ZLinkConfigurationException } from '../configuration';
|
|
11
|
-
import { encodeSpotRouteBridgeReply } from './spot-route-reply-wire';
|
|
12
12
|
import type { ZLinkDecodedRemoteActorJoinRequest } from './spot-remote-codec';
|
|
13
|
+
import { encodeSpotRouteBridgeReply } from './spot-route-reply-wire';
|
|
14
|
+
const nativeErrnoValues = osConstants.errno;
|
|
13
15
|
|
|
14
16
|
export interface ZLinkRouteReplySubmitOperation {
|
|
15
17
|
message(message: MessageLike): ZLinkRouteReplySubmitOperation;
|
|
@@ -120,6 +122,6 @@ function isNativeBadAddress(error: unknown): boolean {
|
|
|
120
122
|
return (
|
|
121
123
|
typeof error === 'object' &&
|
|
122
124
|
error !== null &&
|
|
123
|
-
Number((error as { nativeErrno?: unknown }).nativeErrno) ===
|
|
125
|
+
Number((error as { nativeErrno?: unknown }).nativeErrno) === nativeErrnoValues.EFAULT
|
|
124
126
|
);
|
|
125
127
|
}
|
|
@@ -5,6 +5,8 @@ import type {
|
|
|
5
5
|
ZLinkSpotActorJoinResult
|
|
6
6
|
} from '../../contracts';
|
|
7
7
|
import type { Message } from '../../contracts/Common/Message';
|
|
8
|
+
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult } from '../actors/actor-handoff';
|
|
9
|
+
import type { ZLinkRemoteBoundSessionTarget } from '../actors/actor-runtime-state';
|
|
8
10
|
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
9
11
|
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
10
12
|
import {
|
|
@@ -23,12 +25,12 @@ import {
|
|
|
23
25
|
hasRemoteActorJoinIdentity,
|
|
24
26
|
isRemoteActorJoinPayload,
|
|
25
27
|
type ZLinkDecodedRemoteActorJoinRequest,
|
|
26
|
-
type
|
|
27
|
-
type
|
|
28
|
+
type ZLinkRemoteActorJoinWirePayload,
|
|
29
|
+
type ZLinkRoutedActorTransferProvider
|
|
28
30
|
} from './spot-remote-codec';
|
|
29
31
|
import { submitRoutedActorJoinError, submitRoutedActorJoinReply } from './spot-route-replies';
|
|
30
32
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
31
|
-
|
|
33
|
+
const DEFAULT_PENDING_ADMISSION_TIMEOUT_MS = 30_000;
|
|
32
34
|
|
|
33
35
|
interface ZLinkRoutedActorAdmissionTarget {
|
|
34
36
|
onActorJoin?(actorId: string, request: ZLinkMessage): Promise<ZLinkSpotActorJoinResult>;
|
|
@@ -41,7 +43,8 @@ interface ZLinkSpotRoutedActorAdmissionOptions {
|
|
|
41
43
|
readonly routedActorTransferProvider?: ZLinkRoutedActorTransferProvider;
|
|
42
44
|
readonly commitTransferredActor?: (
|
|
43
45
|
actor: ZLinkActor,
|
|
44
|
-
backlog: readonly ZLinkActorHandoffPacket[]
|
|
46
|
+
backlog: readonly ZLinkActorHandoffPacket[],
|
|
47
|
+
sealedSession: ZLinkRemoteBoundSessionTarget | undefined
|
|
45
48
|
) => Promise<readonly ZLinkActorHandoffResult[]>;
|
|
46
49
|
readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
|
|
47
50
|
readonly pendingAdmissionTimeoutMs?: number;
|
|
@@ -220,7 +223,11 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
220
223
|
decoded.remoteBoundSessionTarget
|
|
221
224
|
);
|
|
222
225
|
const handoffResults =
|
|
223
|
-
(await this.options.commitTransferredActor?.(
|
|
226
|
+
(await this.options.commitTransferredActor?.(
|
|
227
|
+
actor,
|
|
228
|
+
decoded.handoffBacklog,
|
|
229
|
+
decoded.remoteBoundSessionTarget
|
|
230
|
+
)) ?? [];
|
|
224
231
|
const commitReply = {
|
|
225
232
|
accepted: true,
|
|
226
233
|
actorNodeRid: String(actorRef.nodeRid),
|
|
@@ -278,7 +285,7 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
278
285
|
if (pending.deadline !== undefined) clearTimeout(pending.deadline);
|
|
279
286
|
pending.deadline = setTimeout(() => {
|
|
280
287
|
if (this.pending.get(transferId) === pending) this.pending.delete(transferId);
|
|
281
|
-
}, this.options.pendingAdmissionTimeoutMs ??
|
|
288
|
+
}, this.options.pendingAdmissionTimeoutMs ?? DEFAULT_PENDING_ADMISSION_TIMEOUT_MS);
|
|
282
289
|
pending.deadline.unref();
|
|
283
290
|
}
|
|
284
291
|
|
|
@@ -9,11 +9,10 @@ import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProvider
|
|
|
9
9
|
import type { RoutingId } from '../../contracts';
|
|
10
10
|
import type { ActorRef } from '../../contracts/Common/ActorRef';
|
|
11
11
|
import type { ZLinkRemoteActorPacketTarget, ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
12
|
-
import type { ZLinkBackendReceived
|
|
12
|
+
import type { ZLinkBackendReceived } from '../backend/contracts';
|
|
13
13
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
14
14
|
import type { ZLinkChannelEnvelopeCodecRegistry } from '../channels/channel-envelope';
|
|
15
15
|
import { decodeRemoteActorPacketRelay } from './spot-remote-route-codec';
|
|
16
|
-
import { ZLINK_RECV_DONT_WAIT } from './spot-native-flags';
|
|
17
16
|
import { ZLinkSpotActorPacketRelayDispatch } from './spot-actor-packet-relay-dispatch';
|
|
18
17
|
import type {
|
|
19
18
|
ZLinkActorPacketDelivery,
|
|
@@ -33,8 +32,6 @@ interface ZLinkRoutedFrameAdmissionTarget {
|
|
|
33
32
|
}
|
|
34
33
|
|
|
35
34
|
interface ZLinkSpotRoutedFrameDispatchOptions {
|
|
36
|
-
readonly nativeSpot: ZLinkBackendSpot;
|
|
37
|
-
readonly createReceived: () => ZLinkBackendReceived;
|
|
38
35
|
readonly nativeSpotId: string;
|
|
39
36
|
readonly serial: ZLinkSpotSerialTurnExecutor;
|
|
40
37
|
readonly resolveActor: (actorId: string) => ZLinkActor | undefined;
|
|
@@ -43,7 +40,8 @@ interface ZLinkSpotRoutedFrameDispatchOptions {
|
|
|
43
40
|
readonly routedActorTransferProvider?: ZLinkRoutedActorTransferProvider;
|
|
44
41
|
readonly commitTransferredActor?: (
|
|
45
42
|
actor: ZLinkActor,
|
|
46
|
-
backlog: readonly ZLinkActorHandoffPacket[]
|
|
43
|
+
backlog: readonly ZLinkActorHandoffPacket[],
|
|
44
|
+
sealedSession: ZLinkRemoteBoundSessionTarget | undefined
|
|
47
45
|
) => Promise<readonly ZLinkActorHandoffResult[]>;
|
|
48
46
|
readonly actorPacketHandler?: (delivery: ZLinkActorPacketDelivery) => Promise<unknown>;
|
|
49
47
|
readonly routedBoundSessionReceiver?: (
|
|
@@ -86,11 +84,9 @@ interface ZLinkSpotRoutedFrameDispatchOptions {
|
|
|
86
84
|
readonly providerResolver?: ZLinkProviderResolver;
|
|
87
85
|
readonly dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
88
86
|
readonly claimApplicationWork?: () => ZLinkApplicationWorkClaim;
|
|
89
|
-
readonly waitIdle: () => Promise<void>;
|
|
90
87
|
}
|
|
91
88
|
|
|
92
89
|
export class ZLinkSpotRoutedFrameDispatch {
|
|
93
|
-
private routeDraining = false;
|
|
94
90
|
private readonly packetHandlers = new Map<string, ZLinkSpotHandlerRegistration[]>();
|
|
95
91
|
private readonly routedBoundSessionDispatch: ZLinkSpotRoutedBoundSessionDispatch;
|
|
96
92
|
private readonly actorPacketRelayDispatch: ZLinkSpotActorPacketRelayDispatch;
|
|
@@ -144,61 +140,6 @@ export class ZLinkSpotRoutedFrameDispatch {
|
|
|
144
140
|
}
|
|
145
141
|
}
|
|
146
142
|
|
|
147
|
-
async drain(
|
|
148
|
-
received: ZLinkBackendReceived | undefined = undefined,
|
|
149
|
-
retryDeadlineMs = performance.now()
|
|
150
|
-
): Promise<void> {
|
|
151
|
-
if (this.routeDraining) {
|
|
152
|
-
if (received !== undefined) {
|
|
153
|
-
try {
|
|
154
|
-
await this.dispatch(received);
|
|
155
|
-
} finally {
|
|
156
|
-
received.close();
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
this.routeDraining = true;
|
|
162
|
-
try {
|
|
163
|
-
if (received !== undefined) {
|
|
164
|
-
try {
|
|
165
|
-
await this.dispatch(received);
|
|
166
|
-
} finally {
|
|
167
|
-
received.close();
|
|
168
|
-
}
|
|
169
|
-
received = undefined;
|
|
170
|
-
}
|
|
171
|
-
for (;;) {
|
|
172
|
-
received ??= this.options.createReceived();
|
|
173
|
-
try {
|
|
174
|
-
if (!this.options.nativeSpot.recvRoute(received, ZLINK_RECV_DONT_WAIT)) {
|
|
175
|
-
received.close();
|
|
176
|
-
await this.options.waitIdle();
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
} catch (error) {
|
|
180
|
-
if (isRouteRecvRetryable(error)) {
|
|
181
|
-
closeReceivedQuietly(received);
|
|
182
|
-
if (performance.now() < retryDeadlineMs) {
|
|
183
|
-
setTimeout(() => void this.drain(undefined, retryDeadlineMs), 10);
|
|
184
|
-
}
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
received.close();
|
|
188
|
-
throw error;
|
|
189
|
-
}
|
|
190
|
-
try {
|
|
191
|
-
await this.dispatch(received);
|
|
192
|
-
} finally {
|
|
193
|
-
received.close();
|
|
194
|
-
}
|
|
195
|
-
received = this.options.createReceived();
|
|
196
|
-
}
|
|
197
|
-
} finally {
|
|
198
|
-
this.routeDraining = false;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
143
|
async dispatchFromEvent(received: ZLinkBackendReceived): Promise<void> {
|
|
203
144
|
try {
|
|
204
145
|
await this.dispatch(received);
|
|
@@ -234,20 +175,8 @@ export class ZLinkSpotRoutedFrameDispatch {
|
|
|
234
175
|
if (await this.routePacketDispatch.dispatch(received)) {
|
|
235
176
|
return;
|
|
236
177
|
}
|
|
237
|
-
await this.
|
|
178
|
+
await this.options.serial.executeLifecycleOperation(() =>
|
|
179
|
+
this.routedActorAdmission.admit(received)
|
|
180
|
+
);
|
|
238
181
|
}
|
|
239
182
|
}
|
|
240
|
-
|
|
241
|
-
function isRouteRecvRetryable(error: unknown): boolean {
|
|
242
|
-
return (
|
|
243
|
-
typeof error === 'object' &&
|
|
244
|
-
error !== null &&
|
|
245
|
-
[201, 202, 204].includes(Number((error as { result?: unknown }).result))
|
|
246
|
-
);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
function closeReceivedQuietly(received: ZLinkBackendReceived): void {
|
|
250
|
-
try {
|
|
251
|
-
received.close();
|
|
252
|
-
} catch {}
|
|
253
|
-
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { dispatchReasonFromError } from '../diagnostics/dispatch-error-details';
|
|
1
2
|
import type {
|
|
2
3
|
RoutingId,
|
|
3
4
|
Type,
|
|
@@ -7,7 +8,7 @@ import type {
|
|
|
7
8
|
} from '../../contracts';
|
|
8
9
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
9
10
|
import type { ZLinkApplicationWorkClaim } from '../admission';
|
|
10
|
-
import {
|
|
11
|
+
import { zlinkMessageMetadata } from '../../contracts';
|
|
11
12
|
import {
|
|
12
13
|
ZLinkRuntimeDispatchErrorAction as ZLinkDispatchErrorAction,
|
|
13
14
|
ZLinkRuntimeDispatchErrorReason as ZLinkDispatchErrorReason,
|
|
@@ -18,8 +19,7 @@ import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
|
18
19
|
import { ZLinkConfigurationException } from '../configuration';
|
|
19
20
|
import {
|
|
20
21
|
ZLinkFrameworkInternalErrorKind,
|
|
21
|
-
createInternalFrameworkException
|
|
22
|
-
internalFrameworkErrorKind
|
|
22
|
+
createInternalFrameworkException
|
|
23
23
|
} from '../framework-errors-internal';
|
|
24
24
|
import { resolveLifecycleHandler } from '../handlers/handler-instance-scope';
|
|
25
25
|
import type { ZLinkSpotHandlerRegistration } from './spot-handler-registry';
|
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
} from '../application-jobs/application-job-queue-scope';
|
|
32
32
|
|
|
33
33
|
interface ZLinkRoutedSpotPacketActivation {
|
|
34
|
+
readonly objectGeneration?: bigint;
|
|
34
35
|
readonly meshName?: string;
|
|
35
36
|
readonly spotId: RoutingId;
|
|
36
37
|
readonly spot: ZLinkSpot;
|
|
@@ -55,6 +56,9 @@ interface ZLinkRoutedSpotPacketContext {
|
|
|
55
56
|
readonly signal?: AbortSignal;
|
|
56
57
|
/** Wait until a recovered activation has actually entered its first handler. */
|
|
57
58
|
readonly awaitFirstHandlerTurn?: boolean;
|
|
59
|
+
readonly onOneWayError?: (error: unknown) => void;
|
|
60
|
+
/** Retains the caller's Instance address intent through an incarnation boundary. */
|
|
61
|
+
readonly activationRecord?: import('../foundation/service-runtime-contracts').ReceiveRecord;
|
|
58
62
|
}
|
|
59
63
|
|
|
60
64
|
export class ZLinkRoutedSpotPacketDispatch {
|
|
@@ -143,14 +147,52 @@ export class ZLinkRoutedSpotPacketDispatch {
|
|
|
143
147
|
activation.meshName === undefined
|
|
144
148
|
? undefined
|
|
145
149
|
: this.options.claimApplicationWork?.(activation.meshName);
|
|
146
|
-
const
|
|
150
|
+
const originalRecord = context.activationRecord?.activationRecord;
|
|
151
|
+
const instanceIntent =
|
|
152
|
+
originalRecord?.activation === 'missing' ||
|
|
153
|
+
(originalRecord?.activation === 'ready' && originalRecord.instanceIntent);
|
|
154
|
+
const runHandler = async (failure?: unknown) => {
|
|
147
155
|
try {
|
|
156
|
+
if (failure !== undefined) throw failure;
|
|
157
|
+
const current = this.options.resolveActivation(spotId);
|
|
158
|
+
if (
|
|
159
|
+
current === undefined ||
|
|
160
|
+
(!instanceIntent &&
|
|
161
|
+
(current !== activation ||
|
|
162
|
+
(originalRecord?.activation === 'ready' &&
|
|
163
|
+
originalRecord.route.objectGeneration !== current.objectGeneration)))
|
|
164
|
+
) {
|
|
165
|
+
throw createInternalFrameworkException(
|
|
166
|
+
ZLinkFrameworkInternalErrorKind.RequestTargetNotFound,
|
|
167
|
+
`Spot '${String(spotId)}' is not active.`
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
if (
|
|
171
|
+
context.activationRecord?.deadlineUnixMs !== undefined &&
|
|
172
|
+
context.activationRecord.deadlineUnixMs < BigInt(Date.now())
|
|
173
|
+
) {
|
|
174
|
+
throw createInternalFrameworkException(
|
|
175
|
+
ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
|
|
176
|
+
`Spot '${String(spotId)}' request deadline has expired.`
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
const currentRegistrations =
|
|
180
|
+
current === activation
|
|
181
|
+
? registrations
|
|
182
|
+
: current.handlers
|
|
183
|
+
.snapshot()
|
|
184
|
+
.filter(
|
|
185
|
+
(registration) =>
|
|
186
|
+
registration.kind === 'packet' &&
|
|
187
|
+
(registration.packetName ?? registration.handlerType.name) ===
|
|
188
|
+
(packetName ?? '')
|
|
189
|
+
);
|
|
148
190
|
// Decode only after the Spot has acquired both application admission
|
|
149
191
|
// and its execution authority.
|
|
150
192
|
const payload = decodePayload();
|
|
151
|
-
for (const registration of
|
|
193
|
+
for (const registration of currentRegistrations) {
|
|
152
194
|
const handler = await resolveLifecycleHandler(
|
|
153
|
-
|
|
195
|
+
current.spot,
|
|
154
196
|
registration.handlerType as Type<
|
|
155
197
|
| ZLinkSpotPacketHandler<ZLinkSpot, unknown>
|
|
156
198
|
| ZLinkSpotRequestHandler<ZLinkSpot, unknown, unknown>
|
|
@@ -159,8 +201,9 @@ export class ZLinkRoutedSpotPacketDispatch {
|
|
|
159
201
|
);
|
|
160
202
|
resolveFirstHandlerTurn?.();
|
|
161
203
|
resolveFirstHandlerTurn = undefined;
|
|
204
|
+
context.activationRecord?.onHandlerTurnStarted?.();
|
|
162
205
|
releaseApplicationJobPermitBeforeHandler();
|
|
163
|
-
response = await handler.handle(
|
|
206
|
+
response = await handler.handle(current.spot, payload, {
|
|
164
207
|
channelName: context.channelName,
|
|
165
208
|
contentType: context.contentType,
|
|
166
209
|
packetName: packetName!,
|
|
@@ -186,17 +229,33 @@ export class ZLinkRoutedSpotPacketDispatch {
|
|
|
186
229
|
applicationClaim?.close();
|
|
187
230
|
}
|
|
188
231
|
},
|
|
189
|
-
(error) =>
|
|
232
|
+
(error) => {
|
|
233
|
+
if (context.onOneWayError === undefined) {
|
|
234
|
+
this.reportFailure(spotId, packetName, context, false, error);
|
|
235
|
+
} else if (resolveFirstHandlerTurn === undefined) {
|
|
236
|
+
context.onOneWayError(error);
|
|
237
|
+
}
|
|
238
|
+
},
|
|
190
239
|
context.workOptions,
|
|
191
|
-
{ signal: context.signal }
|
|
240
|
+
{ signal: context.signal },
|
|
241
|
+
instanceIntent
|
|
242
|
+
? async (failure?: unknown) => {
|
|
243
|
+
try {
|
|
244
|
+
await runHandler(failure);
|
|
245
|
+
} finally {
|
|
246
|
+
detachedApplicationPermit?.releaseAfterInternalProcessing();
|
|
247
|
+
applicationClaim?.close();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
: undefined
|
|
192
251
|
);
|
|
193
|
-
await firstHandlerTurn;
|
|
194
252
|
} catch (error) {
|
|
195
253
|
detached = false;
|
|
196
254
|
detachedApplicationPermit?.releaseAfterInternalProcessing();
|
|
197
255
|
rejectFirstHandlerTurn?.(error);
|
|
198
256
|
throw error;
|
|
199
257
|
}
|
|
258
|
+
await firstHandlerTurn;
|
|
200
259
|
} else {
|
|
201
260
|
if (activation.serial.isCurrentTurn) {
|
|
202
261
|
throw createInternalFrameworkException(
|
|
@@ -204,10 +263,15 @@ export class ZLinkRoutedSpotPacketDispatch {
|
|
|
204
263
|
`Spot '${spotId}' cannot await a request to its current serial turn.`
|
|
205
264
|
);
|
|
206
265
|
}
|
|
207
|
-
await activation.serial.execute(
|
|
266
|
+
await activation.serial.execute(
|
|
267
|
+
runHandler,
|
|
268
|
+
context.workOptions,
|
|
269
|
+
instanceIntent ? runHandler : undefined
|
|
270
|
+
);
|
|
208
271
|
}
|
|
209
272
|
} catch (error) {
|
|
210
|
-
|
|
273
|
+
if (context.activationRecord?.activationRecord === undefined)
|
|
274
|
+
this.reportFailure(spotId, packetName, context, returnResponse, error);
|
|
211
275
|
throw error;
|
|
212
276
|
} finally {
|
|
213
277
|
if (!detached) applicationClaim?.close();
|
|
@@ -222,18 +286,17 @@ export class ZLinkRoutedSpotPacketDispatch {
|
|
|
222
286
|
returnResponse: boolean,
|
|
223
287
|
error: unknown
|
|
224
288
|
): void {
|
|
225
|
-
const
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
surface:
|
|
289
|
+
const reporter = this.options.dispatchErrors;
|
|
290
|
+
if (reporter?.captureEnabled() !== true) return;
|
|
291
|
+
reporter.report({
|
|
292
|
+
surface:
|
|
293
|
+
context.activationRecord?.activationRecord?.kind === 'instanceSpot'
|
|
294
|
+
? ZLinkDispatchErrorSurface.InstanceSpot
|
|
295
|
+
: ZLinkDispatchErrorSurface.SpotRoute,
|
|
229
296
|
messageKind: returnResponse
|
|
230
297
|
? ZLinkDispatchMessageKind.Request
|
|
231
298
|
: ZLinkDispatchMessageKind.Send,
|
|
232
|
-
reason:
|
|
233
|
-
frameworkErrorKind === ZLinkFrameworkInternalErrorKind.WorkerQueueFull ||
|
|
234
|
-
frameworkErrorKind === ZLinkFrameworkInternalErrorKind.DeadlineExceeded
|
|
235
|
-
? ZLinkDispatchErrorReason.Backpressure
|
|
236
|
-
: ZLinkDispatchErrorReason.HandlerException,
|
|
299
|
+
reason: dispatchReasonFromError(error),
|
|
237
300
|
action: returnResponse ? ZLinkDispatchErrorAction.FailCaller : ZLinkDispatchErrorAction.Drop,
|
|
238
301
|
packetName,
|
|
239
302
|
channelName: context.channelName,
|
|
@@ -245,9 +308,19 @@ export class ZLinkRoutedSpotPacketDispatch {
|
|
|
245
308
|
private reportMissing(
|
|
246
309
|
spotId: RoutingId,
|
|
247
310
|
packetName: string | undefined,
|
|
248
|
-
context:
|
|
311
|
+
context: ZLinkRoutedSpotPacketContext,
|
|
249
312
|
returnResponse: boolean
|
|
250
313
|
): void {
|
|
314
|
+
if (context.activationRecord?.activationRecord !== undefined) {
|
|
315
|
+
if (!returnResponse && context.onOneWayError !== undefined)
|
|
316
|
+
context.onOneWayError(
|
|
317
|
+
createInternalFrameworkException(
|
|
318
|
+
ZLinkFrameworkInternalErrorKind.HandlerNotFound,
|
|
319
|
+
`SPOT route handler not found: ${packetName}`
|
|
320
|
+
)
|
|
321
|
+
);
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
251
324
|
this.options.dispatchErrors?.report({
|
|
252
325
|
surface: ZLinkDispatchErrorSurface.SpotRoute,
|
|
253
326
|
messageKind: returnResponse
|
|
@@ -10,7 +10,7 @@ import type { ZLinkMessageFollowOrigin } from '../foundation/service-runtime-con
|
|
|
10
10
|
import type {
|
|
11
11
|
ZLinkRemoteActorPacketTarget,
|
|
12
12
|
ZLinkRemoteBoundSessionTarget,
|
|
13
|
-
|
|
13
|
+
ZLinkDeferredJoinCompletion
|
|
14
14
|
} from '../actors';
|
|
15
15
|
import type { ZLinkActorHandoffDispatch } from '../actors/actor-handoff';
|
|
16
16
|
import type { ZLinkActorResponseOptions } from './spot-actor-packet-dispatch';
|
|
@@ -44,26 +44,15 @@ export interface ZLinkSpotActorTransferRuntime {
|
|
|
44
44
|
operationId: ZLinkActorJoinOperationId,
|
|
45
45
|
actorRef: ActorRef,
|
|
46
46
|
rawReply: Uint8Array,
|
|
47
|
-
replyContentType?: string
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
discardDeferredJoinAccepted(
|
|
52
|
-
root: ZLinkDeferredJoinAcceptedRoot,
|
|
53
|
-
signal?: AbortSignal
|
|
54
|
-
): Promise<void>;
|
|
55
|
-
markDeferredJoinAcceptedCommitted(
|
|
56
|
-
root: ZLinkDeferredJoinAcceptedRoot,
|
|
57
|
-
actorRef: ActorRef,
|
|
58
|
-
signal?: AbortSignal
|
|
59
|
-
): Promise<ZLinkDeferredJoinAcceptedRoot>;
|
|
60
|
-
commitAndDeliverDeferredJoinAccepted(
|
|
61
|
-
root: ZLinkDeferredJoinAcceptedRoot,
|
|
47
|
+
replyContentType?: string
|
|
48
|
+
): ZLinkDeferredJoinCompletion;
|
|
49
|
+
deliverDeferredJoinCompletion(
|
|
50
|
+
completion: ZLinkDeferredJoinCompletion,
|
|
62
51
|
actor: ZLinkActor,
|
|
63
52
|
actorRef: ActorRef,
|
|
64
53
|
submitMailbox: <T>(operation: () => Promise<T>) => Promise<T>,
|
|
65
54
|
signal?: AbortSignal
|
|
66
|
-
): Promise<
|
|
55
|
+
): Promise<void>;
|
|
67
56
|
getOrCreateRoutedActor(
|
|
68
57
|
actorId: string,
|
|
69
58
|
actorType: string,
|
|
@@ -83,15 +72,6 @@ export interface ZLinkSpotActorTransferRuntime {
|
|
|
83
72
|
deadlineAtMs: number,
|
|
84
73
|
signal?: AbortSignal
|
|
85
74
|
): Promise<import('../locations/internal-location-contracts').ZLinkAuthoritySnapshot>;
|
|
86
|
-
rememberRoutedActorTransferTarget(
|
|
87
|
-
actorId: string,
|
|
88
|
-
target: ZLinkRemoteBoundSessionTarget | undefined
|
|
89
|
-
): void;
|
|
90
|
-
claimNativeActorLocation(
|
|
91
|
-
actor: ZLinkActor,
|
|
92
|
-
spotId: RoutingId,
|
|
93
|
-
spotMeshName: string
|
|
94
|
-
): Promise<ZLinkNativeActorJoinSnapshot>;
|
|
95
75
|
claimRoutedActorLocation(
|
|
96
76
|
actor: ZLinkActor,
|
|
97
77
|
spotId: RoutingId,
|
|
@@ -101,28 +81,19 @@ export interface ZLinkSpotActorTransferRuntime {
|
|
|
101
81
|
readonly membershipEpoch: bigint;
|
|
102
82
|
}
|
|
103
83
|
): Promise<void>;
|
|
104
|
-
publishRoutedActorOwnership(
|
|
84
|
+
publishRoutedActorOwnership(
|
|
85
|
+
actor: ZLinkActor,
|
|
86
|
+
sealedSession: ZLinkRemoteBoundSessionTarget | undefined
|
|
87
|
+
): Promise<void>;
|
|
105
88
|
openRoutedActorSession(actor: ZLinkActor): Promise<void>;
|
|
106
89
|
bindRoutedActorRef(actor: ZLinkActor, actorRef: ActorRef): void;
|
|
107
90
|
commitRoutedActor(actor: ZLinkActor, spotId: RoutingId, spot: ZLinkSpot): void;
|
|
108
91
|
clearRoutedActor(actor: ZLinkActor): void;
|
|
109
|
-
rollbackNativeActorJoin(actor: ZLinkActor, snapshot: ZLinkNativeActorJoinSnapshot): Promise<void>;
|
|
110
92
|
rollbackRoutedActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
|
|
111
93
|
notifyCoreSourceLeave(actor: ZLinkActor, callback: () => Promise<void>): Promise<void>;
|
|
112
94
|
actorEntryNodeRid(actor: ZLinkActor): RoutingId | undefined;
|
|
113
95
|
}
|
|
114
96
|
|
|
115
|
-
export interface ZLinkNativeActorJoinSnapshot {
|
|
116
|
-
readonly spotId?: RoutingId;
|
|
117
|
-
readonly spot?: ZLinkSpot;
|
|
118
|
-
readonly locationSpotId?: RoutingId;
|
|
119
|
-
readonly spotMeshName?: string;
|
|
120
|
-
readonly actorRef?: ActorRef;
|
|
121
|
-
readonly spotGeneration?: bigint;
|
|
122
|
-
readonly membershipEpoch?: bigint;
|
|
123
|
-
readonly ownerNodeGeneration?: bigint;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
97
|
export interface ZLinkSpotBoundSessionRuntime {
|
|
127
98
|
receiveRoutedBoundSession(
|
|
128
99
|
actorId: string,
|
|
@@ -151,10 +122,6 @@ export interface ZLinkSpotBoundSessionRuntime {
|
|
|
151
122
|
actorPacketTarget?: unknown,
|
|
152
123
|
signal?: AbortSignal
|
|
153
124
|
): Promise<void>;
|
|
154
|
-
rememberRemoteBoundSessionTarget(
|
|
155
|
-
actorId: string,
|
|
156
|
-
target: ZLinkRemoteBoundSessionTarget | undefined
|
|
157
|
-
): void;
|
|
158
125
|
resolveRemoteBoundSessionTarget(
|
|
159
126
|
sourceNodeRid: RoutingId,
|
|
160
127
|
sourceSessionRid: RoutingId
|
|
@@ -107,6 +107,15 @@ export class ZLinkSpotSerialExecutor {
|
|
|
107
107
|
* ownership turn. Already accepted work remains drainable.
|
|
108
108
|
*/
|
|
109
109
|
close(): Promise<void> {
|
|
110
|
+
const children = this.closeChildren();
|
|
111
|
+
return Promise.all([children, this.spotSerial.whenIdle()]).then(() => undefined);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Closes the Actor and timer queues. The Spot queue stays open for the Spot
|
|
116
|
+
* Close lifecycle item that owns it; that Close closes it when it finishes.
|
|
117
|
+
*/
|
|
118
|
+
closeChildren(): Promise<void> {
|
|
110
119
|
if (this.closePromise !== undefined) return this.closePromise;
|
|
111
120
|
this.closing = true;
|
|
112
121
|
const childSerials = [...this.actorSerials.values(), ...this.timerSerials.values()];
|
|
@@ -115,8 +124,7 @@ export class ZLinkSpotSerialExecutor {
|
|
|
115
124
|
this.timerSerials.clear();
|
|
116
125
|
this.actorExecutors.clear();
|
|
117
126
|
this.closePromise = Promise.all([
|
|
118
|
-
|
|
119
|
-
...childSerials.map((serial) => serial.close()),
|
|
127
|
+
...childSerials.map((serial) => serial.whenIdle()),
|
|
120
128
|
...actorExecutors.map((executor) => executor.close())
|
|
121
129
|
]).then(() => undefined);
|
|
122
130
|
return this.closePromise;
|