@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,23 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { logs as openTelemetryLogs, SeverityNumber } from '@opentelemetry/api-logs';
|
|
1
|
+
import type { ZLinkFlowOrigin } from '../../contracts/Dispatch/ZLinkFlowOrigin';
|
|
3
2
|
import {
|
|
4
3
|
MESSAGE_FLOW_MODE_RANK,
|
|
5
4
|
type ZLinkDiagnosticsOptions,
|
|
6
|
-
type
|
|
7
|
-
type ZLinkMessageFlowLogMode
|
|
8
|
-
} from '../../contracts';
|
|
9
|
-
import {
|
|
5
|
+
type ZLinkMessageFlowLogMode,
|
|
10
6
|
ZLinkDispatchErrorSurface,
|
|
11
7
|
ZLinkDispatchMessageKind,
|
|
12
8
|
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
|
|
13
|
-
type ZLinkRuntimeMessageFlowEvent,
|
|
14
9
|
type ZLinkRuntimeMessageFlowResult
|
|
15
10
|
} from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
16
|
-
import {
|
|
17
|
-
import
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
import { dispatchErrorDetails } from './dispatch-error-details';
|
|
12
|
+
import { currentFlowContext } from './flow-context';
|
|
13
|
+
import { toTelemetryRecord, type MessageFlowInput } from './message-flow-record';
|
|
14
|
+
import {
|
|
15
|
+
messageFlowDelivery,
|
|
16
|
+
openTelemetryLease,
|
|
17
|
+
telemetryProviderFailureCount,
|
|
18
|
+
type ZLinkTelemetryLease
|
|
19
|
+
} from './message-flow-delivery';
|
|
21
20
|
|
|
22
21
|
export interface ZLinkMessageFlowModeCell {
|
|
23
22
|
mode: ZLinkMessageFlowLogMode;
|
|
@@ -27,6 +26,7 @@ export interface ZLinkDiagnosticsContext {
|
|
|
27
26
|
readonly diagnostics: ZLinkDiagnosticsOptions;
|
|
28
27
|
readonly liveMode: ZLinkMessageFlowModeCell;
|
|
29
28
|
readonly sourceMeshGeneration: bigint;
|
|
29
|
+
readonly telemetryLease?: ZLinkTelemetryLease;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
export const DEFAULT_ZLINK_DIAGNOSTICS: ZLinkDiagnosticsOptions = {
|
|
@@ -35,54 +35,8 @@ export const DEFAULT_ZLINK_DIAGNOSTICS: ZLinkDiagnosticsOptions = {
|
|
|
35
35
|
includeMessageSizes: false
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
-
export const telemetryLogger = openTelemetryLogs.getLogger('@zlink-systems/framework');
|
|
39
|
-
const telemetryTracer = openTelemetryTrace.getTracer('@zlink-systems/framework');
|
|
40
|
-
|
|
41
38
|
let diagnosticsGeneration = 0n;
|
|
42
39
|
|
|
43
|
-
interface ZLinkTelemetryRecord {
|
|
44
|
-
readonly severity?: 'warning';
|
|
45
|
-
readonly eventId: typeof MESSAGE_FLOW_EVENT_ID | typeof DISPATCH_ERROR_EVENT_ID;
|
|
46
|
-
readonly timestamp: Date;
|
|
47
|
-
readonly phase?: string;
|
|
48
|
-
readonly outcome: ZLinkRuntimeMessageFlowResult;
|
|
49
|
-
readonly surface:
|
|
50
|
-
| 'node'
|
|
51
|
-
| 'channel'
|
|
52
|
-
| 'spot'
|
|
53
|
-
| 'instance_spot'
|
|
54
|
-
| 'actor'
|
|
55
|
-
| 'stream'
|
|
56
|
-
| 'actor_relocation'
|
|
57
|
-
| 'classic_fanout';
|
|
58
|
-
readonly messageKind: 'request' | 'send' | 'response' | 'error' | 'control';
|
|
59
|
-
readonly reason?: string;
|
|
60
|
-
readonly action?: string;
|
|
61
|
-
readonly packetName?: string;
|
|
62
|
-
readonly channelName?: string;
|
|
63
|
-
readonly channelRouteKind?: 'route_mesh' | 'client_server';
|
|
64
|
-
readonly meshName?: string;
|
|
65
|
-
readonly topic?: string;
|
|
66
|
-
readonly correlationId?: string;
|
|
67
|
-
readonly sourceRid?: string;
|
|
68
|
-
readonly targetRid?: string;
|
|
69
|
-
readonly serverRid?: string;
|
|
70
|
-
readonly flowId?: string;
|
|
71
|
-
readonly flowOrigin?: string;
|
|
72
|
-
readonly spotId?: string;
|
|
73
|
-
readonly instanceSpotType?: string;
|
|
74
|
-
readonly activationState?: string;
|
|
75
|
-
readonly actorId?: string;
|
|
76
|
-
readonly streamSessionId?: string;
|
|
77
|
-
readonly commandId?: number;
|
|
78
|
-
readonly messageSizeBytes?: number;
|
|
79
|
-
readonly durationSeconds?: number;
|
|
80
|
-
readonly errorType?: string;
|
|
81
|
-
readonly errorMessage?: string;
|
|
82
|
-
readonly errorCauseType?: string;
|
|
83
|
-
readonly errorCauseMessage?: string;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
40
|
export function effectiveMessageFlow(ctx: ZLinkDiagnosticsContext): ZLinkMessageFlowLogMode {
|
|
87
41
|
return ctx.liveMode.mode;
|
|
88
42
|
}
|
|
@@ -105,12 +59,14 @@ export function createMessageFlowModeCell(
|
|
|
105
59
|
export function createDiagnosticsContext(
|
|
106
60
|
dispatch: { diagnostics?: ZLinkDiagnosticsOptions } | undefined,
|
|
107
61
|
_providerResolver: unknown,
|
|
108
|
-
liveMode: ZLinkMessageFlowModeCell
|
|
62
|
+
liveMode: ZLinkMessageFlowModeCell,
|
|
63
|
+
telemetryLease: ZLinkTelemetryLease = openTelemetryLease()
|
|
109
64
|
): ZLinkDiagnosticsContext {
|
|
110
65
|
return {
|
|
111
66
|
diagnostics: dispatch?.diagnostics ?? DEFAULT_ZLINK_DIAGNOSTICS,
|
|
112
67
|
liveMode,
|
|
113
|
-
sourceMeshGeneration: ++diagnosticsGeneration
|
|
68
|
+
sourceMeshGeneration: ++diagnosticsGeneration,
|
|
69
|
+
telemetryLease
|
|
114
70
|
};
|
|
115
71
|
}
|
|
116
72
|
|
|
@@ -169,32 +125,24 @@ export function traceSessionBindingControlDrop(
|
|
|
169
125
|
});
|
|
170
126
|
}
|
|
171
127
|
|
|
172
|
-
type MessageFlowInput = Omit<
|
|
173
|
-
ZLinkRuntimeMessageFlowEvent,
|
|
174
|
-
'effectiveMode' | 'flowId' | 'flowOrigin'
|
|
175
|
-
> & {
|
|
176
|
-
readonly severity?: 'warning';
|
|
177
|
-
readonly effectiveMode?: ZLinkMessageFlowLogMode;
|
|
178
|
-
readonly flowId?: string;
|
|
179
|
-
readonly flowOrigin?: import('../../contracts').ZLinkFlowOrigin;
|
|
180
|
-
};
|
|
181
|
-
|
|
182
128
|
export class ZLinkMessageFlowTracer {
|
|
183
129
|
private tracedEvents = 0;
|
|
184
|
-
private
|
|
130
|
+
private readonly telemetryLease: ZLinkTelemetryLease;
|
|
185
131
|
private localSamplingSequence = 0n;
|
|
186
132
|
private errorsTracePoint?: ZLinkMessageFlowTracePoint;
|
|
187
133
|
private normalTracePoint?: ZLinkMessageFlowTracePoint;
|
|
188
134
|
private detailedTracePoint?: ZLinkMessageFlowTracePoint;
|
|
189
135
|
|
|
190
|
-
constructor(
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
) {}
|
|
136
|
+
constructor(private readonly ctx: ZLinkDiagnosticsContext) {
|
|
137
|
+
this.telemetryLease = ctx.telemetryLease ?? openTelemetryLease();
|
|
138
|
+
}
|
|
194
139
|
|
|
195
140
|
enabled(outcome: ZLinkMessageFlowOutcome): boolean {
|
|
196
141
|
const mode = effectiveMessageFlow(this.ctx);
|
|
197
|
-
return
|
|
142
|
+
return (
|
|
143
|
+
MESSAGE_FLOW_MODE_RANK[mode] >= MESSAGE_FLOW_MODE_RANK[requiredMode(outcome)] &&
|
|
144
|
+
messageFlowDelivery().accepts(this.telemetryLease)
|
|
145
|
+
);
|
|
198
146
|
}
|
|
199
147
|
|
|
200
148
|
accepts(outcome: ZLinkMessageFlowOutcome): boolean {
|
|
@@ -211,7 +159,10 @@ export class ZLinkMessageFlowTracer {
|
|
|
211
159
|
if (MESSAGE_FLOW_MODE_RANK[mode] < MESSAGE_FLOW_MODE_RANK[requiredMode(outcome, result)]) {
|
|
212
160
|
return undefined;
|
|
213
161
|
}
|
|
214
|
-
|
|
162
|
+
if (!messageFlowDelivery().accepts(this.telemetryLease)) return undefined;
|
|
163
|
+
const samplingFlowId = messageFlowTracingEnabled(mode)
|
|
164
|
+
? (flowId ?? currentFlowContext()?.flowId)
|
|
165
|
+
: undefined;
|
|
215
166
|
if (!this.acceptsSample(outcome, result, samplingFlowId, sourceMeshGeneration)) {
|
|
216
167
|
return undefined;
|
|
217
168
|
}
|
|
@@ -244,8 +195,10 @@ export class ZLinkMessageFlowTracer {
|
|
|
244
195
|
MESSAGE_FLOW_MODE_RANK[requiredMode(flowInput.outcome, flowInput.result)]
|
|
245
196
|
)
|
|
246
197
|
return;
|
|
247
|
-
|
|
248
|
-
const
|
|
198
|
+
if (!messageFlowDelivery().accepts(this.telemetryLease)) return;
|
|
199
|
+
const tracingEnabled = messageFlowTracingEnabled(effectiveMode);
|
|
200
|
+
const ambient = tracingEnabled ? currentFlowContext() : undefined;
|
|
201
|
+
const flowId = tracingEnabled ? (flowInput.flowId ?? ambient?.flowId) : undefined;
|
|
249
202
|
if (
|
|
250
203
|
!this.acceptsSample(
|
|
251
204
|
flowInput.outcome,
|
|
@@ -264,17 +217,28 @@ export class ZLinkMessageFlowTracer {
|
|
|
264
217
|
acceptedFlowId?: string,
|
|
265
218
|
acceptedFlowOrigin?: ZLinkFlowOrigin
|
|
266
219
|
): void {
|
|
267
|
-
|
|
268
|
-
const
|
|
269
|
-
const
|
|
220
|
+
if (!messageFlowDelivery().accepts(this.telemetryLease)) return;
|
|
221
|
+
const tracingEnabled = messageFlowTracingEnabled(effectiveMode);
|
|
222
|
+
const ambient = tracingEnabled ? currentFlowContext() : undefined;
|
|
223
|
+
const flowId = tracingEnabled
|
|
224
|
+
? (flowInput.flowId ?? acceptedFlowId ?? ambient?.flowId)
|
|
225
|
+
: undefined;
|
|
226
|
+
const flowOrigin = tracingEnabled
|
|
227
|
+
? (flowInput.flowOrigin ?? acceptedFlowOrigin ?? ambient?.flowOrigin)
|
|
228
|
+
: undefined;
|
|
270
229
|
const flow: MessageFlowInput = {
|
|
271
230
|
...flowInput,
|
|
272
|
-
...(
|
|
231
|
+
...(tracingEnabled
|
|
232
|
+
? flowId === undefined
|
|
233
|
+
? {}
|
|
234
|
+
: { flowId, flowOrigin }
|
|
235
|
+
: { flowId: undefined, flowOrigin: undefined }),
|
|
273
236
|
streamSessionId: flowInput.streamSessionId ?? ambient?.streamSessionId,
|
|
274
237
|
effectiveMode
|
|
275
238
|
};
|
|
276
239
|
this.tracedEvents += 1;
|
|
277
|
-
|
|
240
|
+
messageFlowDelivery().submit(
|
|
241
|
+
this.telemetryLease,
|
|
278
242
|
toTelemetryRecord(
|
|
279
243
|
flow,
|
|
280
244
|
effectiveMode === 'detailed' && this.ctx.diagnostics.includeMessageSizes
|
|
@@ -307,7 +271,7 @@ export class ZLinkMessageFlowTracer {
|
|
|
307
271
|
}
|
|
308
272
|
|
|
309
273
|
get providerFailureCount(): number {
|
|
310
|
-
return
|
|
274
|
+
return telemetryProviderFailureCount();
|
|
311
275
|
}
|
|
312
276
|
|
|
313
277
|
private sample(
|
|
@@ -327,275 +291,6 @@ export class ZLinkMessageFlowTracer {
|
|
|
327
291
|
this.localSamplingSequence += 1n;
|
|
328
292
|
return this.localSamplingSequence;
|
|
329
293
|
}
|
|
330
|
-
|
|
331
|
-
private publish(record: ZLinkTelemetryRecord): void {
|
|
332
|
-
this.publishToLogger(record);
|
|
333
|
-
this.publishToTrace(record);
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
private publishToLogger(record: ZLinkTelemetryRecord): void {
|
|
337
|
-
try {
|
|
338
|
-
const severity =
|
|
339
|
-
record.severity === 'warning'
|
|
340
|
-
? 'WARN'
|
|
341
|
-
: record.eventId === DISPATCH_ERROR_EVENT_ID
|
|
342
|
-
? 'ERROR'
|
|
343
|
-
: 'INFO';
|
|
344
|
-
telemetryLogger.emit({
|
|
345
|
-
eventName: record.eventId,
|
|
346
|
-
timestamp: record.timestamp,
|
|
347
|
-
severityNumber: SeverityNumber[severity],
|
|
348
|
-
severityText: severity,
|
|
349
|
-
body: structuredLogBody(record),
|
|
350
|
-
attributes: structuredLogAttributes(record)
|
|
351
|
-
});
|
|
352
|
-
} catch (error) {
|
|
353
|
-
this.reportProviderFailure('logger-provider', error);
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
private publishToTrace(record: ZLinkTelemetryRecord): void {
|
|
358
|
-
try {
|
|
359
|
-
const span = telemetryTracer.startSpan(record.eventId, {
|
|
360
|
-
attributes: traceAttributes(record)
|
|
361
|
-
});
|
|
362
|
-
if (record.eventId === DISPATCH_ERROR_EVENT_ID) {
|
|
363
|
-
span.setStatus({ code: SpanStatusCode.ERROR, message: record.reason });
|
|
364
|
-
}
|
|
365
|
-
span.end();
|
|
366
|
-
} catch (error) {
|
|
367
|
-
this.reportProviderFailure('trace-provider', error);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
private reportProviderFailure(source: string, error: unknown): void {
|
|
372
|
-
this.providerFailures += 1;
|
|
373
|
-
try {
|
|
374
|
-
this.errorSink.reportRuntimeTaskException(source, error);
|
|
375
|
-
} catch {
|
|
376
|
-
// The fallback diagnostics path is isolated for the same reason.
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
function toTelemetryRecord(
|
|
382
|
-
flow: MessageFlowInput,
|
|
383
|
-
messageSizeBytes: number | undefined,
|
|
384
|
-
durationSeconds: number | undefined
|
|
385
|
-
): ZLinkTelemetryRecord {
|
|
386
|
-
return {
|
|
387
|
-
severity: flow.severity,
|
|
388
|
-
eventId:
|
|
389
|
-
flow.outcome === ZLinkMessageFlowOutcome.Error
|
|
390
|
-
? DISPATCH_ERROR_EVENT_ID
|
|
391
|
-
: MESSAGE_FLOW_EVENT_ID,
|
|
392
|
-
timestamp: new Date(),
|
|
393
|
-
phase: messageFlowPhase(flow.outcome),
|
|
394
|
-
outcome: flow.result ?? messageFlowOutcome(flow.outcome),
|
|
395
|
-
surface: messageFlowSurface(flow.surface),
|
|
396
|
-
messageKind: messageFlowKind(flow.messageKind),
|
|
397
|
-
reason: flow.errorReason,
|
|
398
|
-
action: flow.errorAction,
|
|
399
|
-
packetName: flow.packetName,
|
|
400
|
-
channelName: flow.channelName,
|
|
401
|
-
channelRouteKind: flow.channelRouteKind ?? channelRouteKind(flow.surface),
|
|
402
|
-
meshName: flow.meshName,
|
|
403
|
-
topic: flow.topic,
|
|
404
|
-
correlationId: flow.correlationId,
|
|
405
|
-
sourceRid: flow.sourceRid,
|
|
406
|
-
targetRid: flow.targetRid,
|
|
407
|
-
serverRid: flow.serverRid,
|
|
408
|
-
flowId: flow.flowId,
|
|
409
|
-
flowOrigin: flow.flowOrigin === undefined ? undefined : FLOW_ORIGIN_VALUES[flow.flowOrigin],
|
|
410
|
-
spotId: flow.spotId,
|
|
411
|
-
instanceSpotType: flow.instanceSpotType,
|
|
412
|
-
activationState: flow.activationState,
|
|
413
|
-
actorId: flow.actorId,
|
|
414
|
-
streamSessionId: flow.streamSessionId,
|
|
415
|
-
commandId: flow.commandId,
|
|
416
|
-
messageSizeBytes,
|
|
417
|
-
durationSeconds,
|
|
418
|
-
errorType: flow.errorType,
|
|
419
|
-
errorMessage: flow.errorMessage,
|
|
420
|
-
errorCauseType: flow.errorCauseType,
|
|
421
|
-
errorCauseMessage: boundedText(flow.errorCauseMessage)
|
|
422
|
-
};
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
function traceAttributes(record: ZLinkTelemetryRecord): Attributes {
|
|
426
|
-
const attributes: Attributes = {};
|
|
427
|
-
for (const [name, value] of Object.entries(record)) {
|
|
428
|
-
if (value === undefined || name === 'timestamp' || name === 'severity') continue;
|
|
429
|
-
attributes[toSnakeCase(name)] = value instanceof Date ? value.toISOString() : value;
|
|
430
|
-
}
|
|
431
|
-
return attributes;
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
function structuredLogAttributes(record: ZLinkTelemetryRecord): Attributes {
|
|
435
|
-
// 기록의 attribute 이름은 Message flow tracing 3.2가 고정한다. 로그 본문의
|
|
436
|
-
// `zlink flow:` 축약 key(`kind`, `mesh` …)와 다른 집합이다 —
|
|
437
|
-
// structuredLogBodyAttributes를 참고.
|
|
438
|
-
return compactAttributes({
|
|
439
|
-
event_id: record.eventId,
|
|
440
|
-
timestamp: record.timestamp.toISOString(),
|
|
441
|
-
phase: record.phase,
|
|
442
|
-
surface: record.surface,
|
|
443
|
-
message_kind: record.messageKind,
|
|
444
|
-
mesh_name: record.meshName,
|
|
445
|
-
channel_name: record.channelName,
|
|
446
|
-
channel_route_kind: record.channelRouteKind,
|
|
447
|
-
source_rid: record.sourceRid,
|
|
448
|
-
target_rid: record.targetRid,
|
|
449
|
-
server_rid: record.serverRid,
|
|
450
|
-
packet_name: record.packetName,
|
|
451
|
-
topic: record.topic,
|
|
452
|
-
spot_id: record.spotId,
|
|
453
|
-
instance_spot_type: record.instanceSpotType,
|
|
454
|
-
activation_state: record.activationState,
|
|
455
|
-
actor_id: record.actorId,
|
|
456
|
-
stream_session_id: record.streamSessionId,
|
|
457
|
-
correlation_id: record.correlationId,
|
|
458
|
-
flow_id: record.flowId,
|
|
459
|
-
flow_origin: record.flowOrigin,
|
|
460
|
-
outcome: record.outcome,
|
|
461
|
-
reason: record.reason,
|
|
462
|
-
action: record.action,
|
|
463
|
-
command_id: record.commandId,
|
|
464
|
-
error_type: record.errorType,
|
|
465
|
-
error_message: record.errorMessage,
|
|
466
|
-
error_cause_type: record.errorCauseType,
|
|
467
|
-
error_cause_message: record.errorCauseMessage,
|
|
468
|
-
message_size_bytes: record.messageSizeBytes,
|
|
469
|
-
duration_seconds: record.durationSeconds
|
|
470
|
-
});
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
function structuredLogBodyAttributes(record: ZLinkTelemetryRecord): Attributes {
|
|
474
|
-
// `zlink flow:` 본문 전용 축약 key — Message flow tracing "Structured log 대체 표기".
|
|
475
|
-
return compactAttributes({
|
|
476
|
-
event: record.eventId,
|
|
477
|
-
phase: record.phase,
|
|
478
|
-
surface: record.surface,
|
|
479
|
-
kind: record.messageKind,
|
|
480
|
-
mesh: record.meshName,
|
|
481
|
-
channel: record.channelName,
|
|
482
|
-
channel_route: record.channelRouteKind,
|
|
483
|
-
source_rid: record.sourceRid,
|
|
484
|
-
target_rid: record.targetRid,
|
|
485
|
-
server_rid: record.serverRid,
|
|
486
|
-
packet: record.packetName,
|
|
487
|
-
topic: record.topic,
|
|
488
|
-
spot: record.spotId,
|
|
489
|
-
instance_type: record.instanceSpotType,
|
|
490
|
-
activation_state: record.activationState,
|
|
491
|
-
actor: record.actorId,
|
|
492
|
-
session: record.streamSessionId,
|
|
493
|
-
corr: record.correlationId,
|
|
494
|
-
flow: record.flowId,
|
|
495
|
-
origin: record.flowOrigin,
|
|
496
|
-
outcome: record.outcome,
|
|
497
|
-
reason: record.reason,
|
|
498
|
-
action: record.action,
|
|
499
|
-
error_type: record.errorType,
|
|
500
|
-
error_message: record.errorMessage,
|
|
501
|
-
size: record.messageSizeBytes
|
|
502
|
-
});
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
function structuredLogBody(record: ZLinkTelemetryRecord): string {
|
|
506
|
-
return `zlink flow: ${Object.entries(structuredLogBodyAttributes(record))
|
|
507
|
-
.map(([key, value]) => `${key}=${String(value)}`)
|
|
508
|
-
.join(' ')}`;
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
function compactAttributes(values: Record<string, string | number | undefined>): Attributes {
|
|
512
|
-
const attributes: Attributes = {};
|
|
513
|
-
for (const [key, value] of Object.entries(values)) {
|
|
514
|
-
if (value !== undefined) attributes[key] = value;
|
|
515
|
-
}
|
|
516
|
-
return attributes;
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
function messageFlowPhase(outcome: ZLinkMessageFlowOutcome): string | undefined {
|
|
520
|
-
switch (outcome) {
|
|
521
|
-
case ZLinkMessageFlowOutcome.Received:
|
|
522
|
-
return 'received';
|
|
523
|
-
case ZLinkMessageFlowOutcome.Admitted:
|
|
524
|
-
return 'admitted';
|
|
525
|
-
case ZLinkMessageFlowOutcome.Dispatched:
|
|
526
|
-
return 'dispatched';
|
|
527
|
-
case ZLinkMessageFlowOutcome.Completed:
|
|
528
|
-
return 'completed';
|
|
529
|
-
case ZLinkMessageFlowOutcome.Replied:
|
|
530
|
-
return 'replied';
|
|
531
|
-
case ZLinkMessageFlowOutcome.Dropped:
|
|
532
|
-
return 'dropped';
|
|
533
|
-
case ZLinkMessageFlowOutcome.Sent:
|
|
534
|
-
return 'sent';
|
|
535
|
-
case ZLinkMessageFlowOutcome.ReplyReceived:
|
|
536
|
-
return 'reply_received';
|
|
537
|
-
case ZLinkMessageFlowOutcome.Backpressured:
|
|
538
|
-
return 'backpressured';
|
|
539
|
-
case ZLinkMessageFlowOutcome.Error:
|
|
540
|
-
return undefined;
|
|
541
|
-
}
|
|
542
|
-
}
|
|
543
|
-
|
|
544
|
-
function messageFlowOutcome(outcome: ZLinkMessageFlowOutcome): ZLinkTelemetryRecord['outcome'] {
|
|
545
|
-
if (outcome === ZLinkMessageFlowOutcome.Error) return 'failed';
|
|
546
|
-
if (outcome === ZLinkMessageFlowOutcome.Backpressured) return 'backpressured';
|
|
547
|
-
if (outcome === ZLinkMessageFlowOutcome.Dropped) return 'dropped';
|
|
548
|
-
return 'succeeded';
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
function messageFlowSurface(surface: ZLinkDispatchErrorSurface): ZLinkTelemetryRecord['surface'] {
|
|
552
|
-
switch (surface) {
|
|
553
|
-
case ZLinkDispatchErrorSurface.Node:
|
|
554
|
-
return 'node';
|
|
555
|
-
case ZLinkDispatchErrorSurface.Channel:
|
|
556
|
-
case ZLinkDispatchErrorSurface.RouteMeshChannel:
|
|
557
|
-
return 'channel';
|
|
558
|
-
case ZLinkDispatchErrorSurface.SpotRoute:
|
|
559
|
-
case ZLinkDispatchErrorSurface.SpotSubscription:
|
|
560
|
-
return 'spot';
|
|
561
|
-
case ZLinkDispatchErrorSurface.InstanceSpot:
|
|
562
|
-
return 'instance_spot';
|
|
563
|
-
case ZLinkDispatchErrorSurface.SpotActor:
|
|
564
|
-
return 'actor';
|
|
565
|
-
case ZLinkDispatchErrorSurface.StreamSession:
|
|
566
|
-
return 'stream';
|
|
567
|
-
case ZLinkDispatchErrorSurface.ActorRelocation:
|
|
568
|
-
return 'actor_relocation';
|
|
569
|
-
case ZLinkDispatchErrorSurface.ClassicFanout:
|
|
570
|
-
return 'classic_fanout';
|
|
571
|
-
}
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
function messageFlowKind(kind: ZLinkDispatchMessageKind): ZLinkTelemetryRecord['messageKind'] {
|
|
575
|
-
switch (kind) {
|
|
576
|
-
case ZLinkDispatchMessageKind.Request:
|
|
577
|
-
case ZLinkDispatchMessageKind.ActorRequest:
|
|
578
|
-
return 'request';
|
|
579
|
-
case ZLinkDispatchMessageKind.Send:
|
|
580
|
-
case ZLinkDispatchMessageKind.ActorSend:
|
|
581
|
-
return 'send';
|
|
582
|
-
case ZLinkDispatchMessageKind.Response:
|
|
583
|
-
return 'response';
|
|
584
|
-
case ZLinkDispatchMessageKind.Error:
|
|
585
|
-
return 'error';
|
|
586
|
-
case ZLinkDispatchMessageKind.Control:
|
|
587
|
-
return 'control';
|
|
588
|
-
case ZLinkDispatchMessageKind.Publish:
|
|
589
|
-
throw new Error('Classic fanout publish must not create a normal message-flow record.');
|
|
590
|
-
}
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
function channelRouteKind(
|
|
594
|
-
surface: ZLinkDispatchErrorSurface
|
|
595
|
-
): ZLinkTelemetryRecord['channelRouteKind'] {
|
|
596
|
-
if (surface === ZLinkDispatchErrorSurface.RouteMeshChannel) return 'route_mesh';
|
|
597
|
-
if (surface === ZLinkDispatchErrorSurface.Channel) return 'client_server';
|
|
598
|
-
return undefined;
|
|
599
294
|
}
|
|
600
295
|
|
|
601
296
|
function hashFlowId(flowId: string): number {
|
|
@@ -606,11 +301,3 @@ function hashFlowId(flowId: string): number {
|
|
|
606
301
|
}
|
|
607
302
|
return hash >>> 0;
|
|
608
303
|
}
|
|
609
|
-
|
|
610
|
-
function boundedText(value: string | undefined): string | undefined {
|
|
611
|
-
return value === undefined ? undefined : value.slice(0, ERROR_MESSAGE_MAX_LENGTH);
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
function toSnakeCase(value: string): string {
|
|
615
|
-
return value.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
616
|
-
}
|
|
@@ -148,7 +148,7 @@ export const METRIC_NAMES = Object.freeze({
|
|
|
148
148
|
'zlink.host.application_job_queue.flow_state_config_failures'
|
|
149
149
|
} as const);
|
|
150
150
|
|
|
151
|
-
const
|
|
151
|
+
export const COUNTER_UNITS = Object.freeze({
|
|
152
152
|
[METRIC_NAMES.StreamConnectionsOpened]: '{connection}',
|
|
153
153
|
[METRIC_NAMES.StreamConnectionsClosed]: '{connection}',
|
|
154
154
|
[METRIC_NAMES.MeshNodeChannelSelectionFailures]: '{failure}',
|
|
@@ -222,7 +222,7 @@ const OBSERVABLE_COUNTERS = Object.freeze({
|
|
|
222
222
|
[METRIC_NAMES.HostApplicationJobQueueFlowStateConfigFailures]: '{failure}'
|
|
223
223
|
} as const);
|
|
224
224
|
|
|
225
|
-
type CounterName = keyof typeof
|
|
225
|
+
type CounterName = keyof typeof COUNTER_UNITS;
|
|
226
226
|
type UpDownName = keyof typeof UP_DOWN_COUNTERS;
|
|
227
227
|
type HistogramName = keyof typeof HISTOGRAMS;
|
|
228
228
|
|
|
@@ -238,7 +238,7 @@ class MetricRegistry {
|
|
|
238
238
|
>();
|
|
239
239
|
|
|
240
240
|
constructor(meter: ZLinkObservableMeter) {
|
|
241
|
-
for (const [name, unit] of Object.entries(
|
|
241
|
+
for (const [name, unit] of Object.entries(COUNTER_UNITS)) {
|
|
242
242
|
this.counters.set(name, meter.createCounter(name, { unit }));
|
|
243
243
|
}
|
|
244
244
|
for (const [name, unit] of Object.entries(UP_DOWN_COUNTERS)) {
|
|
@@ -450,6 +450,10 @@ export class ZLinkRuntimeMetrics {
|
|
|
450
450
|
safe(() => this.registry.upDown.get(name)?.add(value, attributes));
|
|
451
451
|
}
|
|
452
452
|
|
|
453
|
+
recordSpotCount(meshName: string, kind: 'entry' | 'user' | 'instance', delta: number): void {
|
|
454
|
+
this.change(METRIC_NAMES.SpotCount, delta, { mesh_name: meshName, spot_kind: kind });
|
|
455
|
+
}
|
|
456
|
+
|
|
453
457
|
duration(
|
|
454
458
|
name: HistogramName | string,
|
|
455
459
|
seconds: number,
|
|
@@ -570,7 +574,8 @@ export class ZLinkRuntimeMetrics {
|
|
|
570
574
|
startRelocation(
|
|
571
575
|
meshName: string,
|
|
572
576
|
objectKind: 'actor' | 'user_spot' | 'instance_spot',
|
|
573
|
-
policy: 'recreate' | 'snapshot'
|
|
577
|
+
policy: 'recreate' | 'snapshot',
|
|
578
|
+
onComplete?: (outcome: string) => void
|
|
574
579
|
): ZLinkRelocationMetricOperation {
|
|
575
580
|
const started = process.hrtime.bigint();
|
|
576
581
|
const startAttributes = { mesh_name: meshName, object_kind: objectKind, policy };
|
|
@@ -591,6 +596,7 @@ export class ZLinkRuntimeMetrics {
|
|
|
591
596
|
Number(process.hrtime.bigint() - started) / NANOSECONDS_PER_SECOND,
|
|
592
597
|
terminal
|
|
593
598
|
);
|
|
599
|
+
onComplete?.(outcome);
|
|
594
600
|
}
|
|
595
601
|
};
|
|
596
602
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import { startOutsideStateLane } from './state-lane';
|
|
2
3
|
import { isAbortError } from '../abort';
|
|
3
4
|
import {
|
|
4
5
|
ZLinkFrameworkInternalErrorKind,
|
|
@@ -31,6 +32,11 @@ export type ZLinkExecutionArea = 'application' | 'infrastructure';
|
|
|
31
32
|
|
|
32
33
|
const executionAreaStorage = new AsyncLocalStorage<ZLinkExecutionArea>();
|
|
33
34
|
|
|
35
|
+
// Capture once through the execution owners, independently of module load scope.
|
|
36
|
+
export const detachedMeshDispatchScope = startOutsideStateLane(() =>
|
|
37
|
+
executionAreaStorage.exit(() => spotSerialTurnStorage.exit(() => AsyncLocalStorage.snapshot()))
|
|
38
|
+
);
|
|
39
|
+
|
|
34
40
|
export function runZLinkExecutionArea<T>(area: ZLinkExecutionArea, operation: () => T): T {
|
|
35
41
|
return executionAreaStorage.run(area, operation);
|
|
36
42
|
}
|