@zlink-systems/framework 0.21.0 → 0.23.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/Common/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +28 -22
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
- package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/contracts/index.d.ts +1 -0
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +46 -42
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
- package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
- package/dist/runtime/diagnostics/flow-context.js +2 -2
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +58 -42
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
- package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
- package/dist/runtime/foundation/service-topology-registry.js +105 -96
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +245 -228
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +209 -220
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
- package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
- package/dist/runtime/spots/spot-timer.js +26 -30
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
- package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
- package/dist/runtime/streams/bound-session-response-target.js +8 -1
- package/dist/runtime/streams/bound-session-service.d.ts +1 -0
- package/dist/runtime/streams/bound-session-service.js +14 -12
- package/dist/runtime/streams/index.js +28 -20
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +52 -31
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.d.ts +5 -1
- package/dist/runtime/streams/protocol.js +68 -20
- package/dist/runtime/streams/session-actor-coordinator.js +37 -41
- package/dist/runtime/streams/session-context.d.ts +9 -2
- package/dist/runtime/streams/session-context.js +50 -32
- package/dist/runtime/streams/session-local-actors.d.ts +3 -1
- package/dist/runtime/streams/session-local-actors.js +17 -2
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
- package/dist/runtime/streams/stream-frame-factory.js +14 -7
- package/dist/runtime/streams/stream-session-runtime.js +112 -78
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +3 -3
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +2 -2
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +142 -134
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +77 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +218 -206
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
- package/src/runtime/diagnostics/flow-context.ts +18 -7
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +107 -79
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +170 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +595 -564
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
- package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
- package/src/runtime/spots/spot-timer.ts +103 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
- package/src/runtime/streams/bound-session-response-target.ts +39 -9
- package/src/runtime/streams/bound-session-service.ts +52 -42
- package/src/runtime/streams/index.ts +183 -100
- package/src/runtime/streams/managed-stream.ts +123 -90
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +115 -46
- package/src/runtime/streams/session-actor-coordinator.ts +109 -93
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +96 -51
- package/src/runtime/streams/session-local-actors.ts +19 -3
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +59 -40
- package/src/runtime/streams/stream-session-runtime.ts +317 -214
- package/src/runtime/workers/index.ts +68 -29
|
@@ -17,7 +17,9 @@ import type {
|
|
|
17
17
|
ZLinkSpotLocationKey
|
|
18
18
|
} from '../../contracts/Locations/Keys';
|
|
19
19
|
|
|
20
|
-
export interface ZLinkLocationMonitoringRegistration {
|
|
20
|
+
export interface ZLinkLocationMonitoringRegistration {
|
|
21
|
+
readonly sourceName: string;
|
|
22
|
+
}
|
|
21
23
|
|
|
22
24
|
export interface ZLinkSocketMonitoringRegistration {
|
|
23
25
|
readonly sourceName: string;
|
|
@@ -64,22 +66,21 @@ export enum ZLinkLocationRuntimeEventKind {
|
|
|
64
66
|
|
|
65
67
|
export type ZLinkLocationRuntimeEvent =
|
|
66
68
|
| (ZLinkRuntimeEvent & {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
readonly event: ZLinkLocationRuntimeEventKind.StatusChanged;
|
|
70
|
+
readonly status: ZLinkLocationRuntimeStatus;
|
|
71
|
+
})
|
|
70
72
|
| (ZLinkRuntimeEvent & {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
readonly event: ZLinkLocationRuntimeEventKind.TopologyChanged;
|
|
74
|
+
readonly topology: readonly ZLinkLocationTopologyEntry[];
|
|
75
|
+
})
|
|
74
76
|
| (ZLinkRuntimeEvent & {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
readonly event: ZLinkLocationRuntimeEventKind.ServiceSummaryChanged;
|
|
78
|
+
readonly serviceSummary: readonly ZLinkLocationServiceSummary[];
|
|
79
|
+
})
|
|
78
80
|
| (ZLinkRuntimeEvent & {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
});
|
|
81
|
+
readonly event:
|
|
82
|
+
ZLinkLocationRuntimeEventKind.StoreFailure | ZLinkLocationRuntimeEventKind.StoreRecovered;
|
|
83
|
+
});
|
|
83
84
|
|
|
84
85
|
export enum ZLinkSpotEventKind {
|
|
85
86
|
TimerHandlerFailed = 'timerHandlerFailed',
|
|
@@ -105,10 +106,26 @@ export enum ZLinkSocketNativeEventType {
|
|
|
105
106
|
PeerAdmissionChanged = 0x8000
|
|
106
107
|
}
|
|
107
108
|
|
|
108
|
-
export enum ZLinkLocationPeerEventKind {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
export enum ZLinkLocationPeerEventKind {
|
|
110
|
+
RowUpdated = 0,
|
|
111
|
+
RowRemoved = 1,
|
|
112
|
+
DesiredSetChanged = 2
|
|
113
|
+
}
|
|
114
|
+
export enum ZLinkLocationSpotEventKind {
|
|
115
|
+
RowUpdated = 0,
|
|
116
|
+
RowRemoved = 1,
|
|
117
|
+
ResolveMiss = 2
|
|
118
|
+
}
|
|
119
|
+
export enum ZLinkLocationActorEventKind {
|
|
120
|
+
RowUpdated = 0,
|
|
121
|
+
RowRemoved = 1,
|
|
122
|
+
ResolveMiss = 2
|
|
123
|
+
}
|
|
124
|
+
export enum ZLinkLocationRouteEventKind {
|
|
125
|
+
RowUpdated = 0,
|
|
126
|
+
RowRemoved = 1,
|
|
127
|
+
ResolveMiss = 2
|
|
128
|
+
}
|
|
112
129
|
|
|
113
130
|
export interface ZLinkAutoConnectDesiredSetChange {
|
|
114
131
|
readonly autoConnectType: ZLinkLocationAutoConnectType;
|
|
@@ -118,18 +135,55 @@ export interface ZLinkAutoConnectDesiredSetChange {
|
|
|
118
135
|
}
|
|
119
136
|
|
|
120
137
|
export type ZLinkLocationPeerEvent =
|
|
121
|
-
| (ZLinkRuntimeEvent & {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
138
|
+
| (ZLinkRuntimeEvent & {
|
|
139
|
+
readonly event: ZLinkLocationPeerEventKind.RowUpdated;
|
|
140
|
+
readonly key: string;
|
|
141
|
+
readonly peer: ZLinkPeerLocation;
|
|
142
|
+
})
|
|
143
|
+
| (ZLinkRuntimeEvent & {
|
|
144
|
+
readonly event: ZLinkLocationPeerEventKind.RowRemoved;
|
|
145
|
+
readonly key: string;
|
|
146
|
+
})
|
|
147
|
+
| (ZLinkRuntimeEvent & {
|
|
148
|
+
readonly event: ZLinkLocationPeerEventKind.DesiredSetChanged;
|
|
149
|
+
readonly desiredSetChange: ZLinkAutoConnectDesiredSetChange;
|
|
150
|
+
});
|
|
151
|
+
export type ZLinkLocationSpotEvent = ZLinkRuntimeEvent &
|
|
152
|
+
(
|
|
153
|
+
| {
|
|
154
|
+
readonly event: ZLinkLocationSpotEventKind.RowUpdated;
|
|
155
|
+
readonly key: ZLinkSpotLocationKey;
|
|
156
|
+
readonly spot: ZLinkSpotLocation;
|
|
157
|
+
}
|
|
158
|
+
| {
|
|
159
|
+
readonly event:
|
|
160
|
+
ZLinkLocationSpotEventKind.RowRemoved | ZLinkLocationSpotEventKind.ResolveMiss;
|
|
161
|
+
readonly key: ZLinkSpotLocationKey;
|
|
162
|
+
}
|
|
163
|
+
);
|
|
164
|
+
export type ZLinkLocationActorEvent = ZLinkRuntimeEvent &
|
|
165
|
+
(
|
|
166
|
+
| {
|
|
167
|
+
readonly event: ZLinkLocationActorEventKind.RowUpdated;
|
|
168
|
+
readonly key: ZLinkActorLocationKey;
|
|
169
|
+
readonly actor: ZLinkActorLocation;
|
|
170
|
+
}
|
|
171
|
+
| {
|
|
172
|
+
readonly event:
|
|
173
|
+
ZLinkLocationActorEventKind.RowRemoved | ZLinkLocationActorEventKind.ResolveMiss;
|
|
174
|
+
readonly key: ZLinkActorLocationKey;
|
|
175
|
+
}
|
|
176
|
+
);
|
|
177
|
+
export type ZLinkLocationRouteEvent = ZLinkRuntimeEvent &
|
|
178
|
+
(
|
|
179
|
+
| {
|
|
180
|
+
readonly event: ZLinkLocationRouteEventKind.RowUpdated;
|
|
181
|
+
readonly key: ZLinkRouteLocationKey;
|
|
182
|
+
readonly route: ZLinkRouteLocation;
|
|
183
|
+
}
|
|
184
|
+
| {
|
|
185
|
+
readonly event:
|
|
186
|
+
ZLinkLocationRouteEventKind.RowRemoved | ZLinkLocationRouteEventKind.ResolveMiss;
|
|
187
|
+
readonly key: ZLinkRouteLocationKey;
|
|
188
|
+
}
|
|
189
|
+
);
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
SpanStatusCode,
|
|
3
|
-
trace as openTelemetryTrace,
|
|
4
|
-
type Attributes
|
|
5
|
-
} from '@opentelemetry/api';
|
|
1
|
+
import { SpanStatusCode, trace as openTelemetryTrace, type Attributes } from '@opentelemetry/api';
|
|
6
2
|
import { logs as openTelemetryLogs, SeverityNumber } from '@opentelemetry/api-logs';
|
|
7
3
|
import {
|
|
8
4
|
MESSAGE_FLOW_MODE_RANK,
|
|
@@ -38,6 +34,7 @@ export const DEFAULT_ZLINK_DIAGNOSTICS: ZLinkDiagnosticsOptions = {
|
|
|
38
34
|
|
|
39
35
|
const telemetryLogger = openTelemetryLogs.getLogger('@zlink-systems/framework');
|
|
40
36
|
const telemetryTracer = openTelemetryTrace.getTracer('@zlink-systems/framework');
|
|
37
|
+
const ERROR_MESSAGE_MAX_LENGTH = 512;
|
|
41
38
|
let diagnosticsGeneration = 0n;
|
|
42
39
|
|
|
43
40
|
interface ZLinkTelemetryRecord {
|
|
@@ -45,8 +42,15 @@ interface ZLinkTelemetryRecord {
|
|
|
45
42
|
readonly timestamp: Date;
|
|
46
43
|
readonly phase?: string;
|
|
47
44
|
readonly outcome: ZLinkRuntimeMessageFlowResult;
|
|
48
|
-
readonly surface:
|
|
49
|
-
| '
|
|
45
|
+
readonly surface:
|
|
46
|
+
| 'node'
|
|
47
|
+
| 'channel'
|
|
48
|
+
| 'spot'
|
|
49
|
+
| 'instance_spot'
|
|
50
|
+
| 'actor'
|
|
51
|
+
| 'stream'
|
|
52
|
+
| 'actor_relocation'
|
|
53
|
+
| 'classic_fanout';
|
|
50
54
|
readonly messageKind: 'request' | 'send' | 'response' | 'error' | 'control';
|
|
51
55
|
readonly reason?: string;
|
|
52
56
|
readonly action?: string;
|
|
@@ -65,6 +69,7 @@ interface ZLinkTelemetryRecord {
|
|
|
65
69
|
readonly instanceSpotType?: string;
|
|
66
70
|
readonly activationState?: string;
|
|
67
71
|
readonly actorId?: string;
|
|
72
|
+
readonly streamSessionId?: string;
|
|
68
73
|
readonly commandId?: number;
|
|
69
74
|
readonly messageSizeBytes?: number;
|
|
70
75
|
readonly durationSeconds?: number;
|
|
@@ -102,10 +107,10 @@ function requiredMode(
|
|
|
102
107
|
): ZLinkMessageFlowLogMode {
|
|
103
108
|
// succeeded가 아닌 terminal은 Errors level에서도 보여야 한다 — 기록 범위 설정
|
|
104
109
|
// 절의 level 규칙.
|
|
105
|
-
return outcome === ZLinkMessageFlowOutcome.Dropped
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
110
|
+
return outcome === ZLinkMessageFlowOutcome.Dropped ||
|
|
111
|
+
outcome === ZLinkMessageFlowOutcome.Backpressured ||
|
|
112
|
+
outcome === ZLinkMessageFlowOutcome.Error ||
|
|
113
|
+
(result !== undefined && result !== 'succeeded')
|
|
109
114
|
? 'errors'
|
|
110
115
|
: 'normal';
|
|
111
116
|
}
|
|
@@ -120,7 +125,9 @@ export function flowIfEnabled(
|
|
|
120
125
|
if (flow === undefined) return undefined;
|
|
121
126
|
return typeof flow.begin === 'function'
|
|
122
127
|
? flow.begin(outcome, result, flowId, sourceMeshGeneration)
|
|
123
|
-
: flow.accepts(outcome)
|
|
128
|
+
: flow.accepts(outcome)
|
|
129
|
+
? flow
|
|
130
|
+
: undefined;
|
|
124
131
|
}
|
|
125
132
|
|
|
126
133
|
export interface ZLinkMessageFlowTracePoint {
|
|
@@ -174,17 +181,17 @@ export class ZLinkMessageFlowTracer {
|
|
|
174
181
|
}
|
|
175
182
|
switch (mode) {
|
|
176
183
|
case 'errors':
|
|
177
|
-
return this.errorsTracePoint ??= {
|
|
178
|
-
trace: flowInput => this.traceAcceptedAtMode(flowInput, 'errors')
|
|
179
|
-
};
|
|
184
|
+
return (this.errorsTracePoint ??= {
|
|
185
|
+
trace: (flowInput) => this.traceAcceptedAtMode(flowInput, 'errors')
|
|
186
|
+
});
|
|
180
187
|
case 'normal':
|
|
181
|
-
return this.normalTracePoint ??= {
|
|
182
|
-
trace: flowInput => this.traceAcceptedAtMode(flowInput, 'normal')
|
|
183
|
-
};
|
|
188
|
+
return (this.normalTracePoint ??= {
|
|
189
|
+
trace: (flowInput) => this.traceAcceptedAtMode(flowInput, 'normal')
|
|
190
|
+
});
|
|
184
191
|
case 'detailed':
|
|
185
|
-
return this.detailedTracePoint ??= {
|
|
186
|
-
trace: flowInput => this.traceAcceptedAtMode(flowInput, 'detailed')
|
|
187
|
-
};
|
|
192
|
+
return (this.detailedTracePoint ??= {
|
|
193
|
+
trace: (flowInput) => this.traceAcceptedAtMode(flowInput, 'detailed')
|
|
194
|
+
});
|
|
188
195
|
case 'off':
|
|
189
196
|
return undefined;
|
|
190
197
|
}
|
|
@@ -197,17 +204,21 @@ export class ZLinkMessageFlowTracer {
|
|
|
197
204
|
trace(flowInput: MessageFlowInput): void {
|
|
198
205
|
const effectiveMode = effectiveMessageFlow(this.ctx);
|
|
199
206
|
if (
|
|
200
|
-
MESSAGE_FLOW_MODE_RANK[effectiveMode]
|
|
201
|
-
|
|
202
|
-
)
|
|
207
|
+
MESSAGE_FLOW_MODE_RANK[effectiveMode] <
|
|
208
|
+
MESSAGE_FLOW_MODE_RANK[requiredMode(flowInput.outcome, flowInput.result)]
|
|
209
|
+
)
|
|
210
|
+
return;
|
|
203
211
|
const ambient = currentFlowContext();
|
|
204
212
|
const flowId = flowInput.flowId ?? ambient?.flowId;
|
|
205
|
-
if (
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
213
|
+
if (
|
|
214
|
+
!this.acceptsSample(
|
|
215
|
+
flowInput.outcome,
|
|
216
|
+
flowInput.result,
|
|
217
|
+
flowId,
|
|
218
|
+
flowInput.sourceMeshGeneration
|
|
219
|
+
)
|
|
220
|
+
)
|
|
221
|
+
return;
|
|
211
222
|
this.traceAcceptedAtMode(flowInput, effectiveMode, flowId, ambient?.flowOrigin);
|
|
212
223
|
}
|
|
213
224
|
|
|
@@ -217,24 +228,27 @@ export class ZLinkMessageFlowTracer {
|
|
|
217
228
|
acceptedFlowId?: string,
|
|
218
229
|
acceptedFlowOrigin?: ZLinkFlowOrigin
|
|
219
230
|
): void {
|
|
220
|
-
const ambient =
|
|
231
|
+
const ambient = currentFlowContext();
|
|
221
232
|
const flowId = flowInput.flowId ?? acceptedFlowId ?? ambient?.flowId;
|
|
222
233
|
const flowOrigin = flowInput.flowOrigin ?? acceptedFlowOrigin ?? ambient?.flowOrigin;
|
|
223
234
|
const flow: ZLinkRuntimeMessageFlowEvent = {
|
|
224
235
|
...flowInput,
|
|
225
236
|
...(flowId === undefined ? {} : { flowId, flowOrigin }),
|
|
237
|
+
streamSessionId: flowInput.streamSessionId ?? ambient?.streamSessionId,
|
|
226
238
|
effectiveMode
|
|
227
239
|
};
|
|
228
240
|
this.tracedEvents += 1;
|
|
229
|
-
this.publish(
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
241
|
+
this.publish(
|
|
242
|
+
toTelemetryRecord(
|
|
243
|
+
flow,
|
|
244
|
+
effectiveMode === 'detailed' && this.ctx.diagnostics.includeMessageSizes
|
|
245
|
+
? flow.messageSize
|
|
246
|
+
: undefined,
|
|
247
|
+
// Spec 26 §4: terminal elapsed time is a Detailed-level addition; the
|
|
248
|
+
// other languages strip it below that level.
|
|
249
|
+
effectiveMode === 'detailed' ? flow.durationSeconds : undefined
|
|
250
|
+
)
|
|
251
|
+
);
|
|
238
252
|
}
|
|
239
253
|
|
|
240
254
|
private acceptsSample(
|
|
@@ -243,11 +257,13 @@ export class ZLinkMessageFlowTracer {
|
|
|
243
257
|
flowId: string | undefined,
|
|
244
258
|
sourceMeshGeneration: bigint | string | undefined
|
|
245
259
|
): boolean {
|
|
246
|
-
return
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
260
|
+
return (
|
|
261
|
+
outcome === ZLinkMessageFlowOutcome.Dropped ||
|
|
262
|
+
outcome === ZLinkMessageFlowOutcome.Backpressured ||
|
|
263
|
+
outcome === ZLinkMessageFlowOutcome.Error ||
|
|
264
|
+
(result !== undefined && result !== 'succeeded') ||
|
|
265
|
+
this.sample(flowId, sourceMeshGeneration)
|
|
266
|
+
);
|
|
251
267
|
}
|
|
252
268
|
|
|
253
269
|
get tracedCount(): number {
|
|
@@ -258,12 +274,16 @@ export class ZLinkMessageFlowTracer {
|
|
|
258
274
|
return this.providerFailures;
|
|
259
275
|
}
|
|
260
276
|
|
|
261
|
-
private sample(
|
|
277
|
+
private sample(
|
|
278
|
+
flowId: string | undefined,
|
|
279
|
+
sourceMeshGeneration: bigint | string | undefined
|
|
280
|
+
): boolean {
|
|
262
281
|
const rate = this.ctx.diagnostics.sampleRate;
|
|
263
282
|
if (rate >= 1.0) return true;
|
|
264
283
|
if (rate <= 0.0) return false;
|
|
265
|
-
const samplingKey =
|
|
266
|
-
|
|
284
|
+
const samplingKey =
|
|
285
|
+
flowId ??
|
|
286
|
+
`${sourceMeshGeneration ?? this.ctx.sourceMeshGeneration}:${this.nextSamplingSequence()}`;
|
|
267
287
|
return hashFlowId(samplingKey) / 0x1_0000_0000 < rate;
|
|
268
288
|
}
|
|
269
289
|
|
|
@@ -279,9 +299,8 @@ export class ZLinkMessageFlowTracer {
|
|
|
279
299
|
|
|
280
300
|
private publishToLogger(record: ZLinkTelemetryRecord): void {
|
|
281
301
|
try {
|
|
282
|
-
const severityNumber =
|
|
283
|
-
? SeverityNumber.ERROR
|
|
284
|
-
: SeverityNumber.INFO;
|
|
302
|
+
const severityNumber =
|
|
303
|
+
record.eventId === 'zlink.dispatch_error' ? SeverityNumber.ERROR : SeverityNumber.INFO;
|
|
285
304
|
telemetryLogger.emit({
|
|
286
305
|
eventName: record.eventId,
|
|
287
306
|
timestamp: record.timestamp,
|
|
@@ -337,9 +356,10 @@ function toTelemetryRecord(
|
|
|
337
356
|
durationSeconds: number | undefined
|
|
338
357
|
): ZLinkTelemetryRecord {
|
|
339
358
|
return {
|
|
340
|
-
eventId:
|
|
341
|
-
|
|
342
|
-
|
|
359
|
+
eventId:
|
|
360
|
+
flow.outcome === ZLinkMessageFlowOutcome.Error
|
|
361
|
+
? 'zlink.dispatch_error'
|
|
362
|
+
: 'zlink.message_flow',
|
|
343
363
|
timestamp: new Date(),
|
|
344
364
|
phase: messageFlowPhase(flow.outcome),
|
|
345
365
|
outcome: flow.result ?? messageFlowOutcome(flow.outcome),
|
|
@@ -357,18 +377,18 @@ function toTelemetryRecord(
|
|
|
357
377
|
targetRid: flow.targetRid,
|
|
358
378
|
serverRid: flow.serverRid,
|
|
359
379
|
flowId: flow.flowId,
|
|
360
|
-
flowOrigin:
|
|
361
|
-
? undefined
|
|
362
|
-
: FLOW_ORIGIN_TELEMETRY_VALUES[flow.flowOrigin],
|
|
380
|
+
flowOrigin:
|
|
381
|
+
flow.flowOrigin === undefined ? undefined : FLOW_ORIGIN_TELEMETRY_VALUES[flow.flowOrigin],
|
|
363
382
|
spotId: flow.spotId,
|
|
364
383
|
instanceSpotType: flow.instanceSpotType,
|
|
365
384
|
activationState: flow.activationState,
|
|
366
385
|
actorId: flow.actorId,
|
|
386
|
+
streamSessionId: flow.streamSessionId,
|
|
367
387
|
commandId: flow.commandId,
|
|
368
388
|
messageSizeBytes,
|
|
369
389
|
durationSeconds,
|
|
370
390
|
errorType: flow.errorType,
|
|
371
|
-
errorMessage:
|
|
391
|
+
errorMessage: flow.errorMessage,
|
|
372
392
|
errorCauseType: flow.errorCauseType,
|
|
373
393
|
errorCauseMessage: boundedText(flow.errorCauseMessage)
|
|
374
394
|
};
|
|
@@ -405,6 +425,7 @@ function structuredLogAttributes(record: ZLinkTelemetryRecord): Attributes {
|
|
|
405
425
|
instance_spot_type: record.instanceSpotType,
|
|
406
426
|
activation_state: record.activationState,
|
|
407
427
|
actor_id: record.actorId,
|
|
428
|
+
stream_session_id: record.streamSessionId,
|
|
408
429
|
correlation_id: record.correlationId,
|
|
409
430
|
flow_id: record.flowId,
|
|
410
431
|
flow_origin: record.flowOrigin,
|
|
@@ -440,11 +461,15 @@ function structuredLogBodyAttributes(record: ZLinkTelemetryRecord): Attributes {
|
|
|
440
461
|
instance_type: record.instanceSpotType,
|
|
441
462
|
activation_state: record.activationState,
|
|
442
463
|
actor: record.actorId,
|
|
464
|
+
session: record.streamSessionId,
|
|
443
465
|
corr: record.correlationId,
|
|
444
466
|
flow: record.flowId,
|
|
445
467
|
origin: record.flowOrigin,
|
|
446
468
|
outcome: record.outcome,
|
|
447
469
|
reason: record.reason,
|
|
470
|
+
action: record.action,
|
|
471
|
+
error_type: record.errorType,
|
|
472
|
+
error_message: record.errorMessage,
|
|
448
473
|
size: record.messageSizeBytes
|
|
449
474
|
});
|
|
450
475
|
}
|
|
@@ -455,7 +480,6 @@ function structuredLogBody(record: ZLinkTelemetryRecord): string {
|
|
|
455
480
|
.join(' ')}`;
|
|
456
481
|
}
|
|
457
482
|
|
|
458
|
-
|
|
459
483
|
function compactAttributes(values: Record<string, string | number | undefined>): Attributes {
|
|
460
484
|
const attributes: Attributes = {};
|
|
461
485
|
for (const [key, value] of Object.entries(values)) {
|
|
@@ -466,31 +490,37 @@ function compactAttributes(values: Record<string, string | number | undefined>):
|
|
|
466
490
|
|
|
467
491
|
function messageFlowPhase(outcome: ZLinkMessageFlowOutcome): string | undefined {
|
|
468
492
|
switch (outcome) {
|
|
469
|
-
case ZLinkMessageFlowOutcome.Received:
|
|
470
|
-
|
|
471
|
-
case ZLinkMessageFlowOutcome.
|
|
472
|
-
|
|
473
|
-
case ZLinkMessageFlowOutcome.
|
|
474
|
-
|
|
475
|
-
case ZLinkMessageFlowOutcome.
|
|
476
|
-
|
|
477
|
-
case ZLinkMessageFlowOutcome.
|
|
478
|
-
|
|
493
|
+
case ZLinkMessageFlowOutcome.Received:
|
|
494
|
+
return 'received';
|
|
495
|
+
case ZLinkMessageFlowOutcome.Admitted:
|
|
496
|
+
return 'admitted';
|
|
497
|
+
case ZLinkMessageFlowOutcome.Dispatched:
|
|
498
|
+
return 'dispatched';
|
|
499
|
+
case ZLinkMessageFlowOutcome.Completed:
|
|
500
|
+
return 'completed';
|
|
501
|
+
case ZLinkMessageFlowOutcome.Replied:
|
|
502
|
+
return 'replied';
|
|
503
|
+
case ZLinkMessageFlowOutcome.Dropped:
|
|
504
|
+
return 'dropped';
|
|
505
|
+
case ZLinkMessageFlowOutcome.Sent:
|
|
506
|
+
return 'sent';
|
|
507
|
+
case ZLinkMessageFlowOutcome.ReplyReceived:
|
|
508
|
+
return 'reply_received';
|
|
509
|
+
case ZLinkMessageFlowOutcome.Backpressured:
|
|
510
|
+
return 'backpressured';
|
|
511
|
+
case ZLinkMessageFlowOutcome.Error:
|
|
512
|
+
return undefined;
|
|
479
513
|
}
|
|
480
514
|
}
|
|
481
515
|
|
|
482
|
-
function messageFlowOutcome(
|
|
483
|
-
outcome: ZLinkMessageFlowOutcome
|
|
484
|
-
): ZLinkTelemetryRecord['outcome'] {
|
|
516
|
+
function messageFlowOutcome(outcome: ZLinkMessageFlowOutcome): ZLinkTelemetryRecord['outcome'] {
|
|
485
517
|
if (outcome === ZLinkMessageFlowOutcome.Error) return 'failed';
|
|
486
518
|
if (outcome === ZLinkMessageFlowOutcome.Backpressured) return 'backpressured';
|
|
487
519
|
if (outcome === ZLinkMessageFlowOutcome.Dropped) return 'dropped';
|
|
488
520
|
return 'succeeded';
|
|
489
521
|
}
|
|
490
522
|
|
|
491
|
-
function messageFlowSurface(
|
|
492
|
-
surface: ZLinkDispatchErrorSurface
|
|
493
|
-
): ZLinkTelemetryRecord['surface'] {
|
|
523
|
+
function messageFlowSurface(surface: ZLinkDispatchErrorSurface): ZLinkTelemetryRecord['surface'] {
|
|
494
524
|
switch (surface) {
|
|
495
525
|
case ZLinkDispatchErrorSurface.Node:
|
|
496
526
|
return 'node';
|
|
@@ -513,9 +543,7 @@ function messageFlowSurface(
|
|
|
513
543
|
}
|
|
514
544
|
}
|
|
515
545
|
|
|
516
|
-
function messageFlowKind(
|
|
517
|
-
kind: ZLinkDispatchMessageKind
|
|
518
|
-
): ZLinkTelemetryRecord['messageKind'] {
|
|
546
|
+
function messageFlowKind(kind: ZLinkDispatchMessageKind): ZLinkTelemetryRecord['messageKind'] {
|
|
519
547
|
switch (kind) {
|
|
520
548
|
case ZLinkDispatchMessageKind.Request:
|
|
521
549
|
case ZLinkDispatchMessageKind.ActorRequest:
|
|
@@ -552,7 +580,7 @@ function hashFlowId(flowId: string): number {
|
|
|
552
580
|
}
|
|
553
581
|
|
|
554
582
|
function boundedText(value: string | undefined): string | undefined {
|
|
555
|
-
return value === undefined ? undefined : value.slice(0,
|
|
583
|
+
return value === undefined ? undefined : value.slice(0, ERROR_MESSAGE_MAX_LENGTH);
|
|
556
584
|
}
|
|
557
585
|
|
|
558
586
|
function toSnakeCase(value: string): string {
|
|
@@ -24,10 +24,7 @@ interface ZLinkObservableMeter extends ZLinkMeter {
|
|
|
24
24
|
name: string,
|
|
25
25
|
options?: { readonly unit?: string }
|
|
26
26
|
): ZLinkObservableGauge;
|
|
27
|
-
createObservableGauge?(
|
|
28
|
-
name: string,
|
|
29
|
-
options?: { readonly unit?: string }
|
|
30
|
-
): ZLinkObservableGauge;
|
|
27
|
+
createObservableGauge?(name: string, options?: { readonly unit?: string }): ZLinkObservableGauge;
|
|
31
28
|
}
|
|
32
29
|
|
|
33
30
|
export interface ZLinkRuntimeMetricCapacity {
|
|
@@ -193,10 +190,12 @@ class MetricRegistry {
|
|
|
193
190
|
}
|
|
194
191
|
|
|
195
192
|
private observe(name: string, result: ZLinkObservableResult): void {
|
|
196
|
-
if (
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
193
|
+
if (
|
|
194
|
+
name === 'zlink.host.application_job_queue.pressure_state' ||
|
|
195
|
+
name === 'zlink.host.application_job_queue.pressure_transitions' ||
|
|
196
|
+
name === 'zlink.host.application_job_queue.pause_duration' ||
|
|
197
|
+
name === 'zlink.host.application_job_queue.flow_state_config_failures'
|
|
198
|
+
) {
|
|
200
199
|
for (const provider of this.applicationJobQueuePressures) {
|
|
201
200
|
try {
|
|
202
201
|
this.observeApplicationJobQueuePressure(name, provider(), result);
|
|
@@ -206,8 +205,10 @@ class MetricRegistry {
|
|
|
206
205
|
}
|
|
207
206
|
return;
|
|
208
207
|
}
|
|
209
|
-
if (
|
|
210
|
-
|
|
208
|
+
if (
|
|
209
|
+
name.startsWith('zlink.host.core_hwm.') ||
|
|
210
|
+
name.startsWith('zlink.host.application_job_queue.')
|
|
211
|
+
) {
|
|
211
212
|
for (const provider of this.hostCapacities) {
|
|
212
213
|
try {
|
|
213
214
|
this.observeHostCapacity(name, provider(), result);
|
|
@@ -299,17 +300,29 @@ class MetricRegistry {
|
|
|
299
300
|
): void {
|
|
300
301
|
const mesh = { mesh_name: snapshot.meshName };
|
|
301
302
|
const peer = { ...mesh, source: snapshot.source };
|
|
302
|
-
if (name === 'zlink.mesh_node.peers.configured')
|
|
303
|
-
|
|
304
|
-
else if (name === 'zlink.mesh_node.peers.
|
|
303
|
+
if (name === 'zlink.mesh_node.peers.configured')
|
|
304
|
+
result.observe(nonNegative(snapshot.configuredPeers), peer);
|
|
305
|
+
else if (name === 'zlink.mesh_node.peers.connected')
|
|
306
|
+
result.observe(nonNegative(snapshot.connectedPeers), peer);
|
|
307
|
+
else if (name === 'zlink.mesh_node.peers.ready')
|
|
308
|
+
result.observe(nonNegative(snapshot.readyPeers), peer);
|
|
305
309
|
else if (name === 'zlink.mesh_node.channels.ready_members') {
|
|
306
310
|
for (const channel of snapshot.channels) {
|
|
307
|
-
result.observe(nonNegative(channel.readyMembers), {
|
|
311
|
+
result.observe(nonNegative(channel.readyMembers), {
|
|
312
|
+
...mesh,
|
|
313
|
+
channel_name: channel.channelName
|
|
314
|
+
});
|
|
308
315
|
}
|
|
309
316
|
} else if (name.startsWith('zlink.object.capacity.')) {
|
|
310
317
|
const field = metricSuffix(name);
|
|
311
|
-
result.observe(capacityValue(snapshot.actorCapacity, field), {
|
|
312
|
-
|
|
318
|
+
result.observe(capacityValue(snapshot.actorCapacity, field), {
|
|
319
|
+
...mesh,
|
|
320
|
+
capacity_scope: 'actor'
|
|
321
|
+
});
|
|
322
|
+
result.observe(capacityValue(snapshot.spotCapacity, field), {
|
|
323
|
+
...mesh,
|
|
324
|
+
capacity_scope: 'spot'
|
|
325
|
+
});
|
|
313
326
|
} else if (name.startsWith('zlink.spot.type.capacity.')) {
|
|
314
327
|
const field = metricSuffix(name);
|
|
315
328
|
for (const capacity of snapshot.spotTypeCapacities) {
|
|
@@ -350,7 +363,9 @@ export class ZLinkRuntimeMetrics {
|
|
|
350
363
|
const owner = (provider ?? openTelemetryMetrics) as object;
|
|
351
364
|
let registry = registries.get(owner);
|
|
352
365
|
if (registry === undefined) {
|
|
353
|
-
const meter = (provider ?? openTelemetryMetrics).getMeter(
|
|
366
|
+
const meter = (provider ?? openTelemetryMetrics).getMeter(
|
|
367
|
+
ZLinkMeters.Framework
|
|
368
|
+
) as ZLinkObservableMeter;
|
|
354
369
|
registry = new MetricRegistry(meter);
|
|
355
370
|
registries.set(owner, registry);
|
|
356
371
|
}
|
|
@@ -365,7 +380,11 @@ export class ZLinkRuntimeMetrics {
|
|
|
365
380
|
safe(() => this.registry.upDown.get(name)?.add(value, attributes));
|
|
366
381
|
}
|
|
367
382
|
|
|
368
|
-
duration(
|
|
383
|
+
duration(
|
|
384
|
+
name: HistogramName | string,
|
|
385
|
+
seconds: number,
|
|
386
|
+
attributes?: ZLinkMetricAttributes
|
|
387
|
+
): void {
|
|
369
388
|
this.histogram(name, Math.max(0, seconds), 's', attributes);
|
|
370
389
|
}
|
|
371
390
|
|
|
@@ -390,9 +409,7 @@ export class ZLinkRuntimeMetrics {
|
|
|
390
409
|
return registration(() => this.registry.hostStates.delete(provider));
|
|
391
410
|
}
|
|
392
411
|
|
|
393
|
-
registerHostCapacity(
|
|
394
|
-
provider: () => ZLinkHostCapacityStatus
|
|
395
|
-
): ZLinkRuntimeMetricRegistration {
|
|
412
|
+
registerHostCapacity(provider: () => ZLinkHostCapacityStatus): ZLinkRuntimeMetricRegistration {
|
|
396
413
|
this.registry.hostCapacities.add(provider);
|
|
397
414
|
return registration(() => this.registry.hostCapacities.delete(provider));
|
|
398
415
|
}
|
|
@@ -404,8 +421,10 @@ export class ZLinkRuntimeMetrics {
|
|
|
404
421
|
return registration(() => this.registry.applicationJobQueuePressures.delete(provider));
|
|
405
422
|
}
|
|
406
423
|
|
|
407
|
-
startRequest(
|
|
408
|
-
|
|
424
|
+
startRequest(
|
|
425
|
+
meshName: string,
|
|
426
|
+
surface: 'node' | 'channel' | 'spot' | 'instance_spot' | 'actor'
|
|
427
|
+
): ZLinkRequestMetricOperation {
|
|
409
428
|
return new ZLinkRequestMetricOperation(this, meshName, surface);
|
|
410
429
|
}
|
|
411
430
|
|
|
@@ -453,7 +472,10 @@ export class ZLinkRuntimeMetrics {
|
|
|
453
472
|
});
|
|
454
473
|
}
|
|
455
474
|
|
|
456
|
-
startInstanceSpotActivation(
|
|
475
|
+
startInstanceSpotActivation(
|
|
476
|
+
meshName: string,
|
|
477
|
+
instanceSpotType: string
|
|
478
|
+
): ZLinkRuntimeMetricOperation {
|
|
457
479
|
const started = process.hrtime.bigint();
|
|
458
480
|
let completed = false;
|
|
459
481
|
return {
|