@zlink-systems/framework 0.30.0 → 0.30.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +150 -68
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
- package/dist/contracts/Channels/Calls.d.ts +2 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
- package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
- package/dist/contracts/Common/encoded-payload-storage.js +5 -2
- package/dist/contracts/Configuration/Builders.d.ts +1 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
- package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
- package/dist/contracts/Handlers/Attributes.d.ts +5 -13
- package/dist/contracts/Handlers/Attributes.js +7 -11
- package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
- package/dist/contracts/Handlers/JsonContract.js +4 -153
- package/dist/contracts/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +6 -1
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- package/dist/nest-integration.d.ts +1 -1
- package/dist/nest-integration.js +2 -1
- package/dist/runtime/abort.d.ts +5 -0
- package/dist/runtime/abort.js +10 -0
- package/dist/runtime/actors/actor-authority-publication.js +3 -2
- package/dist/runtime/actors/actor-client.d.ts +1 -2
- package/dist/runtime/actors/actor-client.js +52 -57
- package/dist/runtime/actors/actor-context.d.ts +2 -0
- package/dist/runtime/actors/actor-context.js +46 -9
- package/dist/runtime/actors/actor-handoff.d.ts +8 -4
- package/dist/runtime/actors/actor-handoff.js +219 -92
- package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
- package/dist/runtime/actors/actor-local-native-join.js +13 -12
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-remote-wire.js +15 -0
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -0
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
- package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-state.js +2 -20
- package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
- package/dist/runtime/actors/index.d.ts +8 -3
- package/dist/runtime/actors/index.js +55 -27
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +56 -23
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
- package/dist/runtime/application-jobs/contracts.d.ts +12 -1
- package/dist/runtime/backend/contracts/index.d.ts +37 -12
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
- package/dist/runtime/backend/mesh-completion-table.js +154 -49
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
- package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
- package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
- package/dist/runtime/backend/runtime-message.d.ts +1 -0
- package/dist/runtime/backend/runtime-message.js +5 -0
- package/dist/runtime/backend/runtime-values.d.ts +1 -0
- package/dist/runtime/backend/runtime-values.js +2 -1
- package/dist/runtime/channels/channel-clients.d.ts +2 -0
- package/dist/runtime/channels/channel-clients.js +75 -23
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
- package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
- package/dist/runtime/channels/channel-dispatch-services.js +45 -0
- package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
- package/dist/runtime/channels/channel-dispatchers.js +62 -54
- package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
- package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
- package/dist/runtime/channels/channel-envelope.d.ts +2 -0
- package/dist/runtime/channels/channel-envelope.js +146 -28
- package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
- package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
- package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
- package/dist/runtime/channels/channel-runtime-manager.js +16 -16
- package/dist/runtime/channels/channel-transports.d.ts +18 -16
- package/dist/runtime/channels/channel-transports.js +77 -58
- package/dist/runtime/channels/client-server-location-runtime.js +5 -4
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/fanout-location-runtime.js +3 -3
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +2 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
- package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
- package/dist/runtime/channels/source-spot-router.d.ts +2 -2
- package/dist/runtime/channels/source-spot-router.js +4 -4
- package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-node-route-transport.js +4 -4
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
- package/dist/runtime/diagnostics/flow-context.js +19 -7
- package/dist/runtime/diagnostics/index.js +4 -9
- package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
- package/dist/runtime/diagnostics/message-flow.js +35 -5
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
- package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
- package/dist/runtime/execution/index.d.ts +4 -2
- package/dist/runtime/execution/index.js +33 -10
- package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
- package/dist/runtime/execution/serial-execution-queue.js +22 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
- package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
- package/dist/runtime/foundation/durable-service-request.js +98 -0
- package/dist/runtime/foundation/operation-identity.d.ts +1 -0
- package/dist/runtime/foundation/operation-identity.js +5 -1
- package/dist/runtime/foundation/operation-registry.d.ts +25 -1
- package/dist/runtime/foundation/operation-registry.js +86 -18
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
- package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
- package/dist/runtime/foundation/service-liveness-registry.js +38 -0
- package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
- package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
- package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
- package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
- package/dist/runtime/foundation/service-stateful-registry.js +24 -26
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
- package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
- package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
- package/dist/runtime/foundation/service-topology-registry.js +61 -27
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
- package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
- package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
- package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
- package/dist/runtime/handlers/handler-instance-scope.js +54 -11
- package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
- package/dist/runtime/host/actor-packet-relay.js +59 -72
- package/dist/runtime/host/actor-placement-coordinator.js +25 -8
- package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
- package/dist/runtime/host/actor-transfer-runtime.js +85 -331
- package/dist/runtime/host/application-job-queue.d.ts +40 -7
- package/dist/runtime/host/application-job-queue.js +137 -42
- package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
- package/dist/runtime/host/entry-actor-runtime.js +3 -0
- package/dist/runtime/host/index.d.ts +12 -2
- package/dist/runtime/host/index.js +300 -202
- package/dist/runtime/host/location-runtime-owner.js +2 -6
- package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
- package/dist/runtime/host/mesh-router-resolver.js +14 -6
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
- package/dist/runtime/host/remote-bound-session-relay.js +73 -208
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +6 -4
- package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
- package/dist/runtime/host/runtime-shutdown.js +3 -2
- package/dist/runtime/host/service-relocation-control.d.ts +1 -0
- package/dist/runtime/host/service-relocation-control.js +10 -4
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
- package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
- package/dist/runtime/host/spot-address-transport.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
- package/dist/runtime/locations/actor-location-claims.js +34 -19
- package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
- package/dist/runtime/locations/auto-connect-loop.js +22 -14
- package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
- package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
- package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
- package/dist/runtime/locations/descriptor-publication.js +11 -0
- package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
- package/dist/runtime/locations/in-memory-authority-store.js +56 -19
- package/dist/runtime/locations/in-memory-location-store.js +1 -10
- package/dist/runtime/locations/index.d.ts +1 -0
- package/dist/runtime/locations/index.js +1 -0
- package/dist/runtime/locations/lease-tracker.js +1 -6
- package/dist/runtime/locations/lifecycle.d.ts +1 -2
- package/dist/runtime/locations/lifecycle.js +2 -5
- package/dist/runtime/locations/location-store-repository.d.ts +51 -1
- package/dist/runtime/locations/location-store-repository.js +363 -139
- package/dist/runtime/locations/relocation-blob.d.ts +18 -1
- package/dist/runtime/locations/relocation-blob.js +52 -1
- package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
- package/dist/runtime/locations/request-source-resolver.js +80 -0
- package/dist/runtime/locations/resolvers.js +1 -1
- package/dist/runtime/locations/runtime.d.ts +7 -3
- package/dist/runtime/locations/runtime.js +61 -53
- package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
- package/dist/runtime/messaging/framework-json-v1.js +38 -294
- package/dist/runtime/messaging/packet-name.d.ts +1 -1
- package/dist/runtime/messaging/packet-name.js +8 -24
- package/dist/runtime/messaging/payload-codec.d.ts +7 -1
- package/dist/runtime/messaging/payload-codec.js +7 -6
- package/dist/runtime/messaging/request-result.d.ts +2 -0
- package/dist/runtime/messaging/request-result.js +57 -0
- package/dist/runtime/messaging/submission-result.d.ts +1 -0
- package/dist/runtime/messaging/submission-result.js +5 -2
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
- package/dist/runtime/spots/index.d.ts +21 -11
- package/dist/runtime/spots/index.js +243 -178
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
- package/dist/runtime/spots/spot-activation-registry.js +21 -11
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +7 -7
- package/dist/runtime/spots/spot-activation.d.ts +7 -3
- package/dist/runtime/spots/spot-activation.js +140 -52
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
- package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-membership.js +0 -8
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
- package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
- package/dist/runtime/spots/spot-entry-activation.js +20 -11
- package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
- package/dist/runtime/spots/spot-handler-registry.js +24 -10
- package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
- package/dist/runtime/spots/spot-manager-public.js +2 -2
- package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
- package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
- package/dist/runtime/spots/spot-outbound.d.ts +3 -0
- package/dist/runtime/spots/spot-outbound.js +27 -18
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
- package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
- package/dist/runtime/spots/spot-serial-executor.js +61 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
- package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +288 -103
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
- package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
- package/dist/runtime/streams/bound-session-service.d.ts +1 -1
- package/dist/runtime/streams/bound-session-service.js +6 -11
- package/dist/runtime/streams/index.d.ts +3 -2
- package/dist/runtime/streams/index.js +6 -4
- package/dist/runtime/streams/managed-stream.js +3 -2
- package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
- package/dist/runtime/streams/session-actor-coordinator.js +15 -32
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
- package/dist/runtime/streams/stream-session-runtime.js +14 -31
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
- package/src/contracts/Channels/Calls.ts +2 -1
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
- package/src/contracts/Common/encoded-payload-storage.ts +6 -3
- package/src/contracts/Configuration/Builders.ts +4 -1
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
- package/src/contracts/Handlers/Attributes.ts +14 -21
- package/src/contracts/Handlers/JsonContract.ts +8 -216
- package/src/contracts/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +10 -1
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/nest-integration.ts +1 -0
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +100 -85
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +291 -110
- package/src/runtime/actors/actor-join-relocation.ts +3 -0
- package/src/runtime/actors/actor-local-native-join.ts +21 -26
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-remote-wire.ts +17 -0
- package/src/runtime/actors/actor-reply.ts +42 -0
- package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
- package/src/runtime/actors/actor-routed-json-request.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
- package/src/runtime/actors/actor-runtime-state.ts +2 -20
- package/src/runtime/actors/actor-source-transfer.ts +1 -34
- package/src/runtime/actors/index.ts +60 -32
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
- package/src/runtime/admission.ts +69 -21
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
- package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
- package/src/runtime/application-jobs/contracts.ts +16 -1
- package/src/runtime/backend/contracts/index.ts +92 -18
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +160 -57
- package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
- package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
- package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
- package/src/runtime/backend/raw-binding-port.ts +7 -2
- package/src/runtime/backend/runtime-message.ts +6 -0
- package/src/runtime/backend/runtime-values.ts +1 -0
- package/src/runtime/channels/channel-clients.ts +132 -58
- package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
- package/src/runtime/channels/channel-dispatch-services.ts +69 -1
- package/src/runtime/channels/channel-dispatchers.ts +136 -90
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
- package/src/runtime/channels/channel-envelope.ts +225 -31
- package/src/runtime/channels/channel-outbound-operations.ts +22 -8
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +41 -17
- package/src/runtime/channels/channel-transports.ts +171 -112
- package/src/runtime/channels/client-server-location-runtime.ts +11 -10
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
- package/src/runtime/channels/fanout-location-runtime.ts +17 -9
- package/src/runtime/channels/local-spot-route-transport.ts +3 -1
- package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
- package/src/runtime/channels/source-spot-router.ts +8 -4
- package/src/runtime/channels/spot-node-route-transport.ts +8 -4
- package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
- package/src/runtime/diagnostics/flow-context.ts +20 -7
- package/src/runtime/diagnostics/index.ts +1 -7
- package/src/runtime/diagnostics/message-flow.ts +47 -9
- package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
- package/src/runtime/execution/index.ts +40 -14
- package/src/runtime/execution/serial-execution-queue.ts +33 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
- package/src/runtime/foundation/durable-service-request.ts +137 -0
- package/src/runtime/foundation/operation-identity.ts +5 -1
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
- package/src/runtime/foundation/service-liveness-registry.ts +39 -0
- package/src/runtime/foundation/service-mailbox.ts +8 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
- package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
- package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
- package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
- package/src/runtime/foundation/service-stateful-registry.ts +38 -35
- package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
- package/src/runtime/foundation/service-topology-registry.ts +91 -36
- package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
- package/src/runtime/handlers/handler-instance-scope.ts +67 -16
- package/src/runtime/host/actor-packet-relay.ts +113 -94
- package/src/runtime/host/actor-placement-coordinator.ts +31 -8
- package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
- package/src/runtime/host/actor-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +160 -41
- package/src/runtime/host/entry-actor-runtime.ts +4 -0
- package/src/runtime/host/index.ts +473 -271
- package/src/runtime/host/location-runtime-owner.ts +2 -6
- package/src/runtime/host/mesh-router-resolver.ts +13 -5
- package/src/runtime/host/remote-bound-session-relay.ts +88 -271
- package/src/runtime/host/route-mesh-runtime.ts +12 -6
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-control.ts +11 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
- package/src/runtime/host/spot-address-transport.ts +4 -2
- package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- package/src/runtime/locations/actor-location-claims.ts +52 -30
- package/src/runtime/locations/auto-connect-loop.ts +22 -14
- package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
- package/src/runtime/locations/auto-connect-types.ts +0 -1
- package/src/runtime/locations/descriptor-publication.ts +7 -0
- package/src/runtime/locations/domain-store-contract.ts +5 -0
- package/src/runtime/locations/in-memory-authority-store.ts +85 -23
- package/src/runtime/locations/in-memory-location-store.ts +1 -12
- package/src/runtime/locations/index.ts +1 -0
- package/src/runtime/locations/lease-tracker.ts +2 -9
- package/src/runtime/locations/lifecycle.ts +8 -26
- package/src/runtime/locations/location-store-repository.ts +628 -152
- package/src/runtime/locations/relocation-blob.ts +75 -1
- package/src/runtime/locations/request-source-resolver.ts +138 -0
- package/src/runtime/locations/resolvers.ts +2 -2
- package/src/runtime/locations/runtime.ts +98 -64
- package/src/runtime/messaging/framework-json-v1.ts +5 -325
- package/src/runtime/messaging/packet-name.ts +5 -25
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +62 -0
- package/src/runtime/messaging/submission-result.ts +5 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
- package/src/runtime/spots/index.ts +389 -283
- package/src/runtime/spots/spot-activation-registry.ts +25 -13
- package/src/runtime/spots/spot-activation-state.ts +12 -19
- package/src/runtime/spots/spot-activation.ts +198 -96
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
- package/src/runtime/spots/spot-actor-membership.ts +0 -15
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
- package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
- package/src/runtime/spots/spot-entry-activation.ts +33 -21
- package/src/runtime/spots/spot-handler-registry.ts +56 -12
- package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
- package/src/runtime/spots/spot-manager-public.ts +2 -2
- package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +39 -19
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
- package/src/runtime/spots/spot-runtime-ports.ts +1 -1
- package/src/runtime/spots/spot-serial-executor.ts +97 -25
- package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
- package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
- package/src/runtime/spots/spot-timer.ts +418 -158
- package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
- package/src/runtime/streams/bound-session-service.ts +7 -10
- package/src/runtime/streams/index.ts +12 -6
- package/src/runtime/streams/managed-stream.ts +4 -2
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
- package/src/runtime/streams/session-actor-coordinator.ts +39 -88
- package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
- package/src/runtime/streams/stream-session-runtime.ts +13 -34
- package/src/runtime/workers/index.ts +1 -1
|
@@ -4,7 +4,7 @@ import type { ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
|
|
|
4
4
|
export declare class ZLinkSourceSpotRouter {
|
|
5
5
|
private readonly defaultRequestTimeoutMs;
|
|
6
6
|
constructor(defaultRequestTimeoutMs: number | undefined);
|
|
7
|
-
request<TReply>(sourceSpot: ZLinkBackendSpot, target: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal): Promise<TReply>;
|
|
7
|
+
request<TReply>(sourceSpot: ZLinkBackendSpot, target: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<TReply>;
|
|
8
8
|
send(sourceSpot: ZLinkBackendSpot, target: ZLinkSpotRouteTarget, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<void>;
|
|
9
|
-
requestRaw(sourceSpot: ZLinkBackendSpot, target: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal): Promise<readonly Message[]>;
|
|
9
|
+
requestRaw(sourceSpot: ZLinkBackendSpot, target: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<readonly Message[]>;
|
|
10
10
|
}
|
|
@@ -9,12 +9,12 @@ class ZLinkSourceSpotRouter {
|
|
|
9
9
|
constructor(defaultRequestTimeoutMs) {
|
|
10
10
|
this.defaultRequestTimeoutMs = defaultRequestTimeoutMs;
|
|
11
11
|
}
|
|
12
|
-
async request(sourceSpot, target, packetName, request, timeoutMs, signal) {
|
|
12
|
+
async request(sourceSpot, target, packetName, request, timeoutMs, signal, onAdmitted) {
|
|
13
13
|
(0, abort_1.throwIfAborted)(signal);
|
|
14
14
|
const parts = [
|
|
15
15
|
(0, spot_direct_envelope_1.encodeSpotDirectEnvelope)(1 /* ZLinkChannelMessageKind.Request */, target.routerChannelId, packetName, request)
|
|
16
16
|
];
|
|
17
|
-
const operation = sourceSpot.requestToSpot(target.targetNodeRid, target.spotId, parts, timeoutMs ?? this.defaultRequestTimeoutMs);
|
|
17
|
+
const operation = sourceSpot.requestToSpot(target.targetNodeRid, target.spotId, parts, timeoutMs ?? this.defaultRequestTimeoutMs, onAdmitted);
|
|
18
18
|
const replyParts = await (0, abort_1.awaitWithAbort)(operation, signal, () => {
|
|
19
19
|
void operation.then(channel_envelope_1.closeMessages, () => undefined);
|
|
20
20
|
});
|
|
@@ -37,9 +37,9 @@ class ZLinkSourceSpotRouter {
|
|
|
37
37
|
(0, channel_envelope_1.closeMessages)(parts);
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
async requestRaw(sourceSpot, target, request, timeoutMs, signal) {
|
|
40
|
+
async requestRaw(sourceSpot, target, request, timeoutMs, signal, onAdmitted) {
|
|
41
41
|
(0, abort_1.throwIfAborted)(signal);
|
|
42
|
-
const operation = sourceSpot.requestToSpot(target.targetNodeRid, target.spotId, request, timeoutMs ?? this.defaultRequestTimeoutMs);
|
|
42
|
+
const operation = sourceSpot.requestToSpot(target.targetNodeRid, target.spotId, request, timeoutMs ?? this.defaultRequestTimeoutMs, onAdmitted);
|
|
43
43
|
return await (0, abort_1.awaitWithAbort)(operation, signal, () => {
|
|
44
44
|
void operation.then(channel_envelope_1.closeMessages, () => undefined);
|
|
45
45
|
});
|
|
@@ -8,6 +8,6 @@ export declare class ZLinkSpotNodeRouteTransport {
|
|
|
8
8
|
private readonly targets;
|
|
9
9
|
constructor(registration: ZLinkFrameworkRegistration, targets: ZLinkSpotRouteTargetResolver);
|
|
10
10
|
send(target: ZLinkSpotRouteTarget, parts: readonly Message[]): Promise<boolean>;
|
|
11
|
-
request<TReply>(target: ZLinkSpotRouteTarget, parts: readonly Message[], codecs: ZLinkChannelEnvelopeCodecRegistry | undefined, timeoutMs: number | undefined, signal?: AbortSignal): Promise<TReply> | undefined;
|
|
12
|
-
requestRaw(target: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal): Promise<readonly Message[]> | undefined;
|
|
11
|
+
request<TReply>(target: ZLinkSpotRouteTarget, parts: readonly Message[], codecs: ZLinkChannelEnvelopeCodecRegistry | undefined, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<TReply> | undefined;
|
|
12
|
+
requestRaw(target: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<readonly Message[]> | undefined;
|
|
13
13
|
}
|
|
@@ -24,14 +24,14 @@ class ZLinkSpotNodeRouteTransport {
|
|
|
24
24
|
(0, channel_envelope_1.closeMessages)(parts);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
request(target, parts, codecs, timeoutMs, signal) {
|
|
27
|
+
request(target, parts, codecs, timeoutMs, signal, onAdmitted) {
|
|
28
28
|
const router = this.targets.spotNodeRouter(target.routerChannelId);
|
|
29
29
|
if (router === undefined) {
|
|
30
30
|
return undefined;
|
|
31
31
|
}
|
|
32
32
|
const effectiveTimeoutMs = timeoutMs ?? this.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS;
|
|
33
33
|
(0, abort_1.throwIfAborted)(signal);
|
|
34
|
-
const operation = router.requestToSpot(target.targetNodeRid, target.spotId, parts, effectiveTimeoutMs);
|
|
34
|
+
const operation = router.requestToSpot(target.targetNodeRid, target.spotId, parts, effectiveTimeoutMs, onAdmitted);
|
|
35
35
|
return (0, abort_1.awaitWithAbort)(operation, signal, () => {
|
|
36
36
|
void operation.then(channel_envelope_1.closeMessages, () => undefined);
|
|
37
37
|
}).then((replyParts) => {
|
|
@@ -44,14 +44,14 @@ class ZLinkSpotNodeRouteTransport {
|
|
|
44
44
|
}
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
|
-
requestRaw(target, request, timeoutMs, signal) {
|
|
47
|
+
requestRaw(target, request, timeoutMs, signal, onAdmitted) {
|
|
48
48
|
const router = this.targets.spotNodeRouter(target.routerChannelId);
|
|
49
49
|
if (router === undefined) {
|
|
50
50
|
return undefined;
|
|
51
51
|
}
|
|
52
52
|
const effectiveTimeoutMs = timeoutMs ?? this.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS;
|
|
53
53
|
(0, abort_1.throwIfAborted)(signal);
|
|
54
|
-
const operation = router.requestToSpot(target.targetNodeRid, target.spotId, request, effectiveTimeoutMs);
|
|
54
|
+
const operation = router.requestToSpot(target.targetNodeRid, target.spotId, request, effectiveTimeoutMs, onAdmitted);
|
|
55
55
|
return (0, abort_1.awaitWithAbort)(operation, signal, () => {
|
|
56
56
|
void operation.then(channel_envelope_1.closeMessages, () => undefined);
|
|
57
57
|
});
|
|
@@ -8,7 +8,7 @@ export declare class ZLinkSpotRouteBridgeTransport {
|
|
|
8
8
|
constructor(bridges: ReadonlyMap<string, ZLinkBackendSpotRouteBridge>, defaultRequestTimeoutMs: number | undefined);
|
|
9
9
|
has(routerChannelId: string): boolean;
|
|
10
10
|
send(target: ZLinkSpotRouteTarget, parts: readonly Message[]): Promise<void>;
|
|
11
|
-
request<TReply>(target: ZLinkSpotRouteTarget, parts: readonly Message[], codecs: ZLinkChannelEnvelopeCodecRegistry | undefined, timeoutMs: number | undefined, signal?: AbortSignal): Promise<TReply>;
|
|
12
|
-
requestRaw(target: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal): Promise<readonly Message[]>;
|
|
11
|
+
request<TReply>(target: ZLinkSpotRouteTarget, parts: readonly Message[], codecs: ZLinkChannelEnvelopeCodecRegistry | undefined, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<TReply>;
|
|
12
|
+
requestRaw(target: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<readonly Message[]>;
|
|
13
13
|
private requireBridge;
|
|
14
14
|
}
|
|
@@ -24,11 +24,11 @@ class ZLinkSpotRouteBridgeTransport {
|
|
|
24
24
|
(0, channel_envelope_1.closeMessages)(parts);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
async request(target, parts, codecs, timeoutMs, signal) {
|
|
27
|
+
async request(target, parts, codecs, timeoutMs, signal, onAdmitted) {
|
|
28
28
|
const bridge = this.requireBridge(target.routerChannelId);
|
|
29
29
|
const operation = (0, channel_multipart_1.appendParts)(bridge.request(target.routerChannelId, target.targetNodeRid, target.spotId), parts)
|
|
30
30
|
.timeout(timeoutMs ?? 0)
|
|
31
|
-
.submit();
|
|
31
|
+
.submit(onAdmitted);
|
|
32
32
|
const replyParts = await (0, abort_1.awaitWithAbort)(operation, signal, () => {
|
|
33
33
|
void operation.then(channel_envelope_1.closeMessages, () => undefined);
|
|
34
34
|
});
|
|
@@ -40,13 +40,13 @@ class ZLinkSpotRouteBridgeTransport {
|
|
|
40
40
|
(0, channel_envelope_1.closeMessages)(parts);
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
requestRaw(target, request, timeoutMs, signal) {
|
|
43
|
+
requestRaw(target, request, timeoutMs, signal, onAdmitted) {
|
|
44
44
|
const bridge = this.requireBridge(target.routerChannelId);
|
|
45
45
|
const operation = bridge
|
|
46
46
|
.request(target.routerChannelId, target.targetNodeRid, target.spotId)
|
|
47
47
|
.message(request)
|
|
48
48
|
.timeout(timeoutMs ?? this.defaultRequestTimeoutMs ?? 0)
|
|
49
|
-
.submit();
|
|
49
|
+
.submit(onAdmitted);
|
|
50
50
|
return (0, abort_1.awaitWithAbort)(operation, signal, () => {
|
|
51
51
|
void operation.then(channel_envelope_1.closeMessages, () => undefined);
|
|
52
52
|
});
|
|
@@ -13,6 +13,7 @@ export interface ZLinkLocalSpotRouteDispatcher {
|
|
|
13
13
|
request<TReply>(spotId: RoutingId, packetName: string | undefined, request: unknown, context: {
|
|
14
14
|
readonly channelName: string;
|
|
15
15
|
readonly signal?: AbortSignal;
|
|
16
|
+
readonly onAdmitted?: () => void;
|
|
16
17
|
readonly metadata?: ReadonlyMap<string, string>;
|
|
17
18
|
}): Promise<TReply>;
|
|
18
19
|
}
|
|
@@ -39,10 +40,10 @@ export declare class ZLinkSpotRouteDispatchStrategy {
|
|
|
39
40
|
canRoutePacketChannel(routerChannelId: string): boolean;
|
|
40
41
|
routeSendToSpot(spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<void>;
|
|
41
42
|
private routeSendToSpotScoped;
|
|
42
|
-
routeRequestToSpot<TReply>(spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string
|
|
43
|
+
routeRequestToSpot<TReply>(spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void): Promise<TReply>;
|
|
43
44
|
private routeRequestToSpotScoped;
|
|
44
|
-
routeRequestFromSpotToSpot<TReply>(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal): Promise<TReply>;
|
|
45
|
+
routeRequestFromSpotToSpot<TReply>(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<TReply>;
|
|
45
46
|
routeSendFromSpotToSpot(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<void>;
|
|
46
|
-
routeRequestRawFromSpotToSpot(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal): Promise<readonly Message[]>;
|
|
47
|
-
routeRequestRawToSpot(spotRouteTarget: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal): Promise<readonly Message[]>;
|
|
47
|
+
routeRequestRawFromSpotToSpot(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<readonly Message[]>;
|
|
48
|
+
routeRequestRawToSpot(spotRouteTarget: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal, onAdmitted?: () => void): Promise<readonly Message[]>;
|
|
48
49
|
}
|
|
@@ -70,58 +70,58 @@ class ZLinkSpotRouteDispatchStrategy {
|
|
|
70
70
|
}
|
|
71
71
|
await this.routerSocketTransport.send(spotRouteTarget, parts, ZLINK_SEND_DONT_WAIT);
|
|
72
72
|
}
|
|
73
|
-
routeRequestToSpot(spotRouteTarget, packetName, request, timeoutMs, signal, metadata) {
|
|
74
|
-
return (0, flow_context_1.runWithOutboundFlow)(this.options.flowCreationEnabled?.() ?? true, () => this.routeRequestToSpotScoped(spotRouteTarget, packetName, request, timeoutMs, signal, metadata));
|
|
73
|
+
routeRequestToSpot(spotRouteTarget, packetName, request, timeoutMs, signal, metadata, onAdmitted) {
|
|
74
|
+
return (0, flow_context_1.runWithOutboundFlow)(this.options.flowCreationEnabled?.() ?? true, () => this.routeRequestToSpotScoped(spotRouteTarget, packetName, request, timeoutMs, signal, metadata, onAdmitted));
|
|
75
75
|
}
|
|
76
|
-
async routeRequestToSpotScoped(spotRouteTarget, packetName, request, timeoutMs, signal, metadata) {
|
|
76
|
+
async routeRequestToSpotScoped(spotRouteTarget, packetName, request, timeoutMs, signal, metadata, onAdmitted) {
|
|
77
77
|
(0, abort_1.throwIfAborted)(signal);
|
|
78
78
|
const localSpotRouteNode = this.targets.localRouteNode(spotRouteTarget);
|
|
79
79
|
if (localSpotRouteNode !== undefined) {
|
|
80
|
-
return this.localTransport.request(spotRouteTarget.routerChannelId, spotRouteTarget.spotId, packetName, request, timeoutMs, signal);
|
|
80
|
+
return this.localTransport.request(spotRouteTarget.routerChannelId, spotRouteTarget.spotId, packetName, request, timeoutMs, signal, onAdmitted);
|
|
81
81
|
}
|
|
82
82
|
const codecs = (0, channel_framework_packets_1.codecsForFrameworkPacket)(packetName, this.options.codecs);
|
|
83
83
|
const parts = (0, channel_envelope_1.encodeChannelEnvelopeParts)(1 /* ZLinkChannelMessageKind.Request */, spotRouteTarget.routerChannelId, packetName, request, timeoutMs, undefined, codecs, undefined, this.options.flowCreationEnabled?.() ?? true, metadata);
|
|
84
84
|
if (this.targets.hasNamedSpotNode(spotRouteTarget.routerChannelId)) {
|
|
85
|
-
const namedSpotNodeRequest = this.spotNodeTransport.request(spotRouteTarget, parts, codecs, timeoutMs, signal);
|
|
85
|
+
const namedSpotNodeRequest = this.spotNodeTransport.request(spotRouteTarget, parts, codecs, timeoutMs, signal, onAdmitted);
|
|
86
86
|
if (namedSpotNodeRequest !== undefined)
|
|
87
87
|
return namedSpotNodeRequest;
|
|
88
88
|
}
|
|
89
89
|
if (this.bridgeTransport.has(spotRouteTarget.routerChannelId)) {
|
|
90
|
-
return this.bridgeTransport.request(spotRouteTarget, parts, codecs, timeoutMs, signal);
|
|
90
|
+
return this.bridgeTransport.request(spotRouteTarget, parts, codecs, timeoutMs, signal, onAdmitted);
|
|
91
91
|
}
|
|
92
92
|
if (this.targets.hasBoundRouteRouter(spotRouteTarget.routerChannelId)) {
|
|
93
|
-
return this.routerSocketTransport.request(spotRouteTarget, parts, codecs, ZLINK_SEND_DONT_WAIT, timeoutMs, signal);
|
|
93
|
+
return this.routerSocketTransport.request(spotRouteTarget, parts, codecs, ZLINK_SEND_DONT_WAIT, timeoutMs, signal, onAdmitted);
|
|
94
94
|
}
|
|
95
|
-
const spotNodeRequest = this.spotNodeTransport.request(spotRouteTarget, parts, codecs, timeoutMs, signal);
|
|
95
|
+
const spotNodeRequest = this.spotNodeTransport.request(spotRouteTarget, parts, codecs, timeoutMs, signal, onAdmitted);
|
|
96
96
|
if (spotNodeRequest !== undefined) {
|
|
97
97
|
return spotNodeRequest;
|
|
98
98
|
}
|
|
99
|
-
return this.routerSocketTransport.request(spotRouteTarget, parts, codecs, 0, timeoutMs, signal);
|
|
99
|
+
return this.routerSocketTransport.request(spotRouteTarget, parts, codecs, 0, timeoutMs, signal, onAdmitted);
|
|
100
100
|
}
|
|
101
|
-
routeRequestFromSpotToSpot(sourceSpot, spotRouteTarget, packetName, request, timeoutMs, signal) {
|
|
102
|
-
return this.sourceSpotRouter.request(sourceSpot, spotRouteTarget, packetName, request, timeoutMs, signal);
|
|
101
|
+
routeRequestFromSpotToSpot(sourceSpot, spotRouteTarget, packetName, request, timeoutMs, signal, onAdmitted) {
|
|
102
|
+
return this.sourceSpotRouter.request(sourceSpot, spotRouteTarget, packetName, request, timeoutMs, signal, onAdmitted);
|
|
103
103
|
}
|
|
104
104
|
async routeSendFromSpotToSpot(sourceSpot, spotRouteTarget, packetName, message, metadata) {
|
|
105
105
|
await this.sourceSpotRouter.send(sourceSpot, spotRouteTarget, packetName, message, metadata);
|
|
106
106
|
}
|
|
107
|
-
routeRequestRawFromSpotToSpot(sourceSpot, spotRouteTarget, request, timeoutMs, signal) {
|
|
108
|
-
return this.sourceSpotRouter.requestRaw(sourceSpot, spotRouteTarget, request, timeoutMs, signal);
|
|
107
|
+
routeRequestRawFromSpotToSpot(sourceSpot, spotRouteTarget, request, timeoutMs, signal, onAdmitted) {
|
|
108
|
+
return this.sourceSpotRouter.requestRaw(sourceSpot, spotRouteTarget, request, timeoutMs, signal, onAdmitted);
|
|
109
109
|
}
|
|
110
|
-
async routeRequestRawToSpot(spotRouteTarget, request, timeoutMs, signal) {
|
|
110
|
+
async routeRequestRawToSpot(spotRouteTarget, request, timeoutMs, signal, onAdmitted) {
|
|
111
111
|
(0, abort_1.throwIfAborted)(signal);
|
|
112
112
|
if (this.targets.hasNamedSpotNode(spotRouteTarget.routerChannelId)) {
|
|
113
|
-
const namedSpotNodeRequest = this.spotNodeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
|
|
113
|
+
const namedSpotNodeRequest = this.spotNodeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal, onAdmitted);
|
|
114
114
|
if (namedSpotNodeRequest !== undefined)
|
|
115
115
|
return namedSpotNodeRequest;
|
|
116
116
|
}
|
|
117
117
|
if (this.bridgeTransport.has(spotRouteTarget.routerChannelId)) {
|
|
118
|
-
return this.bridgeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
|
|
118
|
+
return this.bridgeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal, onAdmitted);
|
|
119
119
|
}
|
|
120
|
-
const spotNodeRequest = this.spotNodeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
|
|
120
|
+
const spotNodeRequest = this.spotNodeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal, onAdmitted);
|
|
121
121
|
if (spotNodeRequest !== undefined) {
|
|
122
122
|
return spotNodeRequest;
|
|
123
123
|
}
|
|
124
|
-
return this.routerSocketTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
|
|
124
|
+
return this.routerSocketTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal, onAdmitted);
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
exports.ZLinkSpotRouteDispatchStrategy = ZLinkSpotRouteDispatchStrategy;
|
|
@@ -9,7 +9,6 @@ exports.createInboundFlow = createInboundFlow;
|
|
|
9
9
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
10
10
|
const node_crypto_1 = require("node:crypto");
|
|
11
11
|
const FLOW_UUID_BYTES = 16;
|
|
12
|
-
const FLOW_UUID_VARIANT_BYTE = 8;
|
|
13
12
|
/**
|
|
14
13
|
* Spec 27 §3 defines the flow_origin value set as lowercase
|
|
15
14
|
* (`inbound|timer|application|lifecycle`); every language emits these exact
|
|
@@ -70,13 +69,26 @@ function createInboundFlow(flowId, flowOrigin, createIfAbsent, streamSessionId)
|
|
|
70
69
|
}
|
|
71
70
|
return { flowId: flowId ?? createFlowId(), flowOrigin: flowOrigin ?? 'Inbound', streamSessionId };
|
|
72
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* UUIDv7 with a dedicated counter (RFC 9562 §6.2 method 1): the 48-bit
|
|
74
|
+
* millisecond timestamp, then a 42-bit counter that starts at a random value
|
|
75
|
+
* and spans `rand_a` and the top of `rand_b`, then 32 random bits drawn once
|
|
76
|
+
* per process. Flow ids stay unique within the process without drawing
|
|
77
|
+
* random bytes for every message.
|
|
78
|
+
*/
|
|
79
|
+
const flowRandom = (0, node_crypto_1.randomBytes)(FLOW_UUID_BYTES);
|
|
80
|
+
const FLOW_COUNTER_SPAN = 2 ** 42;
|
|
81
|
+
let flowCounter = flowRandom.readUIntBE(0, 6) % FLOW_COUNTER_SPAN;
|
|
82
|
+
const FLOW_ID_TAIL = flowRandom.toString('hex', FLOW_UUID_BYTES - 4);
|
|
73
83
|
function createFlowId() {
|
|
74
|
-
const
|
|
84
|
+
const counter = flowCounter;
|
|
85
|
+
flowCounter = (flowCounter + 1) % FLOW_COUNTER_SPAN;
|
|
75
86
|
// Date.now() is always within 48 bits, which is exactly the UUIDv7
|
|
76
87
|
// timestamp field.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const
|
|
81
|
-
|
|
88
|
+
const timestamp = Date.now().toString(16).padStart(12, '0');
|
|
89
|
+
const randA = Math.floor(counter / 2 ** 30); // 12 bits
|
|
90
|
+
const randB = counter % 2 ** 30; // 30 bits after the 2 variant bits
|
|
91
|
+
const variantHigh = (0x8000 | Math.floor(randB / 2 ** 16)).toString(16);
|
|
92
|
+
const randBLow = (randB % 2 ** 16).toString(16).padStart(4, '0');
|
|
93
|
+
return `${timestamp.slice(0, 8)}-${timestamp.slice(8)}-7${randA.toString(16).padStart(3, '0')}-${variantHigh}-${randBLow}${FLOW_ID_TAIL}`;
|
|
82
94
|
}
|
|
@@ -18,7 +18,6 @@ exports.ZLinkLocationMonitoringEventEmitter = exports.ZLinkLocationRuntimeMonito
|
|
|
18
18
|
exports.isRelocationDebugEnabled = isRelocationDebugEnabled;
|
|
19
19
|
exports.relocationDebug = relocationDebug;
|
|
20
20
|
exports.emitActorOwnerLeaseObservation = emitActorOwnerLeaseObservation;
|
|
21
|
-
const node_async_hooks_1 = require("node:async_hooks");
|
|
22
21
|
const state_lane_1 = require("../execution/state-lane");
|
|
23
22
|
const routing_id_1 = require("../routing-id");
|
|
24
23
|
const internal_event_contracts_1 = require("./internal-event-contracts");
|
|
@@ -29,7 +28,6 @@ Object.defineProperty(exports, "ZLinkLocationRouteEventKind", { enumerable: true
|
|
|
29
28
|
Object.defineProperty(exports, "ZLinkLocationSpotEventKind", { enumerable: true, get: function () { return internal_event_contracts_2.ZLinkLocationSpotEventKind; } });
|
|
30
29
|
Object.defineProperty(exports, "ZLinkSocketNativeEventType", { enumerable: true, get: function () { return internal_event_contracts_2.ZLinkSocketNativeEventType; } });
|
|
31
30
|
const ZLINK_DISCONNECT_REASON_HANDSHAKE_FAILED = 3;
|
|
32
|
-
const detachedStateLaneResource = new node_async_hooks_1.AsyncResource('zlink:location-runtime-monitoring-source');
|
|
33
31
|
function isRelocationDebugEnabled() {
|
|
34
32
|
return process.env.ZLINK_DEBUG_FRAMEWORK_RELOCATION === '1';
|
|
35
33
|
}
|
|
@@ -113,7 +111,7 @@ class ZLinkLocationRuntimeMonitoringSource {
|
|
|
113
111
|
let topology;
|
|
114
112
|
let serviceSummary;
|
|
115
113
|
try {
|
|
116
|
-
[status, topology, serviceSummary] = await startOutsideStateLane(() => Promise.all([
|
|
114
|
+
[status, topology, serviceSummary] = await (0, state_lane_1.startOutsideStateLane)(() => Promise.all([
|
|
117
115
|
this.query.getStatus(signal),
|
|
118
116
|
this.query.listTopology({}, undefined, signal),
|
|
119
117
|
this.query.listServiceSummaries({}, undefined, signal)
|
|
@@ -121,7 +119,7 @@ class ZLinkLocationRuntimeMonitoringSource {
|
|
|
121
119
|
}
|
|
122
120
|
catch (error) {
|
|
123
121
|
if (await this.lane.run(() => this.markStoreFailureCore())) {
|
|
124
|
-
await startOutsideStateLane(() => this.publisher.publish({
|
|
122
|
+
await (0, state_lane_1.startOutsideStateLane)(() => this.publisher.publish({
|
|
125
123
|
sourceName: this.registration.sourceName,
|
|
126
124
|
timestamp: new Date(),
|
|
127
125
|
event: internal_event_contracts_1.ZLinkLocationRuntimeEventKind.StoreFailure
|
|
@@ -130,7 +128,7 @@ class ZLinkLocationRuntimeMonitoringSource {
|
|
|
130
128
|
return;
|
|
131
129
|
}
|
|
132
130
|
if (await this.lane.run(() => this.markStoreRecoveredCore())) {
|
|
133
|
-
await startOutsideStateLane(() => this.publisher.publish({
|
|
131
|
+
await (0, state_lane_1.startOutsideStateLane)(() => this.publisher.publish({
|
|
134
132
|
sourceName: this.registration.sourceName,
|
|
135
133
|
timestamp: new Date(),
|
|
136
134
|
event: internal_event_contracts_1.ZLinkLocationRuntimeEventKind.StoreRecovered
|
|
@@ -157,7 +155,7 @@ class ZLinkLocationRuntimeMonitoringSource {
|
|
|
157
155
|
const previous = await this.lane.run(() => this.previousSnapshotCore(event));
|
|
158
156
|
if (current === previous)
|
|
159
157
|
return;
|
|
160
|
-
await startOutsideStateLane(() => publishLocationRuntimeChange(this.publisher, this.registration.sourceName, event, snapshot));
|
|
158
|
+
await (0, state_lane_1.startOutsideStateLane)(() => publishLocationRuntimeChange(this.publisher, this.registration.sourceName, event, snapshot));
|
|
161
159
|
await this.lane.run(() => this.updateSnapshotCore(event, current));
|
|
162
160
|
}
|
|
163
161
|
previousSnapshotCore(event) {
|
|
@@ -352,9 +350,6 @@ async function publishLocationRuntimeChange(publisher, sourceName, event, snapsh
|
|
|
352
350
|
};
|
|
353
351
|
await publisher.publish(runtimeEvent);
|
|
354
352
|
}
|
|
355
|
-
function startOutsideStateLane(work) {
|
|
356
|
-
return detachedStateLaneResource.runInAsyncScope(work);
|
|
357
|
-
}
|
|
358
353
|
function stableSnapshot(value) {
|
|
359
354
|
return JSON.stringify(value, (_key, item) => (typeof item === 'bigint' ? item.toString() : item));
|
|
360
355
|
}
|
|
@@ -12,6 +12,12 @@ export interface ZLinkDiagnosticsContext {
|
|
|
12
12
|
export declare const DEFAULT_ZLINK_DIAGNOSTICS: ZLinkDiagnosticsOptions;
|
|
13
13
|
export declare const telemetryLogger: import("@opentelemetry/api-logs").Logger;
|
|
14
14
|
export declare function effectiveMessageFlow(ctx: ZLinkDiagnosticsContext): ZLinkMessageFlowLogMode;
|
|
15
|
+
/**
|
|
16
|
+
* Message-flow tracing is on at Normal and Detailed only (04-flow-correlation
|
|
17
|
+
* §4). Below it no flow ID is created, validated, captured or propagated. This
|
|
18
|
+
* is the one decision every flow processing point reads.
|
|
19
|
+
*/
|
|
20
|
+
export declare function messageFlowTracingEnabled(mode: ZLinkMessageFlowLogMode): boolean;
|
|
15
21
|
export declare function createMessageFlowModeCell(dispatch: {
|
|
16
22
|
diagnostics?: ZLinkDiagnosticsOptions;
|
|
17
23
|
} | undefined): ZLinkMessageFlowModeCell;
|
|
@@ -22,7 +28,9 @@ export declare function flowIfEnabled(flow: ZLinkMessageFlowTracer | undefined,
|
|
|
22
28
|
export interface ZLinkMessageFlowTracePoint {
|
|
23
29
|
trace(flowInput: MessageFlowInput): void;
|
|
24
30
|
}
|
|
31
|
+
export declare function traceSessionBindingControlDrop(flow: ZLinkMessageFlowTracer | undefined, sourceRid: string, actorId: string, packetName: string, errorReason: 'location_unavailable' | 'stale_target', error?: unknown): void;
|
|
25
32
|
type MessageFlowInput = Omit<ZLinkRuntimeMessageFlowEvent, 'effectiveMode' | 'flowId' | 'flowOrigin'> & {
|
|
33
|
+
readonly severity?: 'warning';
|
|
26
34
|
readonly effectiveMode?: ZLinkMessageFlowLogMode;
|
|
27
35
|
readonly flowId?: string;
|
|
28
36
|
readonly flowOrigin?: import('../../contracts').ZLinkFlowOrigin;
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkMessageFlowTracer = exports.telemetryLogger = exports.DEFAULT_ZLINK_DIAGNOSTICS = void 0;
|
|
4
4
|
exports.effectiveMessageFlow = effectiveMessageFlow;
|
|
5
|
+
exports.messageFlowTracingEnabled = messageFlowTracingEnabled;
|
|
5
6
|
exports.createMessageFlowModeCell = createMessageFlowModeCell;
|
|
6
7
|
exports.createDiagnosticsContext = createDiagnosticsContext;
|
|
7
8
|
exports.flowIfEnabled = flowIfEnabled;
|
|
9
|
+
exports.traceSessionBindingControlDrop = traceSessionBindingControlDrop;
|
|
8
10
|
const api_1 = require("@opentelemetry/api");
|
|
9
11
|
const api_logs_1 = require("@opentelemetry/api-logs");
|
|
10
12
|
const contracts_1 = require("../../contracts");
|
|
@@ -24,6 +26,14 @@ let diagnosticsGeneration = 0n;
|
|
|
24
26
|
function effectiveMessageFlow(ctx) {
|
|
25
27
|
return ctx.liveMode.mode;
|
|
26
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Message-flow tracing is on at Normal and Detailed only (04-flow-correlation
|
|
31
|
+
* §4). Below it no flow ID is created, validated, captured or propagated. This
|
|
32
|
+
* is the one decision every flow processing point reads.
|
|
33
|
+
*/
|
|
34
|
+
function messageFlowTracingEnabled(mode) {
|
|
35
|
+
return contracts_1.MESSAGE_FLOW_MODE_RANK[mode] >= contracts_1.MESSAGE_FLOW_MODE_RANK.normal;
|
|
36
|
+
}
|
|
27
37
|
function createMessageFlowModeCell(dispatch) {
|
|
28
38
|
return { mode: dispatch?.diagnostics?.messageFlow ?? 'errors' };
|
|
29
39
|
}
|
|
@@ -53,6 +63,21 @@ function flowIfEnabled(flow, outcome, result, flowId, sourceMeshGeneration) {
|
|
|
53
63
|
? flow
|
|
54
64
|
: undefined;
|
|
55
65
|
}
|
|
66
|
+
function traceSessionBindingControlDrop(flow, sourceRid, actorId, packetName, errorReason, error) {
|
|
67
|
+
const point = flowIfEnabled(flow, ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped);
|
|
68
|
+
if (point === undefined)
|
|
69
|
+
return;
|
|
70
|
+
point.trace({
|
|
71
|
+
outcome: ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped,
|
|
72
|
+
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.StreamSession,
|
|
73
|
+
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Control,
|
|
74
|
+
sourceRid,
|
|
75
|
+
actorId,
|
|
76
|
+
packetName,
|
|
77
|
+
errorReason,
|
|
78
|
+
...(0, dispatch_error_details_1.dispatchErrorDetails)(error)
|
|
79
|
+
});
|
|
80
|
+
}
|
|
56
81
|
class ZLinkMessageFlowTracer {
|
|
57
82
|
ctx;
|
|
58
83
|
errorSink;
|
|
@@ -100,7 +125,7 @@ class ZLinkMessageFlowTracer {
|
|
|
100
125
|
}
|
|
101
126
|
}
|
|
102
127
|
flowCreationEnabled() {
|
|
103
|
-
return effectiveMessageFlow(this.ctx)
|
|
128
|
+
return messageFlowTracingEnabled(effectiveMessageFlow(this.ctx));
|
|
104
129
|
}
|
|
105
130
|
trace(flowInput) {
|
|
106
131
|
const effectiveMode = effectiveMessageFlow(this.ctx);
|
|
@@ -164,12 +189,16 @@ class ZLinkMessageFlowTracer {
|
|
|
164
189
|
}
|
|
165
190
|
publishToLogger(record) {
|
|
166
191
|
try {
|
|
167
|
-
const
|
|
192
|
+
const severity = record.severity === 'warning'
|
|
193
|
+
? 'WARN'
|
|
194
|
+
: record.eventId === DISPATCH_ERROR_EVENT_ID
|
|
195
|
+
? 'ERROR'
|
|
196
|
+
: 'INFO';
|
|
168
197
|
exports.telemetryLogger.emit({
|
|
169
198
|
eventName: record.eventId,
|
|
170
199
|
timestamp: record.timestamp,
|
|
171
|
-
severityNumber,
|
|
172
|
-
severityText:
|
|
200
|
+
severityNumber: api_logs_1.SeverityNumber[severity],
|
|
201
|
+
severityText: severity,
|
|
173
202
|
body: structuredLogBody(record),
|
|
174
203
|
attributes: structuredLogAttributes(record)
|
|
175
204
|
});
|
|
@@ -205,6 +234,7 @@ class ZLinkMessageFlowTracer {
|
|
|
205
234
|
exports.ZLinkMessageFlowTracer = ZLinkMessageFlowTracer;
|
|
206
235
|
function toTelemetryRecord(flow, messageSizeBytes, durationSeconds) {
|
|
207
236
|
return {
|
|
237
|
+
severity: flow.severity,
|
|
208
238
|
eventId: flow.outcome === ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Error
|
|
209
239
|
? DISPATCH_ERROR_EVENT_ID
|
|
210
240
|
: MESSAGE_FLOW_EVENT_ID,
|
|
@@ -243,7 +273,7 @@ function toTelemetryRecord(flow, messageSizeBytes, durationSeconds) {
|
|
|
243
273
|
function traceAttributes(record) {
|
|
244
274
|
const attributes = {};
|
|
245
275
|
for (const [name, value] of Object.entries(record)) {
|
|
246
|
-
if (value === undefined || name === 'timestamp')
|
|
276
|
+
if (value === undefined || name === 'timestamp' || name === 'severity')
|
|
247
277
|
continue;
|
|
248
278
|
attributes[toSnakeCase(name)] = value instanceof Date ? value.toISOString() : value;
|
|
249
279
|
}
|
|
@@ -20,8 +20,8 @@ export interface ZLinkRuntimeMetricMeshSnapshot {
|
|
|
20
20
|
readonly channelName: string;
|
|
21
21
|
readonly readyMembers: number;
|
|
22
22
|
}>;
|
|
23
|
-
readonly actorCapacity
|
|
24
|
-
readonly spotCapacity
|
|
23
|
+
readonly actorCapacity?: ZLinkRuntimeMetricCapacity;
|
|
24
|
+
readonly spotCapacity?: ZLinkRuntimeMetricCapacity;
|
|
25
25
|
readonly spotTypeCapacities: ReadonlyArray<ZLinkRuntimeMetricSpotTypeCapacity>;
|
|
26
26
|
readonly activation: {
|
|
27
27
|
readonly active: number;
|
|
@@ -286,14 +286,16 @@ class MetricRegistry {
|
|
|
286
286
|
}
|
|
287
287
|
else if (name.startsWith('zlink.object.capacity.')) {
|
|
288
288
|
const field = metricSuffix(name);
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
289
|
+
if (snapshot.actorCapacity !== undefined)
|
|
290
|
+
result.observe(capacityValue(snapshot.actorCapacity, field), {
|
|
291
|
+
...mesh,
|
|
292
|
+
capacity_scope: 'actor'
|
|
293
|
+
});
|
|
294
|
+
if (snapshot.spotCapacity !== undefined)
|
|
295
|
+
result.observe(capacityValue(snapshot.spotCapacity, field), {
|
|
296
|
+
...mesh,
|
|
297
|
+
capacity_scope: 'spot'
|
|
298
|
+
});
|
|
297
299
|
}
|
|
298
300
|
else if (name.startsWith('zlink.spot.type.capacity.')) {
|
|
299
301
|
const field = metricSuffix(name);
|
|
@@ -20,6 +20,7 @@ export declare class ZLinkSpotSerialTurn {
|
|
|
20
20
|
private suspendedResolve;
|
|
21
21
|
private suspendedPromise;
|
|
22
22
|
private suspendSignaled;
|
|
23
|
+
private yieldUsed;
|
|
23
24
|
private owner;
|
|
24
25
|
private frameworkOperationsBlocked;
|
|
25
26
|
constructor(postResume: (turn: ZLinkSpotSerialTurn, resume: () => void, reject: (reason: unknown) => void) => boolean, executionClaim: ZLinkExecutionBarrierClaim | undefined, yieldAllowed: boolean);
|
|
@@ -34,6 +35,7 @@ export declare class ZLinkSpotSerialTurn {
|
|
|
34
35
|
blockFrameworkOperations(): void;
|
|
35
36
|
ensureFrameworkOperationAllowed(): void;
|
|
36
37
|
resetSuspension(): void;
|
|
38
|
+
admitYield(): void;
|
|
37
39
|
yieldPromise<T>(pending: Promise<T>): Promise<T>;
|
|
38
40
|
/** Suspends a turn only for a Framework-owned lifecycle boundary. */
|
|
39
41
|
yieldFrameworkPromise<T>(pending: Promise<T>): Promise<T>;
|
|
@@ -47,14 +49,14 @@ export declare function captureZLinkSpotSerialTurn(executor?: ZLinkSpotSerialTur
|
|
|
47
49
|
export declare function currentZLinkSpotSerialSourceId(): unknown;
|
|
48
50
|
export declare function requireZLinkYieldTurn(capturedTurn?: ZLinkSpotSerialTurn): ZLinkSpotSerialTurn;
|
|
49
51
|
export interface ZLinkCapturedExecutionTurn {
|
|
50
|
-
yieldPromise<T>(
|
|
52
|
+
yieldPromise<T>(operation: () => Promise<T>): Promise<T>;
|
|
51
53
|
post(callback: () => void): void;
|
|
52
54
|
}
|
|
53
55
|
export declare function captureZLinkExecutionTurn(): ZLinkCapturedExecutionTurn | undefined;
|
|
54
56
|
export declare function isCurrentZLinkSpotSerialTurn(executor: ZLinkSpotSerialTurnExecutorLike): boolean;
|
|
55
57
|
export interface ZLinkExecutionBarrierSeal {
|
|
56
58
|
readonly generation: bigint;
|
|
57
|
-
readonly kind: 'close' | 'relocation';
|
|
59
|
+
readonly kind: 'close' | 'relocation' | 'activation';
|
|
58
60
|
}
|
|
59
61
|
export interface ZLinkExecutionBarrierClaim {
|
|
60
62
|
release(): void;
|
|
@@ -11,7 +11,6 @@ exports.requireZLinkYieldTurn = requireZLinkYieldTurn;
|
|
|
11
11
|
exports.captureZLinkExecutionTurn = captureZLinkExecutionTurn;
|
|
12
12
|
exports.isCurrentZLinkSpotSerialTurn = isCurrentZLinkSpotSerialTurn;
|
|
13
13
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
14
|
-
const configuration_1 = require("../configuration");
|
|
15
14
|
const abort_1 = require("../abort");
|
|
16
15
|
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
17
16
|
var state_lane_1 = require("./state-lane");
|
|
@@ -36,6 +35,7 @@ class ZLinkSpotSerialTurn {
|
|
|
36
35
|
suspendedResolve;
|
|
37
36
|
suspendedPromise;
|
|
38
37
|
suspendSignaled = false;
|
|
38
|
+
yieldUsed = false;
|
|
39
39
|
owner;
|
|
40
40
|
frameworkOperationsBlocked = false;
|
|
41
41
|
constructor(postResume, executionClaim, yieldAllowed) {
|
|
@@ -79,22 +79,34 @@ class ZLinkSpotSerialTurn {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
resetSuspension() {
|
|
82
|
+
this.yieldUsed = false;
|
|
82
83
|
this.suspendSignaled = false;
|
|
83
84
|
this.suspendedResolve = undefined;
|
|
84
85
|
this.suspendedPromise = undefined;
|
|
85
86
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
admitYield() {
|
|
88
|
+
const current = spotSerialTurnStorage.getStore();
|
|
89
|
+
if (current?.turn !== this ||
|
|
90
|
+
!this.yieldAllowed ||
|
|
91
|
+
!current.executor.isActiveTurn(this, current.turnId) ||
|
|
92
|
+
this.yieldUsed) {
|
|
93
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, 'Yield requires the current SpotWide application turn and may be used only once per turn.');
|
|
89
94
|
}
|
|
95
|
+
this.yieldUsed = true;
|
|
96
|
+
}
|
|
97
|
+
async yieldPromise(pending) {
|
|
98
|
+
this.admitYield();
|
|
90
99
|
return await this.yieldFrameworkPromise(pending);
|
|
91
100
|
}
|
|
92
101
|
/** Suspends a turn only for a Framework-owned lifecycle boundary. */
|
|
93
102
|
async yieldFrameworkPromise(pending) {
|
|
94
103
|
this.signalSuspended();
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
104
|
+
try {
|
|
105
|
+
return await pending;
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
await this.awaitResumePermit();
|
|
109
|
+
}
|
|
98
110
|
}
|
|
99
111
|
async resumeOwnerUntilNextYield() {
|
|
100
112
|
const owner = this.owner;
|
|
@@ -146,9 +158,10 @@ function currentZLinkSpotSerialSourceId() {
|
|
|
146
158
|
}
|
|
147
159
|
function requireZLinkYieldTurn(capturedTurn) {
|
|
148
160
|
const turn = capturedTurn ?? captureZLinkSpotSerialTurn();
|
|
149
|
-
if (turn === undefined
|
|
150
|
-
throw
|
|
161
|
+
if (turn === undefined) {
|
|
162
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, 'Yield requires a current SpotWide application turn.');
|
|
151
163
|
}
|
|
164
|
+
turn.admitYield();
|
|
152
165
|
return turn;
|
|
153
166
|
}
|
|
154
167
|
function captureZLinkExecutionTurn() {
|
|
@@ -157,7 +170,17 @@ function captureZLinkExecutionTurn() {
|
|
|
157
170
|
return undefined;
|
|
158
171
|
}
|
|
159
172
|
return {
|
|
160
|
-
yieldPromise: (
|
|
173
|
+
yieldPromise: (operation) => {
|
|
174
|
+
const turn = requireZLinkYieldTurn(current.turn);
|
|
175
|
+
let pending;
|
|
176
|
+
try {
|
|
177
|
+
pending = operation();
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
pending = Promise.reject(error);
|
|
181
|
+
}
|
|
182
|
+
return turn.yieldFrameworkPromise(pending);
|
|
183
|
+
},
|
|
161
184
|
post: (callback) => {
|
|
162
185
|
void current.executor.post(callback);
|
|
163
186
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export type ZLinkSerialWorkLane = 'application' | 'lifecycle';
|
|
2
2
|
export interface ZLinkSerialWorkOptions {
|
|
3
|
+
readonly onAdmitted?: () => void;
|
|
4
|
+
/** Transfers an unstarted durable record out of this FIFO in the owner turn. */
|
|
5
|
+
readonly onWithdrawable?: (withdraw: () => boolean) => void;
|
|
3
6
|
readonly lane?: ZLinkSerialWorkLane;
|
|
4
7
|
readonly payloadBytes?: number;
|
|
5
8
|
readonly metadataBytes?: number;
|
|
@@ -66,7 +69,9 @@ export declare class ZLinkSerialExecutionQueue {
|
|
|
66
69
|
submitPreAdmitted<T>(operation: () => Promise<T> | T, options?: ZLinkSerialWorkOptions, context?: unknown): Promise<T>;
|
|
67
70
|
/** Holds lifecycle FIFO through an operation result while its application turns can run. */
|
|
68
71
|
submitLifecycleOperation<T>(operation: () => Promise<T> | T, context?: ZLinkSerialLifecycleContext): Promise<T>;
|
|
72
|
+
get retainsApplicationForLifecycle(): boolean;
|
|
69
73
|
visitPendingApplication(visitor: (record: ZLinkSerialWorkRecord<unknown>) => void): void;
|
|
74
|
+
get hasPendingDurableApplication(): boolean;
|
|
70
75
|
get hasPendingWork(): boolean;
|
|
71
76
|
whenIdle(): Promise<void>;
|
|
72
77
|
/** Stops new submissions while allowing the accepted FIFO to finish. */
|