@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
|
@@ -7,6 +7,8 @@ exports.decodeRemoteActorJoinPayload = decodeRemoteActorJoinPayload;
|
|
|
7
7
|
exports.decodeHandoffBacklog = decodeHandoffBacklog;
|
|
8
8
|
exports.decodeRemoteActorRef = decodeRemoteActorRef;
|
|
9
9
|
exports.decodeRemoteBoundSessionTarget = decodeRemoteBoundSessionTarget;
|
|
10
|
+
const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
|
|
11
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
10
12
|
const actors_1 = require("../actors");
|
|
11
13
|
const runtime_message_1 = require("../backend/runtime-message");
|
|
12
14
|
const routing_id_1 = require("../routing-id");
|
|
@@ -58,7 +60,7 @@ function decodeRemoteActorJoinPayload(payload, request, received, raw, envelope)
|
|
|
58
60
|
request,
|
|
59
61
|
requestContentType: typeof payload.requestContentType === 'string'
|
|
60
62
|
? payload.requestContentType
|
|
61
|
-
:
|
|
63
|
+
: stream_wire_1.ZlinkStreamContentType.Json
|
|
62
64
|
};
|
|
63
65
|
}
|
|
64
66
|
function decodeHandoffBacklog(value) {
|
|
@@ -179,8 +181,8 @@ function decodeBoundSessionServiceWireRelocation(value) {
|
|
|
179
181
|
}
|
|
180
182
|
function requireSpotId(value) {
|
|
181
183
|
const bytes = Buffer.byteLength(value, 'utf8');
|
|
182
|
-
if (bytes < 1 || bytes >
|
|
183
|
-
throw new Error(
|
|
184
|
+
if (bytes < 1 || bytes > CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES) {
|
|
185
|
+
throw new Error(`Remote bound session SpotId must contain 1..${CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes.`);
|
|
184
186
|
}
|
|
185
187
|
return value;
|
|
186
188
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ZLinkMessageSerializer, type ZLinkSpot } from '../../contracts';
|
|
2
2
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
3
|
+
import type { ZLinkApplicationWorkClaim } from '../admission';
|
|
3
4
|
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
4
5
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
5
6
|
import type { ZLinkSpotHandlerRegistration } from './spot-handler-registry';
|
|
6
7
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
7
|
-
import type { ZLinkApplicationWorkClaim } from '../admission';
|
|
8
8
|
interface ZLinkSpotRoutePacketDispatchOptions {
|
|
9
9
|
readonly packetHandlers: ReadonlyMap<string, readonly ZLinkSpotHandlerRegistration[]>;
|
|
10
10
|
readonly nativeSpotId: string;
|
|
@@ -3,17 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ZLinkSpotRoutePacketDispatch = void 0;
|
|
4
4
|
const contracts_1 = require("../../contracts");
|
|
5
5
|
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
6
|
+
const actors_1 = require("../actors");
|
|
7
|
+
const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
|
|
6
8
|
const runtime_message_1 = require("../backend/runtime-message");
|
|
7
9
|
const channel_envelope_1 = require("../channels/channel-envelope");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
+
const spot_direct_envelope_1 = require("../channels/spot-direct-envelope");
|
|
11
|
+
const flow_context_1 = require("../diagnostics/flow-context");
|
|
10
12
|
const serial_work_size_1 = require("../execution/serial-work-size");
|
|
13
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
14
|
+
const handler_instance_scope_1 = require("../handlers/handler-instance-scope");
|
|
11
15
|
const spot_remote_codec_1 = require("./spot-remote-codec");
|
|
12
16
|
const spot_route_replies_1 = require("./spot-route-replies");
|
|
13
|
-
const flow_context_1 = require("../diagnostics/flow-context");
|
|
14
|
-
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
15
|
-
const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
|
|
16
|
-
const SPOT_DIRECT_ENVELOPE = 'zlink.framework.spot-direct.v1';
|
|
17
17
|
/** D5: reply metadata attached only to framework-self-generated errors. */
|
|
18
18
|
const FRAMEWORK_ORIGIN_REPLY_METADATA = Object.freeze({
|
|
19
19
|
[channel_envelope_1.ZLINK_FRAMEWORK_ORIGIN_METADATA_KEY]: channel_envelope_1.ZLINK_FRAMEWORK_ORIGIN_METADATA_VALUE
|
|
@@ -206,7 +206,7 @@ function decodeSpotDirectEnvelope(parts) {
|
|
|
206
206
|
}
|
|
207
207
|
try {
|
|
208
208
|
const decoded = JSON.parse(parts[0].data().toString());
|
|
209
|
-
if (decoded.marker !== SPOT_DIRECT_ENVELOPE ||
|
|
209
|
+
if (decoded.marker !== spot_direct_envelope_1.SPOT_DIRECT_ENVELOPE ||
|
|
210
210
|
(decoded.kind !== 1 /* ZLinkChannelMessageKind.Request */ &&
|
|
211
211
|
decoded.kind !== 3 /* ZLinkChannelMessageKind.Command */) ||
|
|
212
212
|
typeof decoded.channelName !== 'string') {
|
|
@@ -232,7 +232,7 @@ function decodeSpotDirectEnvelope(parts) {
|
|
|
232
232
|
}
|
|
233
233
|
function encodeSpotDirectReply(ok, response, error) {
|
|
234
234
|
return runtime_message_1.ZLinkBufferMessage.fromOwned(Buffer.from(JSON.stringify({
|
|
235
|
-
marker: SPOT_DIRECT_ENVELOPE,
|
|
235
|
+
marker: spot_direct_envelope_1.SPOT_DIRECT_ENVELOPE,
|
|
236
236
|
ok,
|
|
237
237
|
response,
|
|
238
238
|
error
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ZLinkBackendReceived as BackendReceived, ZLinkBackendMessageLike as MessageLike } from '../backend/runtime-values';
|
|
2
2
|
import { decodeChannelEnvelope } from '../channels/channel-envelope';
|
|
3
|
-
import { encodeSpotRouteBridgeReply } from './spot-route-reply-wire';
|
|
4
3
|
import type { ZLinkDecodedRemoteActorJoinRequest } from './spot-remote-codec';
|
|
4
|
+
import { encodeSpotRouteBridgeReply } from './spot-route-reply-wire';
|
|
5
5
|
export interface ZLinkRouteReplySubmitOperation {
|
|
6
6
|
message(message: MessageLike): ZLinkRouteReplySubmitOperation;
|
|
7
7
|
submit(): void;
|
|
@@ -7,9 +7,11 @@ exports.submitRoutedActorJoinReply = submitRoutedActorJoinReply;
|
|
|
7
7
|
exports.submitRoutedActorJoinError = submitRoutedActorJoinError;
|
|
8
8
|
exports.appendRouteReplyParts = appendRouteReplyParts;
|
|
9
9
|
exports.hasReplyToken = hasReplyToken;
|
|
10
|
+
const node_os_1 = require("node:os");
|
|
10
11
|
const channel_envelope_1 = require("../channels/channel-envelope");
|
|
11
12
|
const configuration_1 = require("../configuration");
|
|
12
13
|
const spot_route_reply_wire_1 = require("./spot-route-reply-wire");
|
|
14
|
+
const nativeErrnoValues = node_os_1.constants.errno;
|
|
13
15
|
function submitRouteReply(operation) {
|
|
14
16
|
try {
|
|
15
17
|
operation.submit();
|
|
@@ -70,5 +72,5 @@ function requireRoutedActorJoinEnvelope(decoded) {
|
|
|
70
72
|
function isNativeBadAddress(error) {
|
|
71
73
|
return (typeof error === 'object' &&
|
|
72
74
|
error !== null &&
|
|
73
|
-
Number(error.nativeErrno) ===
|
|
75
|
+
Number(error.nativeErrno) === nativeErrnoValues.EFAULT);
|
|
74
76
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { ZLinkActor, ZLinkMessage, ZLinkMessageSerializer, ZLinkSpotActorJoinResult } from '../../contracts';
|
|
2
|
+
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult } from '../actors/actor-handoff';
|
|
3
|
+
import type { ZLinkRemoteBoundSessionTarget } from '../actors/actor-runtime-state';
|
|
2
4
|
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
3
5
|
import { type ZLinkRoutedActorTransferProvider } from './spot-remote-codec';
|
|
4
6
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
5
|
-
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult } from '../actors/actor-handoff';
|
|
6
7
|
interface ZLinkRoutedActorAdmissionTarget {
|
|
7
8
|
onActorJoin?(actorId: string, request: ZLinkMessage): Promise<ZLinkSpotActorJoinResult>;
|
|
8
9
|
}
|
|
@@ -11,7 +12,7 @@ interface ZLinkSpotRoutedActorAdmissionOptions {
|
|
|
11
12
|
readonly getTarget: () => ZLinkRoutedActorAdmissionTarget;
|
|
12
13
|
readonly defaultAccept: boolean;
|
|
13
14
|
readonly routedActorTransferProvider?: ZLinkRoutedActorTransferProvider;
|
|
14
|
-
readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[]) => Promise<readonly ZLinkActorHandoffResult[]>;
|
|
15
|
+
readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[], sealedSession: ZLinkRemoteBoundSessionTarget | undefined) => Promise<readonly ZLinkActorHandoffResult[]>;
|
|
15
16
|
readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
|
|
16
17
|
readonly pendingAdmissionTimeoutMs?: number;
|
|
17
18
|
/** Spec 27 §4: with tracing Off, inbound flow fields are neither validated nor carried forward. */
|
|
@@ -7,6 +7,7 @@ const payload_codec_1 = require("../messaging/payload-codec");
|
|
|
7
7
|
const routing_id_1 = require("../routing-id");
|
|
8
8
|
const spot_remote_codec_1 = require("./spot-remote-codec");
|
|
9
9
|
const spot_route_replies_1 = require("./spot-route-replies");
|
|
10
|
+
const DEFAULT_PENDING_ADMISSION_TIMEOUT_MS = 30_000;
|
|
10
11
|
class ZLinkSpotRoutedActorAdmission {
|
|
11
12
|
options;
|
|
12
13
|
pending = new Map();
|
|
@@ -139,7 +140,7 @@ class ZLinkSpotRoutedActorAdmission {
|
|
|
139
140
|
throw new Error('Remote actor transfer commit cannot materialize the target actor.');
|
|
140
141
|
}
|
|
141
142
|
const { actor, actorRef } = await this.options.routedActorTransferProvider(decoded.actorId, decoded.actorType, decoded.transferAdapterKey, decoded.transferState, decoded.actorEntryNodeRid, decoded.remoteBoundSessionTarget);
|
|
142
|
-
const handoffResults = (await this.options.commitTransferredActor?.(actor, decoded.handoffBacklog)) ?? [];
|
|
143
|
+
const handoffResults = (await this.options.commitTransferredActor?.(actor, decoded.handoffBacklog, decoded.remoteBoundSessionTarget)) ?? [];
|
|
143
144
|
const commitReply = {
|
|
144
145
|
accepted: true,
|
|
145
146
|
actorNodeRid: String(actorRef.nodeRid),
|
|
@@ -183,7 +184,7 @@ class ZLinkSpotRoutedActorAdmission {
|
|
|
183
184
|
pending.deadline = setTimeout(() => {
|
|
184
185
|
if (this.pending.get(transferId) === pending)
|
|
185
186
|
this.pending.delete(transferId);
|
|
186
|
-
}, this.options.pendingAdmissionTimeoutMs ??
|
|
187
|
+
}, this.options.pendingAdmissionTimeoutMs ?? DEFAULT_PENDING_ADMISSION_TIMEOUT_MS);
|
|
187
188
|
pending.deadline.unref();
|
|
188
189
|
}
|
|
189
190
|
closeDecoded(decoded) {
|
|
@@ -3,7 +3,7 @@ import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProvider
|
|
|
3
3
|
import type { RoutingId } from '../../contracts';
|
|
4
4
|
import type { ActorRef } from '../../contracts/Common/ActorRef';
|
|
5
5
|
import type { ZLinkRemoteActorPacketTarget, ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
6
|
-
import type { ZLinkBackendReceived
|
|
6
|
+
import type { ZLinkBackendReceived } from '../backend/contracts';
|
|
7
7
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
8
8
|
import type { ZLinkActorPacketDelivery, ZLinkActorResponseOptions } from './spot-actor-packet-dispatch';
|
|
9
9
|
import type { ZLinkSpotHandlerRegistration } from './spot-handler-registry';
|
|
@@ -15,15 +15,13 @@ interface ZLinkRoutedFrameAdmissionTarget {
|
|
|
15
15
|
onActorJoin?(actorId: string, request: ZLinkMessage): Promise<ZLinkSpotActorJoinResult>;
|
|
16
16
|
}
|
|
17
17
|
interface ZLinkSpotRoutedFrameDispatchOptions {
|
|
18
|
-
readonly nativeSpot: ZLinkBackendSpot;
|
|
19
|
-
readonly createReceived: () => ZLinkBackendReceived;
|
|
20
18
|
readonly nativeSpotId: string;
|
|
21
19
|
readonly serial: ZLinkSpotSerialTurnExecutor;
|
|
22
20
|
readonly resolveActor: (actorId: string) => ZLinkActor | undefined;
|
|
23
21
|
readonly getTarget: () => ZLinkRoutedFrameAdmissionTarget & ZLinkSpot;
|
|
24
22
|
readonly defaultAccept: boolean;
|
|
25
23
|
readonly routedActorTransferProvider?: ZLinkRoutedActorTransferProvider;
|
|
26
|
-
readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[]) => Promise<readonly ZLinkActorHandoffResult[]>;
|
|
24
|
+
readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[], sealedSession: ZLinkRemoteBoundSessionTarget | undefined) => Promise<readonly ZLinkActorHandoffResult[]>;
|
|
27
25
|
readonly actorPacketHandler?: (delivery: ZLinkActorPacketDelivery) => Promise<unknown>;
|
|
28
26
|
readonly routedBoundSessionReceiver?: (actorId: string, message: unknown, packetName: string | undefined, metadata: ReadonlyMap<string, string>, actorRef?: ActorRef, actorPacketTarget?: unknown, signal?: AbortSignal) => Promise<void>;
|
|
29
27
|
readonly routedBoundSessionResponseReceiver?: (actorId: string, packetName: string, requestSeq: bigint, message: unknown, replyOptions: ZLinkActorResponseOptions, actorPacketTarget?: unknown, signal?: AbortSignal) => Promise<void>;
|
|
@@ -34,11 +32,9 @@ interface ZLinkSpotRoutedFrameDispatchOptions {
|
|
|
34
32
|
readonly providerResolver?: ZLinkProviderResolver;
|
|
35
33
|
readonly dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
36
34
|
readonly claimApplicationWork?: () => ZLinkApplicationWorkClaim;
|
|
37
|
-
readonly waitIdle: () => Promise<void>;
|
|
38
35
|
}
|
|
39
36
|
export declare class ZLinkSpotRoutedFrameDispatch {
|
|
40
37
|
private readonly options;
|
|
41
|
-
private routeDraining;
|
|
42
38
|
private readonly packetHandlers;
|
|
43
39
|
private readonly routedBoundSessionDispatch;
|
|
44
40
|
private readonly actorPacketRelayDispatch;
|
|
@@ -46,7 +42,6 @@ export declare class ZLinkSpotRoutedFrameDispatch {
|
|
|
46
42
|
private readonly routedActorAdmission;
|
|
47
43
|
constructor(options: ZLinkSpotRoutedFrameDispatchOptions);
|
|
48
44
|
configurePacketHandlers(registrations: readonly ZLinkSpotHandlerRegistration[]): void;
|
|
49
|
-
drain(received?: ZLinkBackendReceived | undefined, retryDeadlineMs?: number): Promise<void>;
|
|
50
45
|
dispatchFromEvent(received: ZLinkBackendReceived): Promise<void>;
|
|
51
46
|
private channelCodecs;
|
|
52
47
|
private dispatch;
|
|
@@ -2,14 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkSpotRoutedFrameDispatch = void 0;
|
|
4
4
|
const spot_remote_route_codec_1 = require("./spot-remote-route-codec");
|
|
5
|
-
const spot_native_flags_1 = require("./spot-native-flags");
|
|
6
5
|
const spot_actor_packet_relay_dispatch_1 = require("./spot-actor-packet-relay-dispatch");
|
|
7
6
|
const spot_route_packet_dispatch_1 = require("./spot-route-packet-dispatch");
|
|
8
7
|
const spot_routed_actor_admission_1 = require("./spot-routed-actor-admission");
|
|
9
8
|
const spot_routed_bound_session_dispatch_1 = require("./spot-routed-bound-session-dispatch");
|
|
10
9
|
class ZLinkSpotRoutedFrameDispatch {
|
|
11
10
|
options;
|
|
12
|
-
routeDraining = false;
|
|
13
11
|
packetHandlers = new Map();
|
|
14
12
|
routedBoundSessionDispatch;
|
|
15
13
|
actorPacketRelayDispatch;
|
|
@@ -61,62 +59,6 @@ class ZLinkSpotRoutedFrameDispatch {
|
|
|
61
59
|
this.packetHandlers.set(packetName, existing);
|
|
62
60
|
}
|
|
63
61
|
}
|
|
64
|
-
async drain(received = undefined, retryDeadlineMs = performance.now()) {
|
|
65
|
-
if (this.routeDraining) {
|
|
66
|
-
if (received !== undefined) {
|
|
67
|
-
try {
|
|
68
|
-
await this.dispatch(received);
|
|
69
|
-
}
|
|
70
|
-
finally {
|
|
71
|
-
received.close();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
this.routeDraining = true;
|
|
77
|
-
try {
|
|
78
|
-
if (received !== undefined) {
|
|
79
|
-
try {
|
|
80
|
-
await this.dispatch(received);
|
|
81
|
-
}
|
|
82
|
-
finally {
|
|
83
|
-
received.close();
|
|
84
|
-
}
|
|
85
|
-
received = undefined;
|
|
86
|
-
}
|
|
87
|
-
for (;;) {
|
|
88
|
-
received ??= this.options.createReceived();
|
|
89
|
-
try {
|
|
90
|
-
if (!this.options.nativeSpot.recvRoute(received, spot_native_flags_1.ZLINK_RECV_DONT_WAIT)) {
|
|
91
|
-
received.close();
|
|
92
|
-
await this.options.waitIdle();
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
if (isRouteRecvRetryable(error)) {
|
|
98
|
-
closeReceivedQuietly(received);
|
|
99
|
-
if (performance.now() < retryDeadlineMs) {
|
|
100
|
-
setTimeout(() => void this.drain(undefined, retryDeadlineMs), 10);
|
|
101
|
-
}
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
received.close();
|
|
105
|
-
throw error;
|
|
106
|
-
}
|
|
107
|
-
try {
|
|
108
|
-
await this.dispatch(received);
|
|
109
|
-
}
|
|
110
|
-
finally {
|
|
111
|
-
received.close();
|
|
112
|
-
}
|
|
113
|
-
received = this.options.createReceived();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
finally {
|
|
117
|
-
this.routeDraining = false;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
62
|
async dispatchFromEvent(received) {
|
|
121
63
|
try {
|
|
122
64
|
await this.dispatch(received);
|
|
@@ -145,18 +87,7 @@ class ZLinkSpotRoutedFrameDispatch {
|
|
|
145
87
|
if (await this.routePacketDispatch.dispatch(received)) {
|
|
146
88
|
return;
|
|
147
89
|
}
|
|
148
|
-
await this.routedActorAdmission.admit(received);
|
|
90
|
+
await this.options.serial.executeLifecycleOperation(() => this.routedActorAdmission.admit(received));
|
|
149
91
|
}
|
|
150
92
|
}
|
|
151
93
|
exports.ZLinkSpotRoutedFrameDispatch = ZLinkSpotRoutedFrameDispatch;
|
|
152
|
-
function isRouteRecvRetryable(error) {
|
|
153
|
-
return (typeof error === 'object' &&
|
|
154
|
-
error !== null &&
|
|
155
|
-
[201, 202, 204].includes(Number(error.result)));
|
|
156
|
-
}
|
|
157
|
-
function closeReceivedQuietly(received) {
|
|
158
|
-
try {
|
|
159
|
-
received.close();
|
|
160
|
-
}
|
|
161
|
-
catch { }
|
|
162
|
-
}
|
|
@@ -6,6 +6,7 @@ import type { ZLinkSpotHandlerRegistration } from './spot-handler-registry';
|
|
|
6
6
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
7
7
|
import type { ZLinkSerialWorkOptions } from '../execution/serial-execution-queue';
|
|
8
8
|
interface ZLinkRoutedSpotPacketActivation {
|
|
9
|
+
readonly objectGeneration?: bigint;
|
|
9
10
|
readonly meshName?: string;
|
|
10
11
|
readonly spotId: RoutingId;
|
|
11
12
|
readonly spot: ZLinkSpot;
|
|
@@ -28,6 +29,9 @@ interface ZLinkRoutedSpotPacketContext {
|
|
|
28
29
|
readonly signal?: AbortSignal;
|
|
29
30
|
/** Wait until a recovered activation has actually entered its first handler. */
|
|
30
31
|
readonly awaitFirstHandlerTurn?: boolean;
|
|
32
|
+
readonly onOneWayError?: (error: unknown) => void;
|
|
33
|
+
/** Retains the caller's Instance address intent through an incarnation boundary. */
|
|
34
|
+
readonly activationRecord?: import('../foundation/service-runtime-contracts').ReceiveRecord;
|
|
31
35
|
}
|
|
32
36
|
export declare class ZLinkRoutedSpotPacketDispatch {
|
|
33
37
|
private readonly options;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkRoutedSpotPacketDispatch = void 0;
|
|
4
|
+
const dispatch_error_details_1 = require("../diagnostics/dispatch-error-details");
|
|
4
5
|
const contracts_1 = require("../../contracts");
|
|
5
6
|
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
6
7
|
const configuration_1 = require("../configuration");
|
|
@@ -58,17 +59,42 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
58
59
|
const applicationClaim = activation.meshName === undefined
|
|
59
60
|
? undefined
|
|
60
61
|
: this.options.claimApplicationWork?.(activation.meshName);
|
|
61
|
-
const
|
|
62
|
+
const originalRecord = context.activationRecord?.activationRecord;
|
|
63
|
+
const instanceIntent = originalRecord?.activation === 'missing' ||
|
|
64
|
+
(originalRecord?.activation === 'ready' && originalRecord.instanceIntent);
|
|
65
|
+
const runHandler = async (failure) => {
|
|
62
66
|
try {
|
|
67
|
+
if (failure !== undefined)
|
|
68
|
+
throw failure;
|
|
69
|
+
const current = this.options.resolveActivation(spotId);
|
|
70
|
+
if (current === undefined ||
|
|
71
|
+
(!instanceIntent &&
|
|
72
|
+
(current !== activation ||
|
|
73
|
+
(originalRecord?.activation === 'ready' &&
|
|
74
|
+
originalRecord.route.objectGeneration !== current.objectGeneration)))) {
|
|
75
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `Spot '${String(spotId)}' is not active.`);
|
|
76
|
+
}
|
|
77
|
+
if (context.activationRecord?.deadlineUnixMs !== undefined &&
|
|
78
|
+
context.activationRecord.deadlineUnixMs < BigInt(Date.now())) {
|
|
79
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Spot '${String(spotId)}' request deadline has expired.`);
|
|
80
|
+
}
|
|
81
|
+
const currentRegistrations = current === activation
|
|
82
|
+
? registrations
|
|
83
|
+
: current.handlers
|
|
84
|
+
.snapshot()
|
|
85
|
+
.filter((registration) => registration.kind === 'packet' &&
|
|
86
|
+
(registration.packetName ?? registration.handlerType.name) ===
|
|
87
|
+
(packetName ?? ''));
|
|
63
88
|
// Decode only after the Spot has acquired both application admission
|
|
64
89
|
// and its execution authority.
|
|
65
90
|
const payload = decodePayload();
|
|
66
|
-
for (const registration of
|
|
67
|
-
const handler = await (0, handler_instance_scope_1.resolveLifecycleHandler)(
|
|
91
|
+
for (const registration of currentRegistrations) {
|
|
92
|
+
const handler = await (0, handler_instance_scope_1.resolveLifecycleHandler)(current.spot, registration.handlerType, this.options.providerResolver);
|
|
68
93
|
resolveFirstHandlerTurn?.();
|
|
69
94
|
resolveFirstHandlerTurn = undefined;
|
|
95
|
+
context.activationRecord?.onHandlerTurnStarted?.();
|
|
70
96
|
(0, application_job_queue_scope_1.releaseApplicationJobPermitBeforeHandler)();
|
|
71
|
-
response = await handler.handle(
|
|
97
|
+
response = await handler.handle(current.spot, payload, {
|
|
72
98
|
channelName: context.channelName,
|
|
73
99
|
contentType: context.contentType,
|
|
74
100
|
packetName: packetName,
|
|
@@ -94,8 +120,24 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
94
120
|
detachedApplicationPermit?.releaseAfterInternalProcessing();
|
|
95
121
|
applicationClaim?.close();
|
|
96
122
|
}
|
|
97
|
-
}, (error) =>
|
|
98
|
-
|
|
123
|
+
}, (error) => {
|
|
124
|
+
if (context.onOneWayError === undefined) {
|
|
125
|
+
this.reportFailure(spotId, packetName, context, false, error);
|
|
126
|
+
}
|
|
127
|
+
else if (resolveFirstHandlerTurn === undefined) {
|
|
128
|
+
context.onOneWayError(error);
|
|
129
|
+
}
|
|
130
|
+
}, context.workOptions, { signal: context.signal }, instanceIntent
|
|
131
|
+
? async (failure) => {
|
|
132
|
+
try {
|
|
133
|
+
await runHandler(failure);
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
detachedApplicationPermit?.releaseAfterInternalProcessing();
|
|
137
|
+
applicationClaim?.close();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
: undefined);
|
|
99
141
|
}
|
|
100
142
|
catch (error) {
|
|
101
143
|
detached = false;
|
|
@@ -103,16 +145,18 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
103
145
|
rejectFirstHandlerTurn?.(error);
|
|
104
146
|
throw error;
|
|
105
147
|
}
|
|
148
|
+
await firstHandlerTurn;
|
|
106
149
|
}
|
|
107
150
|
else {
|
|
108
151
|
if (activation.serial.isCurrentTurn) {
|
|
109
152
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, `Spot '${spotId}' cannot await a request to its current serial turn.`);
|
|
110
153
|
}
|
|
111
|
-
await activation.serial.execute(runHandler, context.workOptions);
|
|
154
|
+
await activation.serial.execute(runHandler, context.workOptions, instanceIntent ? runHandler : undefined);
|
|
112
155
|
}
|
|
113
156
|
}
|
|
114
157
|
catch (error) {
|
|
115
|
-
|
|
158
|
+
if (context.activationRecord?.activationRecord === undefined)
|
|
159
|
+
this.reportFailure(spotId, packetName, context, returnResponse, error);
|
|
116
160
|
throw error;
|
|
117
161
|
}
|
|
118
162
|
finally {
|
|
@@ -122,16 +166,17 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
122
166
|
return returnResponse ? response : undefined;
|
|
123
167
|
}
|
|
124
168
|
reportFailure(spotId, packetName, context, returnResponse, error) {
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
169
|
+
const reporter = this.options.dispatchErrors;
|
|
170
|
+
if (reporter?.captureEnabled() !== true)
|
|
171
|
+
return;
|
|
172
|
+
reporter.report({
|
|
173
|
+
surface: context.activationRecord?.activationRecord?.kind === 'instanceSpot'
|
|
174
|
+
? ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.InstanceSpot
|
|
175
|
+
: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotRoute,
|
|
128
176
|
messageKind: returnResponse
|
|
129
177
|
? ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request
|
|
130
178
|
: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
|
|
131
|
-
reason:
|
|
132
|
-
frameworkErrorKind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded
|
|
133
|
-
? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.Backpressure
|
|
134
|
-
: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException,
|
|
179
|
+
reason: (0, dispatch_error_details_1.dispatchReasonFromError)(error),
|
|
135
180
|
action: returnResponse ? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.FailCaller : ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop,
|
|
136
181
|
packetName,
|
|
137
182
|
channelName: context.channelName,
|
|
@@ -140,6 +185,11 @@ class ZLinkRoutedSpotPacketDispatch {
|
|
|
140
185
|
});
|
|
141
186
|
}
|
|
142
187
|
reportMissing(spotId, packetName, context, returnResponse) {
|
|
188
|
+
if (context.activationRecord?.activationRecord !== undefined) {
|
|
189
|
+
if (!returnResponse && context.onOneWayError !== undefined)
|
|
190
|
+
context.onOneWayError((0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.HandlerNotFound, `SPOT route handler not found: ${packetName}`));
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
143
193
|
this.options.dispatchErrors?.report({
|
|
144
194
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotRoute,
|
|
145
195
|
messageKind: returnResponse
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ActorRef, RoutingId, ZLinkActor, ZLinkActorJoinOperationId, ZLinkSpot } from '../../contracts';
|
|
2
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
3
3
|
import type { ZLinkMessageFollowOrigin } from '../foundation/service-runtime-contracts';
|
|
4
|
-
import type { ZLinkRemoteActorPacketTarget, ZLinkRemoteBoundSessionTarget,
|
|
4
|
+
import type { ZLinkRemoteActorPacketTarget, ZLinkRemoteBoundSessionTarget, ZLinkDeferredJoinCompletion } from '../actors';
|
|
5
5
|
import type { ZLinkActorHandoffDispatch } from '../actors/actor-handoff';
|
|
6
6
|
import type { ZLinkActorResponseOptions } from './spot-actor-packet-dispatch';
|
|
7
7
|
import type { ZLinkRemoteActorJoinActor, ZLinkRoutedActorTransferProvider } from './spot-remote-codec';
|
|
@@ -16,44 +16,28 @@ export interface ZLinkEntryActorRuntime {
|
|
|
16
16
|
}>;
|
|
17
17
|
}
|
|
18
18
|
export interface ZLinkSpotActorTransferRuntime {
|
|
19
|
-
prepareDeferredJoinAccepted(actorId: string, operationId: ZLinkActorJoinOperationId, actorRef: ActorRef, rawReply: Uint8Array, replyContentType?: string
|
|
20
|
-
|
|
21
|
-
markDeferredJoinAcceptedCommitted(root: ZLinkDeferredJoinAcceptedRoot, actorRef: ActorRef, signal?: AbortSignal): Promise<ZLinkDeferredJoinAcceptedRoot>;
|
|
22
|
-
commitAndDeliverDeferredJoinAccepted(root: ZLinkDeferredJoinAcceptedRoot, actor: ZLinkActor, actorRef: ActorRef, submitMailbox: <T>(operation: () => Promise<T>) => Promise<T>, signal?: AbortSignal): Promise<ZLinkDeferredJoinAcceptedRoot>;
|
|
19
|
+
prepareDeferredJoinAccepted(actorId: string, operationId: ZLinkActorJoinOperationId, actorRef: ActorRef, rawReply: Uint8Array, replyContentType?: string): ZLinkDeferredJoinCompletion;
|
|
20
|
+
deliverDeferredJoinCompletion(completion: ZLinkDeferredJoinCompletion, actor: ZLinkActor, actorRef: ActorRef, submitMailbox: <T>(operation: () => Promise<T>) => Promise<T>, signal?: AbortSignal): Promise<void>;
|
|
23
21
|
getOrCreateRoutedActor(actorId: string, actorType: string, actorRef?: ActorRef, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, actorCreateRequest?: Message, signal?: AbortSignal): Promise<ZLinkRemoteActorJoinActor>;
|
|
24
22
|
materializeRoutedActor: ZLinkRoutedActorTransferProvider;
|
|
25
23
|
commitRoutedActorAuthority(actor: ZLinkActor, sourceActorRef: ActorRef, transferId: string, spotId: RoutingId, spotGeneration: bigint, membershipEpoch: bigint, deadlineAtMs: number, signal?: AbortSignal): Promise<import('../locations/internal-location-contracts').ZLinkAuthoritySnapshot>;
|
|
26
|
-
rememberRoutedActorTransferTarget(actorId: string, target: ZLinkRemoteBoundSessionTarget | undefined): void;
|
|
27
|
-
claimNativeActorLocation(actor: ZLinkActor, spotId: RoutingId, spotMeshName: string): Promise<ZLinkNativeActorJoinSnapshot>;
|
|
28
24
|
claimRoutedActorLocation(actor: ZLinkActor, spotId: RoutingId, spotMeshName: string, joinedLocation?: {
|
|
29
25
|
readonly spotGeneration: bigint;
|
|
30
26
|
readonly membershipEpoch: bigint;
|
|
31
27
|
}): Promise<void>;
|
|
32
|
-
publishRoutedActorOwnership(actor: ZLinkActor): Promise<void>;
|
|
28
|
+
publishRoutedActorOwnership(actor: ZLinkActor, sealedSession: ZLinkRemoteBoundSessionTarget | undefined): Promise<void>;
|
|
33
29
|
openRoutedActorSession(actor: ZLinkActor): Promise<void>;
|
|
34
30
|
bindRoutedActorRef(actor: ZLinkActor, actorRef: ActorRef): void;
|
|
35
31
|
commitRoutedActor(actor: ZLinkActor, spotId: RoutingId, spot: ZLinkSpot): void;
|
|
36
32
|
clearRoutedActor(actor: ZLinkActor): void;
|
|
37
|
-
rollbackNativeActorJoin(actor: ZLinkActor, snapshot: ZLinkNativeActorJoinSnapshot): Promise<void>;
|
|
38
33
|
rollbackRoutedActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
|
|
39
34
|
notifyCoreSourceLeave(actor: ZLinkActor, callback: () => Promise<void>): Promise<void>;
|
|
40
35
|
actorEntryNodeRid(actor: ZLinkActor): RoutingId | undefined;
|
|
41
36
|
}
|
|
42
|
-
export interface ZLinkNativeActorJoinSnapshot {
|
|
43
|
-
readonly spotId?: RoutingId;
|
|
44
|
-
readonly spot?: ZLinkSpot;
|
|
45
|
-
readonly locationSpotId?: RoutingId;
|
|
46
|
-
readonly spotMeshName?: string;
|
|
47
|
-
readonly actorRef?: ActorRef;
|
|
48
|
-
readonly spotGeneration?: bigint;
|
|
49
|
-
readonly membershipEpoch?: bigint;
|
|
50
|
-
readonly ownerNodeGeneration?: bigint;
|
|
51
|
-
}
|
|
52
37
|
export interface ZLinkSpotBoundSessionRuntime {
|
|
53
38
|
receiveRoutedBoundSession(actorId: string, message: unknown, packetName: string | undefined, metadata: ReadonlyMap<string, string>, actorRef?: ActorRef, actorPacketTarget?: unknown, signal?: AbortSignal): Promise<void>;
|
|
54
39
|
receiveRoutedBoundSessionResponse(actorId: string, packetName: string, requestSeq: bigint, message: unknown, replyOptions: ZLinkActorResponseOptions, actorPacketTarget?: unknown, signal?: AbortSignal): Promise<void>;
|
|
55
40
|
receiveRoutedBoundSessionError(actorId: string, packetName: string, requestSeq: bigint, error: unknown, metadata: ReadonlyMap<string, string>, actorPacketTarget?: unknown, signal?: AbortSignal): Promise<void>;
|
|
56
|
-
rememberRemoteBoundSessionTarget(actorId: string, target: ZLinkRemoteBoundSessionTarget | undefined): void;
|
|
57
41
|
resolveRemoteBoundSessionTarget(sourceNodeRid: RoutingId, sourceSessionRid: RoutingId): ZLinkRemoteBoundSessionTarget | undefined;
|
|
58
42
|
actorPacketTargetForState(actorId: string): ZLinkRemoteActorPacketTarget | undefined;
|
|
59
43
|
sendActorResponse(actor: ZLinkActor, packetName: string, requestSeq: bigint, response: unknown, replyOptions: ZLinkActorResponseOptions, fallbackBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, signal?: AbortSignal): Promise<void>;
|
|
@@ -31,6 +31,11 @@ export declare class ZLinkSpotSerialExecutor {
|
|
|
31
31
|
* ownership turn. Already accepted work remains drainable.
|
|
32
32
|
*/
|
|
33
33
|
close(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Closes the Actor and timer queues. The Spot queue stays open for the Spot
|
|
36
|
+
* Close lifecycle item that owns it; that Close closes it when it finishes.
|
|
37
|
+
*/
|
|
38
|
+
closeChildren(): Promise<void>;
|
|
34
39
|
private actorExecutor;
|
|
35
40
|
private actorSerial;
|
|
36
41
|
private timerSerial;
|
|
@@ -70,6 +70,14 @@ class ZLinkSpotSerialExecutor {
|
|
|
70
70
|
* ownership turn. Already accepted work remains drainable.
|
|
71
71
|
*/
|
|
72
72
|
close() {
|
|
73
|
+
const children = this.closeChildren();
|
|
74
|
+
return Promise.all([children, this.spotSerial.whenIdle()]).then(() => undefined);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Closes the Actor and timer queues. The Spot queue stays open for the Spot
|
|
78
|
+
* Close lifecycle item that owns it; that Close closes it when it finishes.
|
|
79
|
+
*/
|
|
80
|
+
closeChildren() {
|
|
73
81
|
if (this.closePromise !== undefined)
|
|
74
82
|
return this.closePromise;
|
|
75
83
|
this.closing = true;
|
|
@@ -79,8 +87,7 @@ class ZLinkSpotSerialExecutor {
|
|
|
79
87
|
this.timerSerials.clear();
|
|
80
88
|
this.actorExecutors.clear();
|
|
81
89
|
this.closePromise = Promise.all([
|
|
82
|
-
|
|
83
|
-
...childSerials.map((serial) => serial.close()),
|
|
90
|
+
...childSerials.map((serial) => serial.whenIdle()),
|
|
84
91
|
...actorExecutors.map((executor) => executor.close())
|
|
85
92
|
]).then(() => undefined);
|
|
86
93
|
return this.closePromise;
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import { ZLinkExecutionBarrier, ZLinkSpotSerialTurn } from '../execution';
|
|
1
|
+
import { ZLinkExecutionBarrier, type ZLinkExecutionBarrierClaim, ZLinkSpotSerialTurn } from '../execution';
|
|
2
2
|
import type { SpotId } from '../../contracts';
|
|
3
|
-
import
|
|
3
|
+
import type { ZLinkFrameworkException } from '../../contracts/Errors/ZLinkFrameworkException';
|
|
4
|
+
import { type ZLinkSerialSchedulerOptions, type ZLinkSerialWorkOptions, type ZLinkSerialWorkRecord } from '../execution/serial-execution-queue';
|
|
5
|
+
import type { ZLinkSerialLifecycleContext } from '../execution/serial-execution-queue';
|
|
6
|
+
export type ZLinkSpotApplicationTurnContext = ZLinkExecutionBarrierClaim & {
|
|
7
|
+
readonly replay?: (failure?: unknown) => Promise<unknown> | unknown;
|
|
8
|
+
};
|
|
4
9
|
export declare class ZLinkSpotSerialTurnExecutor {
|
|
5
10
|
private readonly yieldAllowed;
|
|
6
11
|
readonly sourceSpotId?: SpotId | undefined;
|
|
@@ -10,6 +15,7 @@ export declare class ZLinkSpotSerialTurnExecutor {
|
|
|
10
15
|
private executionBarrier;
|
|
11
16
|
private resumedOwnerTurn;
|
|
12
17
|
private lastActivityAtMs;
|
|
18
|
+
private lifecycleAdmissionClosed;
|
|
13
19
|
activeTurnId: number;
|
|
14
20
|
constructor(yieldAllowed?: boolean, sourceSpotId?: SpotId | undefined, schedulerOptions?: ZLinkSerialSchedulerOptions);
|
|
15
21
|
get isExecuting(): boolean;
|
|
@@ -17,13 +23,25 @@ export declare class ZLinkSpotSerialTurnExecutor {
|
|
|
17
23
|
get hasPendingWork(): boolean;
|
|
18
24
|
get lastActivityAt(): number;
|
|
19
25
|
get currentTurn(): ZLinkSpotSerialTurn | undefined;
|
|
20
|
-
/**
|
|
21
|
-
|
|
26
|
+
/** Waits for turns admitted through the execution barrier to complete. */
|
|
27
|
+
whenIdle(): Promise<void>;
|
|
28
|
+
closeAdmission(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Spot messaging §7 step 3: after Close ends this queue's admission, an Instance
|
|
31
|
+
* intent message is refused before admission as a released owner fence, and any
|
|
32
|
+
* other message finds no incarnation. Undefined while admission is open.
|
|
33
|
+
*/
|
|
34
|
+
applicationAdmissionRefusal(instanceIntent: boolean): ZLinkFrameworkException | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Spot messaging §7: once Close commits Closing, membership work can no longer
|
|
37
|
+
* enter this incarnation while Instance intent messages still queue behind Close.
|
|
38
|
+
*/
|
|
39
|
+
setLifecycleAdmissionClosed(closed: boolean): void;
|
|
22
40
|
/** Distinguishes a gate-owning turn from a suspended AsyncLocalStorage tail. */
|
|
23
41
|
isActiveTurn(turn: ZLinkSpotSerialTurn, turnId: number): boolean;
|
|
24
42
|
setExecutionBarrier(barrier: ZLinkExecutionBarrier): void;
|
|
25
43
|
/** Runs `operation` in serial order, one turn at a time. */
|
|
26
|
-
execute<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
|
|
44
|
+
execute<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions, replay?: (failure?: unknown) => Promise<T>): Promise<T>;
|
|
27
45
|
/**
|
|
28
46
|
* Always enqueues `operation` as its own serial turn, even when called
|
|
29
47
|
* from within the currently active turn. Detached completion callbacks use
|
|
@@ -36,13 +54,18 @@ export declare class ZLinkSpotSerialTurnExecutor {
|
|
|
36
54
|
*/
|
|
37
55
|
postOneWay(operation: () => Promise<unknown> | unknown, onError: (error: unknown) => void, workOptions?: ZLinkSerialWorkOptions, admission?: {
|
|
38
56
|
readonly signal?: AbortSignal;
|
|
39
|
-
}): Promise<void>;
|
|
57
|
+
}, replay?: (failure?: unknown) => Promise<unknown>): Promise<void>;
|
|
40
58
|
/**
|
|
41
59
|
* Enqueues the framework-owned turn that completes a boundary while normal
|
|
42
60
|
* application admission remains sealed. Callers must release the matching
|
|
43
61
|
* barrier seal after this turn finishes.
|
|
44
62
|
*/
|
|
45
63
|
postBarrierTurn<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
|
|
64
|
+
/** Admits membership work and holds the lifecycle FIFO until its result settles. */
|
|
65
|
+
executeLifecycleOperation<T>(operation: () => Promise<T> | T): Promise<T>;
|
|
66
|
+
/** Runs owner control work that establishes or completes its own admission seal. */
|
|
67
|
+
executeControlLifecycleOperation<T>(operation: () => Promise<T> | T, context?: ZLinkSerialLifecycleContext): Promise<T>;
|
|
68
|
+
visitPendingApplication(visitor: (record: ZLinkSerialWorkRecord<unknown>) => void): void;
|
|
46
69
|
private enqueueApplicationTurn;
|
|
47
70
|
private enqueueFrameworkTurn;
|
|
48
71
|
private enqueueContinuationTurn;
|