@zlink-systems/framework 0.30.0 → 0.30.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +150 -68
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
- package/dist/contracts/Channels/Calls.d.ts +2 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
- package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
- package/dist/contracts/Common/encoded-payload-storage.js +5 -2
- package/dist/contracts/Configuration/Builders.d.ts +1 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
- package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
- package/dist/contracts/Handlers/Attributes.d.ts +5 -13
- package/dist/contracts/Handlers/Attributes.js +7 -11
- package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
- package/dist/contracts/Handlers/JsonContract.js +4 -153
- package/dist/contracts/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +6 -1
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- package/dist/nest-integration.d.ts +1 -1
- package/dist/nest-integration.js +2 -1
- package/dist/runtime/abort.d.ts +5 -0
- package/dist/runtime/abort.js +10 -0
- package/dist/runtime/actors/actor-authority-publication.js +3 -2
- package/dist/runtime/actors/actor-client.d.ts +1 -2
- package/dist/runtime/actors/actor-client.js +52 -57
- package/dist/runtime/actors/actor-context.d.ts +2 -0
- package/dist/runtime/actors/actor-context.js +46 -9
- package/dist/runtime/actors/actor-handoff.d.ts +8 -4
- package/dist/runtime/actors/actor-handoff.js +219 -92
- package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
- package/dist/runtime/actors/actor-local-native-join.js +13 -12
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-remote-wire.js +15 -0
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -0
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
- package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-state.js +2 -20
- package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
- package/dist/runtime/actors/index.d.ts +8 -3
- package/dist/runtime/actors/index.js +55 -27
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +56 -23
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
- package/dist/runtime/application-jobs/contracts.d.ts +12 -1
- package/dist/runtime/backend/contracts/index.d.ts +37 -12
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
- package/dist/runtime/backend/mesh-completion-table.js +154 -49
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
- package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
- package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
- package/dist/runtime/backend/runtime-message.d.ts +1 -0
- package/dist/runtime/backend/runtime-message.js +5 -0
- package/dist/runtime/backend/runtime-values.d.ts +1 -0
- package/dist/runtime/backend/runtime-values.js +2 -1
- package/dist/runtime/channels/channel-clients.d.ts +2 -0
- package/dist/runtime/channels/channel-clients.js +75 -23
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
- package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
- package/dist/runtime/channels/channel-dispatch-services.js +45 -0
- package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
- package/dist/runtime/channels/channel-dispatchers.js +62 -54
- package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
- package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
- package/dist/runtime/channels/channel-envelope.d.ts +2 -0
- package/dist/runtime/channels/channel-envelope.js +146 -28
- package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
- package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
- package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
- package/dist/runtime/channels/channel-runtime-manager.js +16 -16
- package/dist/runtime/channels/channel-transports.d.ts +18 -16
- package/dist/runtime/channels/channel-transports.js +77 -58
- package/dist/runtime/channels/client-server-location-runtime.js +5 -4
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/fanout-location-runtime.js +3 -3
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +2 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
- package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
- package/dist/runtime/channels/source-spot-router.d.ts +2 -2
- package/dist/runtime/channels/source-spot-router.js +4 -4
- package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-node-route-transport.js +4 -4
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
- package/dist/runtime/diagnostics/flow-context.js +19 -7
- package/dist/runtime/diagnostics/index.js +4 -9
- package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
- package/dist/runtime/diagnostics/message-flow.js +35 -5
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
- package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
- package/dist/runtime/execution/index.d.ts +4 -2
- package/dist/runtime/execution/index.js +33 -10
- package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
- package/dist/runtime/execution/serial-execution-queue.js +22 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
- package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
- package/dist/runtime/foundation/durable-service-request.js +98 -0
- package/dist/runtime/foundation/operation-identity.d.ts +1 -0
- package/dist/runtime/foundation/operation-identity.js +5 -1
- package/dist/runtime/foundation/operation-registry.d.ts +25 -1
- package/dist/runtime/foundation/operation-registry.js +86 -18
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
- package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
- package/dist/runtime/foundation/service-liveness-registry.js +38 -0
- package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
- package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
- package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
- package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
- package/dist/runtime/foundation/service-stateful-registry.js +24 -26
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
- package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
- package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
- package/dist/runtime/foundation/service-topology-registry.js +61 -27
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
- package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
- package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
- package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
- package/dist/runtime/handlers/handler-instance-scope.js +54 -11
- package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
- package/dist/runtime/host/actor-packet-relay.js +59 -72
- package/dist/runtime/host/actor-placement-coordinator.js +25 -8
- package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
- package/dist/runtime/host/actor-transfer-runtime.js +85 -331
- package/dist/runtime/host/application-job-queue.d.ts +40 -7
- package/dist/runtime/host/application-job-queue.js +137 -42
- package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
- package/dist/runtime/host/entry-actor-runtime.js +3 -0
- package/dist/runtime/host/index.d.ts +12 -2
- package/dist/runtime/host/index.js +300 -202
- package/dist/runtime/host/location-runtime-owner.js +2 -6
- package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
- package/dist/runtime/host/mesh-router-resolver.js +14 -6
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
- package/dist/runtime/host/remote-bound-session-relay.js +73 -208
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +6 -4
- package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
- package/dist/runtime/host/runtime-shutdown.js +3 -2
- package/dist/runtime/host/service-relocation-control.d.ts +1 -0
- package/dist/runtime/host/service-relocation-control.js +10 -4
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
- package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
- package/dist/runtime/host/spot-address-transport.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
- package/dist/runtime/locations/actor-location-claims.js +34 -19
- package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
- package/dist/runtime/locations/auto-connect-loop.js +22 -14
- package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
- package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
- package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
- package/dist/runtime/locations/descriptor-publication.js +11 -0
- package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
- package/dist/runtime/locations/in-memory-authority-store.js +56 -19
- package/dist/runtime/locations/in-memory-location-store.js +1 -10
- package/dist/runtime/locations/index.d.ts +1 -0
- package/dist/runtime/locations/index.js +1 -0
- package/dist/runtime/locations/lease-tracker.js +1 -6
- package/dist/runtime/locations/lifecycle.d.ts +1 -2
- package/dist/runtime/locations/lifecycle.js +2 -5
- package/dist/runtime/locations/location-store-repository.d.ts +51 -1
- package/dist/runtime/locations/location-store-repository.js +363 -139
- package/dist/runtime/locations/relocation-blob.d.ts +18 -1
- package/dist/runtime/locations/relocation-blob.js +52 -1
- package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
- package/dist/runtime/locations/request-source-resolver.js +80 -0
- package/dist/runtime/locations/resolvers.js +1 -1
- package/dist/runtime/locations/runtime.d.ts +7 -3
- package/dist/runtime/locations/runtime.js +61 -53
- package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
- package/dist/runtime/messaging/framework-json-v1.js +38 -294
- package/dist/runtime/messaging/packet-name.d.ts +1 -1
- package/dist/runtime/messaging/packet-name.js +8 -24
- package/dist/runtime/messaging/payload-codec.d.ts +7 -1
- package/dist/runtime/messaging/payload-codec.js +7 -6
- package/dist/runtime/messaging/request-result.d.ts +2 -0
- package/dist/runtime/messaging/request-result.js +57 -0
- package/dist/runtime/messaging/submission-result.d.ts +1 -0
- package/dist/runtime/messaging/submission-result.js +5 -2
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
- package/dist/runtime/spots/index.d.ts +21 -11
- package/dist/runtime/spots/index.js +243 -178
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
- package/dist/runtime/spots/spot-activation-registry.js +21 -11
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +7 -7
- package/dist/runtime/spots/spot-activation.d.ts +7 -3
- package/dist/runtime/spots/spot-activation.js +140 -52
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
- package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-membership.js +0 -8
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
- package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
- package/dist/runtime/spots/spot-entry-activation.js +20 -11
- package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
- package/dist/runtime/spots/spot-handler-registry.js +24 -10
- package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
- package/dist/runtime/spots/spot-manager-public.js +2 -2
- package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
- package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
- package/dist/runtime/spots/spot-outbound.d.ts +3 -0
- package/dist/runtime/spots/spot-outbound.js +27 -18
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
- package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
- package/dist/runtime/spots/spot-serial-executor.js +61 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
- package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +288 -103
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
- package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
- package/dist/runtime/streams/bound-session-service.d.ts +1 -1
- package/dist/runtime/streams/bound-session-service.js +6 -11
- package/dist/runtime/streams/index.d.ts +3 -2
- package/dist/runtime/streams/index.js +6 -4
- package/dist/runtime/streams/managed-stream.js +3 -2
- package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
- package/dist/runtime/streams/session-actor-coordinator.js +15 -32
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
- package/dist/runtime/streams/stream-session-runtime.js +14 -31
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
- package/src/contracts/Channels/Calls.ts +2 -1
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
- package/src/contracts/Common/encoded-payload-storage.ts +6 -3
- package/src/contracts/Configuration/Builders.ts +4 -1
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
- package/src/contracts/Handlers/Attributes.ts +14 -21
- package/src/contracts/Handlers/JsonContract.ts +8 -216
- package/src/contracts/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +10 -1
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/nest-integration.ts +1 -0
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +100 -85
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +291 -110
- package/src/runtime/actors/actor-join-relocation.ts +3 -0
- package/src/runtime/actors/actor-local-native-join.ts +21 -26
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-remote-wire.ts +17 -0
- package/src/runtime/actors/actor-reply.ts +42 -0
- package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
- package/src/runtime/actors/actor-routed-json-request.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
- package/src/runtime/actors/actor-runtime-state.ts +2 -20
- package/src/runtime/actors/actor-source-transfer.ts +1 -34
- package/src/runtime/actors/index.ts +60 -32
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
- package/src/runtime/admission.ts +69 -21
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
- package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
- package/src/runtime/application-jobs/contracts.ts +16 -1
- package/src/runtime/backend/contracts/index.ts +92 -18
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +160 -57
- package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
- package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
- package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
- package/src/runtime/backend/raw-binding-port.ts +7 -2
- package/src/runtime/backend/runtime-message.ts +6 -0
- package/src/runtime/backend/runtime-values.ts +1 -0
- package/src/runtime/channels/channel-clients.ts +132 -58
- package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
- package/src/runtime/channels/channel-dispatch-services.ts +69 -1
- package/src/runtime/channels/channel-dispatchers.ts +136 -90
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
- package/src/runtime/channels/channel-envelope.ts +225 -31
- package/src/runtime/channels/channel-outbound-operations.ts +22 -8
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +41 -17
- package/src/runtime/channels/channel-transports.ts +171 -112
- package/src/runtime/channels/client-server-location-runtime.ts +11 -10
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
- package/src/runtime/channels/fanout-location-runtime.ts +17 -9
- package/src/runtime/channels/local-spot-route-transport.ts +3 -1
- package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
- package/src/runtime/channels/source-spot-router.ts +8 -4
- package/src/runtime/channels/spot-node-route-transport.ts +8 -4
- package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
- package/src/runtime/diagnostics/flow-context.ts +20 -7
- package/src/runtime/diagnostics/index.ts +1 -7
- package/src/runtime/diagnostics/message-flow.ts +47 -9
- package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
- package/src/runtime/execution/index.ts +40 -14
- package/src/runtime/execution/serial-execution-queue.ts +33 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
- package/src/runtime/foundation/durable-service-request.ts +137 -0
- package/src/runtime/foundation/operation-identity.ts +5 -1
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
- package/src/runtime/foundation/service-liveness-registry.ts +39 -0
- package/src/runtime/foundation/service-mailbox.ts +8 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
- package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
- package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
- package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
- package/src/runtime/foundation/service-stateful-registry.ts +38 -35
- package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
- package/src/runtime/foundation/service-topology-registry.ts +91 -36
- package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
- package/src/runtime/handlers/handler-instance-scope.ts +67 -16
- package/src/runtime/host/actor-packet-relay.ts +113 -94
- package/src/runtime/host/actor-placement-coordinator.ts +31 -8
- package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
- package/src/runtime/host/actor-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +160 -41
- package/src/runtime/host/entry-actor-runtime.ts +4 -0
- package/src/runtime/host/index.ts +473 -271
- package/src/runtime/host/location-runtime-owner.ts +2 -6
- package/src/runtime/host/mesh-router-resolver.ts +13 -5
- package/src/runtime/host/remote-bound-session-relay.ts +88 -271
- package/src/runtime/host/route-mesh-runtime.ts +12 -6
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-control.ts +11 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
- package/src/runtime/host/spot-address-transport.ts +4 -2
- package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- package/src/runtime/locations/actor-location-claims.ts +52 -30
- package/src/runtime/locations/auto-connect-loop.ts +22 -14
- package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
- package/src/runtime/locations/auto-connect-types.ts +0 -1
- package/src/runtime/locations/descriptor-publication.ts +7 -0
- package/src/runtime/locations/domain-store-contract.ts +5 -0
- package/src/runtime/locations/in-memory-authority-store.ts +85 -23
- package/src/runtime/locations/in-memory-location-store.ts +1 -12
- package/src/runtime/locations/index.ts +1 -0
- package/src/runtime/locations/lease-tracker.ts +2 -9
- package/src/runtime/locations/lifecycle.ts +8 -26
- package/src/runtime/locations/location-store-repository.ts +628 -152
- package/src/runtime/locations/relocation-blob.ts +75 -1
- package/src/runtime/locations/request-source-resolver.ts +138 -0
- package/src/runtime/locations/resolvers.ts +2 -2
- package/src/runtime/locations/runtime.ts +98 -64
- package/src/runtime/messaging/framework-json-v1.ts +5 -325
- package/src/runtime/messaging/packet-name.ts +5 -25
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +62 -0
- package/src/runtime/messaging/submission-result.ts +5 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
- package/src/runtime/spots/index.ts +389 -283
- package/src/runtime/spots/spot-activation-registry.ts +25 -13
- package/src/runtime/spots/spot-activation-state.ts +12 -19
- package/src/runtime/spots/spot-activation.ts +198 -96
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
- package/src/runtime/spots/spot-actor-membership.ts +0 -15
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
- package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
- package/src/runtime/spots/spot-entry-activation.ts +33 -21
- package/src/runtime/spots/spot-handler-registry.ts +56 -12
- package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
- package/src/runtime/spots/spot-manager-public.ts +2 -2
- package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +39 -19
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
- package/src/runtime/spots/spot-runtime-ports.ts +1 -1
- package/src/runtime/spots/spot-serial-executor.ts +97 -25
- package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
- package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
- package/src/runtime/spots/spot-timer.ts +418 -158
- package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
- package/src/runtime/streams/bound-session-service.ts +7 -10
- package/src/runtime/streams/index.ts +12 -6
- package/src/runtime/streams/managed-stream.ts +4 -2
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
- package/src/runtime/streams/session-actor-coordinator.ts +39 -88
- package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
- package/src/runtime/streams/stream-session-runtime.ts +13 -34
- package/src/runtime/workers/index.ts +1 -1
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
import { ZLinkBufferMessage } from '../backend/runtime-message';
|
|
13
13
|
import {
|
|
14
14
|
RequestResult,
|
|
15
|
+
ZLINK_BACKEND_SEND_DONT_WAIT,
|
|
15
16
|
isZLinkBackendResultError,
|
|
16
17
|
type ZLinkBackendMessageLike as MessageLike
|
|
17
18
|
} from '../backend/runtime-values';
|
|
@@ -61,6 +62,8 @@ import {
|
|
|
61
62
|
type ZLinkChannelEnvelopeCodecRegistry
|
|
62
63
|
} from './channel-envelope';
|
|
63
64
|
|
|
65
|
+
const NON_BLOCKING_SEND_OPTIONS = Object.freeze({ flags: ZLINK_BACKEND_SEND_DONT_WAIT });
|
|
66
|
+
|
|
64
67
|
export interface ZLinkChannelClientTransport {
|
|
65
68
|
send(
|
|
66
69
|
channelName: string,
|
|
@@ -74,7 +77,8 @@ export interface ZLinkChannelClientTransport {
|
|
|
74
77
|
request: unknown,
|
|
75
78
|
timeoutMs: number | undefined,
|
|
76
79
|
signal?: AbortSignal,
|
|
77
|
-
metadata?: ReadonlyMap<string, string
|
|
80
|
+
metadata?: ReadonlyMap<string, string>,
|
|
81
|
+
onAdmitted?: () => void
|
|
78
82
|
): Promise<TReply>;
|
|
79
83
|
tryPublish?(
|
|
80
84
|
channelName: string,
|
|
@@ -131,7 +135,8 @@ export interface ZLinkRouteClientTransport {
|
|
|
131
135
|
request: unknown,
|
|
132
136
|
timeoutMs: number | undefined,
|
|
133
137
|
signal?: AbortSignal,
|
|
134
|
-
metadata?: ReadonlyMap<string, string
|
|
138
|
+
metadata?: ReadonlyMap<string, string>,
|
|
139
|
+
onAdmitted?: () => void
|
|
135
140
|
): Promise<TReply>;
|
|
136
141
|
submitToChannel(
|
|
137
142
|
meshName: string,
|
|
@@ -147,7 +152,8 @@ export interface ZLinkRouteClientTransport {
|
|
|
147
152
|
request: unknown,
|
|
148
153
|
timeoutMs: number | undefined,
|
|
149
154
|
signal?: AbortSignal,
|
|
150
|
-
metadata?: ReadonlyMap<string, string
|
|
155
|
+
metadata?: ReadonlyMap<string, string>,
|
|
156
|
+
onAdmitted?: () => void
|
|
151
157
|
): Promise<TReply>;
|
|
152
158
|
sendToSpot?(
|
|
153
159
|
spotRouteTarget: ZLinkSpotRouteTarget,
|
|
@@ -164,6 +170,7 @@ export interface ZLinkRouteClientTransport {
|
|
|
164
170
|
readonly packetName?: string;
|
|
165
171
|
readonly timeoutMs?: number;
|
|
166
172
|
readonly signal?: AbortSignal;
|
|
173
|
+
readonly onAdmitted?: () => void;
|
|
167
174
|
readonly metadata?: ReadonlyMap<string, string>;
|
|
168
175
|
}
|
|
169
176
|
): Promise<TReply>;
|
|
@@ -182,7 +189,8 @@ interface ZLinkChannelTransportRuntime {
|
|
|
182
189
|
request: unknown,
|
|
183
190
|
timeoutMs: number | undefined,
|
|
184
191
|
signal?: AbortSignal,
|
|
185
|
-
metadata?: ReadonlyMap<string, string
|
|
192
|
+
metadata?: ReadonlyMap<string, string>,
|
|
193
|
+
onAdmitted?: () => void
|
|
186
194
|
): Promise<TReply>;
|
|
187
195
|
tryPublish(
|
|
188
196
|
channelName: string,
|
|
@@ -215,7 +223,8 @@ interface ZLinkChannelTransportRuntime {
|
|
|
215
223
|
request: unknown,
|
|
216
224
|
timeoutMs: number | undefined,
|
|
217
225
|
signal?: AbortSignal,
|
|
218
|
-
metadata?: ReadonlyMap<string, string
|
|
226
|
+
metadata?: ReadonlyMap<string, string>,
|
|
227
|
+
onAdmitted?: () => void
|
|
219
228
|
): Promise<TReply>;
|
|
220
229
|
routeSendToSpot(
|
|
221
230
|
spotRouteTarget: ZLinkSpotRouteTarget,
|
|
@@ -236,7 +245,8 @@ interface ZLinkChannelTransportRuntime {
|
|
|
236
245
|
request: unknown,
|
|
237
246
|
timeoutMs: number | undefined,
|
|
238
247
|
signal?: AbortSignal,
|
|
239
|
-
metadata?: ReadonlyMap<string, string
|
|
248
|
+
metadata?: ReadonlyMap<string, string>,
|
|
249
|
+
onAdmitted?: () => void
|
|
240
250
|
): Promise<TReply>;
|
|
241
251
|
routeRequestFromSpotToSpot<TReply>(
|
|
242
252
|
sourceSpot: ZLinkBackendSpot,
|
|
@@ -244,20 +254,23 @@ interface ZLinkChannelTransportRuntime {
|
|
|
244
254
|
packetName: string | undefined,
|
|
245
255
|
request: unknown,
|
|
246
256
|
timeoutMs: number | undefined,
|
|
247
|
-
signal?: AbortSignal
|
|
257
|
+
signal?: AbortSignal,
|
|
258
|
+
onAdmitted?: () => void
|
|
248
259
|
): Promise<TReply>;
|
|
249
260
|
routeRequestRawFromSpotToSpot(
|
|
250
261
|
sourceSpot: ZLinkBackendSpot,
|
|
251
262
|
spotRouteTarget: ZLinkSpotRouteTarget,
|
|
252
263
|
request: Message,
|
|
253
264
|
timeoutMs: number | undefined,
|
|
254
|
-
signal?: AbortSignal
|
|
265
|
+
signal?: AbortSignal,
|
|
266
|
+
onAdmitted?: () => void
|
|
255
267
|
): Promise<readonly Message[]>;
|
|
256
268
|
routeRequestRawToSpot(
|
|
257
269
|
spotRouteTarget: ZLinkSpotRouteTarget,
|
|
258
270
|
request: Message,
|
|
259
271
|
timeoutMs: number | undefined,
|
|
260
|
-
signal?: AbortSignal
|
|
272
|
+
signal?: AbortSignal,
|
|
273
|
+
onAdmitted?: () => void
|
|
261
274
|
): Promise<readonly Message[]>;
|
|
262
275
|
}
|
|
263
276
|
|
|
@@ -269,7 +282,7 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
269
282
|
private readonly meshRuntime:
|
|
270
283
|
| (() =>
|
|
271
284
|
| {
|
|
272
|
-
readonly meshNode
|
|
285
|
+
readonly meshNode?: (meshName: string) => ZLinkBackendMeshNode | undefined;
|
|
273
286
|
readonly meshCompletionTable: (
|
|
274
287
|
meshName: string
|
|
275
288
|
) => ZLinkMeshCompletionTable | undefined;
|
|
@@ -307,40 +320,44 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
307
320
|
);
|
|
308
321
|
}
|
|
309
322
|
|
|
310
|
-
|
|
323
|
+
submit(
|
|
311
324
|
meshName: string,
|
|
312
325
|
targetNodeRid: string,
|
|
313
326
|
packetName: string | undefined,
|
|
314
327
|
message: unknown,
|
|
315
328
|
metadata?: ReadonlyMap<string, string>
|
|
316
|
-
): Promise<ZLinkSubmitResult> {
|
|
329
|
+
): ZLinkSubmitResult | Promise<ZLinkSubmitResult> {
|
|
317
330
|
// Call-scoped flow (spec 27 §4): the envelope flow pair lives only for
|
|
318
331
|
// the duration of this outbound call, never in the caller's context.
|
|
319
|
-
|
|
332
|
+
if (!this.flowCreationEnabled())
|
|
333
|
+
return this.submitNode(meshName, targetNodeRid, packetName, message, metadata, false);
|
|
334
|
+
return runWithOutboundFlow(true, () =>
|
|
320
335
|
this.submitNode(meshName, targetNodeRid, packetName, message, metadata, false)
|
|
321
336
|
);
|
|
322
337
|
}
|
|
323
338
|
|
|
324
|
-
|
|
339
|
+
submitInfrastructure(
|
|
325
340
|
meshName: string,
|
|
326
341
|
targetNodeRid: string,
|
|
327
342
|
packetName: string | undefined,
|
|
328
343
|
message: unknown,
|
|
329
344
|
metadata?: ReadonlyMap<string, string>
|
|
330
|
-
): Promise<ZLinkSubmitResult> {
|
|
331
|
-
|
|
345
|
+
): ZLinkSubmitResult | Promise<ZLinkSubmitResult> {
|
|
346
|
+
if (!this.flowCreationEnabled())
|
|
347
|
+
return this.submitNode(meshName, targetNodeRid, packetName, message, metadata, true);
|
|
348
|
+
return runWithOutboundFlow(true, () =>
|
|
332
349
|
this.submitNode(meshName, targetNodeRid, packetName, message, metadata, true)
|
|
333
350
|
);
|
|
334
351
|
}
|
|
335
352
|
|
|
336
|
-
private
|
|
353
|
+
private submitNode(
|
|
337
354
|
meshName: string,
|
|
338
355
|
targetNodeRid: string,
|
|
339
356
|
packetName: string | undefined,
|
|
340
357
|
message: unknown,
|
|
341
358
|
metadata: ReadonlyMap<string, string> | undefined,
|
|
342
359
|
allowObjectClientTarget: boolean
|
|
343
|
-
): Promise<ZLinkSubmitResult> {
|
|
360
|
+
): ZLinkSubmitResult | Promise<ZLinkSubmitResult> {
|
|
344
361
|
const node = this.meshNode(meshName);
|
|
345
362
|
if (node === undefined) {
|
|
346
363
|
return this.requireManager().routeSubmit(
|
|
@@ -365,22 +382,33 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
365
382
|
undefined,
|
|
366
383
|
metadata
|
|
367
384
|
);
|
|
368
|
-
const
|
|
369
|
-
|
|
370
|
-
|
|
385
|
+
const sourceNodeRid =
|
|
386
|
+
node.routingId ?? (node.status().routingId as unknown as import('../../contracts').RoutingId);
|
|
387
|
+
if (routingIdsEqual(sourceNodeRid, targetNodeRid)) {
|
|
388
|
+
return this.submitLocalNode(meshName, String(sourceNodeRid), parts);
|
|
371
389
|
}
|
|
372
390
|
if (
|
|
373
|
-
|
|
374
|
-
this.
|
|
391
|
+
this.manualNodeTarget?.(meshName, targetNodeRid) === false &&
|
|
392
|
+
!this.isKnownBackendPeer(node, targetNodeRid)
|
|
375
393
|
) {
|
|
376
394
|
return { status: ZLinkSubmitStatus.TargetNotFound };
|
|
377
395
|
}
|
|
378
396
|
try {
|
|
379
|
-
|
|
380
|
-
|
|
397
|
+
const submitted = node.sendToNode(
|
|
398
|
+
toBackendRoutingId(targetNodeRid),
|
|
399
|
+
parts,
|
|
400
|
+
NON_BLOCKING_SEND_OPTIONS
|
|
381
401
|
);
|
|
402
|
+
return submitted instanceof Promise
|
|
403
|
+
? submitted.then(mapMeshSubmitResult, (error) => {
|
|
404
|
+
throw mapMeshSubmissionError(
|
|
405
|
+
error,
|
|
406
|
+
`MeshNode '${meshName}' send to node '${targetNodeRid}'`
|
|
407
|
+
);
|
|
408
|
+
})
|
|
409
|
+
: mapMeshSubmitResult(submitted);
|
|
382
410
|
} catch (error) {
|
|
383
|
-
throw mapMeshSubmissionError(error,
|
|
411
|
+
throw mapMeshSubmissionError(error, `MeshNode '${meshName}' send to node '${targetNodeRid}'`);
|
|
384
412
|
}
|
|
385
413
|
}
|
|
386
414
|
|
|
@@ -391,9 +419,21 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
391
419
|
request: unknown,
|
|
392
420
|
timeoutMs: number | undefined,
|
|
393
421
|
signal?: AbortSignal,
|
|
394
|
-
metadata?: ReadonlyMap<string, string
|
|
422
|
+
metadata?: ReadonlyMap<string, string>,
|
|
423
|
+
onAdmitted?: () => void
|
|
395
424
|
): Promise<TReply> {
|
|
396
|
-
|
|
425
|
+
if (!this.flowCreationEnabled())
|
|
426
|
+
return this.requestScoped<TReply>(
|
|
427
|
+
meshName,
|
|
428
|
+
targetNodeRid,
|
|
429
|
+
packetName,
|
|
430
|
+
request,
|
|
431
|
+
timeoutMs,
|
|
432
|
+
signal,
|
|
433
|
+
metadata,
|
|
434
|
+
onAdmitted
|
|
435
|
+
);
|
|
436
|
+
return runWithOutboundFlow(true, () =>
|
|
397
437
|
this.requestScoped<TReply>(
|
|
398
438
|
meshName,
|
|
399
439
|
targetNodeRid,
|
|
@@ -401,7 +441,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
401
441
|
request,
|
|
402
442
|
timeoutMs,
|
|
403
443
|
signal,
|
|
404
|
-
metadata
|
|
444
|
+
metadata,
|
|
445
|
+
onAdmitted
|
|
405
446
|
)
|
|
406
447
|
);
|
|
407
448
|
}
|
|
@@ -413,7 +454,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
413
454
|
request: unknown,
|
|
414
455
|
timeoutMs: number | undefined,
|
|
415
456
|
signal?: AbortSignal,
|
|
416
|
-
metadata?: ReadonlyMap<string, string
|
|
457
|
+
metadata?: ReadonlyMap<string, string>,
|
|
458
|
+
onAdmitted?: () => void
|
|
417
459
|
): Promise<TReply> {
|
|
418
460
|
const node = this.meshNode(meshName);
|
|
419
461
|
if (node === undefined) {
|
|
@@ -424,7 +466,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
424
466
|
request,
|
|
425
467
|
timeoutMs,
|
|
426
468
|
signal,
|
|
427
|
-
metadata
|
|
469
|
+
metadata,
|
|
470
|
+
onAdmitted
|
|
428
471
|
);
|
|
429
472
|
}
|
|
430
473
|
const correlationId = newChannelCorrelationId();
|
|
@@ -445,16 +488,15 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
445
488
|
metadata,
|
|
446
489
|
correlationId
|
|
447
490
|
);
|
|
448
|
-
const
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
});
|
|
491
|
+
const requestOptions = { flags: 1, onAdmitted, timeoutMs: requestTimeoutBudget(timeoutMs) };
|
|
492
|
+
let completion: ZLinkMeshCompletion;
|
|
493
|
+
try {
|
|
494
|
+
completion = await this.completionTable(meshName).submit(() => {
|
|
495
|
+
const operationId = node.requestToNode(
|
|
496
|
+
toBackendRoutingId(targetNodeRid),
|
|
497
|
+
parts,
|
|
498
|
+
requestOptions
|
|
499
|
+
);
|
|
458
500
|
this.traceNodeRequest(
|
|
459
501
|
ZLinkMessageFlowOutcome.Sent,
|
|
460
502
|
undefined,
|
|
@@ -464,8 +506,13 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
464
506
|
correlationId
|
|
465
507
|
);
|
|
466
508
|
return operationId;
|
|
467
|
-
}
|
|
468
|
-
)
|
|
509
|
+
}, signal);
|
|
510
|
+
} catch (error) {
|
|
511
|
+
throw mapMeshSubmissionError(
|
|
512
|
+
error,
|
|
513
|
+
`MeshNode '${meshName}' request to node '${targetNodeRid}'`
|
|
514
|
+
);
|
|
515
|
+
}
|
|
469
516
|
const reply = this.decodeMeshReply<TReply>(meshName, completion);
|
|
470
517
|
this.traceNodeRequest(
|
|
471
518
|
ZLinkMessageFlowOutcome.ReplyReceived,
|
|
@@ -546,7 +593,7 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
546
593
|
const operation = `MeshNode '${meshName}' send to channel '${channelName}'`;
|
|
547
594
|
try {
|
|
548
595
|
const result = mapMeshSubmitResult(
|
|
549
|
-
await node.sendToChannel(channelName, parts,
|
|
596
|
+
await node.sendToChannel(channelName, parts, NON_BLOCKING_SEND_OPTIONS)
|
|
550
597
|
);
|
|
551
598
|
if (result.status === ZLinkSubmitStatus.TargetNotFound) {
|
|
552
599
|
this.metrics?.recordChannelSelectionFailure(meshName, channelName, 'no_ready_target');
|
|
@@ -564,9 +611,21 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
564
611
|
request: unknown,
|
|
565
612
|
timeoutMs: number | undefined,
|
|
566
613
|
signal?: AbortSignal,
|
|
567
|
-
metadata?: ReadonlyMap<string, string
|
|
614
|
+
metadata?: ReadonlyMap<string, string>,
|
|
615
|
+
onAdmitted?: () => void
|
|
568
616
|
): Promise<TReply> {
|
|
569
|
-
|
|
617
|
+
if (!this.flowCreationEnabled())
|
|
618
|
+
return this.requestToChannelScoped<TReply>(
|
|
619
|
+
meshName,
|
|
620
|
+
channelName,
|
|
621
|
+
packetName,
|
|
622
|
+
request,
|
|
623
|
+
timeoutMs,
|
|
624
|
+
signal,
|
|
625
|
+
metadata,
|
|
626
|
+
onAdmitted
|
|
627
|
+
);
|
|
628
|
+
return runWithOutboundFlow(true, () =>
|
|
570
629
|
this.requestToChannelScoped<TReply>(
|
|
571
630
|
meshName,
|
|
572
631
|
channelName,
|
|
@@ -574,7 +633,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
574
633
|
request,
|
|
575
634
|
timeoutMs,
|
|
576
635
|
signal,
|
|
577
|
-
metadata
|
|
636
|
+
metadata,
|
|
637
|
+
onAdmitted
|
|
578
638
|
)
|
|
579
639
|
);
|
|
580
640
|
}
|
|
@@ -586,7 +646,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
586
646
|
request: unknown,
|
|
587
647
|
timeoutMs: number | undefined,
|
|
588
648
|
signal?: AbortSignal,
|
|
589
|
-
metadata?: ReadonlyMap<string, string
|
|
649
|
+
metadata?: ReadonlyMap<string, string>,
|
|
650
|
+
onAdmitted?: () => void
|
|
590
651
|
): Promise<TReply> {
|
|
591
652
|
throwIfAborted(signal);
|
|
592
653
|
const node = this.requireMeshNode(meshName);
|
|
@@ -600,54 +661,34 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
600
661
|
);
|
|
601
662
|
const metric = this.metrics?.startRequest(meshName, 'channel');
|
|
602
663
|
try {
|
|
603
|
-
const
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
)
|
|
664
|
+
const requestOptions = { flags: 1, timeoutMs: requestTimeoutBudget(timeoutMs), onAdmitted };
|
|
665
|
+
let completion: ZLinkMeshCompletion;
|
|
666
|
+
try {
|
|
667
|
+
completion = await this.completionTable(meshName).submit(
|
|
668
|
+
() => node.requestToChannel(channelName, parts, requestOptions),
|
|
669
|
+
signal
|
|
670
|
+
);
|
|
671
|
+
} catch (error) {
|
|
672
|
+
throw mapMeshSubmissionError(
|
|
673
|
+
error,
|
|
674
|
+
`MeshNode '${meshName}' request to channel '${channelName}'`
|
|
675
|
+
);
|
|
676
|
+
}
|
|
611
677
|
const reply = this.decodeMeshReply<TReply>(meshName, completion);
|
|
612
678
|
metric?.complete('completed');
|
|
613
679
|
return reply;
|
|
614
680
|
} catch (error) {
|
|
615
|
-
metric?.complete(requestMetricOutcome(error));
|
|
616
|
-
if (
|
|
681
|
+
metric?.complete(requestMetricOutcome(error, signal));
|
|
682
|
+
if (
|
|
683
|
+
error instanceof ZLinkFrameworkException &&
|
|
684
|
+
internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound
|
|
685
|
+
) {
|
|
617
686
|
this.metrics?.recordChannelSelectionFailure(meshName, channelName, 'no_ready_target');
|
|
618
687
|
}
|
|
619
688
|
throw error;
|
|
620
689
|
}
|
|
621
690
|
}
|
|
622
691
|
|
|
623
|
-
private async submitRequestOperation(
|
|
624
|
-
meshName: string,
|
|
625
|
-
timeoutMs: number | undefined,
|
|
626
|
-
signal: AbortSignal | undefined,
|
|
627
|
-
operation: string,
|
|
628
|
-
attempt: (
|
|
629
|
-
remainingTimeoutMs: number
|
|
630
|
-
) => ReturnType<Parameters<ZLinkMeshCompletionTable['submit']>[0]>
|
|
631
|
-
): Promise<ZLinkMeshCompletion> {
|
|
632
|
-
const effectiveTimeoutMs = Math.max(1, timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS);
|
|
633
|
-
const deadlineMs = performance.now() + effectiveTimeoutMs;
|
|
634
|
-
const remainingTimeoutMs = deadlineMs - performance.now();
|
|
635
|
-
if (remainingTimeoutMs <= 0) {
|
|
636
|
-
throw createInternalFrameworkException(
|
|
637
|
-
ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
|
|
638
|
-
`${operation} timed out before submission.`
|
|
639
|
-
);
|
|
640
|
-
}
|
|
641
|
-
try {
|
|
642
|
-
return await this.completionTable(meshName).submit(
|
|
643
|
-
() => attempt(Math.max(1, Math.ceil(remainingTimeoutMs))),
|
|
644
|
-
signal
|
|
645
|
-
);
|
|
646
|
-
} catch (error) {
|
|
647
|
-
throw mapMeshSubmissionError(error, operation);
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
|
|
651
692
|
sendToSpot(
|
|
652
693
|
spotRouteTarget: ZLinkSpotRouteTarget,
|
|
653
694
|
message: unknown,
|
|
@@ -767,7 +808,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
767
808
|
request,
|
|
768
809
|
options.timeoutMs,
|
|
769
810
|
options.signal,
|
|
770
|
-
options.metadata
|
|
811
|
+
options.metadata,
|
|
812
|
+
options.onAdmitted
|
|
771
813
|
);
|
|
772
814
|
}
|
|
773
815
|
throwIfAborted(options.signal);
|
|
@@ -790,7 +832,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
790
832
|
options.timeoutMs,
|
|
791
833
|
undefined,
|
|
792
834
|
options.metadata,
|
|
793
|
-
options.instanceSpot
|
|
835
|
+
options.instanceSpot,
|
|
836
|
+
options.onAdmitted
|
|
794
837
|
)
|
|
795
838
|
: node
|
|
796
839
|
.entrySpot()
|
|
@@ -801,6 +844,7 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
801
844
|
encoded,
|
|
802
845
|
{
|
|
803
846
|
flags: 1,
|
|
847
|
+
onAdmitted: options.onAdmitted,
|
|
804
848
|
timeoutMs: options.timeoutMs,
|
|
805
849
|
routeFence: directSpotRouteFence(spotRouteTarget),
|
|
806
850
|
entrySpot: spotRouteTarget.spotKind === ZLinkSpotKind.Entry
|
|
@@ -825,6 +869,7 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
825
869
|
readonly packetName?: string;
|
|
826
870
|
readonly timeoutMs?: number;
|
|
827
871
|
readonly signal?: AbortSignal;
|
|
872
|
+
readonly onAdmitted?: () => void;
|
|
828
873
|
}
|
|
829
874
|
): Promise<TReply> {
|
|
830
875
|
return this.requireManager().routeRequestFromSpotToSpot<TReply>(
|
|
@@ -833,7 +878,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
833
878
|
options.packetName,
|
|
834
879
|
request,
|
|
835
880
|
options.timeoutMs,
|
|
836
|
-
options.signal
|
|
881
|
+
options.signal,
|
|
882
|
+
options.onAdmitted
|
|
837
883
|
);
|
|
838
884
|
}
|
|
839
885
|
|
|
@@ -841,21 +887,30 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
841
887
|
sourceSpot: ZLinkBackendSpot,
|
|
842
888
|
spotRouteTarget: ZLinkSpotRouteTarget,
|
|
843
889
|
request: Message,
|
|
844
|
-
options: {
|
|
890
|
+
options: {
|
|
891
|
+
readonly timeoutMs?: number;
|
|
892
|
+
readonly signal?: AbortSignal;
|
|
893
|
+
readonly onAdmitted?: () => void;
|
|
894
|
+
}
|
|
845
895
|
): Promise<readonly Message[]> {
|
|
846
896
|
return this.requireManager().routeRequestRawFromSpotToSpot(
|
|
847
897
|
sourceSpot,
|
|
848
898
|
spotRouteTarget,
|
|
849
899
|
request,
|
|
850
900
|
options.timeoutMs,
|
|
851
|
-
options.signal
|
|
901
|
+
options.signal,
|
|
902
|
+
options.onAdmitted
|
|
852
903
|
);
|
|
853
904
|
}
|
|
854
905
|
|
|
855
906
|
requestRawToSpot(
|
|
856
907
|
spotRouteTarget: ZLinkSpotRouteTarget,
|
|
857
908
|
request: Message,
|
|
858
|
-
options: {
|
|
909
|
+
options: {
|
|
910
|
+
readonly timeoutMs?: number;
|
|
911
|
+
readonly signal?: AbortSignal;
|
|
912
|
+
readonly onAdmitted?: () => void;
|
|
913
|
+
}
|
|
859
914
|
): Promise<readonly Message[]> {
|
|
860
915
|
return runWithOutboundFlow(this.flowCreationEnabled(), () =>
|
|
861
916
|
this.requestRawToSpotScoped(spotRouteTarget, request, options)
|
|
@@ -865,7 +920,11 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
865
920
|
private async requestRawToSpotScoped(
|
|
866
921
|
spotRouteTarget: ZLinkSpotRouteTarget,
|
|
867
922
|
request: Message,
|
|
868
|
-
options: {
|
|
923
|
+
options: {
|
|
924
|
+
readonly timeoutMs?: number;
|
|
925
|
+
readonly signal?: AbortSignal;
|
|
926
|
+
readonly onAdmitted?: () => void;
|
|
927
|
+
}
|
|
869
928
|
): Promise<readonly Message[]> {
|
|
870
929
|
const meshName = spotRouteTarget.routerChannelId;
|
|
871
930
|
const node = this.meshNode(meshName);
|
|
@@ -893,6 +952,7 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
893
952
|
parts,
|
|
894
953
|
{
|
|
895
954
|
flags: 1,
|
|
955
|
+
onAdmitted: options.onAdmitted,
|
|
896
956
|
timeoutMs: options.timeoutMs,
|
|
897
957
|
routeFence: directSpotRouteFence(spotRouteTarget),
|
|
898
958
|
entrySpot: spotRouteTarget.spotKind === ZLinkSpotKind.Entry
|
|
@@ -925,7 +985,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
925
985
|
spotRouteTarget,
|
|
926
986
|
request,
|
|
927
987
|
options.timeoutMs,
|
|
928
|
-
options.signal
|
|
988
|
+
options.signal,
|
|
989
|
+
options.onAdmitted
|
|
929
990
|
);
|
|
930
991
|
}
|
|
931
992
|
|
|
@@ -938,21 +999,7 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
|
|
|
938
999
|
}
|
|
939
1000
|
|
|
940
1001
|
private meshNode(meshName: string): ZLinkBackendMeshNode | undefined {
|
|
941
|
-
|
|
942
|
-
return (
|
|
943
|
-
runtime as unknown as
|
|
944
|
-
| {
|
|
945
|
-
meshNode?: (meshName: string) => ZLinkBackendMeshNode | undefined;
|
|
946
|
-
}
|
|
947
|
-
| undefined
|
|
948
|
-
)?.meshNode?.(meshName);
|
|
949
|
-
}
|
|
950
|
-
|
|
951
|
-
private isSelfNode(node: ZLinkBackendMeshNode, targetNodeRid: string): boolean {
|
|
952
|
-
return routingIdsEqual(
|
|
953
|
-
node.status().routingId as unknown as import('../../contracts').RoutingId,
|
|
954
|
-
targetNodeRid
|
|
955
|
-
);
|
|
1002
|
+
return this.meshRuntime?.()?.meshNode?.(meshName);
|
|
956
1003
|
}
|
|
957
1004
|
|
|
958
1005
|
private isKnownBackendPeer(node: ZLinkBackendMeshNode, targetNodeRid: string): boolean {
|
|
@@ -1101,6 +1148,14 @@ function instanceSpotRouteFence(target: ZLinkSpotRouteTarget): ServiceInstanceRo
|
|
|
1101
1148
|
};
|
|
1102
1149
|
}
|
|
1103
1150
|
|
|
1151
|
+
/**
|
|
1152
|
+
* The binding request timeout for one submission. The binding owns the
|
|
1153
|
+
* deadline after submit; the completion table slot only waits for it.
|
|
1154
|
+
*/
|
|
1155
|
+
function requestTimeoutBudget(timeoutMs: number | undefined): number {
|
|
1156
|
+
return Math.max(1, Math.ceil(timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS));
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1104
1159
|
function mapMeshSubmitResult(result: number): ZLinkSubmitResult {
|
|
1105
1160
|
return classifySubmitResult(result, 'Mesh submission');
|
|
1106
1161
|
}
|
|
@@ -1192,14 +1247,18 @@ export function meshRequestFailure(
|
|
|
1192
1247
|
return error;
|
|
1193
1248
|
}
|
|
1194
1249
|
|
|
1195
|
-
function requestMetricOutcome(error: unknown): string {
|
|
1250
|
+
function requestMetricOutcome(error: unknown, signal?: AbortSignal): string {
|
|
1196
1251
|
if (error instanceof ZLinkFrameworkException) {
|
|
1197
|
-
if (internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound)
|
|
1198
|
-
return 'target_not_found';
|
|
1199
1252
|
if (internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.DeadlineExceeded)
|
|
1200
1253
|
return 'timed_out';
|
|
1201
1254
|
if (internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.RuntimeShutdown)
|
|
1202
1255
|
return 'shutdown';
|
|
1203
1256
|
}
|
|
1257
|
+
if (
|
|
1258
|
+
signal?.aborted === true &&
|
|
1259
|
+
(error === signal.reason ||
|
|
1260
|
+
(error instanceof Error && (error.cause === signal.reason || error.name === 'AbortError')))
|
|
1261
|
+
)
|
|
1262
|
+
return 'cancelled';
|
|
1204
1263
|
return 'failed';
|
|
1205
1264
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { routingIdsEqual } from '../routing-id';
|
|
1
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
2
3
|
import { ZLINK_DEFAULT_PUBLIC_WEIGHT } from '../../contracts/Configuration/RegistrationBuilderPolicy';
|
|
3
4
|
import {
|
|
@@ -121,9 +122,9 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
121
122
|
ownerId: owner.ownerId,
|
|
122
123
|
leaseGeneration: owner.leaseGeneration
|
|
123
124
|
};
|
|
124
|
-
const result = await this.
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
const result = await this.locationRuntime.writeDescriptor(
|
|
126
|
+
(writeSignal) =>
|
|
127
|
+
this.store.updateClientServer(candidate, ZLinkLocationWriteIntent.Takeover, writeSignal),
|
|
127
128
|
signal
|
|
128
129
|
);
|
|
129
130
|
if (result.status !== ZLinkLocationWriteStatus.Stored) {
|
|
@@ -152,9 +153,9 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
152
153
|
descriptorRevision: current.descriptorRevision + 1n,
|
|
153
154
|
weight: runtimeWeight
|
|
154
155
|
};
|
|
155
|
-
const result = await this.
|
|
156
|
-
|
|
157
|
-
|
|
156
|
+
const result = await this.locationRuntime.writeDescriptor(
|
|
157
|
+
(writeSignal) =>
|
|
158
|
+
this.store.updateClientServer(candidate, ZLinkLocationWriteIntent.Renew, writeSignal),
|
|
158
159
|
signal
|
|
159
160
|
);
|
|
160
161
|
if (result.status !== ZLinkLocationWriteStatus.Stored) {
|
|
@@ -181,9 +182,9 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
181
182
|
leaseGeneration: owner.leaseGeneration,
|
|
182
183
|
updatedAt: new Date(0)
|
|
183
184
|
};
|
|
184
|
-
const result = await this.
|
|
185
|
-
|
|
186
|
-
|
|
185
|
+
const result = await this.locationRuntime.writeDescriptor(
|
|
186
|
+
(writeSignal) =>
|
|
187
|
+
this.store.updateClientServer(descriptor, ZLinkLocationWriteIntent.NewClaim, writeSignal),
|
|
187
188
|
signal
|
|
188
189
|
);
|
|
189
190
|
if (result.status !== ZLinkLocationWriteStatus.Stored) {
|
|
@@ -587,7 +588,7 @@ function requireMatchingAdmission(
|
|
|
587
588
|
): void {
|
|
588
589
|
if (
|
|
589
590
|
actual.channelName !== expected.channelName ||
|
|
590
|
-
actual.serverRid
|
|
591
|
+
!routingIdsEqual(actual.serverRid, expected.serverRid) ||
|
|
591
592
|
actual.lifecycleGeneration !== expected.lifecycleGeneration ||
|
|
592
593
|
actual.descriptorRevision !== expected.descriptorRevision ||
|
|
593
594
|
actual.weight !== expected.weight ||
|
|
@@ -21,6 +21,7 @@ export type { ZLinkDispatchErrorSink } from '../diagnostics/dispatch-error-port'
|
|
|
21
21
|
|
|
22
22
|
type ZLinkRuntimeDispatchFailure = ZLinkDispatchFailure & {
|
|
23
23
|
readonly error?: unknown;
|
|
24
|
+
readonly severity?: 'warning';
|
|
24
25
|
};
|
|
25
26
|
|
|
26
27
|
export class ZLinkDispatchErrorReporter {
|
|
@@ -37,7 +38,7 @@ export class ZLinkDispatchErrorReporter {
|
|
|
37
38
|
_providerResolver: unknown,
|
|
38
39
|
errorSink: ZLinkDispatchErrorSink,
|
|
39
40
|
ctx?: ZLinkDiagnosticsContext,
|
|
40
|
-
|
|
41
|
+
readonly metrics?: ZLinkRuntimeMetrics
|
|
41
42
|
) {
|
|
42
43
|
const flowCtx: ZLinkDiagnosticsContext = ctx ?? {
|
|
43
44
|
diagnostics: DEFAULT_ZLINK_DIAGNOSTICS,
|
|
@@ -86,7 +87,8 @@ export class ZLinkDispatchErrorReporter {
|
|
|
86
87
|
errorType: errorInfo.errorType,
|
|
87
88
|
errorMessage: errorInfo.errorMessage,
|
|
88
89
|
errorCauseType: errorInfo.errorCauseType,
|
|
89
|
-
errorCauseMessage: errorInfo.errorCauseMessage
|
|
90
|
+
errorCauseMessage: errorInfo.errorCauseMessage,
|
|
91
|
+
severity: normalized.severity
|
|
90
92
|
});
|
|
91
93
|
}
|
|
92
94
|
|