@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
|
@@ -21,3 +21,4 @@ export declare function appendParts<TNext extends ZLinkMultipartOperation<TNext>
|
|
|
21
21
|
export declare function submitRequestOperation(operation: {
|
|
22
22
|
submit(): Promise<readonly Message[]>;
|
|
23
23
|
}, label: string): Promise<readonly Message[]>;
|
|
24
|
+
export declare function mapRequestFailure(error: unknown, label: string): unknown;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.appendParts = appendParts;
|
|
4
4
|
exports.submitRequestOperation = submitRequestOperation;
|
|
5
|
+
exports.mapRequestFailure = mapRequestFailure;
|
|
5
6
|
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
6
7
|
const runtime_values_1 = require("../backend/runtime-values");
|
|
7
8
|
const configuration_1 = require("../configuration");
|
|
@@ -21,11 +22,14 @@ async function submitRequestOperation(operation, label) {
|
|
|
21
22
|
return await operation.submit();
|
|
22
23
|
}
|
|
23
24
|
catch (error) {
|
|
24
|
-
|
|
25
|
-
// terminal rather than collapsing every failure to Unavailable.
|
|
26
|
-
if ((0, runtime_values_1.isZLinkBackendResultError)(error) && error.operation === 'request') {
|
|
27
|
-
throw new contracts_1.ZLinkFrameworkException((0, framework_errors_internal_1.requestResultToPublicErrorKind)(error.result), `${label} failed with result ${error.result}.`, error);
|
|
28
|
-
}
|
|
29
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `${label} failed before a reply was received.`, true, error);
|
|
25
|
+
throw mapRequestFailure(error, label);
|
|
30
26
|
}
|
|
31
27
|
}
|
|
28
|
+
function mapRequestFailure(error, label) {
|
|
29
|
+
// Spec 32-framework-error-model:81-92 — classify the backend request
|
|
30
|
+
// terminal rather than collapsing every failure to Unavailable.
|
|
31
|
+
if ((0, runtime_values_1.isZLinkBackendResultError)(error) && error.operation === 'request') {
|
|
32
|
+
return new contracts_1.ZLinkFrameworkException((0, framework_errors_internal_1.requestResultToPublicErrorKind)(error.result), `${label} failed with result ${error.result}.`, error);
|
|
33
|
+
}
|
|
34
|
+
return (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `${label} failed before a reply was received.`, true, error);
|
|
35
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { RequestRuntime } from '../foundation/request-runtime';
|
|
2
|
+
import type { PendingOperation } from '../foundation/operation-registry';
|
|
1
3
|
import { type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
2
4
|
import { type ZLinkRuntimeMessageFlowResult } from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
3
5
|
import { type ZLinkChannelEnvelopeCodecRegistry } from './channel-envelope';
|
|
@@ -7,13 +9,14 @@ export declare class ZLinkChannelOutboundOperations {
|
|
|
7
9
|
private readonly sockets;
|
|
8
10
|
private readonly codecs;
|
|
9
11
|
private readonly dispatchServices;
|
|
12
|
+
private readonly requests;
|
|
10
13
|
private readonly pendingRequests;
|
|
11
|
-
constructor(sockets: ZLinkChannelSocketRegistry, codecs: ZLinkChannelEnvelopeCodecRegistry, dispatchServices: ZLinkChannelDispatchServices);
|
|
14
|
+
constructor(sockets: ZLinkChannelSocketRegistry, codecs: ZLinkChannelEnvelopeCodecRegistry, dispatchServices: ZLinkChannelDispatchServices, requests?: RequestRuntime);
|
|
12
15
|
pendingRequestCount(channelName: string): number;
|
|
13
16
|
send(channelName: string, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
|
|
14
17
|
private sendScoped;
|
|
15
18
|
private traceSend;
|
|
16
|
-
request<TReply>(channelName: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void): Promise<TReply>;
|
|
19
|
+
request<TReply>(channelName: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void, requestOperation?: PendingOperation<unknown>): Promise<TReply>;
|
|
17
20
|
private requestScoped;
|
|
18
21
|
tryPublish(channelName: string, topic: string, packetName: string | undefined, event: unknown, metadata?: ReadonlyMap<string, string>): ZLinkSubmitResult;
|
|
19
22
|
private tryPublishScoped;
|
|
@@ -22,15 +25,9 @@ export declare class ZLinkChannelOutboundOperations {
|
|
|
22
25
|
routeSubmit(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
|
|
23
26
|
private routeSubmitScoped;
|
|
24
27
|
private traceRouteSend;
|
|
25
|
-
routeRequest<TReply>(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void): Promise<TReply>;
|
|
28
|
+
routeRequest<TReply>(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void, requestOperation?: PendingOperation<unknown>): Promise<TReply>;
|
|
26
29
|
private routeRequestScoped;
|
|
27
30
|
private measureRequest;
|
|
28
31
|
}
|
|
29
|
-
/**
|
|
30
|
-
* A ClientServer DEALER's request progress poller is intentionally unref'ed.
|
|
31
|
-
* The public request promise is live work, however, so it needs its own
|
|
32
|
-
* ref'ed handle until reply, cancellation, timeout, or failure settles it.
|
|
33
|
-
*/
|
|
34
|
-
export declare function keepChannelRequestAlive<T>(request: Promise<T>): Promise<T>;
|
|
35
32
|
export declare function requestTerminalResult(error: unknown, signal: AbortSignal | undefined): ZLinkRuntimeMessageFlowResult;
|
|
36
33
|
export declare function isRemoteChannelErrorReply(error: unknown): boolean;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkChannelOutboundOperations = void 0;
|
|
4
|
-
exports.keepChannelRequestAlive = keepChannelRequestAlive;
|
|
5
4
|
exports.requestTerminalResult = requestTerminalResult;
|
|
6
5
|
exports.isRemoteChannelErrorReply = isRemoteChannelErrorReply;
|
|
6
|
+
const request_runtime_1 = require("../foundation/request-runtime");
|
|
7
7
|
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
8
8
|
const request_deadline_1 = require("../messaging/request-deadline");
|
|
9
9
|
const runtime_values_1 = require("../backend/runtime-values");
|
|
@@ -16,19 +16,18 @@ const channel_framework_packets_1 = require("./channel-framework-packets");
|
|
|
16
16
|
const contracts_1 = require("../../contracts");
|
|
17
17
|
const route_disconnected_error_1 = require("./route-disconnected-error");
|
|
18
18
|
const flow_context_1 = require("../diagnostics/flow-context");
|
|
19
|
-
const CHANNEL_REQUEST_LOOP_KEEPALIVE_MS = 0x7fff_ffff;
|
|
20
|
-
// Shared default for the dominant no-metadata call; avoids a Map allocation
|
|
21
|
-
// per outbound operation.
|
|
22
19
|
const EMPTY_OUTBOUND_METADATA = new Map();
|
|
23
20
|
class ZLinkChannelOutboundOperations {
|
|
24
21
|
sockets;
|
|
25
22
|
codecs;
|
|
26
23
|
dispatchServices;
|
|
24
|
+
requests;
|
|
27
25
|
pendingRequests = new Map();
|
|
28
|
-
constructor(sockets, codecs, dispatchServices) {
|
|
26
|
+
constructor(sockets, codecs, dispatchServices, requests = new request_runtime_1.RequestRuntime()) {
|
|
29
27
|
this.sockets = sockets;
|
|
30
28
|
this.codecs = codecs;
|
|
31
29
|
this.dispatchServices = dispatchServices;
|
|
30
|
+
this.requests = requests;
|
|
32
31
|
}
|
|
33
32
|
pendingRequestCount(channelName) {
|
|
34
33
|
return this.pendingRequests.get(channelName) ?? 0;
|
|
@@ -68,19 +67,13 @@ class ZLinkChannelOutboundOperations {
|
|
|
68
67
|
correlationId: undefined
|
|
69
68
|
});
|
|
70
69
|
}
|
|
71
|
-
request(channelName, packetName, request, timeoutMs, signal, metadata, onAdmitted) {
|
|
72
|
-
return
|
|
70
|
+
request(channelName, packetName, request, timeoutMs, signal, metadata, onAdmitted, requestOperation) {
|
|
71
|
+
return (0, flow_context_1.runWithOutboundFlow)(this.dispatchServices.flowCreationEnabled(), () => this.requestScoped(channelName, packetName, request, timeoutMs, signal, metadata, onAdmitted, requestOperation));
|
|
73
72
|
}
|
|
74
|
-
|
|
75
|
-
const deadlineMs = timeoutMs === undefined ? undefined : performance.now() + timeoutMs;
|
|
76
|
-
const deadlineUnixMs = timeoutMs === undefined ? undefined : Date.now() + timeoutMs;
|
|
73
|
+
requestScoped(channelName, packetName, request, timeoutMs, signal, metadata, onAdmitted, existing) {
|
|
77
74
|
let correlationId;
|
|
78
75
|
let selectedServerRid;
|
|
79
|
-
let terminalRecorded = false;
|
|
80
76
|
const traceTerminal = (result) => {
|
|
81
|
-
if (terminalRecorded)
|
|
82
|
-
return;
|
|
83
|
-
terminalRecorded = true;
|
|
84
77
|
this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.ReplyReceived, result)?.trace({
|
|
85
78
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.Channel,
|
|
86
79
|
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
|
|
@@ -93,60 +86,68 @@ class ZLinkChannelOutboundOperations {
|
|
|
93
86
|
});
|
|
94
87
|
};
|
|
95
88
|
try {
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
let replyParts = [];
|
|
118
|
-
try {
|
|
119
|
-
try {
|
|
120
|
-
replyParts = await (0, abort_1.awaitWithAbort)(dealer.request(parts, (0, request_deadline_1.remainingRequestTimeout)(`Channel request '${channelName}'`, deadlineMs), onAdmitted), signal);
|
|
121
|
-
}
|
|
122
|
-
catch (error) {
|
|
123
|
-
if (signal?.aborted === true)
|
|
124
|
-
throw error;
|
|
125
|
-
// Spec 32-framework-error-model:81-92 — classify the backend request
|
|
126
|
-
// terminal (deadline -> DeadlineExceeded, lost route -> Unavailable,
|
|
127
|
-
// etc.) instead of collapsing every failure to Unavailable.
|
|
128
|
-
if ((0, runtime_values_1.isZLinkBackendResultError)(error) && error.operation === 'request') {
|
|
129
|
-
throw new contracts_1.ZLinkFrameworkException((0, framework_errors_internal_1.requestResultToPublicErrorKind)(error.result), `Channel '${channelName}' request failed with result ${error.result}.`, error);
|
|
130
|
-
}
|
|
131
|
-
throw error;
|
|
89
|
+
signal?.throwIfAborted();
|
|
90
|
+
const operation = this.requests.begin(timeoutMs, signal, existing);
|
|
91
|
+
const reply = this.requests.run(operation, (receiver) => {
|
|
92
|
+
this.measureRequest(channelName, operation);
|
|
93
|
+
operation.mapCaller((value) => {
|
|
94
|
+
traceTerminal('succeeded');
|
|
95
|
+
return value;
|
|
96
|
+
}, (error) => {
|
|
97
|
+
if (!isRemoteChannelErrorReply(error))
|
|
98
|
+
traceTerminal(requestTerminalResult(error, signal));
|
|
99
|
+
throw error;
|
|
100
|
+
});
|
|
101
|
+
void (async () => {
|
|
102
|
+
const requestOperation = operation;
|
|
103
|
+
const deadlineMs = requestOperation.deadlineMs;
|
|
104
|
+
const deadlineUnixMs = timeoutMs === undefined ? undefined : Date.now() + timeoutMs;
|
|
105
|
+
const readyWait = new AbortController();
|
|
106
|
+
const readySignal = signal === undefined ? readyWait.signal : AbortSignal.any([signal, readyWait.signal]);
|
|
107
|
+
const dealer = await (0, request_deadline_1.waitRequestReply)(this.sockets.awaitClientDealerForOutbound(channelName, readySignal), `Channel request '${channelName}'`, requestOperation, () => readyWait.abort());
|
|
108
|
+
if (dealer === undefined) {
|
|
109
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Channel '${channelName}' has no ready ClientServer server before its admission deadline.`);
|
|
132
110
|
}
|
|
111
|
+
const serverRid = this.sockets.selectedClientServerRid(channelName, dealer);
|
|
112
|
+
selectedServerRid = serverRid;
|
|
113
|
+
correlationId = (0, channel_envelope_1.newChannelCorrelationId)();
|
|
114
|
+
const parts = (0, channel_envelope_1.encodeChannelEnvelopePartsAtDeadline)(1 /* ZLinkChannelMessageKind.Request */, channelName, packetName, request, deadlineUnixMs, undefined, this.codecs, correlationId, this.dispatchServices.flowCreationEnabled(), metadata);
|
|
115
|
+
this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent)?.trace({
|
|
116
|
+
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.Channel,
|
|
117
|
+
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
|
|
118
|
+
channelName,
|
|
119
|
+
channelRouteKind: 'client_server',
|
|
120
|
+
serverRid,
|
|
121
|
+
packetName,
|
|
122
|
+
correlationId
|
|
123
|
+
});
|
|
124
|
+
dealer.request(parts, (0, request_deadline_1.remainingRequestTimeout)(`Channel request '${channelName}'`, deadlineMs), onAdmitted, requestOperation, receiver);
|
|
125
|
+
})().catch((error) => receiver.operationFailed(operation.id, error, undefined));
|
|
126
|
+
}, (raw) => {
|
|
127
|
+
const replyParts = raw;
|
|
128
|
+
try {
|
|
133
129
|
return (0, channel_envelope_1.decodeChannelReply)(replyParts, this.codecs);
|
|
134
130
|
}
|
|
135
131
|
finally {
|
|
136
132
|
(0, channel_envelope_1.closeMessages)(replyParts);
|
|
137
133
|
}
|
|
134
|
+
}, (error) => {
|
|
135
|
+
if (signal?.aborted !== true &&
|
|
136
|
+
(0, runtime_values_1.isZLinkBackendResultError)(error) &&
|
|
137
|
+
error.operation === 'request') {
|
|
138
|
+
return new contracts_1.ZLinkFrameworkException((0, framework_errors_internal_1.requestResultToPublicErrorKind)(error.result), `Channel '${channelName}' request failed with result ${error.result}.`, error);
|
|
139
|
+
}
|
|
140
|
+
return error;
|
|
138
141
|
});
|
|
139
|
-
traceTerminal('succeeded');
|
|
140
142
|
return reply;
|
|
141
143
|
}
|
|
142
144
|
catch (error) {
|
|
143
145
|
// A framework peer has already made the terminal dispatch error record
|
|
144
146
|
// before it sends an Error reply. Do not turn that same remote dispatch
|
|
145
147
|
// failure into a second local `reply_received` terminal at Errors level.
|
|
146
|
-
if (!isRemoteChannelErrorReply(error))
|
|
148
|
+
if (!isRemoteChannelErrorReply(error))
|
|
147
149
|
traceTerminal(requestTerminalResult(error, signal));
|
|
148
|
-
|
|
149
|
-
throw error;
|
|
150
|
+
return Promise.reject(error);
|
|
150
151
|
}
|
|
151
152
|
}
|
|
152
153
|
tryPublish(channelName, topic, packetName, event, metadata = EMPTY_OUTBOUND_METADATA) {
|
|
@@ -205,17 +206,12 @@ class ZLinkChannelOutboundOperations {
|
|
|
205
206
|
targetRid: targetNodeRid
|
|
206
207
|
});
|
|
207
208
|
}
|
|
208
|
-
routeRequest(routerChannelId, targetNodeRid, packetName, request, timeoutMs, signal, metadata, onAdmitted) {
|
|
209
|
-
return (0, flow_context_1.runWithOutboundFlow)(this.dispatchServices.flowCreationEnabled(), () => this.routeRequestScoped(routerChannelId, targetNodeRid, packetName, request, timeoutMs, signal, metadata, onAdmitted));
|
|
209
|
+
routeRequest(routerChannelId, targetNodeRid, packetName, request, timeoutMs, signal, metadata, onAdmitted, requestOperation) {
|
|
210
|
+
return (0, flow_context_1.runWithOutboundFlow)(this.dispatchServices.flowCreationEnabled(), () => this.routeRequestScoped(routerChannelId, targetNodeRid, packetName, request, timeoutMs, signal, metadata, onAdmitted, requestOperation));
|
|
210
211
|
}
|
|
211
|
-
|
|
212
|
+
routeRequestScoped(routerChannelId, targetNodeRid, packetName, request, timeoutMs, signal, metadata, onAdmitted, existing) {
|
|
212
213
|
let correlationId;
|
|
213
|
-
let router;
|
|
214
|
-
let terminalRecorded = false;
|
|
215
214
|
const traceTerminal = (result) => {
|
|
216
|
-
if (terminalRecorded)
|
|
217
|
-
return;
|
|
218
|
-
terminalRecorded = true;
|
|
219
215
|
this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.ReplyReceived, result)?.trace({
|
|
220
216
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.RouteMeshChannel,
|
|
221
217
|
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
|
|
@@ -228,71 +224,77 @@ class ZLinkChannelOutboundOperations {
|
|
|
228
224
|
});
|
|
229
225
|
};
|
|
230
226
|
try {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
227
|
+
signal?.throwIfAborted();
|
|
228
|
+
const operation = this.requests.begin(timeoutMs, signal, existing);
|
|
229
|
+
const reply = this.requests.run(operation, (receiver) => {
|
|
230
|
+
this.measureRequest(routerChannelId, operation);
|
|
231
|
+
operation.mapCaller((value) => {
|
|
232
|
+
traceTerminal('succeeded');
|
|
233
|
+
return value;
|
|
234
|
+
}, (error) => {
|
|
235
|
+
if (!isRemoteChannelErrorReply(error))
|
|
236
|
+
traceTerminal(requestTerminalResult(error, signal));
|
|
237
|
+
throw error;
|
|
238
|
+
});
|
|
239
|
+
const requestOperation = operation;
|
|
240
|
+
const router = this.sockets.routeRouter(routerChannelId);
|
|
241
|
+
if (this.sockets.routeMemberStatus(routerChannelId, targetNodeRid) === 'missing') {
|
|
242
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `Route channel '${routerChannelId}' has no member '${targetNodeRid}'.`);
|
|
243
|
+
}
|
|
244
|
+
correlationId = (0, channel_envelope_1.newChannelCorrelationId)();
|
|
245
|
+
const parts = (0, channel_envelope_1.encodeChannelEnvelopeParts)(1 /* ZLinkChannelMessageKind.Request */, routerChannelId, packetName, request, timeoutMs, undefined, (0, channel_framework_packets_1.codecsForFrameworkPacket)(packetName, this.codecs), correlationId, this.dispatchServices.flowCreationEnabled(), metadata);
|
|
246
|
+
this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent)?.trace({
|
|
247
|
+
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.RouteMeshChannel,
|
|
248
|
+
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
|
|
249
|
+
channelName: routerChannelId,
|
|
250
|
+
channelRouteKind: 'route_mesh',
|
|
251
|
+
packetName,
|
|
252
|
+
correlationId,
|
|
253
|
+
targetRid: targetNodeRid
|
|
254
|
+
});
|
|
255
|
+
router.request(targetNodeRid, parts, timeoutMs, onAdmitted, requestOperation, receiver);
|
|
256
|
+
}, (raw) => {
|
|
257
|
+
const replyParts = raw;
|
|
249
258
|
try {
|
|
250
259
|
return (0, channel_envelope_1.decodeChannelReply)(replyParts, this.codecs);
|
|
251
260
|
}
|
|
252
261
|
finally {
|
|
253
262
|
(0, channel_envelope_1.closeMessages)(replyParts);
|
|
254
263
|
}
|
|
264
|
+
}, (error) => {
|
|
265
|
+
if (this.sockets.routeMemberStatus(routerChannelId, targetNodeRid) === 'disconnected' &&
|
|
266
|
+
(isSubmitDeadline(error) || error instanceof route_disconnected_error_1.ZLinkRouteDisconnectedError)) {
|
|
267
|
+
return (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `Route channel '${routerChannelId}' member '${targetNodeRid}' is not connected.`, true, error);
|
|
268
|
+
}
|
|
269
|
+
return error;
|
|
255
270
|
});
|
|
256
|
-
traceTerminal('succeeded');
|
|
257
271
|
return reply;
|
|
258
272
|
}
|
|
259
273
|
catch (error) {
|
|
260
|
-
|
|
261
|
-
// terminal record when the reply itself is an Error envelope.
|
|
262
|
-
if (!isRemoteChannelErrorReply(error)) {
|
|
274
|
+
if (!isRemoteChannelErrorReply(error))
|
|
263
275
|
traceTerminal(requestTerminalResult(error, signal));
|
|
264
|
-
|
|
265
|
-
if (this.sockets.routeMemberStatus(routerChannelId, targetNodeRid) === 'disconnected' &&
|
|
266
|
-
(isSubmitDeadline(error) || error instanceof route_disconnected_error_1.ZLinkRouteDisconnectedError)) {
|
|
267
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `Route channel '${routerChannelId}' member '${targetNodeRid}' is not connected.`, true, error);
|
|
268
|
-
}
|
|
269
|
-
throw error;
|
|
276
|
+
return Promise.reject(error);
|
|
270
277
|
}
|
|
271
278
|
}
|
|
272
|
-
|
|
279
|
+
measureRequest(channel, operation) {
|
|
273
280
|
this.pendingRequests.set(channel, this.pendingRequestCount(channel) + 1);
|
|
274
|
-
|
|
275
|
-
return await operation();
|
|
276
|
-
}
|
|
277
|
-
finally {
|
|
281
|
+
const complete = () => {
|
|
278
282
|
const remaining = this.pendingRequestCount(channel) - 1;
|
|
279
283
|
if (remaining === 0)
|
|
280
284
|
this.pendingRequests.delete(channel);
|
|
281
285
|
else
|
|
282
286
|
this.pendingRequests.set(channel, remaining);
|
|
283
|
-
}
|
|
287
|
+
};
|
|
288
|
+
operation.mapCaller((value) => {
|
|
289
|
+
complete();
|
|
290
|
+
return value;
|
|
291
|
+
}, (error) => {
|
|
292
|
+
complete();
|
|
293
|
+
throw error;
|
|
294
|
+
});
|
|
284
295
|
}
|
|
285
296
|
}
|
|
286
297
|
exports.ZLinkChannelOutboundOperations = ZLinkChannelOutboundOperations;
|
|
287
|
-
/**
|
|
288
|
-
* A ClientServer DEALER's request progress poller is intentionally unref'ed.
|
|
289
|
-
* The public request promise is live work, however, so it needs its own
|
|
290
|
-
* ref'ed handle until reply, cancellation, timeout, or failure settles it.
|
|
291
|
-
*/
|
|
292
|
-
function keepChannelRequestAlive(request) {
|
|
293
|
-
const keepalive = setTimeout(() => { }, CHANNEL_REQUEST_LOOP_KEEPALIVE_MS);
|
|
294
|
-
return request.finally(() => clearTimeout(keepalive));
|
|
295
|
-
}
|
|
296
298
|
function isSubmitDeadline(error) {
|
|
297
299
|
return (error instanceof contracts_1.ZLinkFrameworkException &&
|
|
298
300
|
(0, framework_errors_internal_1.internalFrameworkErrorKind)(error) === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded);
|
|
@@ -25,13 +25,13 @@ interface ZLinkChannelRequestDispatchLoop {
|
|
|
25
25
|
readonly send?: () => ZLinkMultipartOperation<ZLinkMultipartAsyncSubmitOperation>;
|
|
26
26
|
}, router: ZLinkBackendRouterSocket & {
|
|
27
27
|
reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
|
|
28
|
-
}, signal?: AbortSignal, decodedHeader?: ZLinkChannelEnvelopeHeader): Promise<boolean | void>;
|
|
28
|
+
}, signal?: AbortSignal, decodedHeader?: ZLinkChannelEnvelopeHeader, receivedAt?: Date): Promise<boolean | void>;
|
|
29
29
|
}
|
|
30
30
|
interface ZLinkChannelPublishDispatchLoop {
|
|
31
31
|
dispatch(topicMessage: {
|
|
32
32
|
readonly topic: string;
|
|
33
33
|
readonly parts: readonly Message[];
|
|
34
|
-
}, signal?: AbortSignal, decodedHeader?: ZLinkChannelEnvelopeHeader): Promise<void>;
|
|
34
|
+
}, signal?: AbortSignal, decodedHeader?: ZLinkChannelEnvelopeHeader, receivedAt?: Date): Promise<void>;
|
|
35
35
|
}
|
|
36
36
|
interface ZLinkSubscriberInfrastructureResult {
|
|
37
37
|
readonly consumed: boolean;
|
|
@@ -54,7 +54,7 @@ interface ZLinkRoutePacketDispatchLoop {
|
|
|
54
54
|
readonly replyToken: unknown | null;
|
|
55
55
|
}, router: {
|
|
56
56
|
reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
|
|
57
|
-
}, signal?: AbortSignal, decodedHeader?: ZLinkChannelEnvelopeHeader, infrastructureChecked?: boolean): Promise<boolean | void>;
|
|
57
|
+
}, signal?: AbortSignal, decodedHeader?: ZLinkChannelEnvelopeHeader, infrastructureChecked?: boolean, receivedAt?: Date): Promise<boolean | void>;
|
|
58
58
|
}
|
|
59
59
|
interface ZLinkChannelInfrastructureHandler {
|
|
60
60
|
(received: {
|
|
@@ -87,6 +87,7 @@ export declare class ZLinkChannelReceiveLoop {
|
|
|
87
87
|
private readonly applicationJobQueue;
|
|
88
88
|
private readonly roundRobin?;
|
|
89
89
|
private readonly applicationDispatchQueue;
|
|
90
|
+
private readonly receivedAtClock;
|
|
90
91
|
private stoppedFlag;
|
|
91
92
|
private isStopped;
|
|
92
93
|
private running?;
|
|
@@ -96,11 +97,10 @@ export declare class ZLinkChannelReceiveLoop {
|
|
|
96
97
|
private readonly capacityStop;
|
|
97
98
|
constructor(channelName: string, router: ZLinkBackendRouterSocket & {
|
|
98
99
|
reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
|
|
99
|
-
}, dispatcher: ZLinkChannelRequestDispatchLoop, spotRouteBridge: ZLinkBackendSpotRouteBridge | undefined, infrastructureHandler: ZLinkChannelInfrastructureHandler | undefined, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, reportError?: ZLinkReceiveTaskErrorReporter, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, applicationDispatchQueue?: ZLinkSerialExecutionQueue);
|
|
100
|
+
}, dispatcher: ZLinkChannelRequestDispatchLoop, spotRouteBridge: ZLinkBackendSpotRouteBridge | undefined, infrastructureHandler: ZLinkChannelInfrastructureHandler | undefined, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, reportError?: ZLinkReceiveTaskErrorReporter, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, applicationDispatchQueue?: ZLinkSerialExecutionQueue, receivedAtClock?: () => Date);
|
|
100
101
|
run(signal?: AbortSignal): Promise<void>;
|
|
101
102
|
private runLoop;
|
|
102
103
|
stop(): Promise<void>;
|
|
103
|
-
private acquirePermit;
|
|
104
104
|
private dispatchAndClose;
|
|
105
105
|
private classify;
|
|
106
106
|
}
|
|
@@ -112,6 +112,7 @@ export declare class ZLinkSubscriberReceiveLoop {
|
|
|
112
112
|
private readonly infrastructureHandler?;
|
|
113
113
|
private readonly roundRobin?;
|
|
114
114
|
private readonly applicationDispatchQueue;
|
|
115
|
+
private readonly receivedAtClock;
|
|
115
116
|
private stoppedFlag;
|
|
116
117
|
private isStopped;
|
|
117
118
|
private running?;
|
|
@@ -119,7 +120,7 @@ export declare class ZLinkSubscriberReceiveLoop {
|
|
|
119
120
|
private readonly receiveOwner;
|
|
120
121
|
private readonly rawReceiveReservations;
|
|
121
122
|
private readonly capacityStop;
|
|
122
|
-
constructor(adapter: ZLinkChannelBackendAdapter, subscriber: ZLinkBackendSubscriberSocket, dispatcher: ZLinkChannelPublishDispatchLoop, applicationJobQueue: ApplicationJobQueue, infrastructureHandler?: ((topicMessage: ReturnType<ZLinkChannelBackendAdapter["createTopicMessage"]>) => boolean | ZLinkSubscriberInfrastructureResult) | undefined, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter, applicationDispatchQueue?: ZLinkSerialExecutionQueue);
|
|
123
|
+
constructor(adapter: ZLinkChannelBackendAdapter, subscriber: ZLinkBackendSubscriberSocket, dispatcher: ZLinkChannelPublishDispatchLoop, applicationJobQueue: ApplicationJobQueue, infrastructureHandler?: ((topicMessage: ReturnType<ZLinkChannelBackendAdapter["createTopicMessage"]>) => boolean | ZLinkSubscriberInfrastructureResult) | undefined, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter, applicationDispatchQueue?: ZLinkSerialExecutionQueue, receivedAtClock?: () => Date);
|
|
123
124
|
private readonly poller;
|
|
124
125
|
run(signal?: AbortSignal): Promise<void>;
|
|
125
126
|
private runLoop;
|
|
@@ -135,6 +136,7 @@ export declare class ZLinkRouteReceiveLoop {
|
|
|
135
136
|
private readonly applicationJobQueue;
|
|
136
137
|
private readonly roundRobin?;
|
|
137
138
|
private readonly applicationDispatchQueue;
|
|
139
|
+
private readonly receivedAtClock;
|
|
138
140
|
private stoppedFlag;
|
|
139
141
|
private isStopped;
|
|
140
142
|
private running?;
|
|
@@ -144,7 +146,7 @@ export declare class ZLinkRouteReceiveLoop {
|
|
|
144
146
|
private readonly capacityStop;
|
|
145
147
|
constructor(router: ZLinkBackendRouterSocket & {
|
|
146
148
|
reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
|
|
147
|
-
}, dispatcher: ZLinkRoutePacketDispatchLoop, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter, applicationDispatchQueue?: ZLinkSerialExecutionQueue);
|
|
149
|
+
}, dispatcher: ZLinkRoutePacketDispatchLoop, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter, applicationDispatchQueue?: ZLinkSerialExecutionQueue, receivedAtClock?: () => Date);
|
|
148
150
|
run(signal?: AbortSignal): Promise<void>;
|
|
149
151
|
private runLoop;
|
|
150
152
|
stop(): Promise<void>;
|