@zlink-systems/framework 0.30.0 → 0.30.2
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/LICENSE +150 -68
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
- package/dist/contracts/Channels/Calls.d.ts +2 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
- package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
- package/dist/contracts/Common/encoded-payload-storage.js +5 -2
- package/dist/contracts/Configuration/Builders.d.ts +1 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
- package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
- package/dist/contracts/Handlers/Attributes.d.ts +5 -13
- package/dist/contracts/Handlers/Attributes.js +7 -11
- package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
- package/dist/contracts/Handlers/JsonContract.js +4 -153
- package/dist/contracts/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +6 -1
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- package/dist/nest-integration.d.ts +1 -1
- package/dist/nest-integration.js +2 -1
- package/dist/runtime/abort.d.ts +5 -0
- package/dist/runtime/abort.js +10 -0
- package/dist/runtime/actors/actor-authority-publication.js +3 -2
- package/dist/runtime/actors/actor-client.d.ts +1 -2
- package/dist/runtime/actors/actor-client.js +52 -57
- package/dist/runtime/actors/actor-context.d.ts +2 -0
- package/dist/runtime/actors/actor-context.js +46 -9
- package/dist/runtime/actors/actor-handoff.d.ts +8 -4
- package/dist/runtime/actors/actor-handoff.js +219 -92
- package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
- package/dist/runtime/actors/actor-local-native-join.js +13 -12
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-remote-wire.js +15 -0
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -0
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
- package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-state.js +2 -20
- package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
- package/dist/runtime/actors/index.d.ts +8 -3
- package/dist/runtime/actors/index.js +55 -27
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +56 -23
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
- package/dist/runtime/application-jobs/contracts.d.ts +12 -1
- package/dist/runtime/backend/contracts/index.d.ts +37 -12
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
- package/dist/runtime/backend/mesh-completion-table.js +154 -49
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
- package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
- package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
- package/dist/runtime/backend/runtime-message.d.ts +1 -0
- package/dist/runtime/backend/runtime-message.js +5 -0
- package/dist/runtime/backend/runtime-values.d.ts +1 -0
- package/dist/runtime/backend/runtime-values.js +2 -1
- package/dist/runtime/channels/channel-clients.d.ts +2 -0
- package/dist/runtime/channels/channel-clients.js +75 -23
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
- package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
- package/dist/runtime/channels/channel-dispatch-services.js +45 -0
- package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
- package/dist/runtime/channels/channel-dispatchers.js +62 -54
- package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
- package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
- package/dist/runtime/channels/channel-envelope.d.ts +2 -0
- package/dist/runtime/channels/channel-envelope.js +146 -28
- package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
- package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
- package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
- package/dist/runtime/channels/channel-runtime-manager.js +16 -16
- package/dist/runtime/channels/channel-transports.d.ts +18 -16
- package/dist/runtime/channels/channel-transports.js +77 -58
- package/dist/runtime/channels/client-server-location-runtime.js +5 -4
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/fanout-location-runtime.js +3 -3
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +2 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
- package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
- package/dist/runtime/channels/source-spot-router.d.ts +2 -2
- package/dist/runtime/channels/source-spot-router.js +4 -4
- package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-node-route-transport.js +4 -4
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
- package/dist/runtime/diagnostics/flow-context.js +19 -7
- package/dist/runtime/diagnostics/index.js +4 -9
- package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
- package/dist/runtime/diagnostics/message-flow.js +35 -5
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
- package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
- package/dist/runtime/execution/index.d.ts +4 -2
- package/dist/runtime/execution/index.js +33 -10
- package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
- package/dist/runtime/execution/serial-execution-queue.js +22 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
- package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
- package/dist/runtime/foundation/durable-service-request.js +98 -0
- package/dist/runtime/foundation/operation-identity.d.ts +1 -0
- package/dist/runtime/foundation/operation-identity.js +5 -1
- package/dist/runtime/foundation/operation-registry.d.ts +25 -1
- package/dist/runtime/foundation/operation-registry.js +86 -18
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
- package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
- package/dist/runtime/foundation/service-liveness-registry.js +38 -0
- package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
- package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
- package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
- package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
- package/dist/runtime/foundation/service-stateful-registry.js +24 -26
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
- package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
- package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
- package/dist/runtime/foundation/service-topology-registry.js +61 -27
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
- package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
- package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
- package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
- package/dist/runtime/handlers/handler-instance-scope.js +54 -11
- package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
- package/dist/runtime/host/actor-packet-relay.js +59 -72
- package/dist/runtime/host/actor-placement-coordinator.js +25 -8
- package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
- package/dist/runtime/host/actor-transfer-runtime.js +85 -331
- package/dist/runtime/host/application-job-queue.d.ts +40 -7
- package/dist/runtime/host/application-job-queue.js +137 -42
- package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
- package/dist/runtime/host/entry-actor-runtime.js +3 -0
- package/dist/runtime/host/index.d.ts +12 -2
- package/dist/runtime/host/index.js +300 -202
- package/dist/runtime/host/location-runtime-owner.js +2 -6
- package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
- package/dist/runtime/host/mesh-router-resolver.js +14 -6
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
- package/dist/runtime/host/remote-bound-session-relay.js +73 -208
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +6 -4
- package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
- package/dist/runtime/host/runtime-shutdown.js +3 -2
- package/dist/runtime/host/service-relocation-control.d.ts +1 -0
- package/dist/runtime/host/service-relocation-control.js +10 -4
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
- package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
- package/dist/runtime/host/spot-address-transport.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
- package/dist/runtime/locations/actor-location-claims.js +34 -19
- package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
- package/dist/runtime/locations/auto-connect-loop.js +22 -14
- package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
- package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
- package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
- package/dist/runtime/locations/descriptor-publication.js +11 -0
- package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
- package/dist/runtime/locations/in-memory-authority-store.js +56 -19
- package/dist/runtime/locations/in-memory-location-store.js +1 -10
- package/dist/runtime/locations/index.d.ts +1 -0
- package/dist/runtime/locations/index.js +1 -0
- package/dist/runtime/locations/lease-tracker.js +1 -6
- package/dist/runtime/locations/lifecycle.d.ts +1 -2
- package/dist/runtime/locations/lifecycle.js +2 -5
- package/dist/runtime/locations/location-store-repository.d.ts +51 -1
- package/dist/runtime/locations/location-store-repository.js +363 -139
- package/dist/runtime/locations/relocation-blob.d.ts +18 -1
- package/dist/runtime/locations/relocation-blob.js +52 -1
- package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
- package/dist/runtime/locations/request-source-resolver.js +80 -0
- package/dist/runtime/locations/resolvers.js +1 -1
- package/dist/runtime/locations/runtime.d.ts +7 -3
- package/dist/runtime/locations/runtime.js +61 -53
- package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
- package/dist/runtime/messaging/framework-json-v1.js +38 -294
- package/dist/runtime/messaging/packet-name.d.ts +1 -1
- package/dist/runtime/messaging/packet-name.js +8 -24
- package/dist/runtime/messaging/payload-codec.d.ts +7 -1
- package/dist/runtime/messaging/payload-codec.js +7 -6
- package/dist/runtime/messaging/request-result.d.ts +2 -0
- package/dist/runtime/messaging/request-result.js +57 -0
- package/dist/runtime/messaging/submission-result.d.ts +1 -0
- package/dist/runtime/messaging/submission-result.js +5 -2
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
- package/dist/runtime/spots/index.d.ts +21 -11
- package/dist/runtime/spots/index.js +243 -178
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
- package/dist/runtime/spots/spot-activation-registry.js +21 -11
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +7 -7
- package/dist/runtime/spots/spot-activation.d.ts +7 -3
- package/dist/runtime/spots/spot-activation.js +140 -52
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
- package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-membership.js +0 -8
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
- package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
- package/dist/runtime/spots/spot-entry-activation.js +20 -11
- package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
- package/dist/runtime/spots/spot-handler-registry.js +24 -10
- package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
- package/dist/runtime/spots/spot-manager-public.js +2 -2
- package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
- package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
- package/dist/runtime/spots/spot-outbound.d.ts +3 -0
- package/dist/runtime/spots/spot-outbound.js +27 -18
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
- package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
- package/dist/runtime/spots/spot-serial-executor.js +61 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
- package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +288 -103
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
- package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
- package/dist/runtime/streams/bound-session-service.d.ts +1 -1
- package/dist/runtime/streams/bound-session-service.js +6 -11
- package/dist/runtime/streams/index.d.ts +3 -2
- package/dist/runtime/streams/index.js +6 -4
- package/dist/runtime/streams/managed-stream.js +3 -2
- package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
- package/dist/runtime/streams/session-actor-coordinator.js +15 -32
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
- package/dist/runtime/streams/stream-session-runtime.js +14 -31
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
- package/src/contracts/Channels/Calls.ts +2 -1
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
- package/src/contracts/Common/encoded-payload-storage.ts +6 -3
- package/src/contracts/Configuration/Builders.ts +4 -1
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
- package/src/contracts/Handlers/Attributes.ts +14 -21
- package/src/contracts/Handlers/JsonContract.ts +8 -216
- package/src/contracts/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +10 -1
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/nest-integration.ts +1 -0
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +100 -85
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +291 -110
- package/src/runtime/actors/actor-join-relocation.ts +3 -0
- package/src/runtime/actors/actor-local-native-join.ts +21 -26
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-remote-wire.ts +17 -0
- package/src/runtime/actors/actor-reply.ts +42 -0
- package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
- package/src/runtime/actors/actor-routed-json-request.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
- package/src/runtime/actors/actor-runtime-state.ts +2 -20
- package/src/runtime/actors/actor-source-transfer.ts +1 -34
- package/src/runtime/actors/index.ts +60 -32
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
- package/src/runtime/admission.ts +69 -21
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
- package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
- package/src/runtime/application-jobs/contracts.ts +16 -1
- package/src/runtime/backend/contracts/index.ts +92 -18
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +160 -57
- package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
- package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
- package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
- package/src/runtime/backend/raw-binding-port.ts +7 -2
- package/src/runtime/backend/runtime-message.ts +6 -0
- package/src/runtime/backend/runtime-values.ts +1 -0
- package/src/runtime/channels/channel-clients.ts +132 -58
- package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
- package/src/runtime/channels/channel-dispatch-services.ts +69 -1
- package/src/runtime/channels/channel-dispatchers.ts +136 -90
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
- package/src/runtime/channels/channel-envelope.ts +225 -31
- package/src/runtime/channels/channel-outbound-operations.ts +22 -8
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +41 -17
- package/src/runtime/channels/channel-transports.ts +171 -112
- package/src/runtime/channels/client-server-location-runtime.ts +11 -10
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
- package/src/runtime/channels/fanout-location-runtime.ts +17 -9
- package/src/runtime/channels/local-spot-route-transport.ts +3 -1
- package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
- package/src/runtime/channels/source-spot-router.ts +8 -4
- package/src/runtime/channels/spot-node-route-transport.ts +8 -4
- package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
- package/src/runtime/diagnostics/flow-context.ts +20 -7
- package/src/runtime/diagnostics/index.ts +1 -7
- package/src/runtime/diagnostics/message-flow.ts +47 -9
- package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
- package/src/runtime/execution/index.ts +40 -14
- package/src/runtime/execution/serial-execution-queue.ts +33 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
- package/src/runtime/foundation/durable-service-request.ts +137 -0
- package/src/runtime/foundation/operation-identity.ts +5 -1
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
- package/src/runtime/foundation/service-liveness-registry.ts +39 -0
- package/src/runtime/foundation/service-mailbox.ts +8 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
- package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
- package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
- package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
- package/src/runtime/foundation/service-stateful-registry.ts +38 -35
- package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
- package/src/runtime/foundation/service-topology-registry.ts +91 -36
- package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
- package/src/runtime/handlers/handler-instance-scope.ts +67 -16
- package/src/runtime/host/actor-packet-relay.ts +113 -94
- package/src/runtime/host/actor-placement-coordinator.ts +31 -8
- package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
- package/src/runtime/host/actor-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +160 -41
- package/src/runtime/host/entry-actor-runtime.ts +4 -0
- package/src/runtime/host/index.ts +473 -271
- package/src/runtime/host/location-runtime-owner.ts +2 -6
- package/src/runtime/host/mesh-router-resolver.ts +13 -5
- package/src/runtime/host/remote-bound-session-relay.ts +88 -271
- package/src/runtime/host/route-mesh-runtime.ts +12 -6
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-control.ts +11 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
- package/src/runtime/host/spot-address-transport.ts +4 -2
- package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- package/src/runtime/locations/actor-location-claims.ts +52 -30
- package/src/runtime/locations/auto-connect-loop.ts +22 -14
- package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
- package/src/runtime/locations/auto-connect-types.ts +0 -1
- package/src/runtime/locations/descriptor-publication.ts +7 -0
- package/src/runtime/locations/domain-store-contract.ts +5 -0
- package/src/runtime/locations/in-memory-authority-store.ts +85 -23
- package/src/runtime/locations/in-memory-location-store.ts +1 -12
- package/src/runtime/locations/index.ts +1 -0
- package/src/runtime/locations/lease-tracker.ts +2 -9
- package/src/runtime/locations/lifecycle.ts +8 -26
- package/src/runtime/locations/location-store-repository.ts +628 -152
- package/src/runtime/locations/relocation-blob.ts +75 -1
- package/src/runtime/locations/request-source-resolver.ts +138 -0
- package/src/runtime/locations/resolvers.ts +2 -2
- package/src/runtime/locations/runtime.ts +98 -64
- package/src/runtime/messaging/framework-json-v1.ts +5 -325
- package/src/runtime/messaging/packet-name.ts +5 -25
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +62 -0
- package/src/runtime/messaging/submission-result.ts +5 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
- package/src/runtime/spots/index.ts +389 -283
- package/src/runtime/spots/spot-activation-registry.ts +25 -13
- package/src/runtime/spots/spot-activation-state.ts +12 -19
- package/src/runtime/spots/spot-activation.ts +198 -96
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
- package/src/runtime/spots/spot-actor-membership.ts +0 -15
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
- package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
- package/src/runtime/spots/spot-entry-activation.ts +33 -21
- package/src/runtime/spots/spot-handler-registry.ts +56 -12
- package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
- package/src/runtime/spots/spot-manager-public.ts +2 -2
- package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +39 -19
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
- package/src/runtime/spots/spot-runtime-ports.ts +1 -1
- package/src/runtime/spots/spot-serial-executor.ts +97 -25
- package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
- package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
- package/src/runtime/spots/spot-timer.ts +418 -158
- package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
- package/src/runtime/streams/bound-session-service.ts +7 -10
- package/src/runtime/streams/index.ts +12 -6
- package/src/runtime/streams/managed-stream.ts +4 -2
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
- package/src/runtime/streams/session-actor-coordinator.ts +39 -88
- package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
- package/src/runtime/streams/stream-session-runtime.ts +13 -34
- package/src/runtime/workers/index.ts +1 -1
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkMeshDispatchPump = void 0;
|
|
4
4
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
5
|
+
const abort_1 = require("../abort");
|
|
5
6
|
const node_os_1 = require("node:os");
|
|
6
7
|
const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
|
|
7
8
|
const execution_1 = require("../execution");
|
|
@@ -33,6 +34,10 @@ class ZLinkMeshDispatchPump {
|
|
|
33
34
|
capacityStop = new AbortController();
|
|
34
35
|
recordsSinceYield = 0;
|
|
35
36
|
yieldStartedAtMs = 0;
|
|
37
|
+
/** Drains in progress; the batch budget begins when work starts on an idle pump. */
|
|
38
|
+
draining = 0;
|
|
39
|
+
/** The macrotask boundary every drain waits for once the shared budget is spent. */
|
|
40
|
+
pendingYield;
|
|
36
41
|
constructor(node, options) {
|
|
37
42
|
this.node = node;
|
|
38
43
|
this.options = options;
|
|
@@ -48,7 +53,7 @@ class ZLinkMeshDispatchPump {
|
|
|
48
53
|
return domains;
|
|
49
54
|
});
|
|
50
55
|
}
|
|
51
|
-
async dispose() {
|
|
56
|
+
async dispose(signal) {
|
|
52
57
|
if (this.disposed) {
|
|
53
58
|
return;
|
|
54
59
|
}
|
|
@@ -59,7 +64,7 @@ class ZLinkMeshDispatchPump {
|
|
|
59
64
|
wake();
|
|
60
65
|
this.idleApplicationWorkers.clear();
|
|
61
66
|
while (this.activeDrains.size > 0) {
|
|
62
|
-
await Promise.all([...this.activeDrains]);
|
|
67
|
+
await (0, abort_1.awaitWithAbort)(Promise.all([...this.activeDrains]), signal);
|
|
63
68
|
}
|
|
64
69
|
}
|
|
65
70
|
markReady(domains) {
|
|
@@ -116,14 +121,37 @@ class ZLinkMeshDispatchPump {
|
|
|
116
121
|
try {
|
|
117
122
|
for (;;) {
|
|
118
123
|
await this.waitForApplicationReady();
|
|
119
|
-
|
|
120
|
-
return;
|
|
124
|
+
this.beginDrain();
|
|
121
125
|
try {
|
|
122
|
-
|
|
126
|
+
while (!this.disposed) {
|
|
127
|
+
readyBatch.reset();
|
|
128
|
+
const drained = this.node.drainReady(service_runtime_contracts_1.ReadyDomain.Application, readyBatch, runtime_values_1.ZLINK_BACKEND_RECV_DONT_WAIT);
|
|
129
|
+
if (!drained.ok || drained.records.length === 0)
|
|
130
|
+
break;
|
|
131
|
+
if (drained.hasResidue)
|
|
132
|
+
this.markReady(service_runtime_contracts_1.ReadyDomain.Application);
|
|
133
|
+
for (let index = 0; index < drained.records.length; index += 1) {
|
|
134
|
+
const claim = readyBatch.takeClaim(index);
|
|
135
|
+
// Raw ingress already attached one host permit to each record.
|
|
136
|
+
// A claim reserving admission may receive only that permit's record.
|
|
137
|
+
await this.drainClaim(service_runtime_contracts_1.ReadyDomain.Application, drained.records[index], claim, receiveBatch);
|
|
138
|
+
}
|
|
139
|
+
// Empty ready claims count toward the shared pump budget too.
|
|
140
|
+
this.recordsSinceYield += 1;
|
|
141
|
+
const yieldTurn = this.yieldIfNeeded();
|
|
142
|
+
if (yieldTurn !== undefined)
|
|
143
|
+
await yieldTurn;
|
|
144
|
+
}
|
|
123
145
|
}
|
|
124
146
|
catch (error) {
|
|
125
147
|
this.reportDispatchError(error);
|
|
126
148
|
}
|
|
149
|
+
finally {
|
|
150
|
+
readyBatch.reset();
|
|
151
|
+
this.draining -= 1;
|
|
152
|
+
}
|
|
153
|
+
if (this.disposed)
|
|
154
|
+
return;
|
|
127
155
|
}
|
|
128
156
|
}
|
|
129
157
|
finally {
|
|
@@ -140,6 +168,51 @@ class ZLinkMeshDispatchPump {
|
|
|
140
168
|
}
|
|
141
169
|
return new Promise((resolve) => this.idleApplicationWorkers.add(resolve));
|
|
142
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Starts one record in this worker's turn; a permit's scope covers the
|
|
173
|
+
* synchronous dispatch. Returns `false` when the dispatch threw (already
|
|
174
|
+
* reported), `true` when it returned synchronously, or the handler's pending
|
|
175
|
+
* completion, which the draining turn awaits itself before
|
|
176
|
+
* {@link finishRecord}.
|
|
177
|
+
*/
|
|
178
|
+
dispatchRecord(owner, record, permit) {
|
|
179
|
+
const previous = permit === undefined ? undefined : (0, application_job_queue_scope_1.enterApplicationJobPermitScope)(permit);
|
|
180
|
+
let result;
|
|
181
|
+
try {
|
|
182
|
+
result = this.options.dispatch(owner, record);
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
this.failRecord(error, record, permit);
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
finally {
|
|
189
|
+
if (permit !== undefined)
|
|
190
|
+
(0, application_job_queue_scope_1.leaveApplicationJobPermitScope)(previous);
|
|
191
|
+
}
|
|
192
|
+
return result ?? true;
|
|
193
|
+
}
|
|
194
|
+
failRecord(error, record, permit) {
|
|
195
|
+
(0, application_job_queue_scope_1.releaseApplicationJobPermitTurn)(permit);
|
|
196
|
+
this.reportDispatchError(error, meshDispatchFailureContext(record));
|
|
197
|
+
}
|
|
198
|
+
/** Runs the record's terminal completion, then releases its permit turn. */
|
|
199
|
+
finishRecord(record, permit) {
|
|
200
|
+
let result = undefined;
|
|
201
|
+
try {
|
|
202
|
+
result = record.onTerminalCompletion?.();
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
this.reportDispatchError(error, meshDispatchFailureContext(record));
|
|
206
|
+
}
|
|
207
|
+
if (result === undefined) {
|
|
208
|
+
(0, application_job_queue_scope_1.releaseApplicationJobPermitTurn)(permit);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
return Promise.resolve(result).then(() => (0, application_job_queue_scope_1.releaseApplicationJobPermitTurn)(permit), (error) => {
|
|
212
|
+
this.reportDispatchError(error, meshDispatchFailureContext(record));
|
|
213
|
+
(0, application_job_queue_scope_1.releaseApplicationJobPermitTurn)(permit);
|
|
214
|
+
});
|
|
215
|
+
}
|
|
143
216
|
reportDispatchError(error, context) {
|
|
144
217
|
this.options.reportError?.(error, context);
|
|
145
218
|
}
|
|
@@ -178,7 +251,7 @@ class ZLinkMeshDispatchPump {
|
|
|
178
251
|
if ((this.pendingDomains & service_runtime_contracts_1.ReadyDomain.Application) !== 0) {
|
|
179
252
|
setImmediate(() => this.wakeApplicationWorker());
|
|
180
253
|
}
|
|
181
|
-
const lifecycleBudgetExhausted = await this.drainDomain(
|
|
254
|
+
const lifecycleBudgetExhausted = await this.drainDomain(readyBatch);
|
|
182
255
|
if (lifecycleBudgetExhausted) {
|
|
183
256
|
this.pendingDomains |= service_runtime_contracts_1.ReadyDomain.Infrastructure;
|
|
184
257
|
await yieldToEventLoop();
|
|
@@ -189,116 +262,34 @@ class ZLinkMeshDispatchPump {
|
|
|
189
262
|
readyBatch.close();
|
|
190
263
|
}
|
|
191
264
|
}
|
|
192
|
-
async drainDomain(
|
|
265
|
+
async drainDomain(readyBatch) {
|
|
193
266
|
let claimsDrained = 0;
|
|
267
|
+
this.beginDrain();
|
|
194
268
|
try {
|
|
195
269
|
while (!this.disposed) {
|
|
196
|
-
if (
|
|
270
|
+
if (claimsDrained >= MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET) {
|
|
197
271
|
// Lifecycle work has priority, but a bounded turn lets application
|
|
198
272
|
// work make progress when lifecycle records keep arriving.
|
|
199
273
|
return true;
|
|
200
274
|
}
|
|
201
275
|
readyBatch.reset();
|
|
202
|
-
const drained = this.node.drainReady(
|
|
276
|
+
const drained = this.node.drainReady(service_runtime_contracts_1.ReadyDomain.Infrastructure, readyBatch, runtime_values_1.ZLINK_BACKEND_RECV_DONT_WAIT);
|
|
203
277
|
if (!drained.ok || drained.records.length === 0) {
|
|
204
278
|
return false;
|
|
205
279
|
}
|
|
206
|
-
if (domain === service_runtime_contracts_1.ReadyDomain.Application && drained.hasResidue) {
|
|
207
|
-
this.markReady(service_runtime_contracts_1.ReadyDomain.Application);
|
|
208
|
-
}
|
|
209
280
|
for (let index = 0; index < drained.records.length; index += 1) {
|
|
210
281
|
const claim = readyBatch.takeClaim(index);
|
|
211
282
|
claimsDrained += 1;
|
|
212
283
|
const owner = drained.records[index];
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
let claimPermit = owner.terminalCompletion === true ||
|
|
221
|
-
owner.ordinaryIngressPreAdmitted === true ||
|
|
222
|
-
domain === service_runtime_contracts_1.ReadyDomain.Infrastructure
|
|
223
|
-
? undefined
|
|
224
|
-
: await this.acquirePermit();
|
|
225
|
-
try {
|
|
226
|
-
if (this.capacityStop.signal.aborted)
|
|
227
|
-
return;
|
|
228
|
-
ownerReceiveBatch.reset(capacity);
|
|
229
|
-
const received = claim.recvBatch(ownerReceiveBatch, runtime_values_1.ZLINK_BACKEND_RECV_DONT_WAIT);
|
|
230
|
-
if (received.ok) {
|
|
231
|
-
// The bounded batch stays in claim order until its records finish.
|
|
232
|
-
try {
|
|
233
|
-
for (const record of received.records) {
|
|
234
|
-
if (this.disposed)
|
|
235
|
-
break;
|
|
236
|
-
const permit = record.applicationJobPermit ?? claimPermit;
|
|
237
|
-
if (owner.ordinaryIngressPreAdmitted === true && permit === undefined) {
|
|
238
|
-
throw new Error('Pre-admitted raw ingress record lost its Application Job Queue permit.');
|
|
239
|
-
}
|
|
240
|
-
this.recordsSinceYield += 1;
|
|
241
|
-
const dispatch = async () => {
|
|
242
|
-
try {
|
|
243
|
-
await this.options.dispatch(owner, record);
|
|
244
|
-
await record.onTerminalCompletion?.();
|
|
245
|
-
}
|
|
246
|
-
catch (error) {
|
|
247
|
-
this.reportDispatchError(error, meshDispatchFailureContext(record));
|
|
248
|
-
}
|
|
249
|
-
};
|
|
250
|
-
if (permit === undefined) {
|
|
251
|
-
await dispatch();
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
if (domain === service_runtime_contracts_1.ReadyDomain.Application &&
|
|
255
|
-
record.applicationJobPermit === undefined)
|
|
256
|
-
permit.markApplicationQueued();
|
|
257
|
-
// The scope now owns this reservation, including failure
|
|
258
|
-
// and detached handler handoff. Only unused permits remain
|
|
259
|
-
// owned by the receive attempt's finally block.
|
|
260
|
-
if (permit === claimPermit)
|
|
261
|
-
claimPermit = undefined;
|
|
262
|
-
await (0, application_job_queue_scope_1.runWithApplicationJobPermit)(permit, dispatch);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
finally {
|
|
267
|
-
// Batch ownership includes records whose dispatch never began,
|
|
268
|
-
// including on failure or shutdown in the middle of the batch.
|
|
269
|
-
for (const record of received.records) {
|
|
270
|
-
for (const part of record.parts)
|
|
271
|
-
part.close();
|
|
272
|
-
record.releaseRetainedIngress?.();
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
finally {
|
|
278
|
-
claimPermit?.releaseAfterInternalProcessing();
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
finally {
|
|
282
|
-
claim.release();
|
|
283
|
-
if (receiveBatch === undefined)
|
|
284
|
-
ownerReceiveBatch?.close();
|
|
285
|
-
}
|
|
286
|
-
const yieldTurn = this.yieldIfNeeded();
|
|
287
|
-
if (yieldTurn !== undefined)
|
|
288
|
-
await yieldTurn;
|
|
289
|
-
};
|
|
290
|
-
// An application worker drains the one owner it claimed. Infrastructure owners
|
|
291
|
-
// drain independently, so a suspended owner does not hold the other claims.
|
|
292
|
-
if (receiveBatch !== undefined) {
|
|
293
|
-
await drainClaim();
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
const drain = drainClaim().catch((error) => this.reportDispatchError(error));
|
|
297
|
-
this.activeDrains.add(drain);
|
|
298
|
-
void drain.finally(() => this.activeDrains.delete(drain));
|
|
299
|
-
}
|
|
284
|
+
this.beginDrain();
|
|
285
|
+
const drain = this.drainClaim(service_runtime_contracts_1.ReadyDomain.Infrastructure, owner, claim, undefined).catch((error) => this.reportDispatchError(error));
|
|
286
|
+
this.activeDrains.add(drain);
|
|
287
|
+
void drain.finally(() => {
|
|
288
|
+
this.draining -= 1;
|
|
289
|
+
this.activeDrains.delete(drain);
|
|
290
|
+
});
|
|
300
291
|
}
|
|
301
|
-
if (
|
|
292
|
+
if (claimsDrained >= MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET) {
|
|
302
293
|
this.wakeApplicationWorker();
|
|
303
294
|
return true;
|
|
304
295
|
}
|
|
@@ -313,17 +304,133 @@ class ZLinkMeshDispatchPump {
|
|
|
313
304
|
}
|
|
314
305
|
finally {
|
|
315
306
|
readyBatch.reset();
|
|
307
|
+
this.draining -= 1;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Time the pump spent idle is not batch work: when work starts on an idle
|
|
312
|
+
* pump, its batch budget starts with it (spec 08 §6).
|
|
313
|
+
*/
|
|
314
|
+
beginDrain() {
|
|
315
|
+
if (this.draining === 0) {
|
|
316
|
+
this.recordsSinceYield = 0;
|
|
317
|
+
this.yieldStartedAtMs = this.nowMs();
|
|
316
318
|
}
|
|
319
|
+
this.draining += 1;
|
|
317
320
|
}
|
|
321
|
+
/** Drains one claimed owner in this worker's turn, in claim order. */
|
|
322
|
+
async drainClaim(domain, owner, claim, receiveBatch) {
|
|
323
|
+
let ownerReceiveBatch = receiveBatch;
|
|
324
|
+
try {
|
|
325
|
+
ownerReceiveBatch ??= this.node.createReceiveBatch(MESH_DISPATCH_RECEIVE_CAPACITY, this.options.partCapacity ?? DEFAULT_MESH_PART_CAPACITY);
|
|
326
|
+
const capacity = owner.ordinaryIngressPreAdmitted === true ? MESH_DISPATCH_RECEIVE_CAPACITY : 1;
|
|
327
|
+
let claimPermit = owner.terminalCompletion === true ||
|
|
328
|
+
owner.ordinaryIngressPreAdmitted === true ||
|
|
329
|
+
domain === service_runtime_contracts_1.ReadyDomain.Infrastructure
|
|
330
|
+
? undefined
|
|
331
|
+
: await this.acquirePermit();
|
|
332
|
+
try {
|
|
333
|
+
if (this.capacityStop.signal.aborted)
|
|
334
|
+
return;
|
|
335
|
+
ownerReceiveBatch.reset(capacity);
|
|
336
|
+
const received = claim.recvBatch(ownerReceiveBatch, runtime_values_1.ZLINK_BACKEND_RECV_DONT_WAIT);
|
|
337
|
+
if (received.ok) {
|
|
338
|
+
// The bounded batch stays in claim order until its records finish.
|
|
339
|
+
try {
|
|
340
|
+
for (const record of received.records) {
|
|
341
|
+
if (this.disposed)
|
|
342
|
+
break;
|
|
343
|
+
const permit = record.applicationJobPermit ?? claimPermit;
|
|
344
|
+
if (owner.ordinaryIngressPreAdmitted === true && permit === undefined) {
|
|
345
|
+
throw new Error('Pre-admitted raw ingress record lost its Application Job Queue permit.');
|
|
346
|
+
}
|
|
347
|
+
this.recordsSinceYield += 1;
|
|
348
|
+
if (permit !== undefined) {
|
|
349
|
+
if (domain === service_runtime_contracts_1.ReadyDomain.Application && record.applicationJobPermit === undefined)
|
|
350
|
+
permit.markApplicationQueued();
|
|
351
|
+
// The scope now owns this reservation, including failure
|
|
352
|
+
// and detached handler handoff. Only unused permits remain
|
|
353
|
+
// owned by the receive attempt's finally block.
|
|
354
|
+
if (permit === claimPermit)
|
|
355
|
+
claimPermit = undefined;
|
|
356
|
+
}
|
|
357
|
+
// The record's terminal and the permit turn release follow the
|
|
358
|
+
// handler in this turn's own continuation.
|
|
359
|
+
if (record.prepareDispatch !== undefined) {
|
|
360
|
+
try {
|
|
361
|
+
const stopSignal = this.capacityStop.signal;
|
|
362
|
+
const preparation = record.prepareDispatch(stopSignal);
|
|
363
|
+
const accepted = preparation instanceof Promise ? await preparation : preparation;
|
|
364
|
+
if (!accepted || stopSignal.aborted) {
|
|
365
|
+
(0, application_job_queue_scope_1.releaseApplicationJobPermitTurn)(permit);
|
|
366
|
+
continue;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
catch (error) {
|
|
370
|
+
this.failRecord(error, record, permit);
|
|
371
|
+
continue;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
const dispatched = this.dispatchRecord(owner, record, permit);
|
|
375
|
+
if (dispatched === false)
|
|
376
|
+
continue;
|
|
377
|
+
if (dispatched !== true) {
|
|
378
|
+
try {
|
|
379
|
+
await dispatched;
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
this.failRecord(error, record, permit);
|
|
383
|
+
continue;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
const finished = this.finishRecord(record, permit);
|
|
387
|
+
if (finished !== undefined)
|
|
388
|
+
await finished;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
finally {
|
|
392
|
+
// Batch ownership includes records whose dispatch never began,
|
|
393
|
+
// including on failure or shutdown in the middle of the batch.
|
|
394
|
+
for (const record of received.records) {
|
|
395
|
+
for (const part of record.parts)
|
|
396
|
+
part.close();
|
|
397
|
+
record.releaseRetainedIngress?.();
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
finally {
|
|
403
|
+
claimPermit?.releaseAfterInternalProcessing();
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
finally {
|
|
407
|
+
claim.release();
|
|
408
|
+
if (receiveBatch === undefined)
|
|
409
|
+
ownerReceiveBatch?.close();
|
|
410
|
+
}
|
|
411
|
+
const yieldTurn = this.yieldIfNeeded();
|
|
412
|
+
if (yieldTurn !== undefined)
|
|
413
|
+
await yieldTurn;
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* The batch budget is shared by every drain of this pump, so once it is
|
|
417
|
+
* spent every drain waits for the same macrotask boundary; one drain that
|
|
418
|
+
* keeps running would otherwise hold the event loop the yield was for.
|
|
419
|
+
*/
|
|
318
420
|
yieldIfNeeded() {
|
|
421
|
+
if (this.pendingYield !== undefined)
|
|
422
|
+
return this.pendingYield;
|
|
319
423
|
const nowMs = this.nowMs();
|
|
320
424
|
if (this.recordsSinceYield < MESH_DISPATCH_YIELD_RECORDS &&
|
|
321
425
|
nowMs - this.yieldStartedAtMs < MESH_DISPATCH_YIELD_INTERVAL_MS)
|
|
322
426
|
return undefined;
|
|
323
427
|
this.recordsSinceYield = 0;
|
|
324
|
-
|
|
428
|
+
const pendingYield = yieldToTimers().then(() => {
|
|
429
|
+
this.pendingYield = undefined;
|
|
325
430
|
this.yieldStartedAtMs = this.nowMs();
|
|
326
431
|
});
|
|
432
|
+
this.pendingYield = pendingYield;
|
|
433
|
+
return pendingYield;
|
|
327
434
|
}
|
|
328
435
|
nowMs() {
|
|
329
436
|
return this.options.monotonicNowMs?.() ?? performance.now();
|
|
@@ -40,8 +40,8 @@ export declare function submitBindingReply(operation: ZLinkBindingReplyOperation
|
|
|
40
40
|
export declare function submitBindingAsyncSend(operation: ZLinkBindingAsyncSendOperation, payload: unknown): Promise<void>;
|
|
41
41
|
export declare function submitBindingSend(operation: ZLinkBindingAsyncSendOperation, payload: unknown): import('../raw-binding-port').ZLinkRawSendSubmission;
|
|
42
42
|
export declare function submitBindingSyncSend(operation: ZLinkBindingAsyncSendOperation, payload: unknown): void;
|
|
43
|
-
export declare function submitBindingRequest(operation: ZLinkBindingRequestOperation, payload: unknown, timeoutMs: number | undefined, recordReceived?: () => void): Promise<readonly unknown[]>;
|
|
44
|
-
export declare function bindingRequestReply(submission: import('@zlink-systems/zlink').RequestSubmission, deadlineMs: number | undefined, recordReceived?: () => void): Promise<import('@zlink-systems/zlink').Message[]>;
|
|
43
|
+
export declare function submitBindingRequest(operation: ZLinkBindingRequestOperation, payload: unknown, timeoutMs: number | undefined, recordReceived?: () => void, onAdmitted?: () => void): Promise<readonly unknown[]>;
|
|
44
|
+
export declare function bindingRequestReply(submission: import('@zlink-systems/zlink').RequestSubmission, deadlineMs: number | undefined, recordReceived?: () => void, onAdmitted?: () => void): Promise<import('@zlink-systems/zlink').Message[]>;
|
|
45
45
|
export declare function closeBindingReply(replies: readonly import('@zlink-systems/zlink').Message[]): void;
|
|
46
46
|
/**
|
|
47
47
|
* Closes a binding handle once. An already closed or terminated handle counts as
|
|
@@ -22,6 +22,7 @@ const submission_result_1 = require("../../messaging/submission-result");
|
|
|
22
22
|
const node_backend_adapter_1 = require("../node-backend-adapter");
|
|
23
23
|
const runtime_values_1 = require("../runtime-values");
|
|
24
24
|
const nativeErrnoValues = node_os_1.constants.errno;
|
|
25
|
+
const completedSend = Promise.resolve();
|
|
25
26
|
exports.zlink = (0, node_backend_adapter_1.loadBinding)();
|
|
26
27
|
function isBindingNotFound(error) {
|
|
27
28
|
return error instanceof exports.zlink.ConnectError && error.result === exports.zlink.ConnectResult.NotFound;
|
|
@@ -75,10 +76,14 @@ function submitBindingReply(operation, payload) {
|
|
|
75
76
|
throw translateBindingResultError(error);
|
|
76
77
|
}
|
|
77
78
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
function submitBindingAsyncSend(operation, payload) {
|
|
80
|
+
try {
|
|
81
|
+
const submission = submitBindingSend(operation, payload);
|
|
82
|
+
return submission.result === runtime_values_1.SubmitResult.Backpressured ? submission.admitted : completedSend;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
return Promise.reject(error);
|
|
86
|
+
}
|
|
82
87
|
}
|
|
83
88
|
function submitBindingSend(operation, payload) {
|
|
84
89
|
let submission;
|
|
@@ -103,7 +108,8 @@ function submitBindingSend(operation, payload) {
|
|
|
103
108
|
})
|
|
104
109
|
};
|
|
105
110
|
}
|
|
106
|
-
|
|
111
|
+
// Binding SendSubmission is the closed OK | BACKPRESSURED snapshot.
|
|
112
|
+
return submission;
|
|
107
113
|
}
|
|
108
114
|
function submitBindingSyncSend(operation, payload) {
|
|
109
115
|
try {
|
|
@@ -120,7 +126,7 @@ function submitBindingSyncSend(operation, payload) {
|
|
|
120
126
|
throw translateBindingResultError(error);
|
|
121
127
|
}
|
|
122
128
|
}
|
|
123
|
-
async function submitBindingRequest(operation, payload, timeoutMs, recordReceived) {
|
|
129
|
+
async function submitBindingRequest(operation, payload, timeoutMs, recordReceived, onAdmitted) {
|
|
124
130
|
const deadlineMs = timeoutMs === undefined ? undefined : performance.now() + timeoutMs;
|
|
125
131
|
try {
|
|
126
132
|
let current;
|
|
@@ -138,17 +144,17 @@ async function submitBindingRequest(operation, payload, timeoutMs, recordReceive
|
|
|
138
144
|
if (timeoutMs !== undefined) {
|
|
139
145
|
current = current.timeout(timeoutMs);
|
|
140
146
|
}
|
|
141
|
-
return await bindingRequestReply(current.submit(), deadlineMs, recordReceived);
|
|
147
|
+
return await bindingRequestReply(current.submit(), deadlineMs, recordReceived, onAdmitted);
|
|
142
148
|
}
|
|
143
149
|
catch (error) {
|
|
144
150
|
throw translateBindingResultError(error);
|
|
145
151
|
}
|
|
146
152
|
}
|
|
147
|
-
async function bindingRequestReply(submission, deadlineMs, recordReceived) {
|
|
153
|
+
async function bindingRequestReply(submission, deadlineMs, recordReceived, onAdmitted) {
|
|
148
154
|
const reply = submission.reply;
|
|
149
155
|
if (submission.result === runtime_values_1.SubmitResult.Backpressured) {
|
|
150
156
|
try {
|
|
151
|
-
const [, replies] = await (0, request_deadline_1.waitRequestReply)(Promise.all([submission.admitted, reply]), 'Request', deadlineMs);
|
|
157
|
+
const [, replies] = await (0, request_deadline_1.waitRequestReply)(Promise.all([submission.admitted.then(() => onAdmitted?.()), reply]), 'Request', deadlineMs);
|
|
152
158
|
recordReceived?.();
|
|
153
159
|
return replies;
|
|
154
160
|
}
|
|
@@ -160,6 +166,7 @@ async function bindingRequestReply(submission, deadlineMs, recordReceived) {
|
|
|
160
166
|
throw error;
|
|
161
167
|
}
|
|
162
168
|
}
|
|
169
|
+
onAdmitted?.();
|
|
163
170
|
const replies = await reply;
|
|
164
171
|
recordReceived?.();
|
|
165
172
|
return replies;
|
|
@@ -7,7 +7,7 @@ export declare class ZLinkDealerChannelClientTransport implements ZLinkChannelCl
|
|
|
7
7
|
private readonly publisher?;
|
|
8
8
|
constructor(dealer: DealerSocket, publisher?: PubSocket | undefined);
|
|
9
9
|
send(channelName: string, packetName: string | undefined, message: Message, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
|
|
10
|
-
request<TReply>(channelName: string, packetName: string | undefined, request: Message, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string
|
|
10
|
+
request<TReply>(channelName: string, packetName: string | undefined, request: Message, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void): Promise<TReply>;
|
|
11
11
|
tryPublish(channelName: string, topic: string, packetName: string | undefined, event: Message, metadata?: ReadonlyMap<string, string>): ZLinkSubmitResult;
|
|
12
12
|
publish(channelName: string, topic: string, packetName: string | undefined, event: Message, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
|
|
13
13
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkDealerChannelClientTransport = void 0;
|
|
4
|
+
const node_backend_adapter_support_1 = require("./node-backend-adapter-support");
|
|
4
5
|
const configuration_1 = require("../../configuration");
|
|
5
6
|
const submission_result_1 = require("../../messaging/submission-result");
|
|
6
7
|
const channel_envelope_1 = require("../../channels/channel-envelope");
|
|
@@ -22,12 +23,14 @@ class ZLinkDealerChannelClientTransport {
|
|
|
22
23
|
await (0, flow_context_1.runWithOutboundFlow)(true, () => (0, channel_multipart_1.appendParts)(this.dealer.send(), (0, channel_envelope_1.encodeChannelEnvelopeParts)(3 /* ZLinkChannelMessageKind.Command */, channelName, packetName, message, undefined, undefined, undefined, undefined, true, metadata)).submit().admitted);
|
|
23
24
|
return { status: submission_result_1.ZLinkSubmitStatus.Submitted };
|
|
24
25
|
}
|
|
25
|
-
async request(channelName, packetName, request, timeoutMs, signal, metadata = EMPTY_METADATA) {
|
|
26
|
+
async request(channelName, packetName, request, timeoutMs, signal, metadata = EMPTY_METADATA, onAdmitted) {
|
|
26
27
|
(0, abort_1.throwIfAborted)(signal);
|
|
27
28
|
const operation = (0, flow_context_1.runWithOutboundFlow)(true, () => (0, channel_multipart_1.appendParts)(this.dealer.request(), (0, channel_envelope_1.encodeChannelEnvelopeParts)(1 /* ZLinkChannelMessageKind.Request */, channelName, packetName, request, timeoutMs, undefined, undefined, undefined, true, metadata)));
|
|
28
29
|
if (timeoutMs !== undefined)
|
|
29
30
|
operation.timeout(timeoutMs);
|
|
30
|
-
const reply = await (0, channel_multipart_1.submitRequestOperation)({
|
|
31
|
+
const reply = await (0, channel_multipart_1.submitRequestOperation)({
|
|
32
|
+
submit: () => (0, node_backend_adapter_support_1.bindingRequestReply)(operation.submit(), timeoutMs === undefined ? undefined : performance.now() + timeoutMs, undefined, onAdmitted)
|
|
33
|
+
}, 'channel request');
|
|
31
34
|
try {
|
|
32
35
|
return (0, channel_envelope_1.decodeChannelReply)(reply);
|
|
33
36
|
}
|