@zlink-systems/framework 0.21.0 → 0.22.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/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- 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 +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- 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 +158 -124
- 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/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.js +116 -113
- 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 +10 -18
- 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 +43 -33
- 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.js +9 -7
- 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/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- 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 -23
- 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.js +136 -136
- 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-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- 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 +244 -227
- 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/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 +208 -219
- 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.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -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 +74 -85
- 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 +16 -14
- 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 +1 -2
- 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 +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- 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.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- 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 +1 -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 +0 -1
- 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 +138 -130
- 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 +5 -4
- 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 +351 -320
- 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 +73 -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 +335 -383
- 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 +40 -42
- 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 +215 -197
- 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 +11 -8
- 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/flow-context.ts +12 -3
- 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 +95 -76
- 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 -51
- 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 +312 -385
- 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 +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -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 +1 -1
- 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 +593 -563
- 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 +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -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 +230 -221
- 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 +128 -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 +11 -17
- 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 +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- 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 +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- 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,
|
|
@@ -45,8 +41,15 @@ interface ZLinkTelemetryRecord {
|
|
|
45
41
|
readonly timestamp: Date;
|
|
46
42
|
readonly phase?: string;
|
|
47
43
|
readonly outcome: ZLinkRuntimeMessageFlowResult;
|
|
48
|
-
readonly surface:
|
|
49
|
-
| '
|
|
44
|
+
readonly surface:
|
|
45
|
+
| 'node'
|
|
46
|
+
| 'channel'
|
|
47
|
+
| 'spot'
|
|
48
|
+
| 'instance_spot'
|
|
49
|
+
| 'actor'
|
|
50
|
+
| 'stream'
|
|
51
|
+
| 'actor_relocation'
|
|
52
|
+
| 'classic_fanout';
|
|
50
53
|
readonly messageKind: 'request' | 'send' | 'response' | 'error' | 'control';
|
|
51
54
|
readonly reason?: string;
|
|
52
55
|
readonly action?: string;
|
|
@@ -102,10 +105,10 @@ function requiredMode(
|
|
|
102
105
|
): ZLinkMessageFlowLogMode {
|
|
103
106
|
// succeeded가 아닌 terminal은 Errors level에서도 보여야 한다 — 기록 범위 설정
|
|
104
107
|
// 절의 level 규칙.
|
|
105
|
-
return outcome === ZLinkMessageFlowOutcome.Dropped
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
108
|
+
return outcome === ZLinkMessageFlowOutcome.Dropped ||
|
|
109
|
+
outcome === ZLinkMessageFlowOutcome.Backpressured ||
|
|
110
|
+
outcome === ZLinkMessageFlowOutcome.Error ||
|
|
111
|
+
(result !== undefined && result !== 'succeeded')
|
|
109
112
|
? 'errors'
|
|
110
113
|
: 'normal';
|
|
111
114
|
}
|
|
@@ -120,7 +123,9 @@ export function flowIfEnabled(
|
|
|
120
123
|
if (flow === undefined) return undefined;
|
|
121
124
|
return typeof flow.begin === 'function'
|
|
122
125
|
? flow.begin(outcome, result, flowId, sourceMeshGeneration)
|
|
123
|
-
: flow.accepts(outcome)
|
|
126
|
+
: flow.accepts(outcome)
|
|
127
|
+
? flow
|
|
128
|
+
: undefined;
|
|
124
129
|
}
|
|
125
130
|
|
|
126
131
|
export interface ZLinkMessageFlowTracePoint {
|
|
@@ -174,17 +179,17 @@ export class ZLinkMessageFlowTracer {
|
|
|
174
179
|
}
|
|
175
180
|
switch (mode) {
|
|
176
181
|
case 'errors':
|
|
177
|
-
return this.errorsTracePoint ??= {
|
|
178
|
-
trace: flowInput => this.traceAcceptedAtMode(flowInput, 'errors')
|
|
179
|
-
};
|
|
182
|
+
return (this.errorsTracePoint ??= {
|
|
183
|
+
trace: (flowInput) => this.traceAcceptedAtMode(flowInput, 'errors')
|
|
184
|
+
});
|
|
180
185
|
case 'normal':
|
|
181
|
-
return this.normalTracePoint ??= {
|
|
182
|
-
trace: flowInput => this.traceAcceptedAtMode(flowInput, 'normal')
|
|
183
|
-
};
|
|
186
|
+
return (this.normalTracePoint ??= {
|
|
187
|
+
trace: (flowInput) => this.traceAcceptedAtMode(flowInput, 'normal')
|
|
188
|
+
});
|
|
184
189
|
case 'detailed':
|
|
185
|
-
return this.detailedTracePoint ??= {
|
|
186
|
-
trace: flowInput => this.traceAcceptedAtMode(flowInput, 'detailed')
|
|
187
|
-
};
|
|
190
|
+
return (this.detailedTracePoint ??= {
|
|
191
|
+
trace: (flowInput) => this.traceAcceptedAtMode(flowInput, 'detailed')
|
|
192
|
+
});
|
|
188
193
|
case 'off':
|
|
189
194
|
return undefined;
|
|
190
195
|
}
|
|
@@ -197,17 +202,21 @@ export class ZLinkMessageFlowTracer {
|
|
|
197
202
|
trace(flowInput: MessageFlowInput): void {
|
|
198
203
|
const effectiveMode = effectiveMessageFlow(this.ctx);
|
|
199
204
|
if (
|
|
200
|
-
MESSAGE_FLOW_MODE_RANK[effectiveMode]
|
|
201
|
-
|
|
202
|
-
)
|
|
205
|
+
MESSAGE_FLOW_MODE_RANK[effectiveMode] <
|
|
206
|
+
MESSAGE_FLOW_MODE_RANK[requiredMode(flowInput.outcome, flowInput.result)]
|
|
207
|
+
)
|
|
208
|
+
return;
|
|
203
209
|
const ambient = currentFlowContext();
|
|
204
210
|
const flowId = flowInput.flowId ?? ambient?.flowId;
|
|
205
|
-
if (
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
+
if (
|
|
212
|
+
!this.acceptsSample(
|
|
213
|
+
flowInput.outcome,
|
|
214
|
+
flowInput.result,
|
|
215
|
+
flowId,
|
|
216
|
+
flowInput.sourceMeshGeneration
|
|
217
|
+
)
|
|
218
|
+
)
|
|
219
|
+
return;
|
|
211
220
|
this.traceAcceptedAtMode(flowInput, effectiveMode, flowId, ambient?.flowOrigin);
|
|
212
221
|
}
|
|
213
222
|
|
|
@@ -226,15 +235,17 @@ export class ZLinkMessageFlowTracer {
|
|
|
226
235
|
effectiveMode
|
|
227
236
|
};
|
|
228
237
|
this.tracedEvents += 1;
|
|
229
|
-
this.publish(
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
+
this.publish(
|
|
239
|
+
toTelemetryRecord(
|
|
240
|
+
flow,
|
|
241
|
+
effectiveMode === 'detailed' && this.ctx.diagnostics.includeMessageSizes
|
|
242
|
+
? flow.messageSize
|
|
243
|
+
: undefined,
|
|
244
|
+
// Spec 26 §4: terminal elapsed time is a Detailed-level addition; the
|
|
245
|
+
// other languages strip it below that level.
|
|
246
|
+
effectiveMode === 'detailed' ? flow.durationSeconds : undefined
|
|
247
|
+
)
|
|
248
|
+
);
|
|
238
249
|
}
|
|
239
250
|
|
|
240
251
|
private acceptsSample(
|
|
@@ -243,11 +254,13 @@ export class ZLinkMessageFlowTracer {
|
|
|
243
254
|
flowId: string | undefined,
|
|
244
255
|
sourceMeshGeneration: bigint | string | undefined
|
|
245
256
|
): boolean {
|
|
246
|
-
return
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
257
|
+
return (
|
|
258
|
+
outcome === ZLinkMessageFlowOutcome.Dropped ||
|
|
259
|
+
outcome === ZLinkMessageFlowOutcome.Backpressured ||
|
|
260
|
+
outcome === ZLinkMessageFlowOutcome.Error ||
|
|
261
|
+
(result !== undefined && result !== 'succeeded') ||
|
|
262
|
+
this.sample(flowId, sourceMeshGeneration)
|
|
263
|
+
);
|
|
251
264
|
}
|
|
252
265
|
|
|
253
266
|
get tracedCount(): number {
|
|
@@ -258,12 +271,16 @@ export class ZLinkMessageFlowTracer {
|
|
|
258
271
|
return this.providerFailures;
|
|
259
272
|
}
|
|
260
273
|
|
|
261
|
-
private sample(
|
|
274
|
+
private sample(
|
|
275
|
+
flowId: string | undefined,
|
|
276
|
+
sourceMeshGeneration: bigint | string | undefined
|
|
277
|
+
): boolean {
|
|
262
278
|
const rate = this.ctx.diagnostics.sampleRate;
|
|
263
279
|
if (rate >= 1.0) return true;
|
|
264
280
|
if (rate <= 0.0) return false;
|
|
265
|
-
const samplingKey =
|
|
266
|
-
|
|
281
|
+
const samplingKey =
|
|
282
|
+
flowId ??
|
|
283
|
+
`${sourceMeshGeneration ?? this.ctx.sourceMeshGeneration}:${this.nextSamplingSequence()}`;
|
|
267
284
|
return hashFlowId(samplingKey) / 0x1_0000_0000 < rate;
|
|
268
285
|
}
|
|
269
286
|
|
|
@@ -279,9 +296,8 @@ export class ZLinkMessageFlowTracer {
|
|
|
279
296
|
|
|
280
297
|
private publishToLogger(record: ZLinkTelemetryRecord): void {
|
|
281
298
|
try {
|
|
282
|
-
const severityNumber =
|
|
283
|
-
? SeverityNumber.ERROR
|
|
284
|
-
: SeverityNumber.INFO;
|
|
299
|
+
const severityNumber =
|
|
300
|
+
record.eventId === 'zlink.dispatch_error' ? SeverityNumber.ERROR : SeverityNumber.INFO;
|
|
285
301
|
telemetryLogger.emit({
|
|
286
302
|
eventName: record.eventId,
|
|
287
303
|
timestamp: record.timestamp,
|
|
@@ -337,9 +353,10 @@ function toTelemetryRecord(
|
|
|
337
353
|
durationSeconds: number | undefined
|
|
338
354
|
): ZLinkTelemetryRecord {
|
|
339
355
|
return {
|
|
340
|
-
eventId:
|
|
341
|
-
|
|
342
|
-
|
|
356
|
+
eventId:
|
|
357
|
+
flow.outcome === ZLinkMessageFlowOutcome.Error
|
|
358
|
+
? 'zlink.dispatch_error'
|
|
359
|
+
: 'zlink.message_flow',
|
|
343
360
|
timestamp: new Date(),
|
|
344
361
|
phase: messageFlowPhase(flow.outcome),
|
|
345
362
|
outcome: flow.result ?? messageFlowOutcome(flow.outcome),
|
|
@@ -357,9 +374,8 @@ function toTelemetryRecord(
|
|
|
357
374
|
targetRid: flow.targetRid,
|
|
358
375
|
serverRid: flow.serverRid,
|
|
359
376
|
flowId: flow.flowId,
|
|
360
|
-
flowOrigin:
|
|
361
|
-
? undefined
|
|
362
|
-
: FLOW_ORIGIN_TELEMETRY_VALUES[flow.flowOrigin],
|
|
377
|
+
flowOrigin:
|
|
378
|
+
flow.flowOrigin === undefined ? undefined : FLOW_ORIGIN_TELEMETRY_VALUES[flow.flowOrigin],
|
|
363
379
|
spotId: flow.spotId,
|
|
364
380
|
instanceSpotType: flow.instanceSpotType,
|
|
365
381
|
activationState: flow.activationState,
|
|
@@ -455,7 +471,6 @@ function structuredLogBody(record: ZLinkTelemetryRecord): string {
|
|
|
455
471
|
.join(' ')}`;
|
|
456
472
|
}
|
|
457
473
|
|
|
458
|
-
|
|
459
474
|
function compactAttributes(values: Record<string, string | number | undefined>): Attributes {
|
|
460
475
|
const attributes: Attributes = {};
|
|
461
476
|
for (const [key, value] of Object.entries(values)) {
|
|
@@ -466,31 +481,37 @@ function compactAttributes(values: Record<string, string | number | undefined>):
|
|
|
466
481
|
|
|
467
482
|
function messageFlowPhase(outcome: ZLinkMessageFlowOutcome): string | undefined {
|
|
468
483
|
switch (outcome) {
|
|
469
|
-
case ZLinkMessageFlowOutcome.Received:
|
|
470
|
-
|
|
471
|
-
case ZLinkMessageFlowOutcome.
|
|
472
|
-
|
|
473
|
-
case ZLinkMessageFlowOutcome.
|
|
474
|
-
|
|
475
|
-
case ZLinkMessageFlowOutcome.
|
|
476
|
-
|
|
477
|
-
case ZLinkMessageFlowOutcome.
|
|
478
|
-
|
|
484
|
+
case ZLinkMessageFlowOutcome.Received:
|
|
485
|
+
return 'received';
|
|
486
|
+
case ZLinkMessageFlowOutcome.Admitted:
|
|
487
|
+
return 'admitted';
|
|
488
|
+
case ZLinkMessageFlowOutcome.Dispatched:
|
|
489
|
+
return 'dispatched';
|
|
490
|
+
case ZLinkMessageFlowOutcome.Completed:
|
|
491
|
+
return 'completed';
|
|
492
|
+
case ZLinkMessageFlowOutcome.Replied:
|
|
493
|
+
return 'replied';
|
|
494
|
+
case ZLinkMessageFlowOutcome.Dropped:
|
|
495
|
+
return 'dropped';
|
|
496
|
+
case ZLinkMessageFlowOutcome.Sent:
|
|
497
|
+
return 'sent';
|
|
498
|
+
case ZLinkMessageFlowOutcome.ReplyReceived:
|
|
499
|
+
return 'reply_received';
|
|
500
|
+
case ZLinkMessageFlowOutcome.Backpressured:
|
|
501
|
+
return 'backpressured';
|
|
502
|
+
case ZLinkMessageFlowOutcome.Error:
|
|
503
|
+
return undefined;
|
|
479
504
|
}
|
|
480
505
|
}
|
|
481
506
|
|
|
482
|
-
function messageFlowOutcome(
|
|
483
|
-
outcome: ZLinkMessageFlowOutcome
|
|
484
|
-
): ZLinkTelemetryRecord['outcome'] {
|
|
507
|
+
function messageFlowOutcome(outcome: ZLinkMessageFlowOutcome): ZLinkTelemetryRecord['outcome'] {
|
|
485
508
|
if (outcome === ZLinkMessageFlowOutcome.Error) return 'failed';
|
|
486
509
|
if (outcome === ZLinkMessageFlowOutcome.Backpressured) return 'backpressured';
|
|
487
510
|
if (outcome === ZLinkMessageFlowOutcome.Dropped) return 'dropped';
|
|
488
511
|
return 'succeeded';
|
|
489
512
|
}
|
|
490
513
|
|
|
491
|
-
function messageFlowSurface(
|
|
492
|
-
surface: ZLinkDispatchErrorSurface
|
|
493
|
-
): ZLinkTelemetryRecord['surface'] {
|
|
514
|
+
function messageFlowSurface(surface: ZLinkDispatchErrorSurface): ZLinkTelemetryRecord['surface'] {
|
|
494
515
|
switch (surface) {
|
|
495
516
|
case ZLinkDispatchErrorSurface.Node:
|
|
496
517
|
return 'node';
|
|
@@ -513,9 +534,7 @@ function messageFlowSurface(
|
|
|
513
534
|
}
|
|
514
535
|
}
|
|
515
536
|
|
|
516
|
-
function messageFlowKind(
|
|
517
|
-
kind: ZLinkDispatchMessageKind
|
|
518
|
-
): ZLinkTelemetryRecord['messageKind'] {
|
|
537
|
+
function messageFlowKind(kind: ZLinkDispatchMessageKind): ZLinkTelemetryRecord['messageKind'] {
|
|
519
538
|
switch (kind) {
|
|
520
539
|
case ZLinkDispatchMessageKind.Request:
|
|
521
540
|
case ZLinkDispatchMessageKind.ActorRequest:
|
|
@@ -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 {
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ZLinkObservationLoss,
|
|
3
|
-
ZLinkObservedStatus
|
|
4
|
-
} from '../../contracts';
|
|
1
|
+
import type { ZLinkObservationLoss, ZLinkObservedStatus } from '../../contracts';
|
|
5
2
|
|
|
6
3
|
export const ZLINK_DEFAULT_TERMINAL_OBSERVATION_CAPACITY = 64;
|
|
7
4
|
export const ZLINK_SIGNED_OBSERVATION_LOSS_MAXIMUM = 9_223_372_036_854_775_807n;
|
|
@@ -55,9 +52,7 @@ class RuntimeObservationLossState {
|
|
|
55
52
|
}
|
|
56
53
|
|
|
57
54
|
recordDiscardedTerminal(): void {
|
|
58
|
-
this.discardedTerminal = saturatingObservationLossIncrement(
|
|
59
|
-
this.discardedTerminal
|
|
60
|
-
);
|
|
55
|
+
this.discardedTerminal = saturatingObservationLossIncrement(this.discardedTerminal);
|
|
61
56
|
}
|
|
62
57
|
|
|
63
58
|
snapshot(): ZLinkObservationLoss {
|
|
@@ -74,8 +69,11 @@ class RuntimeObservationLossState {
|
|
|
74
69
|
* dispatcher; they never invoke an iterator continuation directly.
|
|
75
70
|
*/
|
|
76
71
|
export class RuntimeEventQueue<T>
|
|
77
|
-
implements
|
|
78
|
-
|
|
72
|
+
implements
|
|
73
|
+
AsyncIterable<ZLinkObservedStatus<T>>,
|
|
74
|
+
AsyncIterator<ZLinkObservedStatus<T>>,
|
|
75
|
+
RuntimeObservationDispatchTarget
|
|
76
|
+
{
|
|
79
77
|
private readonly intermediateBySource = new Map<unknown, RetainedObservation<T>>();
|
|
80
78
|
private readonly terminalFifo: Array<RetainedObservation<T> | undefined> = [];
|
|
81
79
|
private readonly terminalCountBySource = new Map<unknown, number>();
|
|
@@ -108,7 +106,9 @@ export class RuntimeEventQueue<T>
|
|
|
108
106
|
}
|
|
109
107
|
}
|
|
110
108
|
|
|
111
|
-
[Symbol.asyncIterator](): AsyncIterator<ZLinkObservedStatus<T>> {
|
|
109
|
+
[Symbol.asyncIterator](): AsyncIterator<ZLinkObservedStatus<T>> {
|
|
110
|
+
return this;
|
|
111
|
+
}
|
|
112
112
|
|
|
113
113
|
next(): Promise<IteratorResult<ZLinkObservedStatus<T>>> {
|
|
114
114
|
if (this.waitersCount === 0) {
|
|
@@ -126,7 +126,7 @@ export class RuntimeEventQueue<T>
|
|
|
126
126
|
return Promise.resolve({ done: true, value: undefined });
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
-
return new Promise(resolve => {
|
|
129
|
+
return new Promise((resolve) => {
|
|
130
130
|
this.waiters.push(resolve);
|
|
131
131
|
this.waitersCount += 1;
|
|
132
132
|
if (this.hasRetained() || this.closed || this.completeWhenDrained) {
|
|
@@ -217,10 +217,7 @@ export class RuntimeEventQueue<T>
|
|
|
217
217
|
}
|
|
218
218
|
this.terminalFifo.push(this.retain(value, source));
|
|
219
219
|
this.terminalCount += 1;
|
|
220
|
-
this.terminalCountBySource.set(
|
|
221
|
-
source,
|
|
222
|
-
(this.terminalCountBySource.get(source) ?? 0) + 1
|
|
223
|
-
);
|
|
220
|
+
this.terminalCountBySource.set(source, (this.terminalCountBySource.get(source) ?? 0) + 1);
|
|
224
221
|
this.signalDispatcher();
|
|
225
222
|
}
|
|
226
223
|
|
|
@@ -236,9 +233,8 @@ export class RuntimeEventQueue<T>
|
|
|
236
233
|
const terminal = this.peekTerminal();
|
|
237
234
|
const intermediate = this.oldestIntermediate();
|
|
238
235
|
if (
|
|
239
|
-
terminal !== undefined
|
|
240
|
-
|
|
241
|
-
|| terminal.publishOrdinal <= intermediate.publishOrdinal)
|
|
236
|
+
terminal !== undefined &&
|
|
237
|
+
(intermediate === undefined || terminal.publishOrdinal <= intermediate.publishOrdinal)
|
|
242
238
|
) {
|
|
243
239
|
return this.takeTerminal();
|
|
244
240
|
}
|
|
@@ -248,9 +244,7 @@ export class RuntimeEventQueue<T>
|
|
|
248
244
|
}
|
|
249
245
|
|
|
250
246
|
private peekTerminal(): RetainedObservation<T> | undefined {
|
|
251
|
-
return this.terminalCount === 0
|
|
252
|
-
? undefined
|
|
253
|
-
: this.terminalFifo[this.terminalHead];
|
|
247
|
+
return this.terminalCount === 0 ? undefined : this.terminalFifo[this.terminalHead];
|
|
254
248
|
}
|
|
255
249
|
|
|
256
250
|
private oldestIntermediate(): RetainedObservation<T> | undefined {
|
|
@@ -297,10 +291,7 @@ export class RuntimeEventQueue<T>
|
|
|
297
291
|
if (this.terminalCount === 0) {
|
|
298
292
|
this.terminalFifo.length = 0;
|
|
299
293
|
this.terminalHead = 0;
|
|
300
|
-
} else if (
|
|
301
|
-
this.terminalHead >= 1024
|
|
302
|
-
&& this.terminalHead * 2 >= this.terminalFifo.length
|
|
303
|
-
) {
|
|
294
|
+
} else if (this.terminalHead >= 1024 && this.terminalHead * 2 >= this.terminalFifo.length) {
|
|
304
295
|
this.terminalFifo.splice(0, this.terminalHead);
|
|
305
296
|
this.terminalHead = 0;
|
|
306
297
|
}
|
|
@@ -333,9 +324,7 @@ export class RuntimeEventQueue<T>
|
|
|
333
324
|
return { status, loss: this.loss.snapshot() };
|
|
334
325
|
}
|
|
335
326
|
|
|
336
|
-
private takeWaiter():
|
|
337
|
-
| ((result: IteratorResult<ZLinkObservedStatus<T>>) => void)
|
|
338
|
-
| undefined {
|
|
327
|
+
private takeWaiter(): ((result: IteratorResult<ZLinkObservedStatus<T>>) => void) | undefined {
|
|
339
328
|
if (this.waitersCount === 0) return undefined;
|
|
340
329
|
const waiter = this.waiters[this.waitersHead];
|
|
341
330
|
this.waiters[this.waitersHead] = undefined;
|