@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
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import type { RequestRuntime } from '../foundation/request-runtime';
|
|
2
|
+
import type { OperationObserver, PendingOperation } from '../foundation/operation-registry';
|
|
3
|
+
import { identityRequestReply } from '../messaging/request-result';
|
|
1
4
|
import type { Message } from '../../contracts/Common/Message';
|
|
2
5
|
import type { RoutingId } from '../../contracts';
|
|
3
6
|
import type { ZLinkFrameworkRegistration } from '../configuration';
|
|
@@ -42,6 +45,7 @@ export interface ZLinkLocalSpotRouteDispatcher {
|
|
|
42
45
|
context: {
|
|
43
46
|
readonly channelName: string;
|
|
44
47
|
readonly signal?: AbortSignal;
|
|
48
|
+
readonly requestOperation?: PendingOperation<unknown>;
|
|
45
49
|
readonly onAdmitted?: () => void;
|
|
46
50
|
readonly metadata?: ReadonlyMap<string, string>;
|
|
47
51
|
}
|
|
@@ -49,6 +53,7 @@ export interface ZLinkLocalSpotRouteDispatcher {
|
|
|
49
53
|
}
|
|
50
54
|
|
|
51
55
|
export interface ZLinkSpotRouteDispatchStrategyOptions {
|
|
56
|
+
readonly requests: RequestRuntime;
|
|
52
57
|
readonly registration: ZLinkFrameworkRegistration;
|
|
53
58
|
readonly sockets: ZLinkChannelSocketRegistry;
|
|
54
59
|
readonly codecs: ZLinkChannelEnvelopeCodecRegistry;
|
|
@@ -66,17 +71,29 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
66
71
|
private readonly bridgeTransport: ZLinkSpotRouteBridgeTransport;
|
|
67
72
|
|
|
68
73
|
constructor(private readonly options: ZLinkSpotRouteDispatchStrategyOptions) {
|
|
69
|
-
this.sourceSpotRouter = new ZLinkSourceSpotRouter(
|
|
74
|
+
this.sourceSpotRouter = new ZLinkSourceSpotRouter(
|
|
75
|
+
options.registration.requestTimeoutMs,
|
|
76
|
+
options.requests
|
|
77
|
+
);
|
|
70
78
|
this.targets = new ZLinkSpotRouteTargetResolver(options.registration);
|
|
71
|
-
this.spotNodeTransport = new ZLinkSpotNodeRouteTransport(
|
|
72
|
-
|
|
79
|
+
this.spotNodeTransport = new ZLinkSpotNodeRouteTransport(
|
|
80
|
+
options.registration,
|
|
81
|
+
this.targets,
|
|
82
|
+
options.requests
|
|
83
|
+
);
|
|
84
|
+
this.routerSocketTransport = new ZLinkRouterSocketSpotRouteTransport(
|
|
85
|
+
options.sockets,
|
|
86
|
+
options.requests
|
|
87
|
+
);
|
|
73
88
|
this.localTransport = new ZLinkLocalSpotRouteTransport(
|
|
74
89
|
options.localSpotRouteDispatcher,
|
|
75
|
-
options.registration.requestTimeoutMs
|
|
90
|
+
options.registration.requestTimeoutMs,
|
|
91
|
+
options.requests
|
|
76
92
|
);
|
|
77
93
|
this.bridgeTransport = new ZLinkSpotRouteBridgeTransport(
|
|
78
94
|
options.spotRouteBridges,
|
|
79
|
-
options.registration.requestTimeoutMs
|
|
95
|
+
options.registration.requestTimeoutMs,
|
|
96
|
+
options.requests
|
|
80
97
|
);
|
|
81
98
|
}
|
|
82
99
|
|
|
@@ -165,29 +182,60 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
165
182
|
timeoutMs: number | undefined,
|
|
166
183
|
signal?: AbortSignal,
|
|
167
184
|
metadata?: ReadonlyMap<string, string>,
|
|
168
|
-
onAdmitted?: () => void
|
|
185
|
+
onAdmitted?: () => void,
|
|
186
|
+
requestOperation?: PendingOperation<unknown>,
|
|
187
|
+
destination?: OperationObserver<unknown, unknown>
|
|
169
188
|
): Promise<TReply> {
|
|
170
|
-
return runWithOutboundFlow(this.options.flowCreationEnabled?.() ?? true, () =>
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
189
|
+
return runWithOutboundFlow(this.options.flowCreationEnabled?.() ?? true, () => {
|
|
190
|
+
if (requestOperation !== undefined) {
|
|
191
|
+
return this.options.requests.run<TReply>(
|
|
192
|
+
requestOperation,
|
|
193
|
+
(receiver) => {
|
|
194
|
+
this.routeRequestToSpotScoped<TReply>(
|
|
195
|
+
spotRouteTarget,
|
|
196
|
+
packetName,
|
|
197
|
+
request,
|
|
198
|
+
timeoutMs,
|
|
199
|
+
signal,
|
|
200
|
+
metadata,
|
|
201
|
+
onAdmitted,
|
|
202
|
+
requestOperation,
|
|
203
|
+
receiver
|
|
204
|
+
);
|
|
205
|
+
},
|
|
206
|
+
(value) => value as TReply,
|
|
207
|
+
identityRequestReply,
|
|
208
|
+
destination
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
try {
|
|
212
|
+
return this.routeRequestToSpotScoped<TReply>(
|
|
213
|
+
spotRouteTarget,
|
|
214
|
+
packetName,
|
|
215
|
+
request,
|
|
216
|
+
timeoutMs,
|
|
217
|
+
signal,
|
|
218
|
+
metadata,
|
|
219
|
+
onAdmitted,
|
|
220
|
+
requestOperation,
|
|
221
|
+
destination
|
|
222
|
+
);
|
|
223
|
+
} catch (error) {
|
|
224
|
+
return Promise.reject(error);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
181
227
|
}
|
|
182
228
|
|
|
183
|
-
private
|
|
229
|
+
private routeRequestToSpotScoped<TReply>(
|
|
184
230
|
spotRouteTarget: ZLinkSpotRouteTarget,
|
|
185
231
|
packetName: string | undefined,
|
|
186
232
|
request: unknown,
|
|
187
233
|
timeoutMs: number | undefined,
|
|
188
234
|
signal?: AbortSignal,
|
|
189
235
|
metadata?: ReadonlyMap<string, string>,
|
|
190
|
-
onAdmitted?: () => void
|
|
236
|
+
onAdmitted?: () => void,
|
|
237
|
+
requestOperation?: PendingOperation<unknown>,
|
|
238
|
+
receiver?: OperationObserver<unknown, unknown>
|
|
191
239
|
): Promise<TReply> {
|
|
192
240
|
throwIfAborted(signal);
|
|
193
241
|
const localSpotRouteNode = this.targets.localRouteNode(spotRouteTarget);
|
|
@@ -199,7 +247,9 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
199
247
|
request,
|
|
200
248
|
timeoutMs,
|
|
201
249
|
signal,
|
|
202
|
-
onAdmitted
|
|
250
|
+
onAdmitted,
|
|
251
|
+
requestOperation,
|
|
252
|
+
receiver
|
|
203
253
|
);
|
|
204
254
|
}
|
|
205
255
|
const codecs = codecsForFrameworkPacket(packetName, this.options.codecs);
|
|
@@ -222,7 +272,9 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
222
272
|
codecs,
|
|
223
273
|
timeoutMs,
|
|
224
274
|
signal,
|
|
225
|
-
onAdmitted
|
|
275
|
+
onAdmitted,
|
|
276
|
+
requestOperation,
|
|
277
|
+
receiver
|
|
226
278
|
);
|
|
227
279
|
if (namedSpotNodeRequest !== undefined) return namedSpotNodeRequest;
|
|
228
280
|
}
|
|
@@ -233,7 +285,9 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
233
285
|
codecs,
|
|
234
286
|
timeoutMs,
|
|
235
287
|
signal,
|
|
236
|
-
onAdmitted
|
|
288
|
+
onAdmitted,
|
|
289
|
+
requestOperation,
|
|
290
|
+
receiver
|
|
237
291
|
);
|
|
238
292
|
}
|
|
239
293
|
if (this.targets.hasBoundRouteRouter(spotRouteTarget.routerChannelId)) {
|
|
@@ -244,7 +298,9 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
244
298
|
ZLINK_SEND_DONT_WAIT,
|
|
245
299
|
timeoutMs,
|
|
246
300
|
signal,
|
|
247
|
-
onAdmitted
|
|
301
|
+
onAdmitted,
|
|
302
|
+
requestOperation,
|
|
303
|
+
receiver
|
|
248
304
|
);
|
|
249
305
|
}
|
|
250
306
|
const spotNodeRequest = this.spotNodeTransport.request<TReply>(
|
|
@@ -253,7 +309,9 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
253
309
|
codecs,
|
|
254
310
|
timeoutMs,
|
|
255
311
|
signal,
|
|
256
|
-
onAdmitted
|
|
312
|
+
onAdmitted,
|
|
313
|
+
requestOperation,
|
|
314
|
+
receiver
|
|
257
315
|
);
|
|
258
316
|
if (spotNodeRequest !== undefined) {
|
|
259
317
|
return spotNodeRequest;
|
|
@@ -265,7 +323,9 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
265
323
|
0,
|
|
266
324
|
timeoutMs,
|
|
267
325
|
signal,
|
|
268
|
-
onAdmitted
|
|
326
|
+
onAdmitted,
|
|
327
|
+
requestOperation,
|
|
328
|
+
receiver
|
|
269
329
|
);
|
|
270
330
|
}
|
|
271
331
|
|
|
@@ -276,7 +336,9 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
276
336
|
request: unknown,
|
|
277
337
|
timeoutMs: number | undefined,
|
|
278
338
|
signal?: AbortSignal,
|
|
279
|
-
onAdmitted?: () => void
|
|
339
|
+
onAdmitted?: () => void,
|
|
340
|
+
requestOperation?: PendingOperation<unknown>,
|
|
341
|
+
destination?: OperationObserver<unknown, unknown>
|
|
280
342
|
): Promise<TReply> {
|
|
281
343
|
return this.sourceSpotRouter.request<TReply>(
|
|
282
344
|
sourceSpot,
|
|
@@ -285,7 +347,9 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
285
347
|
request,
|
|
286
348
|
timeoutMs,
|
|
287
349
|
signal,
|
|
288
|
-
onAdmitted
|
|
350
|
+
onAdmitted,
|
|
351
|
+
requestOperation,
|
|
352
|
+
destination
|
|
289
353
|
);
|
|
290
354
|
}
|
|
291
355
|
|
|
@@ -305,7 +369,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
305
369
|
request: Message,
|
|
306
370
|
timeoutMs: number | undefined,
|
|
307
371
|
signal?: AbortSignal,
|
|
308
|
-
onAdmitted?: () => void
|
|
372
|
+
onAdmitted?: () => void,
|
|
373
|
+
requestOperation?: PendingOperation<unknown>
|
|
309
374
|
): Promise<readonly Message[]> {
|
|
310
375
|
return this.sourceSpotRouter.requestRaw(
|
|
311
376
|
sourceSpot,
|
|
@@ -313,7 +378,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
313
378
|
request,
|
|
314
379
|
timeoutMs,
|
|
315
380
|
signal,
|
|
316
|
-
onAdmitted
|
|
381
|
+
onAdmitted,
|
|
382
|
+
requestOperation
|
|
317
383
|
);
|
|
318
384
|
}
|
|
319
385
|
|
|
@@ -322,7 +388,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
322
388
|
request: Message,
|
|
323
389
|
timeoutMs: number | undefined,
|
|
324
390
|
signal?: AbortSignal,
|
|
325
|
-
onAdmitted?: () => void
|
|
391
|
+
onAdmitted?: () => void,
|
|
392
|
+
requestOperation?: PendingOperation<unknown>
|
|
326
393
|
): Promise<readonly Message[]> {
|
|
327
394
|
throwIfAborted(signal);
|
|
328
395
|
if (this.targets.hasNamedSpotNode(spotRouteTarget.routerChannelId)) {
|
|
@@ -331,7 +398,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
331
398
|
request,
|
|
332
399
|
timeoutMs,
|
|
333
400
|
signal,
|
|
334
|
-
onAdmitted
|
|
401
|
+
onAdmitted,
|
|
402
|
+
requestOperation
|
|
335
403
|
);
|
|
336
404
|
if (namedSpotNodeRequest !== undefined) return namedSpotNodeRequest;
|
|
337
405
|
}
|
|
@@ -341,7 +409,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
341
409
|
request,
|
|
342
410
|
timeoutMs,
|
|
343
411
|
signal,
|
|
344
|
-
onAdmitted
|
|
412
|
+
onAdmitted,
|
|
413
|
+
requestOperation
|
|
345
414
|
);
|
|
346
415
|
}
|
|
347
416
|
const spotNodeRequest = this.spotNodeTransport.requestRaw(
|
|
@@ -349,7 +418,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
349
418
|
request,
|
|
350
419
|
timeoutMs,
|
|
351
420
|
signal,
|
|
352
|
-
onAdmitted
|
|
421
|
+
onAdmitted,
|
|
422
|
+
requestOperation
|
|
353
423
|
);
|
|
354
424
|
if (spotNodeRequest !== undefined) {
|
|
355
425
|
return spotNodeRequest;
|
|
@@ -360,7 +430,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
360
430
|
request,
|
|
361
431
|
timeoutMs,
|
|
362
432
|
signal,
|
|
363
|
-
onAdmitted
|
|
433
|
+
onAdmitted,
|
|
434
|
+
requestOperation
|
|
364
435
|
);
|
|
365
436
|
}
|
|
366
437
|
}
|
|
@@ -14,6 +14,16 @@ export function dispatchReasonFromError(error: unknown): ZLinkDispatchErrorReaso
|
|
|
14
14
|
if (origin === ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed)
|
|
15
15
|
return ZLinkDispatchErrorReason.PayloadDecodeFailed;
|
|
16
16
|
if (
|
|
17
|
+
origin === ZLinkFrameworkInternalErrorKind.HandlerNotFound ||
|
|
18
|
+
origin === ZLinkFrameworkInternalErrorKind.RouteHandlerNotFound ||
|
|
19
|
+
origin === ZLinkFrameworkInternalErrorKind.ActorDispatchHandlerNotFound
|
|
20
|
+
)
|
|
21
|
+
return ZLinkDispatchErrorReason.HandlerMissing;
|
|
22
|
+
if (
|
|
23
|
+
origin === ZLinkFrameworkInternalErrorKind.ActorRouteNotFound ||
|
|
24
|
+
origin === ZLinkFrameworkInternalErrorKind.SpotRouteNotFound ||
|
|
25
|
+
origin === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound ||
|
|
26
|
+
origin === ZLinkFrameworkInternalErrorKind.MeshNotFound ||
|
|
17
27
|
origin === ZLinkFrameworkInternalErrorKind.SpotGenerationStale ||
|
|
18
28
|
origin === ZLinkFrameworkInternalErrorKind.ActorGenerationStale ||
|
|
19
29
|
origin === ZLinkFrameworkInternalErrorKind.SpotMoving ||
|
|
@@ -22,8 +32,6 @@ export function dispatchReasonFromError(error: unknown): ZLinkDispatchErrorReaso
|
|
|
22
32
|
)
|
|
23
33
|
return ZLinkDispatchErrorReason.StaleTarget;
|
|
24
34
|
switch (error.kind) {
|
|
25
|
-
case ZLinkFrameworkErrorKind.NotFound:
|
|
26
|
-
return ZLinkDispatchErrorReason.HandlerMissing;
|
|
27
35
|
case ZLinkFrameworkErrorKind.ProtocolError:
|
|
28
36
|
return ZLinkDispatchErrorReason.InvalidFrame;
|
|
29
37
|
case ZLinkFrameworkErrorKind.ShuttingDown:
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { logs } from '@opentelemetry/api-logs';
|
|
2
|
+
|
|
3
|
+
// Loaded before the application's standard preloads in this worker only. The
|
|
4
|
+
// public API returns this proxy until a logger provider is registered, then the
|
|
5
|
+
// registered provider itself. No provider is changed or called to probe it.
|
|
6
|
+
export const initialLoggerProvider = logs.getLoggerProvider();
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { Worker } from 'node:worker_threads';
|
|
2
|
+
|
|
3
|
+
// The process owner counts records until the worker takes them, including batches
|
|
4
|
+
// already posted to its port. Only the worker decrements in-transit records.
|
|
5
|
+
export const MESSAGE_FLOW_PENDING_LIMIT = 8192;
|
|
6
|
+
export const TELEMETRY_WORKER_AVAILABLE = 'zlink.telemetry.available';
|
|
7
|
+
export enum TelemetryState {
|
|
8
|
+
Pending,
|
|
9
|
+
Enabled,
|
|
10
|
+
Length
|
|
11
|
+
}
|
|
12
|
+
export enum TelemetryCounter {
|
|
13
|
+
Overflow,
|
|
14
|
+
LoggerFailures,
|
|
15
|
+
TraceFailures,
|
|
16
|
+
FallbackFailures,
|
|
17
|
+
WorkerFailures,
|
|
18
|
+
Length
|
|
19
|
+
}
|
|
20
|
+
export const TELEMETRY_STATE_BYTES =
|
|
21
|
+
Math.ceil(
|
|
22
|
+
(TelemetryState.Length * Int32Array.BYTES_PER_ELEMENT) / BigUint64Array.BYTES_PER_ELEMENT
|
|
23
|
+
) * BigUint64Array.BYTES_PER_ELEMENT;
|
|
24
|
+
|
|
25
|
+
export interface ZLinkTelemetryLease {
|
|
26
|
+
readonly retired: Int32Array;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface ZLinkTelemetryDelivery<T = unknown> {
|
|
30
|
+
readonly lease: SharedArrayBuffer;
|
|
31
|
+
readonly record: T;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function openTelemetryLease(): ZLinkTelemetryLease {
|
|
35
|
+
return { retired: new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)) };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function renewTelemetryLease(lease: ZLinkTelemetryLease | undefined): ZLinkTelemetryLease {
|
|
39
|
+
return lease === undefined || Atomics.load(lease.retired, 0) !== 0 ? openTelemetryLease() : lease;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
let processOwner: ZLinkMessageFlowDelivery | undefined;
|
|
43
|
+
|
|
44
|
+
export function messageFlowDelivery(): ZLinkMessageFlowDelivery {
|
|
45
|
+
return (processOwner ??= new ZLinkMessageFlowDelivery());
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function telemetryProviderFailureCount(): number {
|
|
49
|
+
return processOwner === undefined
|
|
50
|
+
? 0
|
|
51
|
+
: Number(
|
|
52
|
+
Atomics.load(processOwner.counters, TelemetryCounter.LoggerFailures) +
|
|
53
|
+
Atomics.load(processOwner.counters, TelemetryCounter.TraceFailures)
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function retireTelemetryLease(lease: ZLinkTelemetryLease): void {
|
|
58
|
+
Atomics.store(lease.retired, 0, 1);
|
|
59
|
+
processOwner?.retire(lease);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export class ZLinkMessageFlowDelivery {
|
|
63
|
+
private readonly sharedState = new SharedArrayBuffer(
|
|
64
|
+
TELEMETRY_STATE_BYTES + TelemetryCounter.Length * BigUint64Array.BYTES_PER_ELEMENT
|
|
65
|
+
);
|
|
66
|
+
readonly state = new Int32Array(this.sharedState, 0, TelemetryState.Length);
|
|
67
|
+
readonly counters = new BigUint64Array(
|
|
68
|
+
this.sharedState,
|
|
69
|
+
TELEMETRY_STATE_BYTES,
|
|
70
|
+
TelemetryCounter.Length
|
|
71
|
+
);
|
|
72
|
+
readonly ready: Promise<void>;
|
|
73
|
+
private readonly worker?: Worker;
|
|
74
|
+
private failure?: Error;
|
|
75
|
+
private pending: ZLinkTelemetryDelivery[] = [];
|
|
76
|
+
private executing = false;
|
|
77
|
+
private workerReady = false;
|
|
78
|
+
private scheduled?: NodeJS.Immediate;
|
|
79
|
+
|
|
80
|
+
constructor() {
|
|
81
|
+
let published!: () => void;
|
|
82
|
+
// A failed bootstrap leaves this incomplete. Runtime processing never waits
|
|
83
|
+
// for it, and no rejected promise can escape into the host process.
|
|
84
|
+
this.ready = new Promise((resolve) => {
|
|
85
|
+
published = resolve;
|
|
86
|
+
});
|
|
87
|
+
// NODE_OPTIONS preloads precede execArgv preloads. Keep both application
|
|
88
|
+
// lists intact and capture the public default provider before either list.
|
|
89
|
+
try {
|
|
90
|
+
const bootstrap = require.resolve('./message-flow-bootstrap').replace(/\\/g, '/');
|
|
91
|
+
this.worker = new Worker(require.resolve('./message-flow-worker'), {
|
|
92
|
+
workerData: this.state.buffer,
|
|
93
|
+
env: {
|
|
94
|
+
...process.env,
|
|
95
|
+
NODE_OPTIONS: `--require "${bootstrap}" ${process.env.NODE_OPTIONS ?? ''}`
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
this.worker.once('error', (error) => this.workerFailed(error));
|
|
99
|
+
this.worker.once('exit', (code) => {
|
|
100
|
+
if (this.failure === undefined)
|
|
101
|
+
this.workerFailed(new Error(`Telemetry worker exited with code ${code}.`));
|
|
102
|
+
});
|
|
103
|
+
this.worker.on('message', (message: unknown) => {
|
|
104
|
+
if (message !== TELEMETRY_WORKER_AVAILABLE || this.failure !== undefined) return;
|
|
105
|
+
this.workerReady = true;
|
|
106
|
+
this.executing = false;
|
|
107
|
+
this.flush();
|
|
108
|
+
published();
|
|
109
|
+
});
|
|
110
|
+
this.worker.unref();
|
|
111
|
+
} catch (error) {
|
|
112
|
+
this.workerFailed(error instanceof Error ? error : new Error(String(error)));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
private workerFailed(error: Error): void {
|
|
117
|
+
if (this.failure !== undefined) return;
|
|
118
|
+
this.failure = error;
|
|
119
|
+
Atomics.add(this.counters, TelemetryCounter.WorkerFailures, 1n);
|
|
120
|
+
Atomics.store(this.state, TelemetryState.Enabled, 0);
|
|
121
|
+
this.workerReady = false;
|
|
122
|
+
this.executing = false;
|
|
123
|
+
this.pending = [];
|
|
124
|
+
Atomics.store(this.state, TelemetryState.Pending, 0);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
enabled(): boolean {
|
|
128
|
+
return Atomics.load(this.state, TelemetryState.Enabled) !== 0;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
accepts(lease: ZLinkTelemetryLease): boolean {
|
|
132
|
+
return this.enabled() && Atomics.load(lease.retired, 0) === 0;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
submit(lease: ZLinkTelemetryLease, record: unknown): void {
|
|
136
|
+
if (!this.accepts(lease)) return;
|
|
137
|
+
if (Atomics.load(this.state, TelemetryState.Pending) === MESSAGE_FLOW_PENDING_LIMIT) {
|
|
138
|
+
Atomics.add(this.counters, TelemetryCounter.Overflow, 1n);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
Atomics.add(this.state, TelemetryState.Pending, 1);
|
|
142
|
+
this.pending.push({ lease: lease.retired.buffer as SharedArrayBuffer, record });
|
|
143
|
+
if (this.workerReady && !this.executing && this.scheduled === undefined) {
|
|
144
|
+
this.scheduled = setImmediate(() => {
|
|
145
|
+
this.scheduled = undefined;
|
|
146
|
+
this.flush();
|
|
147
|
+
});
|
|
148
|
+
this.scheduled.unref();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
retire(lease: ZLinkTelemetryLease): void {
|
|
153
|
+
const retained = this.pending.filter((item) => item.lease !== lease.retired.buffer);
|
|
154
|
+
Atomics.sub(this.state, TelemetryState.Pending, this.pending.length - retained.length);
|
|
155
|
+
this.pending = retained;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
private flush(): void {
|
|
159
|
+
if (
|
|
160
|
+
this.worker === undefined ||
|
|
161
|
+
!this.workerReady ||
|
|
162
|
+
this.executing ||
|
|
163
|
+
this.pending.length === 0
|
|
164
|
+
)
|
|
165
|
+
return;
|
|
166
|
+
const batch = this.pending;
|
|
167
|
+
this.pending = [];
|
|
168
|
+
this.executing = true;
|
|
169
|
+
this.worker.postMessage(batch);
|
|
170
|
+
}
|
|
171
|
+
}
|