@zlink-systems/framework 0.21.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +28 -22
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
- package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/contracts/index.d.ts +1 -0
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +46 -42
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
- package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
- package/dist/runtime/diagnostics/flow-context.js +2 -2
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +58 -42
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
- package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
- package/dist/runtime/foundation/service-topology-registry.js +105 -96
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +245 -228
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +209 -220
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
- package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
- package/dist/runtime/spots/spot-timer.js +26 -30
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
- package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
- package/dist/runtime/streams/bound-session-response-target.js +8 -1
- package/dist/runtime/streams/bound-session-service.d.ts +1 -0
- package/dist/runtime/streams/bound-session-service.js +14 -12
- package/dist/runtime/streams/index.js +28 -20
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +52 -31
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.d.ts +5 -1
- package/dist/runtime/streams/protocol.js +68 -20
- package/dist/runtime/streams/session-actor-coordinator.js +37 -41
- package/dist/runtime/streams/session-context.d.ts +9 -2
- package/dist/runtime/streams/session-context.js +50 -32
- package/dist/runtime/streams/session-local-actors.d.ts +3 -1
- package/dist/runtime/streams/session-local-actors.js +17 -2
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
- package/dist/runtime/streams/stream-frame-factory.js +14 -7
- package/dist/runtime/streams/stream-session-runtime.js +112 -78
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +3 -3
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +2 -2
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +142 -134
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +77 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +218 -206
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
- package/src/runtime/diagnostics/flow-context.ts +18 -7
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +107 -79
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +170 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +595 -564
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
- package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
- package/src/runtime/spots/spot-timer.ts +103 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
- package/src/runtime/streams/bound-session-response-target.ts +39 -9
- package/src/runtime/streams/bound-session-service.ts +52 -42
- package/src/runtime/streams/index.ts +183 -100
- package/src/runtime/streams/managed-stream.ts +123 -90
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +115 -46
- package/src/runtime/streams/session-actor-coordinator.ts +109 -93
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +96 -51
- package/src/runtime/streams/session-local-actors.ts +19 -3
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +59 -40
- package/src/runtime/streams/stream-session-runtime.ts +317 -214
- package/src/runtime/workers/index.ts +68 -29
package/src/runtime/admission.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ZLinkFrameworkInternalErrorKind,
|
|
3
|
+
createInternalFrameworkException
|
|
4
|
+
} from './framework-errors-internal';
|
|
2
5
|
export class ZLinkRuntimeAdmissionGate {
|
|
3
6
|
private readonly meshes = new Map<string, ZLinkMeshAdmissionState>();
|
|
4
7
|
|
|
@@ -100,8 +103,8 @@ export class ZLinkRuntimeAdmissionGate {
|
|
|
100
103
|
}
|
|
101
104
|
reject(signal?.reason);
|
|
102
105
|
};
|
|
103
|
-
|
|
104
|
-
|
|
106
|
+
state.waiters.push(complete);
|
|
107
|
+
state.waiterCount += 1;
|
|
105
108
|
signal?.addEventListener('abort', abort, { once: true });
|
|
106
109
|
});
|
|
107
110
|
}
|
|
@@ -113,9 +116,7 @@ export class ZLinkRuntimeAdmissionGate {
|
|
|
113
116
|
return;
|
|
114
117
|
}
|
|
115
118
|
throw createInternalFrameworkException(
|
|
116
|
-
meshName === undefined
|
|
117
|
-
? this.firstSealedReason()
|
|
118
|
-
: this.requireState(meshName).sealedReason,
|
|
119
|
+
meshName === undefined ? this.firstSealedReason() : this.requireState(meshName).sealedReason,
|
|
119
120
|
`${operation} was rejected because framework admission is closed.`
|
|
120
121
|
);
|
|
121
122
|
}
|
|
@@ -126,9 +127,8 @@ export class ZLinkRuntimeAdmissionGate {
|
|
|
126
127
|
} else if (this.accepts(meshName)) {
|
|
127
128
|
return;
|
|
128
129
|
}
|
|
129
|
-
const reason =
|
|
130
|
-
? this.firstSealedReason()
|
|
131
|
-
: this.requireState(meshName).sealedReason;
|
|
130
|
+
const reason =
|
|
131
|
+
meshName === undefined ? this.firstSealedReason() : this.requireState(meshName).sealedReason;
|
|
132
132
|
throw createInternalFrameworkException(
|
|
133
133
|
reason === ZLinkFrameworkInternalErrorKind.RuntimeShutdown
|
|
134
134
|
? ZLinkFrameworkInternalErrorKind.RuntimeShutdown
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ApplicationJobPermitPort,
|
|
3
|
-
ApplicationJobQueuePort
|
|
4
|
-
} from './contracts';
|
|
1
|
+
import type { ApplicationJobPermitPort, ApplicationJobQueuePort } from './contracts';
|
|
5
2
|
|
|
6
3
|
export type ApplicationJobRecordDomain = 'application' | 'infrastructure';
|
|
7
4
|
|
|
@@ -53,9 +50,8 @@ export class ApplicationIngressRecordOwner {
|
|
|
53
50
|
const initial = this.shared.takeInitialPermit(domain);
|
|
54
51
|
if (initial !== undefined) return initial;
|
|
55
52
|
|
|
56
|
-
const waitSignal =
|
|
57
|
-
? this.stop.signal
|
|
58
|
-
: AbortSignal.any([this.stop.signal, signal]);
|
|
53
|
+
const waitSignal =
|
|
54
|
+
signal === undefined ? this.stop.signal : AbortSignal.any([this.stop.signal, signal]);
|
|
59
55
|
const permit = await this.shared.acquirePermit(waitSignal);
|
|
60
56
|
if (this.closed) {
|
|
61
57
|
permit.releaseAfterInternalProcessing();
|
|
@@ -125,11 +121,7 @@ export class ApplicationJobRecordLease implements ApplicationJobPermitPort {
|
|
|
125
121
|
}
|
|
126
122
|
|
|
127
123
|
private releaseJobIfTerminal(): void {
|
|
128
|
-
if (
|
|
129
|
-
this.jobReleased
|
|
130
|
-
|| !this.ingressClosed
|
|
131
|
-
|| !this.processingTerminal
|
|
132
|
-
) return;
|
|
124
|
+
if (this.jobReleased || !this.ingressClosed || !this.processingTerminal) return;
|
|
133
125
|
this.jobReleased = true;
|
|
134
126
|
this.shared.releaseJob();
|
|
135
127
|
}
|
|
@@ -160,9 +152,7 @@ class SharedIngressRecordState {
|
|
|
160
152
|
this.tryCloseIngressRecord();
|
|
161
153
|
}
|
|
162
154
|
|
|
163
|
-
takeInitialPermit(
|
|
164
|
-
domain: ApplicationJobRecordDomain
|
|
165
|
-
): ApplicationJobRecordLease | undefined {
|
|
155
|
+
takeInitialPermit(domain: ApplicationJobRecordDomain): ApplicationJobRecordLease | undefined {
|
|
166
156
|
const permit = this.initialPermit;
|
|
167
157
|
if (permit === undefined) return undefined;
|
|
168
158
|
this.initialPermit = undefined;
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Internal E2E seam for holding one acquired application-job permit until the
|
|
3
3
|
* handler turn completes. Production hosts do not register this provider.
|
|
4
4
|
*/
|
|
5
|
-
export const ZLINK_INTERNAL_APPLICATION_JOB_QUEUE_HANDLER_START_GATE =
|
|
6
|
-
|
|
5
|
+
export const ZLINK_INTERNAL_APPLICATION_JOB_QUEUE_HANDLER_START_GATE = Symbol.for(
|
|
6
|
+
'zlink.internal.application-job-queue-handler-start-gate'
|
|
7
|
+
);
|
|
7
8
|
|
|
8
9
|
export interface ZLinkInternalApplicationJobQueueHandlerStartGate {
|
|
9
10
|
shouldHoldPermitBeforeHandler(): boolean;
|
|
@@ -44,9 +44,9 @@ export class ApplicationJobReceiveFlowController<TNativeState> {
|
|
|
44
44
|
private readonly toNativeState: (state: ApplicationJobPressureState) => TNativeState,
|
|
45
45
|
private readonly failureSink?: (error: unknown) => void
|
|
46
46
|
) {
|
|
47
|
-
this.unregisterPressureListener =
|
|
48
|
-
(state, sequence) => this.apply(state, sequence)
|
|
49
|
-
|
|
47
|
+
this.unregisterPressureListener =
|
|
48
|
+
queue?.onPressureStateChange?.((state, sequence) => this.apply(state, sequence)) ??
|
|
49
|
+
(() => undefined);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
register(target: ApplicationJobReceiveFlowTarget<TNativeState>): boolean {
|
|
@@ -106,9 +106,9 @@ export class ApplicationJobReceiveFlowController<TNativeState> {
|
|
|
106
106
|
private currentTransition(): ApplicationJobPressureTransition | undefined {
|
|
107
107
|
const snapshot = this.queue?.pressureTransition?.();
|
|
108
108
|
const fallbackState = snapshot === undefined ? this.queue?.pressureState?.() : undefined;
|
|
109
|
-
const current =
|
|
110
|
-
|
|
111
|
-
: { state: fallbackState, sequence: 0n });
|
|
109
|
+
const current =
|
|
110
|
+
snapshot ??
|
|
111
|
+
(fallbackState === undefined ? undefined : { state: fallbackState, sequence: 0n });
|
|
112
112
|
if (this.latestTransition === undefined) return current;
|
|
113
113
|
if (current === undefined || this.latestTransition.sequence > current.sequence) {
|
|
114
114
|
return this.latestTransition;
|
|
@@ -117,8 +117,10 @@ export class ApplicationJobReceiveFlowController<TNativeState> {
|
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
private rememberLatest(transition: ApplicationJobPressureTransition): void {
|
|
120
|
-
if (
|
|
121
|
-
|
|
120
|
+
if (
|
|
121
|
+
this.latestTransition === undefined ||
|
|
122
|
+
transition.sequence > this.latestTransition.sequence
|
|
123
|
+
) {
|
|
122
124
|
this.latestTransition = transition;
|
|
123
125
|
}
|
|
124
126
|
}
|
|
@@ -129,18 +131,19 @@ export class ApplicationJobReceiveFlowController<TNativeState> {
|
|
|
129
131
|
transition: ApplicationJobPressureTransition,
|
|
130
132
|
throwOnFailure: boolean
|
|
131
133
|
): void {
|
|
132
|
-
if (
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
134
|
+
if (
|
|
135
|
+
this.targets.get(target) !== targetState ||
|
|
136
|
+
transition.sequence <= targetState.appliedSequence ||
|
|
137
|
+
(targetState.pending !== undefined && transition.sequence <= targetState.pending.sequence)
|
|
138
|
+
)
|
|
139
|
+
return;
|
|
136
140
|
targetState.pending = transition;
|
|
137
141
|
if (targetState.applying) return;
|
|
138
142
|
|
|
139
143
|
targetState.applying = true;
|
|
140
144
|
let firstFailure: unknown;
|
|
141
145
|
try {
|
|
142
|
-
while (this.targets.get(target) === targetState
|
|
143
|
-
&& targetState.pending !== undefined) {
|
|
146
|
+
while (this.targets.get(target) === targetState && targetState.pending !== undefined) {
|
|
144
147
|
const next = targetState.pending;
|
|
145
148
|
targetState.pending = undefined;
|
|
146
149
|
if (next.sequence <= targetState.appliedSequence) continue;
|
|
@@ -7,10 +7,7 @@ import type {
|
|
|
7
7
|
ZLinkBackendTopicMessage
|
|
8
8
|
} from '../runtime-values';
|
|
9
9
|
import type { CoreHwmBudgetSnapshot } from '@zlink-systems/zlink';
|
|
10
|
-
import {
|
|
11
|
-
type ZLinkBackendRecvFlags,
|
|
12
|
-
type ZLinkBackendSendFlags
|
|
13
|
-
} from '../runtime-values';
|
|
10
|
+
import { type ZLinkBackendRecvFlags, type ZLinkBackendSendFlags } from '../runtime-values';
|
|
14
11
|
export * from '../runtime-values';
|
|
15
12
|
type MessageLike = ZLinkBackendMessageLike;
|
|
16
13
|
type Received = ZLinkBackendReceived;
|
|
@@ -27,9 +24,7 @@ import type {
|
|
|
27
24
|
ServiceSpot,
|
|
28
25
|
StreamSessionService
|
|
29
26
|
} from '../../foundation/service-runtime-contracts';
|
|
30
|
-
import type {
|
|
31
|
-
RoutingId
|
|
32
|
-
} from '../../../contracts';
|
|
27
|
+
import type { RoutingId } from '../../../contracts';
|
|
33
28
|
import type { ZLinkCoreHwmOptions } from '../../../contracts/Configuration';
|
|
34
29
|
import type { ZLinkSubmitResult } from '../../messaging/submission-result';
|
|
35
30
|
import type { Message } from '../../../contracts/Common/Message';
|
|
@@ -65,23 +60,33 @@ export type ZLinkBackendObjectPlacement =
|
|
|
65
60
|
| { readonly kind: 'unavailable' };
|
|
66
61
|
|
|
67
62
|
export interface ZLinkBackendMeshNode {
|
|
63
|
+
setDispatchErrorReporter?(
|
|
64
|
+
reporter: import('../../channels/dispatch-error-reporter').ZLinkDispatchErrorReporter,
|
|
65
|
+
meshName: string
|
|
66
|
+
): void;
|
|
68
67
|
setRoutingId(routingId: unknown): void;
|
|
69
68
|
setBind(endpoint: string): void;
|
|
70
69
|
setAdvertiseHost(host: string): void;
|
|
71
70
|
start(): void;
|
|
72
|
-
setMailboxRecordDroppedHandler?(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
71
|
+
setMailboxRecordDroppedHandler?(
|
|
72
|
+
handler: (record: {
|
|
73
|
+
readonly kind: 'spot_multicast' | 'actor_control' | 'actor_binding';
|
|
74
|
+
readonly owner: string;
|
|
75
|
+
}) => void
|
|
76
|
+
): void;
|
|
77
|
+
setProtocolErrorHandler?(
|
|
78
|
+
handler: (record: {
|
|
79
|
+
readonly sourceNodeRid: string;
|
|
80
|
+
readonly request: boolean;
|
|
81
|
+
readonly replied: boolean;
|
|
82
|
+
readonly command?: number;
|
|
83
|
+
}) => void
|
|
84
|
+
): void;
|
|
85
|
+
setMessageFollowHandler?(
|
|
86
|
+
handler: (
|
|
87
|
+
record: import('../../foundation/service-stateful-wire-codec').ServiceMessageFollowRecord
|
|
88
|
+
) => void
|
|
89
|
+
): void;
|
|
85
90
|
sendMessageFollowNotification?(
|
|
86
91
|
targetNodeRid: string,
|
|
87
92
|
record: Omit<
|
|
@@ -168,12 +173,14 @@ export interface ZLinkBackendMeshNode {
|
|
|
168
173
|
}): Promise<bigint>;
|
|
169
174
|
removePeerConnection(intentId: bigint): void;
|
|
170
175
|
disconnectPeer(peerRid: unknown, lifecycleGeneration: bigint): void;
|
|
171
|
-
replaceDiscoveredNotRequiredPeers?(
|
|
172
|
-
readonly
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
176
|
+
replaceDiscoveredNotRequiredPeers?(
|
|
177
|
+
peers: readonly {
|
|
178
|
+
readonly nodeRoutingId: string;
|
|
179
|
+
readonly lifecycleGeneration: bigint;
|
|
180
|
+
readonly descriptorRevision: bigint;
|
|
181
|
+
readonly endpoint: string;
|
|
182
|
+
}[]
|
|
183
|
+
): void;
|
|
177
184
|
onPeerDisconnected?(handler: (endpoint: string) => void): void;
|
|
178
185
|
expectPeer?(peer: {
|
|
179
186
|
readonly nodeRoutingId: string;
|
|
@@ -235,10 +242,12 @@ export interface ZLinkBackendMeshNode {
|
|
|
235
242
|
createSpot(): ServiceSpot;
|
|
236
243
|
entrySpot(): ServiceSpot;
|
|
237
244
|
getOrCreateSpot(routingId: unknown): { readonly spot: ServiceSpot; readonly created: boolean };
|
|
238
|
-
instanceSpotApplicationTarget?(spotId: string):
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
245
|
+
instanceSpotApplicationTarget?(spotId: string):
|
|
246
|
+
| {
|
|
247
|
+
readonly stableType: string;
|
|
248
|
+
readonly objectGeneration: bigint;
|
|
249
|
+
}
|
|
250
|
+
| undefined;
|
|
242
251
|
waitForInstanceApplicationQuiescence?(spotId: string, signal?: AbortSignal): Promise<void>;
|
|
243
252
|
restoreUserSpotAuthority?(
|
|
244
253
|
spotId: string,
|
|
@@ -253,10 +262,7 @@ export interface ZLinkBackendMeshNode {
|
|
|
253
262
|
generation: bigint,
|
|
254
263
|
authorityOwnerGeneration: bigint
|
|
255
264
|
): ServiceSpot;
|
|
256
|
-
createActor(
|
|
257
|
-
actorId: string,
|
|
258
|
-
parts?: MessageLike | readonly MessageLike[]
|
|
259
|
-
): ZLinkBackendActorRef;
|
|
265
|
+
createActor(actorId: string, parts?: MessageLike | readonly MessageLike[]): ZLinkBackendActorRef;
|
|
260
266
|
restoreActorAuthority?(
|
|
261
267
|
actorId: string,
|
|
262
268
|
stableType: string,
|
|
@@ -281,9 +287,7 @@ export interface ZLinkBackendMeshNode {
|
|
|
281
287
|
};
|
|
282
288
|
lookupRemoteActor(targetNodeRid: unknown, actorId: string, timeoutMs?: number): MeshOperationId;
|
|
283
289
|
destroyActor(actor: ZLinkBackendActorRef, timeoutMs?: number): MeshOperationId;
|
|
284
|
-
rememberSpotRoute?(
|
|
285
|
-
route: ServiceDirectSpotRouteFence
|
|
286
|
-
): void;
|
|
290
|
+
rememberSpotRoute?(route: ServiceDirectSpotRouteFence): void;
|
|
287
291
|
forgetSpotRoute?(
|
|
288
292
|
spot: ServiceDirectSpotRouteFence['spot'],
|
|
289
293
|
authorityOwnerGeneration: bigint,
|
|
@@ -384,7 +388,11 @@ export interface ZLinkBackendMeshNode {
|
|
|
384
388
|
domains: number,
|
|
385
389
|
batch: ReadyBatch,
|
|
386
390
|
flags?: number
|
|
387
|
-
): {
|
|
391
|
+
): {
|
|
392
|
+
readonly ok: boolean;
|
|
393
|
+
readonly hasResidue: boolean;
|
|
394
|
+
readonly records: readonly ReadyRecord[];
|
|
395
|
+
};
|
|
388
396
|
createStreamSessionService(stream: unknown): StreamSessionService;
|
|
389
397
|
}
|
|
390
398
|
|
|
@@ -507,10 +515,7 @@ export interface ZLinkBackendDealerSocket extends ZLinkBackendConnectableSocket
|
|
|
507
515
|
sendTimeoutMs: number;
|
|
508
516
|
maxMessageSize: number;
|
|
509
517
|
send(message: Message | readonly Message[]): Promise<void>;
|
|
510
|
-
request(
|
|
511
|
-
message: Message | readonly Message[],
|
|
512
|
-
timeoutMs?: number
|
|
513
|
-
): Promise<readonly Message[]>;
|
|
518
|
+
request(message: Message | readonly Message[], timeoutMs?: number): Promise<readonly Message[]>;
|
|
514
519
|
recv(flags?: ZLinkBackendRecvFlags): Received | undefined;
|
|
515
520
|
}
|
|
516
521
|
|
|
@@ -542,10 +547,7 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
|
|
|
542
547
|
maxMessageSize: number;
|
|
543
548
|
setRoutingId(routingId: RoutingId): void;
|
|
544
549
|
recv(flags?: ZLinkBackendRecvFlags): Received | undefined;
|
|
545
|
-
send(
|
|
546
|
-
routingId: RoutingId,
|
|
547
|
-
message: Message | readonly Message[]
|
|
548
|
-
): Promise<void>;
|
|
550
|
+
send(routingId: RoutingId, message: Message | readonly Message[]): Promise<void>;
|
|
549
551
|
request(
|
|
550
552
|
routingId: RoutingId,
|
|
551
553
|
message: Message | readonly Message[],
|
|
@@ -600,8 +602,16 @@ export interface ZLinkBackendStreamSocket extends ZLinkBackendSocket {
|
|
|
600
602
|
maxMessageSize: number;
|
|
601
603
|
setTlsServer(cert: string, key: string, requireClientCert?: boolean): void;
|
|
602
604
|
recvPacket(packet: ZLinkBackendStreamPacket, flags?: ZLinkBackendRecvFlags): boolean;
|
|
603
|
-
send(
|
|
604
|
-
|
|
605
|
+
send(
|
|
606
|
+
routingId: RoutingId,
|
|
607
|
+
payload: Message | readonly Message[],
|
|
608
|
+
flags: ZLinkBackendSendFlags
|
|
609
|
+
): boolean;
|
|
610
|
+
submit(
|
|
611
|
+
routingId: RoutingId,
|
|
612
|
+
payload: Message | readonly Message[],
|
|
613
|
+
timeoutMs?: number
|
|
614
|
+
): Promise<void>;
|
|
605
615
|
disconnectPeer(routingId: RoutingId): void;
|
|
606
616
|
bindActor(
|
|
607
617
|
sessionRid: RoutingId,
|
|
@@ -635,8 +645,16 @@ export interface ZLinkBackendSpotRouteBridge extends ZLinkBackendObject {
|
|
|
635
645
|
router: ZLinkBackendRouterSocket,
|
|
636
646
|
options?: { readonly capabilities?: number }
|
|
637
647
|
): void;
|
|
638
|
-
send(
|
|
639
|
-
|
|
648
|
+
send(
|
|
649
|
+
channelName: string,
|
|
650
|
+
targetNodeRid: RoutingId,
|
|
651
|
+
targetSpotId: RoutingId
|
|
652
|
+
): ZLinkBackendSendOperation;
|
|
653
|
+
request(
|
|
654
|
+
channelName: string,
|
|
655
|
+
targetNodeRid: RoutingId,
|
|
656
|
+
targetSpotId: RoutingId
|
|
657
|
+
): ZLinkBackendRequestOperation;
|
|
640
658
|
handleRouterReceived(
|
|
641
659
|
channelName: string,
|
|
642
660
|
sourceNodeRid: RoutingId,
|
|
@@ -658,7 +676,10 @@ export interface ZLinkBackendSpotNode extends ZLinkBackendObject {
|
|
|
658
676
|
disconnectPeerRid(targetNodeRid: RoutingId): void;
|
|
659
677
|
disconnectPeer(endpoint: string): void;
|
|
660
678
|
createSpot(): ZLinkBackendSpot;
|
|
661
|
-
getOrCreateSpot(spotId: RoutingId): {
|
|
679
|
+
getOrCreateSpot(spotId: RoutingId): {
|
|
680
|
+
readonly spot: ZLinkBackendSpot;
|
|
681
|
+
readonly created: boolean;
|
|
682
|
+
};
|
|
662
683
|
status(): ZLinkBackendMeshNodeStatus;
|
|
663
684
|
peers(): readonly ZLinkBackendMeshPeerEntry[];
|
|
664
685
|
subjects(): readonly unknown[];
|
|
@@ -706,7 +727,11 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
|
|
|
706
727
|
timeoutMs?: number
|
|
707
728
|
): Promise<readonly Message[]>;
|
|
708
729
|
sendToChannel(channelName: string, payload: Message | readonly Message[]): Promise<void>;
|
|
709
|
-
publish(
|
|
730
|
+
publish(
|
|
731
|
+
topic: string,
|
|
732
|
+
payload: Message | readonly Message[],
|
|
733
|
+
flags: ZLinkBackendSendFlags
|
|
734
|
+
): boolean;
|
|
710
735
|
sendToSpot(
|
|
711
736
|
targetRid: RoutingId,
|
|
712
737
|
spotId: RoutingId,
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { SubmitResult } from './runtime-values';
|
|
2
2
|
import { ZLinkSubmitStatus } from '../messaging/submission-result';
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
ZLinkBackendMeshNode
|
|
6
|
-
} from './contracts';
|
|
7
|
-
import {
|
|
8
|
-
closeMeshCompletion,
|
|
9
|
-
type ZLinkMeshCompletionTable
|
|
10
|
-
} from './mesh-completion-table';
|
|
3
|
+
import type { ZLinkBackendActorSessionNode, ZLinkBackendMeshNode } from './contracts';
|
|
4
|
+
import { closeMeshCompletion, type ZLinkMeshCompletionTable } from './mesh-completion-table';
|
|
11
5
|
import { routingIdsEqual } from '../routing-id';
|
|
12
6
|
|
|
13
7
|
export function meshActorSessionNodeAdapter(
|
|
@@ -51,18 +45,14 @@ export function meshActorSessionNodeAdapter(
|
|
|
51
45
|
throw new Error('MeshNode completion runtime is not started.');
|
|
52
46
|
}
|
|
53
47
|
const completion = await completions.submit(
|
|
54
|
-
() => node.closeActorBoundSession(
|
|
55
|
-
actor,
|
|
56
|
-
expectedBindingGeneration,
|
|
57
|
-
timeoutMs
|
|
58
|
-
),
|
|
48
|
+
() => node.closeActorBoundSession(actor, expectedBindingGeneration, timeoutMs),
|
|
59
49
|
signal
|
|
60
50
|
);
|
|
61
51
|
try {
|
|
62
52
|
if (completion.terminalResult !== 0 || completion.failureErrno !== 0) {
|
|
63
53
|
throw new Error(
|
|
64
54
|
`Actor '${actor.actorId}' bound-session close failed with result ` +
|
|
65
|
-
|
|
55
|
+
`'${completion.terminalResult}' and errno '${completion.failureErrno}'.`
|
|
66
56
|
);
|
|
67
57
|
}
|
|
68
58
|
} finally {
|
|
@@ -31,7 +31,9 @@ export class ZLinkMeshCompletionTable {
|
|
|
31
31
|
private readonly pending = new Map<string, PendingCompletion>();
|
|
32
32
|
private disposed = false;
|
|
33
33
|
|
|
34
|
-
constructor(
|
|
34
|
+
constructor(
|
|
35
|
+
private readonly onDiagnostic?: (diagnostic: ZLinkMeshCompletionDiagnostic) => void
|
|
36
|
+
) {}
|
|
35
37
|
|
|
36
38
|
/**
|
|
37
39
|
* Submits and registers without yielding control to the event loop. Mesh
|
|
@@ -39,10 +41,7 @@ export class ZLinkMeshCompletionTable {
|
|
|
39
41
|
* registration. The table therefore does not need to retain responses that
|
|
40
42
|
* arrived before their waiter.
|
|
41
43
|
*/
|
|
42
|
-
submit(
|
|
43
|
-
operation: () => MeshOperationId,
|
|
44
|
-
signal?: AbortSignal
|
|
45
|
-
): Promise<ZLinkMeshCompletion> {
|
|
44
|
+
submit(operation: () => MeshOperationId, signal?: AbortSignal): Promise<ZLinkMeshCompletion> {
|
|
46
45
|
if (this.isDisposed()) {
|
|
47
46
|
return Promise.reject(new Error('Mesh completion table is disposed.'));
|
|
48
47
|
}
|
|
@@ -74,9 +73,8 @@ export class ZLinkMeshCompletionTable {
|
|
|
74
73
|
this.pending.set(key, {
|
|
75
74
|
resolve,
|
|
76
75
|
reject,
|
|
77
|
-
removeAbort:
|
|
78
|
-
? undefined
|
|
79
|
-
: () => signal.removeEventListener('abort', abort)
|
|
76
|
+
removeAbort:
|
|
77
|
+
signal === undefined ? undefined : () => signal.removeEventListener('abort', abort)
|
|
80
78
|
});
|
|
81
79
|
});
|
|
82
80
|
}
|
|
@@ -123,7 +121,6 @@ export class ZLinkMeshCompletionTable {
|
|
|
123
121
|
get pendingCount(): number {
|
|
124
122
|
return this.pending.size;
|
|
125
123
|
}
|
|
126
|
-
|
|
127
124
|
}
|
|
128
125
|
|
|
129
126
|
function retainCompletion(record: ReceiveRecord): ZLinkMeshCompletion {
|
|
@@ -70,8 +70,7 @@ export class ZLinkMeshDispatchPump {
|
|
|
70
70
|
constructor(
|
|
71
71
|
private readonly node: ZLinkBackendMeshNode,
|
|
72
72
|
private readonly options: ZLinkMeshDispatchPumpOptions
|
|
73
|
-
) {
|
|
74
|
-
}
|
|
73
|
+
) {}
|
|
75
74
|
|
|
76
75
|
start(): void {
|
|
77
76
|
if (this.applicationWorkerCount === 0) this.startApplicationWorker();
|
|
@@ -103,11 +102,9 @@ export class ZLinkMeshDispatchPump {
|
|
|
103
102
|
const previous = this.pendingDomains;
|
|
104
103
|
this.pendingDomains |= domains;
|
|
105
104
|
const startInfrastructure =
|
|
106
|
-
(domains & ReadyDomain.Infrastructure) !== 0
|
|
107
|
-
&& (previous & ReadyDomain.Infrastructure) === 0;
|
|
105
|
+
(domains & ReadyDomain.Infrastructure) !== 0 && (previous & ReadyDomain.Infrastructure) === 0;
|
|
108
106
|
const startApplication =
|
|
109
|
-
(domains & ReadyDomain.Application) !== 0
|
|
110
|
-
&& (previous & ReadyDomain.Application) === 0;
|
|
107
|
+
(domains & ReadyDomain.Application) !== 0 && (previous & ReadyDomain.Application) === 0;
|
|
111
108
|
if (startInfrastructure && startApplication) {
|
|
112
109
|
const startTurn = this.yieldIfNeeded() ?? Promise.resolve();
|
|
113
110
|
this.scheduleInfrastructure(startTurn);
|
|
@@ -141,11 +138,11 @@ export class ZLinkMeshDispatchPump {
|
|
|
141
138
|
this.applicationWorkerCount += 1;
|
|
142
139
|
let worker: Promise<void>;
|
|
143
140
|
worker = detachedMeshDispatchScope(() =>
|
|
144
|
-
runZLinkExecutionArea('application', () => this.runApplicationWorker())
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
141
|
+
runZLinkExecutionArea('application', () => this.runApplicationWorker())
|
|
142
|
+
).finally(() => {
|
|
143
|
+
this.applicationWorkerCount -= 1;
|
|
144
|
+
this.activeDrains.delete(worker);
|
|
145
|
+
});
|
|
149
146
|
this.activeDrains.add(worker);
|
|
150
147
|
}
|
|
151
148
|
|
|
@@ -154,7 +151,8 @@ export class ZLinkMeshDispatchPump {
|
|
|
154
151
|
// unrelated owners. Each owner may supply up to 64 pre-admitted records.
|
|
155
152
|
const readyBatch = this.node.createReadyBatch(1);
|
|
156
153
|
const receiveBatch = this.node.createReceiveBatch(
|
|
157
|
-
MESH_DISPATCH_RECEIVE_CAPACITY,
|
|
154
|
+
MESH_DISPATCH_RECEIVE_CAPACITY,
|
|
155
|
+
this.options.partCapacity ?? 256
|
|
158
156
|
);
|
|
159
157
|
try {
|
|
160
158
|
for (;;) {
|
|
@@ -178,7 +176,7 @@ export class ZLinkMeshDispatchPump {
|
|
|
178
176
|
this.pendingDomains &= ~ReadyDomain.Application;
|
|
179
177
|
return Promise.resolve();
|
|
180
178
|
}
|
|
181
|
-
return new Promise(resolve => this.idleApplicationWorkers.add(resolve));
|
|
179
|
+
return new Promise((resolve) => this.idleApplicationWorkers.add(resolve));
|
|
182
180
|
}
|
|
183
181
|
|
|
184
182
|
private reportDispatchError(error: unknown): void {
|
|
@@ -202,8 +200,11 @@ export class ZLinkMeshDispatchPump {
|
|
|
202
200
|
}
|
|
203
201
|
this.infrastructureScheduled = true;
|
|
204
202
|
const drain = (startTurn ?? this.yieldIfNeeded() ?? Promise.resolve())
|
|
205
|
-
.then(() =>
|
|
206
|
-
|
|
203
|
+
.then(() =>
|
|
204
|
+
detachedMeshDispatchScope(() =>
|
|
205
|
+
runZLinkExecutionArea('infrastructure', () => this.drainInfrastructure())
|
|
206
|
+
)
|
|
207
|
+
)
|
|
207
208
|
.catch((error) => {
|
|
208
209
|
if (error instanceof ZLinkMeshDispatchFailure) {
|
|
209
210
|
this.options.reportError?.(error.dispatchCause, error.context);
|
|
@@ -230,7 +231,8 @@ export class ZLinkMeshDispatchPump {
|
|
|
230
231
|
Math.min(this.options.readyCapacity ?? 32, MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET)
|
|
231
232
|
);
|
|
232
233
|
const receiveBatch = this.node.createReceiveBatch(
|
|
233
|
-
MESH_DISPATCH_RECEIVE_CAPACITY,
|
|
234
|
+
MESH_DISPATCH_RECEIVE_CAPACITY,
|
|
235
|
+
this.options.partCapacity ?? 256
|
|
234
236
|
);
|
|
235
237
|
try {
|
|
236
238
|
while (!this.disposed) {
|
|
@@ -287,14 +289,15 @@ export class ZLinkMeshDispatchPump {
|
|
|
287
289
|
// Raw ingress already attached one host permit to each record.
|
|
288
290
|
// A claim that reserves admission here may receive only that permit's record.
|
|
289
291
|
try {
|
|
290
|
-
const capacity =
|
|
291
|
-
? MESH_DISPATCH_RECEIVE_CAPACITY : 1;
|
|
292
|
+
const capacity =
|
|
293
|
+
owner.ordinaryIngressPreAdmitted === true ? MESH_DISPATCH_RECEIVE_CAPACITY : 1;
|
|
292
294
|
for (;;) {
|
|
293
|
-
let claimPermit =
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
295
|
+
let claimPermit =
|
|
296
|
+
owner.terminalCompletion === true ||
|
|
297
|
+
owner.ordinaryIngressPreAdmitted === true ||
|
|
298
|
+
domain === ReadyDomain.Infrastructure
|
|
299
|
+
? undefined
|
|
300
|
+
: await this.acquirePermit();
|
|
298
301
|
try {
|
|
299
302
|
if (this.capacityStop.signal.aborted) return false;
|
|
300
303
|
receiveBatch.reset(capacity);
|
|
@@ -314,7 +317,9 @@ export class ZLinkMeshDispatchPump {
|
|
|
314
317
|
if (this.disposed) break;
|
|
315
318
|
const permit = record.applicationJobPermit ?? claimPermit;
|
|
316
319
|
if (owner.ordinaryIngressPreAdmitted === true && permit === undefined) {
|
|
317
|
-
throw new Error(
|
|
320
|
+
throw new Error(
|
|
321
|
+
'Pre-admitted raw ingress record lost its Application Job Queue permit.'
|
|
322
|
+
);
|
|
318
323
|
}
|
|
319
324
|
this.recordsSinceYield += 1;
|
|
320
325
|
const dispatch = async () => {
|
|
@@ -332,9 +337,10 @@ export class ZLinkMeshDispatchPump {
|
|
|
332
337
|
await dispatch();
|
|
333
338
|
} else {
|
|
334
339
|
if (
|
|
335
|
-
domain === ReadyDomain.Application
|
|
336
|
-
|
|
337
|
-
)
|
|
340
|
+
domain === ReadyDomain.Application &&
|
|
341
|
+
record.applicationJobPermit === undefined
|
|
342
|
+
)
|
|
343
|
+
permit.markApplicationQueued();
|
|
338
344
|
// The scope now owns this reservation, including failure
|
|
339
345
|
// and detached handler handoff. Only unused permits remain
|
|
340
346
|
// owned by the receive attempt's finally block.
|
|
@@ -380,8 +386,11 @@ export class ZLinkMeshDispatchPump {
|
|
|
380
386
|
|
|
381
387
|
private yieldIfNeeded(): Promise<void> | undefined {
|
|
382
388
|
const nowMs = this.nowMs();
|
|
383
|
-
if (
|
|
384
|
-
|
|
389
|
+
if (
|
|
390
|
+
this.recordsSinceYield < MESH_DISPATCH_YIELD_RECORDS &&
|
|
391
|
+
nowMs - this.yieldStartedAtMs < MESH_DISPATCH_YIELD_INTERVAL_MS
|
|
392
|
+
)
|
|
393
|
+
return undefined;
|
|
385
394
|
this.recordsSinceYield = 0;
|
|
386
395
|
return yieldToTimers().then(() => {
|
|
387
396
|
this.yieldStartedAtMs = this.nowMs();
|
|
@@ -425,7 +434,6 @@ function yieldToEventLoop(): Promise<void> {
|
|
|
425
434
|
return new Promise((resolve) => setImmediate(resolve));
|
|
426
435
|
}
|
|
427
436
|
|
|
428
|
-
|
|
429
437
|
function yieldToTimers(): Promise<void> {
|
|
430
438
|
return new Promise((resolve) => setTimeout(resolve, 0));
|
|
431
439
|
}
|