@zlink-systems/framework 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +43 -33
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +244 -227
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +208 -219
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +0 -1
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +138 -130
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +73 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +215 -197
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/flow-context.ts +12 -3
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +95 -76
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +593 -563
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
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';
|
|
@@ -69,19 +64,25 @@ export interface ZLinkBackendMeshNode {
|
|
|
69
64
|
setBind(endpoint: string): void;
|
|
70
65
|
setAdvertiseHost(host: string): void;
|
|
71
66
|
start(): void;
|
|
72
|
-
setMailboxRecordDroppedHandler?(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
67
|
+
setMailboxRecordDroppedHandler?(
|
|
68
|
+
handler: (record: {
|
|
69
|
+
readonly kind: 'spot_multicast' | 'actor_control' | 'actor_binding';
|
|
70
|
+
readonly owner: string;
|
|
71
|
+
}) => void
|
|
72
|
+
): void;
|
|
73
|
+
setProtocolErrorHandler?(
|
|
74
|
+
handler: (record: {
|
|
75
|
+
readonly sourceNodeRid: string;
|
|
76
|
+
readonly request: boolean;
|
|
77
|
+
readonly replied: boolean;
|
|
78
|
+
readonly command?: number;
|
|
79
|
+
}) => void
|
|
80
|
+
): void;
|
|
81
|
+
setMessageFollowHandler?(
|
|
82
|
+
handler: (
|
|
83
|
+
record: import('../../foundation/service-stateful-wire-codec').ServiceMessageFollowRecord
|
|
84
|
+
) => void
|
|
85
|
+
): void;
|
|
85
86
|
sendMessageFollowNotification?(
|
|
86
87
|
targetNodeRid: string,
|
|
87
88
|
record: Omit<
|
|
@@ -168,12 +169,14 @@ export interface ZLinkBackendMeshNode {
|
|
|
168
169
|
}): Promise<bigint>;
|
|
169
170
|
removePeerConnection(intentId: bigint): void;
|
|
170
171
|
disconnectPeer(peerRid: unknown, lifecycleGeneration: bigint): void;
|
|
171
|
-
replaceDiscoveredNotRequiredPeers?(
|
|
172
|
-
readonly
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
172
|
+
replaceDiscoveredNotRequiredPeers?(
|
|
173
|
+
peers: readonly {
|
|
174
|
+
readonly nodeRoutingId: string;
|
|
175
|
+
readonly lifecycleGeneration: bigint;
|
|
176
|
+
readonly descriptorRevision: bigint;
|
|
177
|
+
readonly endpoint: string;
|
|
178
|
+
}[]
|
|
179
|
+
): void;
|
|
177
180
|
onPeerDisconnected?(handler: (endpoint: string) => void): void;
|
|
178
181
|
expectPeer?(peer: {
|
|
179
182
|
readonly nodeRoutingId: string;
|
|
@@ -235,10 +238,12 @@ export interface ZLinkBackendMeshNode {
|
|
|
235
238
|
createSpot(): ServiceSpot;
|
|
236
239
|
entrySpot(): ServiceSpot;
|
|
237
240
|
getOrCreateSpot(routingId: unknown): { readonly spot: ServiceSpot; readonly created: boolean };
|
|
238
|
-
instanceSpotApplicationTarget?(spotId: string):
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
241
|
+
instanceSpotApplicationTarget?(spotId: string):
|
|
242
|
+
| {
|
|
243
|
+
readonly stableType: string;
|
|
244
|
+
readonly objectGeneration: bigint;
|
|
245
|
+
}
|
|
246
|
+
| undefined;
|
|
242
247
|
waitForInstanceApplicationQuiescence?(spotId: string, signal?: AbortSignal): Promise<void>;
|
|
243
248
|
restoreUserSpotAuthority?(
|
|
244
249
|
spotId: string,
|
|
@@ -253,10 +258,7 @@ export interface ZLinkBackendMeshNode {
|
|
|
253
258
|
generation: bigint,
|
|
254
259
|
authorityOwnerGeneration: bigint
|
|
255
260
|
): ServiceSpot;
|
|
256
|
-
createActor(
|
|
257
|
-
actorId: string,
|
|
258
|
-
parts?: MessageLike | readonly MessageLike[]
|
|
259
|
-
): ZLinkBackendActorRef;
|
|
261
|
+
createActor(actorId: string, parts?: MessageLike | readonly MessageLike[]): ZLinkBackendActorRef;
|
|
260
262
|
restoreActorAuthority?(
|
|
261
263
|
actorId: string,
|
|
262
264
|
stableType: string,
|
|
@@ -281,9 +283,7 @@ export interface ZLinkBackendMeshNode {
|
|
|
281
283
|
};
|
|
282
284
|
lookupRemoteActor(targetNodeRid: unknown, actorId: string, timeoutMs?: number): MeshOperationId;
|
|
283
285
|
destroyActor(actor: ZLinkBackendActorRef, timeoutMs?: number): MeshOperationId;
|
|
284
|
-
rememberSpotRoute?(
|
|
285
|
-
route: ServiceDirectSpotRouteFence
|
|
286
|
-
): void;
|
|
286
|
+
rememberSpotRoute?(route: ServiceDirectSpotRouteFence): void;
|
|
287
287
|
forgetSpotRoute?(
|
|
288
288
|
spot: ServiceDirectSpotRouteFence['spot'],
|
|
289
289
|
authorityOwnerGeneration: bigint,
|
|
@@ -384,7 +384,11 @@ export interface ZLinkBackendMeshNode {
|
|
|
384
384
|
domains: number,
|
|
385
385
|
batch: ReadyBatch,
|
|
386
386
|
flags?: number
|
|
387
|
-
): {
|
|
387
|
+
): {
|
|
388
|
+
readonly ok: boolean;
|
|
389
|
+
readonly hasResidue: boolean;
|
|
390
|
+
readonly records: readonly ReadyRecord[];
|
|
391
|
+
};
|
|
388
392
|
createStreamSessionService(stream: unknown): StreamSessionService;
|
|
389
393
|
}
|
|
390
394
|
|
|
@@ -507,10 +511,7 @@ export interface ZLinkBackendDealerSocket extends ZLinkBackendConnectableSocket
|
|
|
507
511
|
sendTimeoutMs: number;
|
|
508
512
|
maxMessageSize: number;
|
|
509
513
|
send(message: Message | readonly Message[]): Promise<void>;
|
|
510
|
-
request(
|
|
511
|
-
message: Message | readonly Message[],
|
|
512
|
-
timeoutMs?: number
|
|
513
|
-
): Promise<readonly Message[]>;
|
|
514
|
+
request(message: Message | readonly Message[], timeoutMs?: number): Promise<readonly Message[]>;
|
|
514
515
|
recv(flags?: ZLinkBackendRecvFlags): Received | undefined;
|
|
515
516
|
}
|
|
516
517
|
|
|
@@ -542,10 +543,7 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
|
|
|
542
543
|
maxMessageSize: number;
|
|
543
544
|
setRoutingId(routingId: RoutingId): void;
|
|
544
545
|
recv(flags?: ZLinkBackendRecvFlags): Received | undefined;
|
|
545
|
-
send(
|
|
546
|
-
routingId: RoutingId,
|
|
547
|
-
message: Message | readonly Message[]
|
|
548
|
-
): Promise<void>;
|
|
546
|
+
send(routingId: RoutingId, message: Message | readonly Message[]): Promise<void>;
|
|
549
547
|
request(
|
|
550
548
|
routingId: RoutingId,
|
|
551
549
|
message: Message | readonly Message[],
|
|
@@ -600,8 +598,16 @@ export interface ZLinkBackendStreamSocket extends ZLinkBackendSocket {
|
|
|
600
598
|
maxMessageSize: number;
|
|
601
599
|
setTlsServer(cert: string, key: string, requireClientCert?: boolean): void;
|
|
602
600
|
recvPacket(packet: ZLinkBackendStreamPacket, flags?: ZLinkBackendRecvFlags): boolean;
|
|
603
|
-
send(
|
|
604
|
-
|
|
601
|
+
send(
|
|
602
|
+
routingId: RoutingId,
|
|
603
|
+
payload: Message | readonly Message[],
|
|
604
|
+
flags: ZLinkBackendSendFlags
|
|
605
|
+
): boolean;
|
|
606
|
+
submit(
|
|
607
|
+
routingId: RoutingId,
|
|
608
|
+
payload: Message | readonly Message[],
|
|
609
|
+
timeoutMs?: number
|
|
610
|
+
): Promise<void>;
|
|
605
611
|
disconnectPeer(routingId: RoutingId): void;
|
|
606
612
|
bindActor(
|
|
607
613
|
sessionRid: RoutingId,
|
|
@@ -635,8 +641,16 @@ export interface ZLinkBackendSpotRouteBridge extends ZLinkBackendObject {
|
|
|
635
641
|
router: ZLinkBackendRouterSocket,
|
|
636
642
|
options?: { readonly capabilities?: number }
|
|
637
643
|
): void;
|
|
638
|
-
send(
|
|
639
|
-
|
|
644
|
+
send(
|
|
645
|
+
channelName: string,
|
|
646
|
+
targetNodeRid: RoutingId,
|
|
647
|
+
targetSpotId: RoutingId
|
|
648
|
+
): ZLinkBackendSendOperation;
|
|
649
|
+
request(
|
|
650
|
+
channelName: string,
|
|
651
|
+
targetNodeRid: RoutingId,
|
|
652
|
+
targetSpotId: RoutingId
|
|
653
|
+
): ZLinkBackendRequestOperation;
|
|
640
654
|
handleRouterReceived(
|
|
641
655
|
channelName: string,
|
|
642
656
|
sourceNodeRid: RoutingId,
|
|
@@ -658,7 +672,10 @@ export interface ZLinkBackendSpotNode extends ZLinkBackendObject {
|
|
|
658
672
|
disconnectPeerRid(targetNodeRid: RoutingId): void;
|
|
659
673
|
disconnectPeer(endpoint: string): void;
|
|
660
674
|
createSpot(): ZLinkBackendSpot;
|
|
661
|
-
getOrCreateSpot(spotId: RoutingId): {
|
|
675
|
+
getOrCreateSpot(spotId: RoutingId): {
|
|
676
|
+
readonly spot: ZLinkBackendSpot;
|
|
677
|
+
readonly created: boolean;
|
|
678
|
+
};
|
|
662
679
|
status(): ZLinkBackendMeshNodeStatus;
|
|
663
680
|
peers(): readonly ZLinkBackendMeshPeerEntry[];
|
|
664
681
|
subjects(): readonly unknown[];
|
|
@@ -706,7 +723,11 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
|
|
|
706
723
|
timeoutMs?: number
|
|
707
724
|
): Promise<readonly Message[]>;
|
|
708
725
|
sendToChannel(channelName: string, payload: Message | readonly Message[]): Promise<void>;
|
|
709
|
-
publish(
|
|
726
|
+
publish(
|
|
727
|
+
topic: string,
|
|
728
|
+
payload: Message | readonly Message[],
|
|
729
|
+
flags: ZLinkBackendSendFlags
|
|
730
|
+
): boolean;
|
|
710
731
|
sendToSpot(
|
|
711
732
|
targetRid: RoutingId,
|
|
712
733
|
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
|
}
|