@zlink-systems/framework 0.30.3 → 0.32.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/Actors/ZLinkActor.d.ts +2 -0
- package/dist/contracts/Actors/ZLinkSessionBindingIdentity.d.ts +6 -0
- package/dist/contracts/Actors/ZLinkSessionBindingIdentity.js +2 -0
- package/dist/contracts/Actors/index.d.ts +1 -0
- package/dist/contracts/Actors/index.js +1 -0
- package/dist/contracts/Common/CoreTypes.d.ts +1 -0
- package/dist/contracts/Common/HandlerMessageType.d.ts +8 -0
- package/dist/contracts/Common/HandlerMessageType.js +41 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +1 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.js +12 -20
- package/dist/contracts/Common/ZLinkMessage.js +11 -7
- package/dist/contracts/Common/encoded-payload-storage.d.ts +0 -2
- package/dist/contracts/Common/encoded-payload-storage.js +4 -16
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/payload-slab.d.ts +4 -0
- package/dist/contracts/Common/payload-slab.js +30 -0
- package/dist/contracts/Configuration/RegistrationBuilders.js +15 -9
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +19 -0
- package/dist/contracts/Handlers/Contexts.d.ts +1 -0
- package/dist/contracts/Locations/Authority.d.ts +2 -0
- package/dist/internal.d.ts +9 -0
- package/dist/internal.js +23 -1
- package/dist/nest-integration.d.ts +1 -0
- package/dist/nest-integration.js +3 -1
- package/dist/runtime/actors/actor-client.d.ts +6 -2
- package/dist/runtime/actors/actor-client.js +120 -82
- package/dist/runtime/actors/actor-context.js +16 -5
- package/dist/runtime/actors/actor-execution-context.js +2 -2
- package/dist/runtime/actors/actor-handoff.d.ts +12 -1
- package/dist/runtime/actors/actor-handoff.js +79 -34
- package/dist/runtime/actors/actor-join-deferred-scope.js +6 -6
- package/dist/runtime/actors/actor-local-native-join.d.ts +2 -2
- package/dist/runtime/actors/actor-local-native-join.js +19 -17
- package/dist/runtime/actors/actor-mailbox.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.d.ts +2 -2
- package/dist/runtime/actors/actor-remote-joiner.js +4 -4
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +9 -3
- package/dist/runtime/actors/actor-routed-json-request.d.ts +3 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -2
- package/dist/runtime/actors/actor-runtime-state.d.ts +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +9 -5
- package/dist/runtime/actors/spot-actor-dispatch.js +60 -38
- package/dist/runtime/admission.d.ts +6 -4
- package/dist/runtime/admission.js +21 -10
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +1 -0
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +3 -0
- package/dist/runtime/backend/contracts/index.d.ts +26 -10
- package/dist/runtime/backend/mesh-completion-table.d.ts +7 -1
- package/dist/runtime/backend/mesh-completion-table.js +84 -20
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +19 -6
- package/dist/runtime/backend/mesh-dispatch-pump.js +246 -147
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +27 -19
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +5 -2
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +70 -13
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +4 -3
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +5 -1
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +7 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +99 -63
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +34 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +210 -106
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +20 -6
- package/dist/runtime/backend/raw-binding-port.d.ts +6 -3
- package/dist/runtime/channels/channel-clients.js +3 -3
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +11 -7
- package/dist/runtime/channels/channel-dispatch-pipeline.js +40 -22
- package/dist/runtime/channels/channel-dispatch-services.d.ts +3 -1
- package/dist/runtime/channels/channel-dispatch-services.js +7 -6
- package/dist/runtime/channels/channel-dispatchers.d.ts +13 -6
- package/dist/runtime/channels/channel-dispatchers.js +57 -36
- package/dist/runtime/channels/channel-envelope.d.ts +2 -2
- package/dist/runtime/channels/channel-envelope.js +609 -83
- package/dist/runtime/channels/channel-multipart.d.ts +1 -0
- package/dist/runtime/channels/channel-multipart.js +10 -6
- package/dist/runtime/channels/channel-outbound-operations.d.ts +6 -9
- package/dist/runtime/channels/channel-outbound-operations.js +107 -105
- package/dist/runtime/channels/channel-receive-loops.d.ts +9 -7
- package/dist/runtime/channels/channel-receive-loops.js +126 -90
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +23 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.js +47 -38
- package/dist/runtime/channels/channel-runtime-manager.d.ts +13 -6
- package/dist/runtime/channels/channel-runtime-manager.js +32 -14
- package/dist/runtime/channels/channel-socket-registry.d.ts +28 -4
- package/dist/runtime/channels/channel-socket-registry.js +9 -1
- package/dist/runtime/channels/channel-transports.d.ts +23 -16
- package/dist/runtime/channels/channel-transports.js +139 -119
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +4 -4
- package/dist/runtime/channels/dispatch-error-reporter.js +5 -5
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.d.ts +5 -2
- package/dist/runtime/channels/local-spot-route-transport.js +15 -18
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +6 -3
- package/dist/runtime/channels/router-socket-spot-route-transport.js +33 -19
- package/dist/runtime/channels/source-spot-router.d.ts +6 -3
- package/dist/runtime/channels/source-spot-router.js +34 -23
- package/dist/runtime/channels/spot-node-route-transport.d.ts +6 -3
- package/dist/runtime/channels/spot-node-route-transport.js +23 -17
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +6 -3
- package/dist/runtime/channels/spot-route-bridge-transport.js +38 -24
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +8 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +36 -23
- package/dist/runtime/diagnostics/dispatch-error-details.js +9 -3
- package/dist/runtime/diagnostics/message-flow-bootstrap.d.ts +1 -0
- package/dist/runtime/diagnostics/message-flow-bootstrap.js +8 -0
- package/dist/runtime/diagnostics/message-flow-delivery.d.ts +47 -0
- package/dist/runtime/diagnostics/message-flow-delivery.js +149 -0
- package/dist/runtime/diagnostics/message-flow-record.d.ts +50 -0
- package/dist/runtime/diagnostics/message-flow-record.js +228 -0
- package/dist/runtime/diagnostics/message-flow-worker.d.ts +1 -0
- package/dist/runtime/diagnostics/message-flow-worker.js +118 -0
- package/dist/runtime/diagnostics/message-flow.d.ts +7 -19
- package/dist/runtime/diagnostics/message-flow.js +42 -290
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +4 -3
- package/dist/runtime/diagnostics/runtime-metrics.js +8 -4
- package/dist/runtime/execution/index.d.ts +1 -0
- package/dist/runtime/execution/index.js +6 -3
- package/dist/runtime/execution/serial-execution-queue.d.ts +26 -13
- package/dist/runtime/execution/serial-execution-queue.js +75 -71
- package/dist/runtime/foundation/durable-service-request.d.ts +12 -3
- package/dist/runtime/foundation/durable-service-request.js +158 -73
- package/dist/runtime/foundation/operation-registry.d.ts +33 -3
- package/dist/runtime/foundation/operation-registry.js +272 -33
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +62 -23
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +373 -194
- package/dist/runtime/foundation/request-runtime.d.ts +17 -0
- package/dist/runtime/foundation/request-runtime.js +163 -0
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +6 -0
- package/dist/runtime/foundation/service-liveness-registry.d.ts +1 -1
- package/dist/runtime/foundation/service-mailbox.d.ts +4 -2
- package/dist/runtime/foundation/service-mailbox.js +4 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -2
- package/dist/runtime/foundation/service-relocation-object-owner.js +12 -5
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +7 -2
- package/dist/runtime/foundation/service-stateful-registry.d.ts +6 -2
- package/dist/runtime/foundation/service-stateful-registry.js +38 -17
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +91 -26
- package/dist/runtime/foundation/service-stateful-runtime.js +245 -120
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -0
- package/dist/runtime/foundation/service-stateful-wire-codec.js +15 -0
- package/dist/runtime/foundation/service-topology-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-topology-registry.js +13 -3
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +12 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +5 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.js +50 -15
- package/dist/runtime/host/actor-packet-relay.d.ts +5 -6
- package/dist/runtime/host/actor-packet-relay.js +58 -57
- package/dist/runtime/host/actor-placement-coordinator.d.ts +1 -1
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +3 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +3 -3
- package/dist/runtime/host/application-job-queue.d.ts +7 -5
- package/dist/runtime/host/application-job-queue.js +33 -21
- package/dist/runtime/host/bound-session-relay.js +0 -1
- package/dist/runtime/host/channel-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -0
- package/dist/runtime/host/entry-actor-runtime.d.ts +5 -2
- package/dist/runtime/host/entry-actor-runtime.js +2 -2
- package/dist/runtime/host/index.d.ts +106 -37
- package/dist/runtime/host/index.js +303 -151
- package/dist/runtime/host/location-runtime-owner.d.ts +2 -2
- package/dist/runtime/host/location-runtime-owner.js +1 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +195 -45
- package/dist/runtime/host/service-relocation-host-runtime.js +257 -144
- package/dist/runtime/host/spot-address-transport.d.ts +3 -0
- package/dist/runtime/host/spot-address-transport.js +73 -76
- package/dist/runtime/host/spot-runtime-options-factory.js +2 -0
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -1
- package/dist/runtime/host/user-spot-creation-coordinator.js +49 -21
- package/dist/runtime/internal-observation.d.ts +1 -0
- package/dist/runtime/internal-observation.js +5 -0
- package/dist/runtime/locations/actor-location-claims.d.ts +1 -1
- package/dist/runtime/locations/actor-location-claims.js +15 -6
- package/dist/runtime/locations/auto-connect-loop.d.ts +0 -1
- package/dist/runtime/locations/auto-connect-loop.js +25 -19
- package/dist/runtime/locations/auto-connect-planner.js +2 -5
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +1 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +35 -23
- package/dist/runtime/locations/in-memory-authority-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.js +15 -5
- package/dist/runtime/locations/in-memory-location-store.d.ts +0 -2
- package/dist/runtime/locations/in-memory-location-store.js +1 -38
- package/dist/runtime/locations/lifecycle.d.ts +1 -1
- package/dist/runtime/locations/lifecycle.js +2 -2
- package/dist/runtime/locations/location-store-repository.d.ts +0 -1
- package/dist/runtime/locations/location-store-repository.js +163 -246
- package/dist/runtime/locations/resolvers.d.ts +8 -1
- package/dist/runtime/locations/resolvers.js +16 -2
- package/dist/runtime/locations/runtime.d.ts +3 -3
- package/dist/runtime/locations/runtime.js +12 -16
- package/dist/runtime/messaging/creation-payload-codec.js +8 -7
- package/dist/runtime/messaging/framework-json-v1.d.ts +1 -1
- package/dist/runtime/messaging/framework-json-v1.js +6 -2
- package/dist/runtime/messaging/payload-codec.js +21 -35
- package/dist/runtime/messaging/request-deadline.d.ts +4 -2
- package/dist/runtime/messaging/request-deadline.js +40 -25
- package/dist/runtime/messaging/request-result.d.ts +14 -1
- package/dist/runtime/messaging/request-result.js +74 -13
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +4 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -7
- package/dist/runtime/spots/index.d.ts +28 -7
- package/dist/runtime/spots/index.js +31 -6
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -2
- package/dist/runtime/spots/spot-activation-registry.js +13 -8
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -0
- package/dist/runtime/spots/spot-activation-state.js +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +9 -4
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +33 -12
- package/dist/runtime/spots/spot-actor-ingress-admission.d.ts +40 -0
- package/dist/runtime/spots/spot-actor-ingress-admission.js +78 -0
- package/dist/runtime/spots/spot-actor-membership.js +3 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +16 -43
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +56 -113
- package/dist/runtime/spots/spot-actor-packet-drain.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -5
- package/dist/runtime/spots/spot-entry-activation.d.ts +4 -3
- package/dist/runtime/spots/spot-entry-activation.js +7 -12
- package/dist/runtime/spots/spot-handler-registry.d.ts +5 -1
- package/dist/runtime/spots/spot-handler-registry.js +31 -15
- package/dist/runtime/spots/spot-manager-public.js +3 -2
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +11 -6
- package/dist/runtime/spots/spot-node-runtime-manager.js +6 -1
- package/dist/runtime/spots/spot-outbound.d.ts +8 -2
- package/dist/runtime/spots/spot-outbound.js +5 -5
- package/dist/runtime/spots/spot-route-packet-dispatch.js +13 -8
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +9 -5
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -2
- package/dist/runtime/spots/spot-serial-executor.d.ts +2 -1
- package/dist/runtime/spots/spot-serial-turn-executor.js +20 -26
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -2
- package/dist/runtime/spots/spot-timer.d.ts +1 -1
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +11 -3
- package/dist/runtime/streams/actor-session-binding-registry.js +28 -0
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +3 -4
- package/dist/runtime/streams/bound-session-service.js +6 -7
- package/dist/runtime/streams/index.d.ts +3 -3
- package/dist/runtime/streams/index.js +22 -2
- package/dist/runtime/streams/managed-stream.js +2 -1
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +3 -9
- package/dist/runtime/streams/session-context.d.ts +2 -2
- package/dist/runtime/streams/session-context.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -0
- package/dist/runtime/streams/stream-session-runtime.js +64 -33
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActor.ts +6 -0
- package/src/contracts/Actors/ZLinkSessionBindingIdentity.ts +7 -0
- package/src/contracts/Actors/index.ts +1 -0
- package/src/contracts/Common/CoreTypes.ts +1 -0
- package/src/contracts/Common/HandlerMessageType.ts +50 -0
- package/src/contracts/Common/ZLinkEncodedPayload.ts +13 -25
- package/src/contracts/Common/ZLinkMessage.ts +11 -7
- package/src/contracts/Common/encoded-payload-storage.ts +4 -16
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Common/payload-slab.ts +29 -0
- package/src/contracts/Configuration/RegistrationBuilders.ts +29 -15
- package/src/contracts/Configuration/RegistrationTypes.ts +19 -0
- package/src/contracts/Handlers/Contexts.ts +1 -0
- package/src/contracts/Locations/Authority.ts +7 -1
- package/src/internal.ts +17 -0
- package/src/nest-integration.ts +1 -0
- package/src/runtime/actors/actor-client.ts +257 -163
- package/src/runtime/actors/actor-context.ts +26 -14
- package/src/runtime/actors/actor-execution-context.ts +2 -2
- package/src/runtime/actors/actor-handoff.ts +86 -51
- package/src/runtime/actors/actor-join-deferred-scope.ts +6 -6
- package/src/runtime/actors/actor-local-native-join.ts +38 -17
- package/src/runtime/actors/actor-mailbox.ts +1 -1
- package/src/runtime/actors/actor-remote-joiner.ts +8 -4
- package/src/runtime/actors/actor-routed-join-transport.ts +13 -5
- package/src/runtime/actors/actor-routed-json-request.ts +3 -0
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -2
- package/src/runtime/actors/actor-runtime-state.ts +1 -1
- package/src/runtime/actors/spot-actor-dispatch.ts +70 -68
- package/src/runtime/admission.ts +42 -15
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +4 -0
- package/src/runtime/backend/contracts/index.ts +77 -10
- package/src/runtime/backend/mesh-completion-table.ts +106 -15
- package/src/runtime/backend/mesh-dispatch-pump.ts +294 -146
- package/src/runtime/backend/node/node-backend-adapter-support.ts +42 -32
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +91 -34
- package/src/runtime/backend/node/node-event-loop-poller.ts +14 -5
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +5 -1
- package/src/runtime/backend/node/node-raw-binding-port.ts +180 -69
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +386 -157
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +56 -11
- package/src/runtime/backend/raw-binding-port.ts +13 -5
- package/src/runtime/channels/channel-clients.ts +26 -11
- package/src/runtime/channels/channel-dispatch-pipeline.ts +77 -65
- package/src/runtime/channels/channel-dispatch-services.ts +7 -12
- package/src/runtime/channels/channel-dispatchers.ts +93 -39
- package/src/runtime/channels/channel-envelope.ts +680 -144
- package/src/runtime/channels/channel-multipart.ts +17 -13
- package/src/runtime/channels/channel-outbound-operations.ts +204 -178
- package/src/runtime/channels/channel-receive-loops.ts +160 -107
- package/src/runtime/channels/channel-runtime-lifecycle.ts +64 -59
- package/src/runtime/channels/channel-runtime-manager.ts +74 -27
- package/src/runtime/channels/channel-socket-registry.ts +20 -5
- package/src/runtime/channels/channel-transports.ts +414 -287
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -9
- package/src/runtime/channels/local-spot-route-transport.ts +27 -29
- package/src/runtime/channels/router-socket-spot-route-transport.ts +63 -32
- package/src/runtime/channels/source-spot-router.ts +75 -38
- package/src/runtime/channels/spot-node-route-transport.ts +67 -37
- package/src/runtime/channels/spot-route-bridge-transport.ts +62 -30
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +105 -34
- package/src/runtime/diagnostics/dispatch-error-details.ts +10 -2
- package/src/runtime/diagnostics/message-flow-bootstrap.ts +6 -0
- package/src/runtime/diagnostics/message-flow-delivery.ts +171 -0
- package/src/runtime/diagnostics/message-flow-record.ts +295 -0
- package/src/runtime/diagnostics/message-flow-worker.ts +146 -0
- package/src/runtime/diagnostics/message-flow.ts +49 -362
- package/src/runtime/diagnostics/runtime-metrics.ts +10 -4
- package/src/runtime/execution/index.ts +6 -0
- package/src/runtime/execution/serial-execution-queue.ts +94 -96
- package/src/runtime/foundation/durable-service-request.ts +212 -89
- package/src/runtime/foundation/operation-registry.ts +287 -38
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +617 -292
- package/src/runtime/foundation/request-runtime.ts +227 -0
- package/src/runtime/foundation/service-discovery-registry.ts +7 -0
- package/src/runtime/foundation/service-liveness-registry.ts +1 -1
- package/src/runtime/foundation/service-mailbox.ts +7 -2
- package/src/runtime/foundation/service-relocation-object-owner.ts +21 -6
- package/src/runtime/foundation/service-runtime-contracts.ts +12 -2
- package/src/runtime/foundation/service-stateful-registry.ts +52 -19
- package/src/runtime/foundation/service-stateful-runtime.ts +365 -198
- package/src/runtime/foundation/service-stateful-wire-codec.ts +18 -0
- package/src/runtime/foundation/service-topology-registry.ts +21 -3
- package/src/runtime/foundation/service-wire-constants.generated.ts +10 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -17
- package/src/runtime/host/actor-packet-relay.ts +160 -156
- package/src/runtime/host/actor-placement-coordinator.ts +1 -1
- package/src/runtime/host/actor-runtime-options-factory.ts +7 -2
- package/src/runtime/host/actor-transfer-runtime.ts +3 -3
- package/src/runtime/host/application-job-queue.ts +56 -27
- package/src/runtime/host/bound-session-relay.ts +0 -1
- package/src/runtime/host/channel-runtime-options-factory.ts +3 -0
- package/src/runtime/host/entry-actor-runtime.ts +14 -6
- package/src/runtime/host/index.ts +388 -113
- package/src/runtime/host/location-runtime-owner.ts +3 -3
- package/src/runtime/host/service-relocation-host-runtime.ts +380 -252
- package/src/runtime/host/spot-address-transport.ts +110 -95
- package/src/runtime/host/spot-runtime-options-factory.ts +3 -0
- package/src/runtime/host/user-spot-creation-coordinator.ts +69 -22
- package/src/runtime/internal-observation.ts +2 -0
- package/src/runtime/locations/actor-location-claims.ts +42 -16
- package/src/runtime/locations/auto-connect-loop.ts +24 -16
- package/src/runtime/locations/auto-connect-planner.ts +2 -5
- package/src/runtime/locations/auto-connect-reconciler.ts +37 -24
- package/src/runtime/locations/in-memory-authority-store.ts +27 -7
- package/src/runtime/locations/in-memory-location-store.ts +1 -74
- package/src/runtime/locations/lifecycle.ts +4 -2
- package/src/runtime/locations/location-store-repository.ts +228 -308
- package/src/runtime/locations/resolvers.ts +20 -8
- package/src/runtime/locations/runtime.ts +16 -28
- package/src/runtime/messaging/creation-payload-codec.ts +12 -10
- package/src/runtime/messaging/framework-json-v1.ts +10 -1
- package/src/runtime/messaging/payload-codec.ts +50 -75
- package/src/runtime/messaging/request-deadline.ts +47 -39
- package/src/runtime/messaging/request-result.ts +88 -17
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/index.ts +57 -10
- package/src/runtime/spots/spot-activation-registry.ts +12 -8
- package/src/runtime/spots/spot-activation-state.ts +2 -0
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +62 -37
- package/src/runtime/spots/spot-actor-ingress-admission.ts +157 -0
- package/src/runtime/spots/spot-actor-membership.ts +8 -5
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +122 -206
- package/src/runtime/spots/spot-actor-packet-drain.ts +21 -6
- package/src/runtime/spots/spot-entry-activation.ts +25 -35
- package/src/runtime/spots/spot-handler-registry.ts +72 -15
- package/src/runtime/spots/spot-manager-public.ts +4 -2
- package/src/runtime/spots/spot-node-runtime-manager.ts +16 -7
- package/src/runtime/spots/spot-outbound.ts +26 -10
- package/src/runtime/spots/spot-route-packet-dispatch.ts +18 -8
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +14 -8
- package/src/runtime/spots/spot-runtime-ports.ts +5 -2
- package/src/runtime/spots/spot-serial-executor.ts +1 -1
- package/src/runtime/spots/spot-serial-turn-executor.ts +25 -40
- package/src/runtime/spots/spot-subscription-dispatch.ts +9 -2
- package/src/runtime/spots/spot-timer.ts +1 -1
- package/src/runtime/streams/actor-session-binding-registry.ts +46 -3
- package/src/runtime/streams/bound-actor-relay-sender.ts +16 -5
- package/src/runtime/streams/bound-session-service.ts +10 -7
- package/src/runtime/streams/index.ts +30 -4
- package/src/runtime/streams/managed-stream.ts +2 -1
- package/src/runtime/streams/session-calls.ts +9 -14
- package/src/runtime/streams/session-context.ts +6 -11
- package/src/runtime/streams/stream-session-runtime.ts +79 -40
- package/dist/runtime/spots/spot-lifecycle-metrics.d.ts +0 -8
- package/dist/runtime/spots/spot-lifecycle-metrics.js +0 -17
- package/src/runtime/spots/spot-lifecycle-metrics.ts +0 -16
|
@@ -29,6 +29,7 @@ export declare class ApplicationJobRecordLease implements ApplicationJobPermitPo
|
|
|
29
29
|
private processingTerminal;
|
|
30
30
|
detachedForHandlerTurn: boolean;
|
|
31
31
|
constructor(shared: SharedIngressRecordState, permit: ApplicationJobPermitPort | undefined);
|
|
32
|
+
reacquire(signal: AbortSignal): Promise<ApplicationJobPermitPort>;
|
|
32
33
|
get origin(): ApplicationJobOrigin;
|
|
33
34
|
markApplicationQueued(): void;
|
|
34
35
|
detachForHandlerTurn(): void;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { PendingOperation } from '../../foundation/operation-registry';
|
|
2
|
+
import type { RequestRuntime } from '../../foundation/request-runtime';
|
|
1
3
|
import type { RequestResult, SubmitResult, ZLinkBackendMessageLike, ZLinkBackendMonitorEventType, ZLinkBackendReceived, ZLinkBackendTopicMessage } from '../runtime-values';
|
|
2
4
|
import type { CoreHwmBudgetSnapshot, ReceiveFlowState } from '@zlink-systems/zlink';
|
|
3
5
|
import { type ZLinkBackendRecvFlags, type ZLinkBackendSendFlags } from '../runtime-values';
|
|
@@ -34,6 +36,7 @@ export type ZLinkBackendObjectPlacement = {
|
|
|
34
36
|
};
|
|
35
37
|
export type ZLinkBackendRequestSourceAcceptance = (nodeRid: string, nodeGeneration: bigint, nodeRidStorageHex: string, signal?: AbortSignal) => import('../../locations/request-source-resolver').ZLinkRequestSourceFence | undefined | Promise<import('../../locations/request-source-resolver').ZLinkRequestSourceFence | undefined>;
|
|
36
38
|
export interface ZLinkBackendMeshNode {
|
|
39
|
+
setRequestRuntime?(requests: RequestRuntime): void;
|
|
37
40
|
acceptRelocatedActorTerminal?(operation: {
|
|
38
41
|
readonly high: bigint;
|
|
39
42
|
readonly low: bigint;
|
|
@@ -76,9 +79,9 @@ export interface ZLinkBackendMeshNode {
|
|
|
76
79
|
selectObjectPlacement(stableType: string): ZLinkBackendObjectPlacement;
|
|
77
80
|
instanceSpotPlacementTypes?(): readonly string[];
|
|
78
81
|
sendToMissingInstanceSpot(target: ServiceInstanceColdActivationTarget, parts: ZLinkBackendMessageLike | readonly ZLinkBackendMessageLike[], deadlineUnixMs: bigint, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>): Promise<SubmitResult>;
|
|
79
|
-
requestToMissingInstanceSpot(target: ServiceInstanceColdActivationTarget, parts: ZLinkBackendMessageLike | readonly ZLinkBackendMessageLike[], deadlineUnixMs: bigint, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void): MeshOperationId;
|
|
82
|
+
requestToMissingInstanceSpot(target: ServiceInstanceColdActivationTarget, parts: ZLinkBackendMessageLike | readonly ZLinkBackendMessageLike[], deadlineUnixMs: bigint, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void, requestOperation?: PendingOperation<unknown>): MeshOperationId;
|
|
80
83
|
sendToInstanceSpot(route: ServiceInstanceRouteFence, parts: MessageLike | readonly MessageLike[], sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, instanceIntent?: boolean): Promise<SubmitResult>;
|
|
81
|
-
requestInstanceSpot(route: ServiceInstanceRouteFence, parts: MessageLike | readonly MessageLike[], timeoutMs?: number, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, instanceIntent?: boolean, onAdmitted?: () => void): MeshOperationId;
|
|
84
|
+
requestInstanceSpot(route: ServiceInstanceRouteFence, parts: MessageLike | readonly MessageLike[], timeoutMs?: number, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, instanceIntent?: boolean, onAdmitted?: () => void, requestOperation?: PendingOperation<unknown>, completion?: ZLinkMeshCompletionHandler): MeshOperationId;
|
|
82
85
|
registerUserSpotOperationHandler(handler: ServiceUserSpotOperationHandler): void;
|
|
83
86
|
requestUserSpotCreate(targetNodeRid: string, request: Omit<ServiceUserSpotCreateRecord, 'kind' | 'correlation' | 'operation'>, timeoutMs: number): Promise<ServiceUserSpotOperationResult>;
|
|
84
87
|
requestUserSpotClose(targetNodeRid: string, request: Omit<ServiceUserSpotCloseRecord, 'kind' | 'correlation' | 'operation'>, timeoutMs: number): Promise<ServiceUserSpotOperationResult>;
|
|
@@ -130,24 +133,27 @@ export interface ZLinkBackendMeshNode {
|
|
|
130
133
|
*/
|
|
131
134
|
requestInfrastructureControlFrames?(targetRid: unknown, frames: readonly Uint8Array[], options?: {
|
|
132
135
|
readonly timeoutMs?: number;
|
|
136
|
+
readonly requestOperation?: PendingOperation<unknown>;
|
|
133
137
|
readonly signal?: AbortSignal;
|
|
134
138
|
readonly onSubmitted?: (signal: AbortSignal) => Promise<void>;
|
|
135
139
|
}): Promise<readonly Uint8Array[]>;
|
|
136
140
|
requestToNode(targetRid: unknown, parts: MessageLike | readonly MessageLike[], options?: {
|
|
137
141
|
flags?: number;
|
|
138
142
|
timeoutMs?: number;
|
|
143
|
+
readonly requestOperation?: PendingOperation<unknown>;
|
|
139
144
|
applicationMetadata?: Buffer;
|
|
140
145
|
onAdmitted?: () => void;
|
|
141
|
-
}): MeshOperationId;
|
|
146
|
+
}, completion?: import('../mesh-completion-table').ZLinkMeshCompletionHandler): MeshOperationId;
|
|
142
147
|
sendToChannel(channelName: string, parts: MessageLike | readonly MessageLike[], options?: {
|
|
143
148
|
flags?: number;
|
|
144
149
|
}): Promise<SubmitResult>;
|
|
145
150
|
requestToChannel(channelName: string, parts: MessageLike | readonly MessageLike[], options?: {
|
|
146
151
|
flags?: number;
|
|
147
152
|
timeoutMs?: number;
|
|
153
|
+
readonly requestOperation?: PendingOperation<unknown>;
|
|
148
154
|
applicationMetadata?: Buffer;
|
|
149
155
|
onAdmitted?: () => void;
|
|
150
|
-
}): MeshOperationId;
|
|
156
|
+
}, completion?: import('../mesh-completion-table').ZLinkMeshCompletionHandler): MeshOperationId;
|
|
151
157
|
status(): MeshNodeStatus;
|
|
152
158
|
peers(): MeshPeerEntry[];
|
|
153
159
|
peerChannels(peerRid: unknown, lifecycleGeneration: bigint): {
|
|
@@ -212,16 +218,18 @@ export interface ZLinkBackendMeshNode {
|
|
|
212
218
|
requestToActor(actor: ZLinkBackendActorRef, parts: MessageLike | readonly MessageLike[], options?: {
|
|
213
219
|
flags?: number;
|
|
214
220
|
timeoutMs?: number;
|
|
221
|
+
readonly requestOperation?: PendingOperation<unknown>;
|
|
215
222
|
applicationMetadata?: Buffer;
|
|
216
223
|
onAdmitted?: () => void;
|
|
217
224
|
routeFence?: import('../../foundation/service-stateful-wire-codec').ServiceActorRouteFence;
|
|
218
|
-
}): MeshOperationId;
|
|
225
|
+
}, completion?: ZLinkMeshCompletionHandler): MeshOperationId;
|
|
219
226
|
actorSendToActor(source: ZLinkBackendActorRef, target: ZLinkBackendActorRef, parts: MessageLike | readonly MessageLike[], options?: {
|
|
220
227
|
flags?: number;
|
|
221
228
|
}): Promise<SubmitResult>;
|
|
222
229
|
actorRequestToActor(source: ZLinkBackendActorRef, target: ZLinkBackendActorRef, parts: MessageLike | readonly MessageLike[], options?: {
|
|
223
230
|
flags?: number;
|
|
224
231
|
timeoutMs?: number;
|
|
232
|
+
readonly requestOperation?: PendingOperation<unknown>;
|
|
225
233
|
applicationMetadata?: Buffer;
|
|
226
234
|
onAdmitted?: () => void;
|
|
227
235
|
}): MeshOperationId;
|
|
@@ -308,7 +316,8 @@ export interface ZLinkBackendDealerSocket extends ZLinkBackendConnectableSocket
|
|
|
308
316
|
receiveTimeoutMs: number;
|
|
309
317
|
maxMessageSize: number;
|
|
310
318
|
send(message: Message | readonly Message[]): Promise<void>;
|
|
311
|
-
request(message: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
|
|
319
|
+
request(message: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void, requestOperation?: undefined): Promise<readonly Message[]>;
|
|
320
|
+
request(message: Message | readonly Message[], timeoutMs: number | undefined, onAdmitted: (() => void) | undefined, requestOperation: PendingOperation<unknown>, receiver: import('../../foundation/operation-registry').OperationObserver<unknown, unknown>): void;
|
|
312
321
|
recv(flags?: ZLinkBackendRecvFlags): Received | undefined;
|
|
313
322
|
}
|
|
314
323
|
export interface ZLinkBackendReplyOperation {
|
|
@@ -323,6 +332,7 @@ export interface ZLinkBackendRequestOperation {
|
|
|
323
332
|
message(message: MessageLike): ZLinkBackendRequestOperation;
|
|
324
333
|
timeout(timeoutMs: number): ZLinkBackendRequestOperation;
|
|
325
334
|
submit(onAdmitted?: () => void): Promise<readonly Message[]>;
|
|
335
|
+
submit(onAdmitted: (() => void) | undefined, requestOperation: PendingOperation<unknown>, receiver: import('../../foundation/operation-registry').OperationObserver<unknown, unknown>): void;
|
|
326
336
|
}
|
|
327
337
|
export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket {
|
|
328
338
|
setReceiveFlowState(state: ReceiveFlowState): void;
|
|
@@ -336,9 +346,11 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
|
|
|
336
346
|
setRoutingId(routingId: RoutingId): void;
|
|
337
347
|
recv(flags?: ZLinkBackendRecvFlags): Received | undefined;
|
|
338
348
|
send(routingId: RoutingId, message: Message | readonly Message[]): Promise<void>;
|
|
339
|
-
request(routingId: RoutingId, message: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
|
|
349
|
+
request(routingId: RoutingId, message: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void, requestOperation?: undefined): Promise<readonly Message[]>;
|
|
350
|
+
request(routingId: RoutingId, message: Message | readonly Message[], timeoutMs: number | undefined, onAdmitted: (() => void) | undefined, requestOperation: PendingOperation<unknown>, receiver: import('../../foundation/operation-registry').OperationObserver<unknown, unknown>): void;
|
|
340
351
|
sendToSpot(targetNodeRid: RoutingId, targetSpotId: RoutingId, parts: readonly Message[], flags?: ZLinkBackendSendFlags): Promise<void>;
|
|
341
|
-
requestToSpot(targetNodeRid: RoutingId, targetSpotId: RoutingId, parts: readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
|
|
352
|
+
requestToSpot(targetNodeRid: RoutingId, targetSpotId: RoutingId, parts: readonly Message[], timeoutMs?: number, onAdmitted?: () => void, requestOperation?: undefined): Promise<readonly Message[]>;
|
|
353
|
+
requestToSpot(targetNodeRid: RoutingId, targetSpotId: RoutingId, parts: readonly Message[], timeoutMs: number | undefined, onAdmitted: (() => void) | undefined, requestOperation: PendingOperation<unknown>, receiver: import('../../foundation/operation-registry').OperationObserver<unknown, unknown>): void;
|
|
342
354
|
disconnectPeer(routingId: RoutingId): void;
|
|
343
355
|
reply(routingId: RoutingId, replyToken: unknown): ZLinkBackendReplyOperation;
|
|
344
356
|
reply(routingId: RoutingId, replyToken: unknown, message: Message | readonly Message[]): void;
|
|
@@ -438,11 +450,13 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
|
|
|
438
450
|
drainReply(): number;
|
|
439
451
|
drainChannelReply(subjectHandle: bigint): number;
|
|
440
452
|
setDispatchHandler(handler: (info: ZLinkBackendSpotDispatchInfo) => void): void;
|
|
441
|
-
requestToChannel(channelName: string, payload: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
|
|
453
|
+
requestToChannel(channelName: string, payload: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void, requestOperation?: undefined): Promise<readonly Message[]>;
|
|
454
|
+
requestToChannel(channelName: string, payload: Message | readonly Message[], timeoutMs: number | undefined, onAdmitted: (() => void) | undefined, requestOperation: PendingOperation<unknown>, receiver: import('../../foundation/operation-registry').OperationObserver<unknown, unknown>): void;
|
|
442
455
|
sendToChannel(channelName: string, payload: Message | readonly Message[]): Promise<void>;
|
|
443
456
|
publish(topic: string, payload: Message | readonly Message[], flags: ZLinkBackendSendFlags): boolean;
|
|
444
457
|
sendToSpot(targetRid: RoutingId, spotId: RoutingId, payload: Message | readonly Message[]): Promise<void>;
|
|
445
|
-
requestToSpot(targetRid: RoutingId, spotId: RoutingId, payload: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
|
|
458
|
+
requestToSpot(targetRid: RoutingId, spotId: RoutingId, payload: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void, requestOperation?: undefined): Promise<readonly Message[]>;
|
|
459
|
+
requestToSpot(targetRid: RoutingId, spotId: RoutingId, payload: Message | readonly Message[], timeoutMs: number | undefined, onAdmitted: (() => void) | undefined, requestOperation: PendingOperation<unknown>, receiver: import('../../foundation/operation-registry').OperationObserver<unknown, unknown>): void;
|
|
446
460
|
dispose(): Promise<void>;
|
|
447
461
|
}
|
|
448
462
|
export interface ZLinkChannelBackendAdapter {
|
|
@@ -458,6 +472,8 @@ export interface ZLinkMeshBackendAdapter {
|
|
|
458
472
|
createMeshNode(context: ZLinkBackendContext, options: {
|
|
459
473
|
readonly meshName: string;
|
|
460
474
|
readonly routingId?: RoutingId;
|
|
475
|
+
readonly sendHighWaterMark?: number;
|
|
476
|
+
readonly receiveHighWaterMark?: number;
|
|
461
477
|
readonly receiveTimeoutMs?: number;
|
|
462
478
|
readonly trustProfile?: string;
|
|
463
479
|
readonly applicationJobQueue: import('../../application-jobs/contracts').ApplicationJobQueuePort;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type OperationHandle, type OperationObserver } from '../foundation/operation-registry';
|
|
1
2
|
import { ZLinkBufferMessage as Message } from './runtime-message';
|
|
2
3
|
import type { MeshOperationId, ReceiveKindData, ReceiveRecord } from '../foundation/service-runtime-contracts';
|
|
3
4
|
export interface ZLinkMeshCompletionDiagnostic {
|
|
@@ -8,10 +9,14 @@ export interface ZLinkMeshCompletionDiagnostic {
|
|
|
8
9
|
export interface ZLinkMeshCompletion {
|
|
9
10
|
readonly terminalResult: number;
|
|
10
11
|
readonly failureErrno: number;
|
|
12
|
+
readonly failureMessage?: string;
|
|
11
13
|
readonly operationKind: number;
|
|
12
14
|
readonly kindData: ReceiveKindData | null;
|
|
13
15
|
readonly parts: Message[];
|
|
14
16
|
}
|
|
17
|
+
export interface MeshOperationSubmission extends MeshOperationId {
|
|
18
|
+
readonly requestOperation?: OperationHandle<unknown>;
|
|
19
|
+
}
|
|
15
20
|
export type ZLinkMeshCompletionTerminal = Pick<ReceiveRecord, 'operationId' | 'terminalResult'>;
|
|
16
21
|
export type ZLinkMeshCompletionHandler = (terminal: ZLinkMeshCompletionTerminal, materialize: () => ReceiveRecord) => void;
|
|
17
22
|
export declare class ZLinkMeshCompletionTable {
|
|
@@ -32,7 +37,8 @@ export declare class ZLinkMeshCompletionTable {
|
|
|
32
37
|
* observes native terminals through Promises, so identity binding finishes
|
|
33
38
|
* before the terminal callback can run, without an infrastructure pump.
|
|
34
39
|
*/
|
|
35
|
-
submit(operation: () =>
|
|
40
|
+
submit(operation: (completion?: ZLinkMeshCompletionHandler) => MeshOperationSubmission, signal: AbortSignal | undefined, requestOperation: OperationHandle<unknown>, receiver: OperationObserver<unknown, unknown>): void;
|
|
41
|
+
submit(operation: () => MeshOperationSubmission, signal?: AbortSignal, requestOperation?: OperationHandle<unknown>): Promise<ZLinkMeshCompletion>;
|
|
36
42
|
private isDisposed;
|
|
37
43
|
complete(record: ReceiveRecord): void;
|
|
38
44
|
complete(record: ZLinkMeshCompletionTerminal, materialize: () => ReceiveRecord): void;
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkMeshCompletionTable = void 0;
|
|
4
4
|
exports.closeMeshCompletion = closeMeshCompletion;
|
|
5
|
+
const request_deadline_1 = require("../messaging/request-deadline");
|
|
6
|
+
const operation_registry_1 = require("../foundation/operation-registry");
|
|
5
7
|
const runtime_message_1 = require("./runtime-message");
|
|
6
8
|
const operation_identity_1 = require("../foundation/operation-identity");
|
|
7
9
|
const COMPLETION_SLOT_BLOCK_SIZE = 64;
|
|
@@ -19,6 +21,7 @@ class CompletionSlot {
|
|
|
19
21
|
resolve;
|
|
20
22
|
reject;
|
|
21
23
|
signal;
|
|
24
|
+
operation;
|
|
22
25
|
constructor(abort) {
|
|
23
26
|
this.abort = abort;
|
|
24
27
|
}
|
|
@@ -40,10 +43,13 @@ class ZLinkMeshCompletionTable {
|
|
|
40
43
|
const slot = new CompletionSlot(() => {
|
|
41
44
|
const reject = slot.reject;
|
|
42
45
|
const signal = slot.signal;
|
|
43
|
-
if (reject === undefined)
|
|
46
|
+
if (reject === undefined || (slot.high === undefined && slot.operation === undefined))
|
|
47
|
+
return;
|
|
48
|
+
const reason = signal?.reason ?? new DOMException('The operation was aborted.', 'AbortError');
|
|
49
|
+
if (slot.operation !== undefined && !slot.operation.takeFailure(reason))
|
|
44
50
|
return;
|
|
45
51
|
this.releaseSlot(index);
|
|
46
|
-
reject(
|
|
52
|
+
reject(reason);
|
|
47
53
|
});
|
|
48
54
|
slot.next = this.free;
|
|
49
55
|
this.slots.push(slot);
|
|
@@ -107,22 +113,43 @@ class ZLinkMeshCompletionTable {
|
|
|
107
113
|
slot.low = undefined;
|
|
108
114
|
slot.hashNext = -1;
|
|
109
115
|
slot.signal = undefined;
|
|
116
|
+
slot.operation = undefined;
|
|
110
117
|
slot.resolve = undefined;
|
|
111
118
|
slot.reject = undefined;
|
|
112
119
|
slot.next = this.free;
|
|
113
120
|
this.free = index;
|
|
114
121
|
this.activeCount--;
|
|
115
122
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
123
|
+
submit(operation, signal, requestOperation, receiver) {
|
|
124
|
+
if (receiver !== undefined && requestOperation?.promise !== undefined) {
|
|
125
|
+
if (requestOperation.isPending()) {
|
|
126
|
+
try {
|
|
127
|
+
operation((_terminal, materialize) => {
|
|
128
|
+
try {
|
|
129
|
+
receiver.operationCompleted(requestOperation.id, retainCompletion(materialize()), undefined);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
receiver.operationFailed(requestOperation.id, error, undefined);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
receiver.operationFailed(requestOperation.id, error, undefined);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (requestOperation?.promise !== undefined && !requestOperation.isPending()) {
|
|
143
|
+
return requestOperation.promise.then(() => {
|
|
144
|
+
throw new operation_registry_1.OperationCancelledError(requestOperation.id, 'Request is already terminal.');
|
|
145
|
+
});
|
|
146
|
+
}
|
|
122
147
|
if (this.isDisposed()) {
|
|
148
|
+
requestOperation?.takeFailure(new Error('Mesh completion table is disposed.'));
|
|
123
149
|
return Promise.reject(new Error('Mesh completion table is disposed.'));
|
|
124
150
|
}
|
|
125
151
|
if (signal?.aborted === true) {
|
|
152
|
+
requestOperation?.takeFailure(signal.reason ?? new DOMException('The operation was aborted.', 'AbortError'));
|
|
126
153
|
return Promise.reject(signal.reason ?? new DOMException('The operation was aborted.', 'AbortError'));
|
|
127
154
|
}
|
|
128
155
|
return new Promise((resolve, reject) => {
|
|
@@ -135,9 +162,23 @@ class ZLinkMeshCompletionTable {
|
|
|
135
162
|
slot.resolve = resolve;
|
|
136
163
|
slot.reject = reject;
|
|
137
164
|
slot.signal = signal;
|
|
165
|
+
slot.operation = requestOperation;
|
|
138
166
|
this.activeCount++;
|
|
139
167
|
try {
|
|
140
168
|
signal?.addEventListener('abort', slot.abort, COMPLETION_ABORT_OPTIONS);
|
|
169
|
+
const bind = (entry, observeFailure = true) => {
|
|
170
|
+
slot.operation = entry;
|
|
171
|
+
if (!observeFailure)
|
|
172
|
+
return;
|
|
173
|
+
entry.setFailureDispatcher((reason) => {
|
|
174
|
+
if (slot.generation !== generation || slot.resolve !== resolve)
|
|
175
|
+
return;
|
|
176
|
+
this.releaseSlot(index);
|
|
177
|
+
reject((0, request_deadline_1.requestTerminalError)('Request', reason));
|
|
178
|
+
});
|
|
179
|
+
};
|
|
180
|
+
if (requestOperation !== undefined)
|
|
181
|
+
bind(requestOperation);
|
|
141
182
|
const operationId = operation();
|
|
142
183
|
// A reentrant abort may release and reuse this slot during submission.
|
|
143
184
|
if (slot.generation !== generation || slot.resolve !== resolve)
|
|
@@ -148,10 +189,18 @@ class ZLinkMeshCompletionTable {
|
|
|
148
189
|
slot.high = operationId.high;
|
|
149
190
|
slot.low = operationId.low;
|
|
150
191
|
this.indexSlot(index);
|
|
192
|
+
if (requestOperation === undefined && operationId.requestOperation !== undefined)
|
|
193
|
+
bind(operationId.requestOperation, false);
|
|
194
|
+
Reflect.deleteProperty(operationId, 'requestOperation');
|
|
195
|
+
if (signal?.aborted === true)
|
|
196
|
+
slot.abort();
|
|
151
197
|
}
|
|
152
198
|
catch (error) {
|
|
153
|
-
if (slot.generation
|
|
154
|
-
|
|
199
|
+
if (slot.generation !== generation || slot.resolve !== resolve)
|
|
200
|
+
return;
|
|
201
|
+
if (slot.operation !== undefined && !slot.operation.replyFailure(error))
|
|
202
|
+
return;
|
|
203
|
+
this.releaseSlot(index);
|
|
155
204
|
reject(error);
|
|
156
205
|
}
|
|
157
206
|
});
|
|
@@ -170,14 +219,25 @@ class ZLinkMeshCompletionTable {
|
|
|
170
219
|
return;
|
|
171
220
|
}
|
|
172
221
|
const slot = this.slots[index];
|
|
173
|
-
const
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
resolve
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
222
|
+
const generation = slot.generation;
|
|
223
|
+
const deliver = () => {
|
|
224
|
+
if (slot.generation !== generation || slot.resolve === undefined)
|
|
225
|
+
return;
|
|
226
|
+
const resolve = slot.resolve;
|
|
227
|
+
const reject = slot.reject;
|
|
228
|
+
this.releaseSlot(index);
|
|
229
|
+
try {
|
|
230
|
+
resolve(retainCompletion(materialize === undefined ? record : materialize()));
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
reject(error);
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
if (slot.operation === undefined)
|
|
237
|
+
deliver();
|
|
238
|
+
else {
|
|
239
|
+
slot.operation.reply(record);
|
|
240
|
+
deliver();
|
|
181
241
|
}
|
|
182
242
|
}
|
|
183
243
|
dispose(reason = new Error('Mesh completion table is disposed.')) {
|
|
@@ -189,6 +249,9 @@ class ZLinkMeshCompletionTable {
|
|
|
189
249
|
const reject = this.slots[index].reject;
|
|
190
250
|
if (reject === undefined)
|
|
191
251
|
continue;
|
|
252
|
+
const slot = this.slots[index];
|
|
253
|
+
if (slot.operation !== undefined && !slot.operation.takeFailure(reason))
|
|
254
|
+
continue;
|
|
192
255
|
this.releaseSlot(index);
|
|
193
256
|
reject(reason);
|
|
194
257
|
}
|
|
@@ -206,6 +269,7 @@ function retainCompletion(record) {
|
|
|
206
269
|
return {
|
|
207
270
|
terminalResult: record.terminalResult,
|
|
208
271
|
failureErrno: record.failureErrno,
|
|
272
|
+
...(record.failureMessage === undefined ? {} : { failureMessage: record.failureMessage }),
|
|
209
273
|
operationKind: record.operationKind,
|
|
210
274
|
kindData: record.kindData,
|
|
211
275
|
parts
|
|
@@ -227,7 +291,7 @@ function closeMeshCompletion(completion) {
|
|
|
227
291
|
closeParts(completion.parts);
|
|
228
292
|
}
|
|
229
293
|
function closeParts(parts) {
|
|
230
|
-
for (
|
|
231
|
-
|
|
294
|
+
for (let index = 0; index < parts.length; index++) {
|
|
295
|
+
parts[index].close();
|
|
232
296
|
}
|
|
233
297
|
}
|
|
@@ -3,7 +3,6 @@ import { type ReadyRecord, type ReceiveRecord } from '../foundation/service-runt
|
|
|
3
3
|
import type { ZLinkBackendMeshNode } from './contracts';
|
|
4
4
|
export interface ZLinkMeshDispatchPumpOptions {
|
|
5
5
|
readonly readyCapacity?: number;
|
|
6
|
-
readonly messageCapacity?: number;
|
|
7
6
|
readonly partCapacity?: number;
|
|
8
7
|
readonly dispatch: (owner: ReadyRecord, record: ReceiveRecord) => void | Promise<void>;
|
|
9
8
|
readonly applicationJobQueue: ApplicationJobQueuePort;
|
|
@@ -37,21 +36,25 @@ export declare class ZLinkMeshDispatchPump {
|
|
|
37
36
|
start(): void;
|
|
38
37
|
dispose(signal?: AbortSignal): Promise<void>;
|
|
39
38
|
private markReady;
|
|
39
|
+
private scheduleApplicationWorker;
|
|
40
40
|
private wakeApplicationWorker;
|
|
41
41
|
private startApplicationWorker;
|
|
42
|
-
private runApplicationWorker;
|
|
43
42
|
private waitForApplicationReady;
|
|
44
43
|
/**
|
|
45
44
|
* Starts one record in this worker's turn; a permit's scope covers the
|
|
46
|
-
* synchronous dispatch. Returns `false` when
|
|
47
|
-
* reported), `true` when
|
|
48
|
-
*
|
|
45
|
+
* synchronous dispatch. Returns `false` when preparation rejects the record,
|
|
46
|
+
* shutdown starts, or dispatch throws (already reported), `true` when dispatch
|
|
47
|
+
* returns synchronously, or the pending preparation/handler completion,
|
|
48
|
+
* which the draining turn awaits itself before
|
|
49
49
|
* {@link finishRecord}.
|
|
50
50
|
*/
|
|
51
51
|
private dispatchRecord;
|
|
52
|
+
private continuePreparingRecord;
|
|
53
|
+
private invokeRecord;
|
|
52
54
|
private failRecord;
|
|
53
55
|
/** Runs the record's terminal completion, then releases its permit turn. */
|
|
54
56
|
private finishRecord;
|
|
57
|
+
private finishPendingRecord;
|
|
55
58
|
private reportDispatchError;
|
|
56
59
|
/**
|
|
57
60
|
* Infrastructure controls must not wait for an application permit. During
|
|
@@ -68,8 +71,18 @@ export declare class ZLinkMeshDispatchPump {
|
|
|
68
71
|
* pump, its batch budget starts with it (spec 08 §6).
|
|
69
72
|
*/
|
|
70
73
|
private beginDrain;
|
|
71
|
-
/**
|
|
74
|
+
/** Each worker owns claim continuations for its entire lifetime. */
|
|
75
|
+
private runApplicationWorker;
|
|
72
76
|
private drainClaim;
|
|
77
|
+
private createClaimDrain;
|
|
78
|
+
/** A synchronous claim finishes without an async wrapper or a Promise. */
|
|
79
|
+
private dispatchClaim;
|
|
80
|
+
private receiveClaim;
|
|
81
|
+
private dispatchClaimRecords;
|
|
82
|
+
private observeRecordTerminal;
|
|
83
|
+
private continuePendingClaim;
|
|
84
|
+
private releaseRecord;
|
|
85
|
+
private finishClaim;
|
|
73
86
|
/**
|
|
74
87
|
* The batch budget is shared by every drain of this pump, so once it is
|
|
75
88
|
* spent every drain waits for the same macrotask boundary; one drain that
|