@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
|
@@ -4,24 +4,18 @@ import { closeMeshCompletion } from '../backend';
|
|
|
4
4
|
import { RequestResult } from '../backend/runtime-values';
|
|
5
5
|
import type { ZLinkActorManagerOptions } from './actor-runtime-contracts';
|
|
6
6
|
import type { ZLinkActorRuntimeState } from './actor-runtime-state';
|
|
7
|
-
import {
|
|
7
|
+
import { createActorMembership } from './actor-lifecycle-snapshot';
|
|
8
8
|
|
|
9
9
|
type ZLinkTransferredActorRollbackOptions = Pick<
|
|
10
10
|
ZLinkActorManagerOptions,
|
|
11
|
-
| '
|
|
12
|
-
| 'nativeActorNode'
|
|
13
|
-
| 'nativeActorNodeProvider'
|
|
14
|
-
| 'nativeActorCompletionTableProvider'
|
|
15
|
-
| 'shutdownSignal'
|
|
16
|
-
| 'metrics'
|
|
11
|
+
'nativeActorNode' | 'nativeActorNodeProvider' | 'nativeActorCompletionTableProvider'
|
|
17
12
|
>;
|
|
18
13
|
|
|
19
14
|
export class ZLinkTransferredActorRollbackCoordinator {
|
|
20
|
-
private readonly tasks = new Map<string, Promise<void>>();
|
|
21
|
-
|
|
22
15
|
constructor(
|
|
23
16
|
private readonly states: Map<string, ZLinkActorRuntimeState>,
|
|
24
|
-
private readonly options: ZLinkTransferredActorRollbackOptions
|
|
17
|
+
private readonly options: ZLinkTransferredActorRollbackOptions,
|
|
18
|
+
private readonly finalize: (actorId: string, state: ZLinkActorRuntimeState) => Promise<void>
|
|
25
19
|
) {}
|
|
26
20
|
|
|
27
21
|
async rollback(actor: ZLinkActor, signal?: AbortSignal): Promise<void> {
|
|
@@ -37,54 +31,10 @@ export class ZLinkTransferredActorRollbackCoordinator {
|
|
|
37
31
|
|
|
38
32
|
const actorRef = state.nativeActorRef;
|
|
39
33
|
const node = this.options.nativeActorNode ?? this.options.nativeActorNodeProvider?.();
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
await this.destroyNativeActor(node, actorRef, signal);
|
|
43
|
-
}
|
|
44
|
-
} catch (error) {
|
|
45
|
-
this.schedule(actor, state, node, actorRef);
|
|
46
|
-
throw error;
|
|
47
|
-
}
|
|
48
|
-
this.complete(actor, state);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
private schedule(
|
|
52
|
-
actor: ZLinkActor,
|
|
53
|
-
state: ZLinkActorRuntimeState,
|
|
54
|
-
node: ZLinkBackendMeshNode | undefined,
|
|
55
|
-
actorRef: ZLinkBackendActorRef | undefined
|
|
56
|
-
): void {
|
|
57
|
-
if (this.tasks.has(actor.context.actorId)) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
const task = this.retry(actor, state, node, actorRef).finally(() =>
|
|
61
|
-
this.tasks.delete(actor.context.actorId)
|
|
62
|
-
);
|
|
63
|
-
this.tasks.set(actor.context.actorId, task);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
private async retry(
|
|
67
|
-
actor: ZLinkActor,
|
|
68
|
-
state: ZLinkActorRuntimeState,
|
|
69
|
-
node: ZLinkBackendMeshNode | undefined,
|
|
70
|
-
actorRef: ZLinkBackendActorRef | undefined
|
|
71
|
-
): Promise<void> {
|
|
72
|
-
const retryDelay = new ZLinkActorRetryDelay();
|
|
73
|
-
while (
|
|
74
|
-
this.states.get(actor.context.actorId) === state &&
|
|
75
|
-
this.options.shutdownSignal?.aborted !== true
|
|
76
|
-
) {
|
|
77
|
-
if (!(await retryDelay.wait(this.options.shutdownSignal))) return;
|
|
78
|
-
try {
|
|
79
|
-
if (node !== undefined && actorRef !== undefined) {
|
|
80
|
-
await this.destroyNativeActor(node, actorRef);
|
|
81
|
-
}
|
|
82
|
-
this.complete(actor, state);
|
|
83
|
-
return;
|
|
84
|
-
} catch {
|
|
85
|
-
// The tombstone prevents dispatch while the next retry is pending.
|
|
86
|
-
}
|
|
34
|
+
if (node !== undefined && actorRef !== undefined) {
|
|
35
|
+
await this.destroyNativeActor(node, actorRef, signal);
|
|
87
36
|
}
|
|
37
|
+
await this.complete(actor, state);
|
|
88
38
|
}
|
|
89
39
|
|
|
90
40
|
private async destroyNativeActor(
|
|
@@ -116,13 +66,12 @@ export class ZLinkTransferredActorRollbackCoordinator {
|
|
|
116
66
|
}
|
|
117
67
|
}
|
|
118
68
|
|
|
119
|
-
private complete(actor: ZLinkActor, state: ZLinkActorRuntimeState): void {
|
|
69
|
+
private async complete(actor: ZLinkActor, state: ZLinkActorRuntimeState): Promise<void> {
|
|
120
70
|
if (this.states.get(actor.context.actorId) !== state) {
|
|
121
71
|
return;
|
|
122
72
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
this.options.metrics?.change('zlink.actor.count', -1);
|
|
73
|
+
await state.getOrStartDestroy(createActorMembership(actor).actor.nodeRid, () =>
|
|
74
|
+
this.finalize(actor.context.actorId, state)
|
|
75
|
+
);
|
|
127
76
|
}
|
|
128
77
|
}
|
package/src/runtime/admission.ts
CHANGED
|
@@ -2,10 +2,21 @@ import {
|
|
|
2
2
|
ZLinkFrameworkInternalErrorKind,
|
|
3
3
|
createInternalFrameworkException
|
|
4
4
|
} from './framework-errors-internal';
|
|
5
|
+
const BACKING_ARRAY_COMPACTION_MIN_HEAD = 1024;
|
|
6
|
+
|
|
7
|
+
/** 소비한 배열 prefix가 정리 조건에 도달했는지 판정합니다. */
|
|
8
|
+
export function shouldCompactBackingArray(head: number, length: number): boolean {
|
|
9
|
+
return head >= BACKING_ARRAY_COMPACTION_MIN_HEAD && head * 2 >= length;
|
|
10
|
+
}
|
|
11
|
+
|
|
5
12
|
export class ZLinkRuntimeAdmissionGate {
|
|
6
13
|
private readonly meshes = new Map<string, ZLinkMeshAdmissionState>();
|
|
7
14
|
|
|
8
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Location runtime §5: the host's single new-work decision (local admission deadline and host
|
|
17
|
+
* execution combination). A host without a Location Store has no such block.
|
|
18
|
+
*/
|
|
19
|
+
constructor(readonly ownerAdmissionOpen: () => boolean = () => true) {}
|
|
9
20
|
|
|
10
21
|
get acceptsNewWork(): boolean {
|
|
11
22
|
if (!this.ownerAdmissionOpen()) return false;
|
|
@@ -188,7 +199,7 @@ function compactWaiters(state: ZLinkMeshAdmissionState): void {
|
|
|
188
199
|
if (state.waiterCount === 0) {
|
|
189
200
|
state.waiters.length = 0;
|
|
190
201
|
state.waiterHead = 0;
|
|
191
|
-
} else if (state.waiterHead
|
|
202
|
+
} else if (shouldCompactBackingArray(state.waiterHead, state.waiters.length)) {
|
|
192
203
|
state.waiters.splice(0, state.waiterHead);
|
|
193
204
|
state.waiterHead = 0;
|
|
194
205
|
}
|
|
@@ -43,12 +43,12 @@ export function hasApplicationJobPermit(): boolean {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
/** Re-enters the captured permit scope when a serial executor runs later. */
|
|
46
|
-
export function bindApplicationJobPermit<TResult>(
|
|
47
|
-
callback: () => Promise<TResult> | TResult
|
|
48
|
-
): () => Promise<TResult> | TResult {
|
|
46
|
+
export function bindApplicationJobPermit<TResult, TArgument>(
|
|
47
|
+
callback: (argument?: TArgument) => Promise<TResult> | TResult
|
|
48
|
+
): (argument?: TArgument) => Promise<TResult> | TResult {
|
|
49
49
|
const scope = applicationJobPermitScope.getStore();
|
|
50
50
|
if (scope === undefined) return callback;
|
|
51
|
-
return () => applicationJobPermitScope.run(scope, callback);
|
|
51
|
+
return (argument?: TArgument) => applicationJobPermitScope.run(scope, callback, argument);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
/**
|
|
@@ -141,14 +141,16 @@ export interface ZLinkBackendMeshNode {
|
|
|
141
141
|
route: ServiceInstanceRouteFence,
|
|
142
142
|
parts: MessageLike | readonly MessageLike[],
|
|
143
143
|
sourceSpotId?: string,
|
|
144
|
-
metadata?: ReadonlyMap<string, string
|
|
144
|
+
metadata?: ReadonlyMap<string, string>,
|
|
145
|
+
instanceIntent?: boolean
|
|
145
146
|
): Promise<SubmitResult>;
|
|
146
147
|
requestInstanceSpot(
|
|
147
148
|
route: ServiceInstanceRouteFence,
|
|
148
149
|
parts: MessageLike | readonly MessageLike[],
|
|
149
150
|
timeoutMs?: number,
|
|
150
151
|
sourceSpotId?: string,
|
|
151
|
-
metadata?: ReadonlyMap<string, string
|
|
152
|
+
metadata?: ReadonlyMap<string, string>,
|
|
153
|
+
instanceIntent?: boolean
|
|
152
154
|
): MeshOperationId;
|
|
153
155
|
registerUserSpotOperationHandler(handler: ServiceUserSpotOperationHandler): void;
|
|
154
156
|
requestUserSpotCreate(
|
|
@@ -249,6 +251,12 @@ export interface ZLinkBackendMeshNode {
|
|
|
249
251
|
readonly objectGeneration: bigint;
|
|
250
252
|
}
|
|
251
253
|
| undefined;
|
|
254
|
+
registerInstanceIntent?(
|
|
255
|
+
instanceType: string,
|
|
256
|
+
route: import('../../foundation/service-stateful-wire-codec').ServiceInstanceRouteFence,
|
|
257
|
+
expectedCurrentRoute?:
|
|
258
|
+
import('../../foundation/service-stateful-wire-codec').ServiceInstanceRouteFence | null
|
|
259
|
+
): void;
|
|
252
260
|
waitForInstanceApplicationQuiescence?(spotId: string, signal?: AbortSignal): Promise<void>;
|
|
253
261
|
restoreUserSpotAuthority?(
|
|
254
262
|
spotId: string,
|
|
@@ -269,7 +277,7 @@ export interface ZLinkBackendMeshNode {
|
|
|
269
277
|
stableType: string,
|
|
270
278
|
generation: bigint,
|
|
271
279
|
authorityOwnerGeneration: bigint,
|
|
272
|
-
spotId: string,
|
|
280
|
+
spotId: string | undefined,
|
|
273
281
|
spotGeneration: bigint,
|
|
274
282
|
membershipEpoch: bigint
|
|
275
283
|
): ZLinkBackendActorRef;
|
|
@@ -369,8 +377,7 @@ export interface ZLinkBackendMeshNode {
|
|
|
369
377
|
actor: ZLinkBackendActorRef,
|
|
370
378
|
expectedBindingGeneration: bigint,
|
|
371
379
|
parts: MessageLike | readonly MessageLike[],
|
|
372
|
-
flags?: number
|
|
373
|
-
actorFence?: ZLinkBackendActorSessionSendFence
|
|
380
|
+
flags?: number
|
|
374
381
|
): Promise<SubmitResult>;
|
|
375
382
|
closeActorBoundSession(
|
|
376
383
|
actor: ZLinkBackendActorRef,
|
|
@@ -413,20 +420,12 @@ export interface ZLinkBackendActorRef {
|
|
|
413
420
|
readonly generation: bigint;
|
|
414
421
|
}
|
|
415
422
|
|
|
416
|
-
export interface ZLinkBackendActorSessionSendFence {
|
|
417
|
-
readonly targetNodeGeneration: bigint;
|
|
418
|
-
readonly authorityOwnerGeneration: bigint;
|
|
419
|
-
readonly ownerLeaseGeneration: bigint;
|
|
420
|
-
}
|
|
421
|
-
|
|
422
423
|
export interface ZLinkBackendActorSessionNode {
|
|
423
|
-
actorNodeGeneration?(actor: ZLinkBackendActorRef): bigint | undefined;
|
|
424
424
|
sendActorBoundSession(
|
|
425
425
|
actor: ZLinkBackendActorRef,
|
|
426
426
|
expectedBindingGeneration: bigint,
|
|
427
427
|
parts: readonly Message[],
|
|
428
|
-
flags: number
|
|
429
|
-
actorFence?: ZLinkBackendActorSessionSendFence
|
|
428
|
+
flags: number
|
|
430
429
|
): Promise<ZLinkSubmitResult>;
|
|
431
430
|
closeActorBoundSession(
|
|
432
431
|
actor: ZLinkBackendActorRef,
|
|
@@ -444,27 +443,6 @@ export interface ZLinkBackendActorRecvInfo {
|
|
|
444
443
|
readonly flags: number;
|
|
445
444
|
}
|
|
446
445
|
|
|
447
|
-
export interface ZLinkBackendActorJoinInfo {
|
|
448
|
-
readonly sourceActor: ZLinkBackendActorRef;
|
|
449
|
-
readonly targetActor: ZLinkBackendActorRef;
|
|
450
|
-
readonly sourceNodeRid: RoutingId;
|
|
451
|
-
readonly sourceSpotId: RoutingId;
|
|
452
|
-
readonly targetNodeRid: RoutingId;
|
|
453
|
-
readonly targetSpotId: RoutingId;
|
|
454
|
-
readonly joinEpoch: bigint;
|
|
455
|
-
readonly flags: number;
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
export interface ZLinkBackendActorJoinRequest {
|
|
459
|
-
readonly info: ZLinkBackendActorJoinInfo;
|
|
460
|
-
readonly message: Message;
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
export interface ZLinkBackendActorJoinReplyOperation {
|
|
464
|
-
message(message: Message): ZLinkBackendActorJoinReplyOperation;
|
|
465
|
-
submit(): void;
|
|
466
|
-
}
|
|
467
|
-
|
|
468
446
|
export interface ZLinkBackendSpotDispatchInfo {
|
|
469
447
|
readonly event: ZLinkBackendSpotDispatchEvent;
|
|
470
448
|
readonly subjectKind?: number;
|
|
@@ -474,6 +452,7 @@ export interface ZLinkBackendSpotDispatchInfo {
|
|
|
474
452
|
|
|
475
453
|
export interface ZLinkBackendSocketMonitorEvent {
|
|
476
454
|
readonly nativeEvent: MonitorEventType;
|
|
455
|
+
readonly readyEdge: boolean;
|
|
477
456
|
readonly routingId?: unknown;
|
|
478
457
|
readonly localAddr: string;
|
|
479
458
|
readonly remoteAddr: string;
|
|
@@ -572,6 +551,7 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
|
|
|
572
551
|
}
|
|
573
552
|
|
|
574
553
|
export interface ZLinkBackendPublisherSocket extends ZLinkBackendSocket {
|
|
554
|
+
sendTimeoutMs: number;
|
|
575
555
|
sendHighWaterMark: number;
|
|
576
556
|
noDrop: boolean;
|
|
577
557
|
publish(topic: string, message: Message | readonly Message[]): void;
|
|
@@ -720,7 +700,6 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
|
|
|
720
700
|
recvActorLifecycle(flags: ZLinkBackendRecvFlags): unknown | null;
|
|
721
701
|
drainReply(): number;
|
|
722
702
|
drainChannelReply(subjectHandle: bigint): number;
|
|
723
|
-
recvRoute(result: Received, flags: ZLinkBackendRecvFlags): boolean;
|
|
724
703
|
setDispatchHandler(handler: (info: ZLinkBackendSpotDispatchInfo) => void): void;
|
|
725
704
|
requestToChannel(
|
|
726
705
|
channelName: string,
|
|
@@ -744,11 +723,6 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
|
|
|
744
723
|
payload: Message | readonly Message[],
|
|
745
724
|
timeoutMs?: number
|
|
746
725
|
): Promise<readonly Message[]>;
|
|
747
|
-
recvActorJoin(flags: ZLinkBackendRecvFlags): ZLinkBackendActorJoinRequest | null;
|
|
748
|
-
replyActorJoin(
|
|
749
|
-
request: ZLinkBackendActorJoinRequest,
|
|
750
|
-
joinResultCode: number
|
|
751
|
-
): ZLinkBackendActorJoinReplyOperation;
|
|
752
726
|
dispose(): Promise<void>;
|
|
753
727
|
}
|
|
754
728
|
|
|
@@ -788,7 +762,6 @@ export interface ZLinkMonitoringBackendAdapter {
|
|
|
788
762
|
}
|
|
789
763
|
|
|
790
764
|
export interface ZLinkBackendAdapterFactory {
|
|
791
|
-
createReceived(): Received;
|
|
792
765
|
createTopicMessage(): TopicMessage;
|
|
793
766
|
createChannelAdapter(): ZLinkChannelBackendAdapter;
|
|
794
767
|
createMeshAdapter(): ZLinkMeshBackendAdapter;
|
|
@@ -1,44 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ZLinkSubmitStatus } from '../messaging/submission-result';
|
|
1
|
+
import { classifySubmitResult } from '../messaging/submission-result';
|
|
3
2
|
import type { ZLinkBackendActorSessionNode, ZLinkBackendMeshNode } from './contracts';
|
|
4
3
|
import { closeMeshCompletion, type ZLinkMeshCompletionTable } from './mesh-completion-table';
|
|
5
|
-
import { routingIdsEqual } from '../routing-id';
|
|
6
4
|
|
|
7
5
|
export function meshActorSessionNodeAdapter(
|
|
8
6
|
node: ZLinkBackendMeshNode,
|
|
9
7
|
completions?: ZLinkMeshCompletionTable
|
|
10
8
|
): ZLinkBackendActorSessionNode {
|
|
11
9
|
return {
|
|
12
|
-
|
|
13
|
-
const status = node.status();
|
|
14
|
-
return routingIdsEqual(status.routingId, actor.nodeRid)
|
|
15
|
-
? status.lifecycleGeneration
|
|
16
|
-
: undefined;
|
|
17
|
-
},
|
|
18
|
-
async sendActorBoundSession(actor, expectedBindingGeneration, parts, flags, actorFence) {
|
|
10
|
+
async sendActorBoundSession(actor, expectedBindingGeneration, parts, flags) {
|
|
19
11
|
const result = await node.sendActorBoundSession(
|
|
20
12
|
actor,
|
|
21
13
|
expectedBindingGeneration,
|
|
22
14
|
parts as never,
|
|
23
|
-
flags
|
|
24
|
-
actorFence
|
|
15
|
+
flags
|
|
25
16
|
);
|
|
26
|
-
|
|
27
|
-
case SubmitResult.Ok:
|
|
28
|
-
return { status: ZLinkSubmitStatus.Submitted };
|
|
29
|
-
case SubmitResult.Backpressured:
|
|
30
|
-
case SubmitResult.NotAdmitted:
|
|
31
|
-
return { status: ZLinkSubmitStatus.Backpressured };
|
|
32
|
-
case SubmitResult.NotFound:
|
|
33
|
-
case SubmitResult.InvalidState:
|
|
34
|
-
return { status: ZLinkSubmitStatus.TargetNotFound };
|
|
35
|
-
case SubmitResult.NotConnected:
|
|
36
|
-
return { status: ZLinkSubmitStatus.RouteNotConnected };
|
|
37
|
-
case SubmitResult.Terminated:
|
|
38
|
-
return { status: ZLinkSubmitStatus.Shutdown };
|
|
39
|
-
default:
|
|
40
|
-
throw new Error(`Actor bound-session send failed with result '${result}'.`);
|
|
41
|
-
}
|
|
17
|
+
return classifySubmitResult(result, 'Actor bound-session send');
|
|
42
18
|
},
|
|
43
19
|
async closeActorBoundSession(actor, expectedBindingGeneration, timeoutMs, signal) {
|
|
44
20
|
if (completions === undefined) {
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
2
|
import { availableParallelism } from 'node:os';
|
|
3
|
-
import {
|
|
3
|
+
import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
|
|
4
|
+
import type {
|
|
5
|
+
ApplicationJobPermitPort,
|
|
6
|
+
ApplicationJobQueuePort
|
|
7
|
+
} from '../application-jobs/contracts';
|
|
8
|
+
import { runZLinkExecutionArea } from '../execution';
|
|
4
9
|
import {
|
|
5
10
|
ReadyDomain,
|
|
6
11
|
type ReadyBatch,
|
|
@@ -8,13 +13,20 @@ import {
|
|
|
8
13
|
type ReceiveBatch,
|
|
9
14
|
type ReceiveRecord
|
|
10
15
|
} from '../foundation/service-runtime-contracts';
|
|
16
|
+
import {
|
|
17
|
+
SERVICE_WIRE_COMMAND_OFFSET,
|
|
18
|
+
SERVICE_WIRE_MAJOR_OFFSET,
|
|
19
|
+
SERVICE_WIRE_PREFIX_SIZE
|
|
20
|
+
} from '../foundation/service-wire-binary-primitives';
|
|
21
|
+
import {
|
|
22
|
+
SERVICE_WIRE_MAGIC,
|
|
23
|
+
SERVICE_WIRE_MAJOR
|
|
24
|
+
} from '../foundation/service-wire-constants.generated';
|
|
11
25
|
import type { ZLinkBackendMeshNode } from './contracts';
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
} from '../application-jobs/contracts';
|
|
17
|
-
import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
|
|
26
|
+
import { ZLINK_BACKEND_RECV_DONT_WAIT } from './runtime-values';
|
|
27
|
+
const DEFAULT_MESH_READY_CAPACITY = 32;
|
|
28
|
+
|
|
29
|
+
const DEFAULT_MESH_PART_CAPACITY = 256;
|
|
18
30
|
|
|
19
31
|
const MESH_DISPATCH_YIELD_RECORDS = 16;
|
|
20
32
|
const MESH_DISPATCH_YIELD_INTERVAL_MS = 2;
|
|
@@ -45,21 +57,10 @@ export interface ZLinkMeshDispatchFailureContext {
|
|
|
45
57
|
readonly commandId?: number;
|
|
46
58
|
}
|
|
47
59
|
|
|
48
|
-
class ZLinkMeshDispatchFailure extends Error {
|
|
49
|
-
constructor(
|
|
50
|
-
readonly context: ZLinkMeshDispatchFailureContext,
|
|
51
|
-
readonly dispatchCause: unknown
|
|
52
|
-
) {
|
|
53
|
-
super('Mesh record dispatch failed.', { cause: dispatchCause });
|
|
54
|
-
this.name = 'ZLinkMeshDispatchFailure';
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
60
|
export class ZLinkMeshDispatchPump {
|
|
59
61
|
private pendingDomains: number = ReadyDomain.None;
|
|
60
62
|
private infrastructureScheduled = false;
|
|
61
63
|
private disposed = false;
|
|
62
|
-
private infrastructureDrainPromise?: Promise<void>;
|
|
63
64
|
private readonly activeDrains = new Set<Promise<void>>();
|
|
64
65
|
private readonly idleApplicationWorkers = new Set<() => void>();
|
|
65
66
|
private applicationWorkerCount = 0;
|
|
@@ -152,7 +153,7 @@ export class ZLinkMeshDispatchPump {
|
|
|
152
153
|
const readyBatch = this.node.createReadyBatch(1);
|
|
153
154
|
const receiveBatch = this.node.createReceiveBatch(
|
|
154
155
|
MESH_DISPATCH_RECEIVE_CAPACITY,
|
|
155
|
-
this.options.partCapacity ??
|
|
156
|
+
this.options.partCapacity ?? DEFAULT_MESH_PART_CAPACITY
|
|
156
157
|
);
|
|
157
158
|
try {
|
|
158
159
|
for (;;) {
|
|
@@ -179,12 +180,8 @@ export class ZLinkMeshDispatchPump {
|
|
|
179
180
|
return new Promise((resolve) => this.idleApplicationWorkers.add(resolve));
|
|
180
181
|
}
|
|
181
182
|
|
|
182
|
-
private reportDispatchError(error: unknown): void {
|
|
183
|
-
|
|
184
|
-
this.options.reportError?.(error.dispatchCause, error.context);
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
this.options.reportError?.(error);
|
|
183
|
+
private reportDispatchError(error: unknown, context?: ZLinkMeshDispatchFailureContext): void {
|
|
184
|
+
this.options.reportError?.(error, context);
|
|
188
185
|
}
|
|
189
186
|
|
|
190
187
|
/**
|
|
@@ -205,34 +202,23 @@ export class ZLinkMeshDispatchPump {
|
|
|
205
202
|
runZLinkExecutionArea('infrastructure', () => this.drainInfrastructure())
|
|
206
203
|
)
|
|
207
204
|
)
|
|
208
|
-
.catch((error) =>
|
|
209
|
-
if (error instanceof ZLinkMeshDispatchFailure) {
|
|
210
|
-
this.options.reportError?.(error.dispatchCause, error.context);
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
this.options.reportError?.(error);
|
|
214
|
-
});
|
|
205
|
+
.catch((error) => this.reportDispatchError(error));
|
|
215
206
|
this.activeDrains.add(drain);
|
|
216
|
-
this.infrastructureDrainPromise = drain;
|
|
217
207
|
void drain.finally(() => {
|
|
218
208
|
this.activeDrains.delete(drain);
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
this.
|
|
222
|
-
if (!this.disposed && (this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
|
|
223
|
-
this.scheduleInfrastructure();
|
|
224
|
-
}
|
|
209
|
+
this.infrastructureScheduled = false;
|
|
210
|
+
if (!this.disposed && (this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
|
|
211
|
+
this.scheduleInfrastructure();
|
|
225
212
|
}
|
|
226
213
|
});
|
|
227
214
|
}
|
|
228
215
|
|
|
229
216
|
private async drainInfrastructure(): Promise<void> {
|
|
230
217
|
const readyBatch = this.node.createReadyBatch(
|
|
231
|
-
Math.min(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
this.options.partCapacity ?? 256
|
|
218
|
+
Math.min(
|
|
219
|
+
this.options.readyCapacity ?? DEFAULT_MESH_READY_CAPACITY,
|
|
220
|
+
MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET
|
|
221
|
+
)
|
|
236
222
|
);
|
|
237
223
|
try {
|
|
238
224
|
while (!this.disposed) {
|
|
@@ -246,7 +232,7 @@ export class ZLinkMeshDispatchPump {
|
|
|
246
232
|
const lifecycleBudgetExhausted = await this.drainDomain(
|
|
247
233
|
ReadyDomain.Infrastructure,
|
|
248
234
|
readyBatch,
|
|
249
|
-
|
|
235
|
+
undefined,
|
|
250
236
|
MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET
|
|
251
237
|
);
|
|
252
238
|
if (lifecycleBudgetExhausted) {
|
|
@@ -255,7 +241,6 @@ export class ZLinkMeshDispatchPump {
|
|
|
255
241
|
}
|
|
256
242
|
}
|
|
257
243
|
} finally {
|
|
258
|
-
receiveBatch.close();
|
|
259
244
|
readyBatch.close();
|
|
260
245
|
}
|
|
261
246
|
}
|
|
@@ -263,7 +248,7 @@ export class ZLinkMeshDispatchPump {
|
|
|
263
248
|
private async drainDomain(
|
|
264
249
|
domain: number,
|
|
265
250
|
readyBatch: ReadyBatch,
|
|
266
|
-
receiveBatch: ReceiveBatch,
|
|
251
|
+
receiveBatch: ReceiveBatch | undefined,
|
|
267
252
|
claimBudget?: number
|
|
268
253
|
): Promise<boolean> {
|
|
269
254
|
let claimsDrained = 0;
|
|
@@ -285,85 +270,91 @@ export class ZLinkMeshDispatchPump {
|
|
|
285
270
|
for (let index = 0; index < drained.records.length; index += 1) {
|
|
286
271
|
const claim = readyBatch.takeClaim(index);
|
|
287
272
|
claimsDrained += 1;
|
|
288
|
-
const owner = drained.records[index]
|
|
273
|
+
const owner = drained.records[index]!;
|
|
289
274
|
// Raw ingress already attached one host permit to each record.
|
|
290
275
|
// A claim that reserves admission here may receive only that permit's record.
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
// infrastructure may progress if one of its handlers suspends.
|
|
308
|
-
if (domain === ReadyDomain.Infrastructure) {
|
|
309
|
-
this.infrastructureScheduled = false;
|
|
310
|
-
this.infrastructureDrainPromise = undefined;
|
|
311
|
-
if ((this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
|
|
312
|
-
this.scheduleInfrastructure();
|
|
313
|
-
}
|
|
314
|
-
}
|
|
276
|
+
const drainClaim = async () => {
|
|
277
|
+
let ownerReceiveBatch = receiveBatch;
|
|
278
|
+
try {
|
|
279
|
+
ownerReceiveBatch ??= this.node.createReceiveBatch(
|
|
280
|
+
MESH_DISPATCH_RECEIVE_CAPACITY,
|
|
281
|
+
this.options.partCapacity ?? DEFAULT_MESH_PART_CAPACITY
|
|
282
|
+
);
|
|
283
|
+
const capacity =
|
|
284
|
+
owner.ordinaryIngressPreAdmitted === true ? MESH_DISPATCH_RECEIVE_CAPACITY : 1;
|
|
285
|
+
for (;;) {
|
|
286
|
+
let claimPermit =
|
|
287
|
+
owner.terminalCompletion === true ||
|
|
288
|
+
owner.ordinaryIngressPreAdmitted === true ||
|
|
289
|
+
domain === ReadyDomain.Infrastructure
|
|
290
|
+
? undefined
|
|
291
|
+
: await this.acquirePermit();
|
|
315
292
|
try {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
} catch (error) {
|
|
329
|
-
throw new ZLinkMeshDispatchFailure(
|
|
330
|
-
meshDispatchFailureContext(record),
|
|
331
|
-
error
|
|
293
|
+
if (this.capacityStop.signal.aborted) return;
|
|
294
|
+
ownerReceiveBatch.reset(capacity);
|
|
295
|
+
const received = claim.recvBatch(ownerReceiveBatch, ZLINK_BACKEND_RECV_DONT_WAIT);
|
|
296
|
+
if (!received.ok) break;
|
|
297
|
+
// This owner keeps its claim while it drains, so its records stay in FIFO order.
|
|
298
|
+
try {
|
|
299
|
+
for (const record of received.records) {
|
|
300
|
+
if (this.disposed) break;
|
|
301
|
+
const permit = record.applicationJobPermit ?? claimPermit;
|
|
302
|
+
if (owner.ordinaryIngressPreAdmitted === true && permit === undefined) {
|
|
303
|
+
throw new Error(
|
|
304
|
+
'Pre-admitted raw ingress record lost its Application Job Queue permit.'
|
|
332
305
|
);
|
|
333
306
|
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
307
|
+
this.recordsSinceYield += 1;
|
|
308
|
+
const dispatch = async () => {
|
|
309
|
+
try {
|
|
310
|
+
await this.options.dispatch(owner, record);
|
|
311
|
+
await record.onTerminalCompletion?.();
|
|
312
|
+
} catch (error) {
|
|
313
|
+
this.reportDispatchError(error, meshDispatchFailureContext(record));
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
if (permit === undefined) {
|
|
317
|
+
await dispatch();
|
|
318
|
+
} else {
|
|
319
|
+
if (
|
|
320
|
+
domain === ReadyDomain.Application &&
|
|
321
|
+
record.applicationJobPermit === undefined
|
|
322
|
+
)
|
|
323
|
+
permit.markApplicationQueued();
|
|
324
|
+
// The scope now owns this reservation, including failure
|
|
325
|
+
// and detached handler handoff. Only unused permits remain
|
|
326
|
+
// owned by the receive attempt's finally block.
|
|
327
|
+
if (permit === claimPermit) claimPermit = undefined;
|
|
328
|
+
await runWithApplicationJobPermit(permit, dispatch);
|
|
329
|
+
}
|
|
330
|
+
const yieldTurn = this.yieldIfNeeded();
|
|
331
|
+
if (yieldTurn !== undefined) await yieldTurn;
|
|
332
|
+
}
|
|
333
|
+
} finally {
|
|
334
|
+
// Batch ownership includes records whose dispatch never began,
|
|
335
|
+
// including on failure or shutdown in the middle of the batch.
|
|
336
|
+
for (const record of received.records) {
|
|
337
|
+
for (const part of record.parts) part.close();
|
|
338
|
+
record.releaseRetainedIngress?.();
|
|
349
339
|
}
|
|
350
|
-
const yieldTurn = this.yieldIfNeeded();
|
|
351
|
-
if (yieldTurn !== undefined) await yieldTurn;
|
|
352
340
|
}
|
|
353
341
|
} finally {
|
|
354
|
-
|
|
355
|
-
// including on failure or shutdown in the middle of the batch.
|
|
356
|
-
for (const record of received.records) {
|
|
357
|
-
for (const part of record.parts) part.close();
|
|
358
|
-
record.releaseRetainedIngress?.();
|
|
359
|
-
}
|
|
342
|
+
claimPermit?.releaseAfterInternalProcessing();
|
|
360
343
|
}
|
|
361
|
-
} finally {
|
|
362
|
-
claimPermit?.releaseAfterInternalProcessing();
|
|
363
344
|
}
|
|
345
|
+
} finally {
|
|
346
|
+
claim.release();
|
|
347
|
+
if (receiveBatch === undefined) ownerReceiveBatch?.close();
|
|
364
348
|
}
|
|
365
|
-
}
|
|
366
|
-
|
|
349
|
+
};
|
|
350
|
+
// An application worker drains the one owner it claimed. Infrastructure owners
|
|
351
|
+
// drain independently, so a suspended owner does not hold the other claims.
|
|
352
|
+
if (receiveBatch !== undefined) {
|
|
353
|
+
await drainClaim();
|
|
354
|
+
} else {
|
|
355
|
+
const drain = drainClaim().catch((error) => this.reportDispatchError(error));
|
|
356
|
+
this.activeDrains.add(drain);
|
|
357
|
+
void drain.finally(() => this.activeDrains.delete(drain));
|
|
367
358
|
}
|
|
368
359
|
}
|
|
369
360
|
if (claimBudget !== undefined && claimsDrained >= claimBudget) {
|
|
@@ -425,8 +416,11 @@ function meshDispatchFailureContext(record: ReceiveRecord): ZLinkMeshDispatchFai
|
|
|
425
416
|
function serviceWireCommand(record: ReceiveRecord): number | undefined {
|
|
426
417
|
if (record.parts.length !== 1) return undefined;
|
|
427
418
|
const bytes = record.parts[0]!.data();
|
|
428
|
-
return bytes.byteLength >=
|
|
429
|
-
|
|
419
|
+
return bytes.byteLength >= SERVICE_WIRE_PREFIX_SIZE &&
|
|
420
|
+
bytes[0] === SERVICE_WIRE_MAGIC[0] &&
|
|
421
|
+
bytes[1] === SERVICE_WIRE_MAGIC[1] &&
|
|
422
|
+
bytes[SERVICE_WIRE_MAJOR_OFFSET] === SERVICE_WIRE_MAJOR
|
|
423
|
+
? bytes[SERVICE_WIRE_COMMAND_OFFSET]
|
|
430
424
|
: undefined;
|
|
431
425
|
}
|
|
432
426
|
|