@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
|
@@ -2,22 +2,17 @@ import type { RoutingId } from '../../contracts/Common/CoreTypes';
|
|
|
2
2
|
import type { ZLinkCreationOperationIdentity } from './internal-location-contracts';
|
|
3
3
|
import { encodeRoutingIdStorageHex } from '../routing-id';
|
|
4
4
|
|
|
5
|
-
export function opaqueRecordPreimage(
|
|
6
|
-
record: string,
|
|
7
|
-
...segments: readonly string[]
|
|
8
|
-
): string {
|
|
5
|
+
export function opaqueRecordPreimage(record: string, ...segments: readonly string[]): string {
|
|
9
6
|
return [record, ...segments].join('\0');
|
|
10
7
|
}
|
|
11
8
|
|
|
12
|
-
export function creationTerminalPreimage(
|
|
13
|
-
operation: ZLinkCreationOperationIdentity
|
|
14
|
-
): string {
|
|
9
|
+
export function creationTerminalPreimage(operation: ZLinkCreationOperationIdentity): string {
|
|
15
10
|
return opaqueRecordPreimage(
|
|
16
11
|
'creation-terminal',
|
|
17
12
|
routingIdHexSegment(operation.sourceNodeRid),
|
|
18
13
|
operation.sourceNodeGeneration.toString(),
|
|
19
|
-
operation.operationId.high.toString(16).padStart(16, '0')
|
|
20
|
-
|
|
14
|
+
operation.operationId.high.toString(16).padStart(16, '0') +
|
|
15
|
+
operation.operationId.low.toString(16).padStart(16, '0')
|
|
21
16
|
);
|
|
22
17
|
}
|
|
23
18
|
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ZLinkFrameworkInternalErrorKind,
|
|
3
|
+
createInternalFrameworkException,
|
|
4
|
+
internalFrameworkErrorKind
|
|
5
|
+
} from '../framework-errors-internal';
|
|
2
6
|
import type { ActorRef, RoutingId, SpotId } from '../../contracts/Common';
|
|
3
7
|
import {
|
|
4
8
|
ZLinkLocationRole,
|
|
@@ -15,7 +19,7 @@ import {
|
|
|
15
19
|
type ZLinkRouteLocation,
|
|
16
20
|
type ZLinkRouteLocationKey,
|
|
17
21
|
type ZLinkSpotLocation,
|
|
18
|
-
type ZLinkSpotLocationKey
|
|
22
|
+
type ZLinkSpotLocationKey
|
|
19
23
|
} from './internal-location-contracts';
|
|
20
24
|
import type {
|
|
21
25
|
ZLinkActorLocationStore,
|
|
@@ -29,32 +33,18 @@ import { decodeServiceReadySpotAuthority } from '../foundation/service-authority
|
|
|
29
33
|
import { serviceRelocationAuthorityApplicationPayload } from '../foundation/service-relocation-runtime';
|
|
30
34
|
import { decodeActorAuthorityIdentity } from '../actors/actor-authority-publication';
|
|
31
35
|
import { encodeAuthorityKey } from './authority-key-codec';
|
|
32
|
-
import {
|
|
33
|
-
ZLinkSpotKind
|
|
34
|
-
} from '../../contracts/Spots';
|
|
36
|
+
import { ZLinkSpotKind } from '../../contracts/Spots';
|
|
35
37
|
import type { ZLinkAuthoritySnapshot } from './internal-location-contracts';
|
|
36
38
|
import type {
|
|
37
39
|
SpotHandle,
|
|
38
40
|
ZLinkActorSpotHandleResolver,
|
|
39
41
|
ZLinkSpotHandleResolver
|
|
40
42
|
} from '../spots/spot-handle';
|
|
41
|
-
import {
|
|
42
|
-
|
|
43
|
-
ZLinkFrameworkException
|
|
44
|
-
} from '../../contracts/Errors';
|
|
45
|
-
import type {
|
|
46
|
-
ZLinkSpotRouteResolver,
|
|
47
|
-
ZLinkSpotRouteTarget
|
|
48
|
-
} from '../spots/spot-routing-internal';
|
|
43
|
+
import { ZLinkFrameworkErrorKind, ZLinkFrameworkException } from '../../contracts/Errors';
|
|
44
|
+
import type { ZLinkSpotRouteResolver, ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
|
|
49
45
|
import { createSpotHandle, type ResolvedSpotHandle } from '../spots/spot-handle';
|
|
50
|
-
import {
|
|
51
|
-
|
|
52
|
-
isKnownZLinkLocationRole
|
|
53
|
-
} from './canonical-codec';
|
|
54
|
-
import {
|
|
55
|
-
ZLinkLiveRowFilter,
|
|
56
|
-
ZLinkOwnerLeaseTracker
|
|
57
|
-
} from './lease-tracker';
|
|
46
|
+
import { isKnownZLinkLocationAutoConnectType, isKnownZLinkLocationRole } from './canonical-codec';
|
|
47
|
+
import { ZLinkLiveRowFilter, ZLinkOwnerLeaseTracker } from './lease-tracker';
|
|
58
48
|
import { routingIdsEqual } from '../routing-id';
|
|
59
49
|
import { ZLinkStateLane } from '../execution/state-lane';
|
|
60
50
|
import { emitActorOwnerLeaseObservation } from '../diagnostics';
|
|
@@ -101,16 +91,17 @@ function projectCanonicalActorRoute(
|
|
|
101
91
|
const { allocation } = snapshot;
|
|
102
92
|
const nodeRid = allocation.descriptor.rid;
|
|
103
93
|
if (
|
|
104
|
-
allocation.objectKind !== 'actor'
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
)
|
|
94
|
+
allocation.objectKind !== 'actor' ||
|
|
95
|
+
allocation.state !== 'active' ||
|
|
96
|
+
snapshot.objectGeneration <= 0n ||
|
|
97
|
+
snapshot.ownerLeaseGeneration <= 0n ||
|
|
98
|
+
actorId.length === 0 ||
|
|
99
|
+
allocation.stableType.length === 0 ||
|
|
100
|
+
allocation.descriptor.meshName.length === 0 ||
|
|
101
|
+
String(nodeRid).length === 0 ||
|
|
102
|
+
allocation.descriptorLifecycleGeneration <= 0n
|
|
103
|
+
)
|
|
104
|
+
return undefined;
|
|
114
105
|
return {
|
|
115
106
|
meshName: allocation.descriptor.meshName,
|
|
116
107
|
actorRef: {
|
|
@@ -170,10 +161,9 @@ export interface ZLinkSpotRouteInvalidationFence {
|
|
|
170
161
|
readonly ownerLeaseGeneration: bigint;
|
|
171
162
|
}
|
|
172
163
|
|
|
173
|
-
export class ZLinkStoreLocationResolvers
|
|
174
|
-
ZLinkPeerLocationResolver,
|
|
175
|
-
|
|
176
|
-
ZLinkActorSpotHandleResolver {
|
|
164
|
+
export class ZLinkStoreLocationResolvers
|
|
165
|
+
implements ZLinkPeerLocationResolver, ZLinkSpotHandleResolver, ZLinkActorSpotHandleResolver
|
|
166
|
+
{
|
|
177
167
|
private readonly lane = new ZLinkStateLane();
|
|
178
168
|
private readonly liveRows: ZLinkLiveRowFilter;
|
|
179
169
|
private readonly monotonicNowMs: () => number;
|
|
@@ -196,13 +186,18 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
196
186
|
);
|
|
197
187
|
}
|
|
198
188
|
|
|
199
|
-
async listLivePeers(
|
|
189
|
+
async listLivePeers(
|
|
190
|
+
filter: ZLinkPeerLocationFilter,
|
|
191
|
+
signal?: AbortSignal
|
|
192
|
+
): Promise<readonly ZLinkPeerLocation[]> {
|
|
200
193
|
const rows = await this.options.stores.peerStore.listPeers(filter, signal);
|
|
201
194
|
return await this.liveRows.filter(
|
|
202
195
|
rows,
|
|
203
196
|
(row) => row.ownerId,
|
|
204
197
|
signal,
|
|
205
|
-
(row) =>
|
|
198
|
+
(row) =>
|
|
199
|
+
isKnownZLinkLocationAutoConnectType(row.autoConnectType) &&
|
|
200
|
+
isKnownZLinkLocationRole(row.role)
|
|
206
201
|
);
|
|
207
202
|
}
|
|
208
203
|
|
|
@@ -210,27 +205,31 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
210
205
|
spotId: SpotId,
|
|
211
206
|
meshNames: readonly string[],
|
|
212
207
|
signal?: AbortSignal
|
|
213
|
-
): Promise<
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
208
|
+
): Promise<
|
|
209
|
+
| {
|
|
210
|
+
readonly meshName: string;
|
|
211
|
+
readonly nodeRid: RoutingId;
|
|
212
|
+
readonly spotId: SpotId;
|
|
213
|
+
readonly targetNodeGeneration: bigint;
|
|
214
|
+
readonly targetOwnerId: string;
|
|
215
|
+
readonly ownerLeaseGeneration: bigint;
|
|
216
|
+
}
|
|
217
|
+
| undefined
|
|
218
|
+
> {
|
|
221
219
|
for (const meshName of meshNames) {
|
|
222
220
|
const descriptors = await this.liveRows.filter(
|
|
223
221
|
(await this.options.stores.locationStore.listMeshNodes(meshName, undefined, signal)).items,
|
|
224
222
|
(descriptor) => descriptor.ownerId,
|
|
225
223
|
signal
|
|
226
224
|
);
|
|
227
|
-
const descriptor = descriptors.find(
|
|
228
|
-
candidate
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
225
|
+
const descriptor = descriptors.find(
|
|
226
|
+
(candidate) =>
|
|
227
|
+
candidate.entrySpotId === spotId &&
|
|
228
|
+
candidate.objectRole === ZLinkObjectRole.Server &&
|
|
229
|
+
// An Entry Spot accepts new joins only while its owning node is Serving.
|
|
230
|
+
// Preparing/retiring/error rows may still be visible during replacement,
|
|
231
|
+
// but routing them would turn a valid transfer into NotConnected.
|
|
232
|
+
candidate.state === ZLinkFrameworkRuntimeState.Serving
|
|
234
233
|
);
|
|
235
234
|
if (descriptor !== undefined) {
|
|
236
235
|
return {
|
|
@@ -253,7 +252,9 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
253
252
|
signal?: AbortSignal,
|
|
254
253
|
excludedCandidateRids: ReadonlySet<string> = new Set()
|
|
255
254
|
): Promise<RoutingId | undefined> {
|
|
256
|
-
const descriptors = (
|
|
255
|
+
const descriptors = (
|
|
256
|
+
await this.options.stores.locationStore.listMeshNodes(meshName, undefined, signal)
|
|
257
|
+
).items;
|
|
257
258
|
const liveDescriptors = await this.liveRows.filter(
|
|
258
259
|
descriptors,
|
|
259
260
|
(descriptor) => descriptor.ownerId,
|
|
@@ -261,15 +262,17 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
261
262
|
);
|
|
262
263
|
const candidates = liveDescriptors.filter((descriptor) => {
|
|
263
264
|
const capacity = descriptor.populationCapacity.actors;
|
|
264
|
-
return
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
265
|
+
return (
|
|
266
|
+
descriptor.state === ZLinkFrameworkRuntimeState.Serving &&
|
|
267
|
+
descriptor.objectRole === ZLinkObjectRole.Server &&
|
|
268
|
+
descriptor.placementWeight > 0 &&
|
|
269
|
+
!routingIdsEqual(descriptor.rid, excludedNodeRid) &&
|
|
270
|
+
!excludedCandidateRids.has(String(descriptor.rid)) &&
|
|
271
|
+
capacity.active + capacity.reserved < capacity.limit &&
|
|
272
|
+
descriptor.objectCapabilities.some(
|
|
273
|
+
(candidate) => candidate.objectKind === 'actor' && candidate.stableType === actorType
|
|
274
|
+
)
|
|
275
|
+
);
|
|
273
276
|
});
|
|
274
277
|
if (candidates.length === 0) return undefined;
|
|
275
278
|
const totalWeight = candidates.reduce(
|
|
@@ -285,7 +288,10 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
285
288
|
return candidates[candidates.length - 1]?.rid;
|
|
286
289
|
}
|
|
287
290
|
|
|
288
|
-
async resolveRoute(
|
|
291
|
+
async resolveRoute(
|
|
292
|
+
key: ZLinkRouteLocationKey,
|
|
293
|
+
signal?: AbortSignal
|
|
294
|
+
): Promise<ZLinkRouteLocation | undefined> {
|
|
289
295
|
const row = await this.liveRows.resolve(
|
|
290
296
|
await this.options.stores.routeStore.resolveRoute(key, signal),
|
|
291
297
|
(candidate) => candidate.ownerId,
|
|
@@ -345,10 +351,8 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
345
351
|
): Promise<SpotHandle | undefined> {
|
|
346
352
|
const initial = await this.resolveSpotRef(meshName, spotId, signal);
|
|
347
353
|
if (initial === undefined) return undefined;
|
|
348
|
-
return createSpotHandle(
|
|
349
|
-
|
|
350
|
-
initial,
|
|
351
|
-
(refreshSignal) => this.resolveSpotRef(meshName, spotId, refreshSignal)
|
|
354
|
+
return createSpotHandle(String(spotId), initial, (refreshSignal) =>
|
|
355
|
+
this.resolveSpotRef(meshName, spotId, refreshSignal)
|
|
352
356
|
);
|
|
353
357
|
}
|
|
354
358
|
|
|
@@ -361,9 +365,7 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
361
365
|
if (row === undefined) {
|
|
362
366
|
return undefined;
|
|
363
367
|
}
|
|
364
|
-
const spotId = row.spotKind === ZLinkSpotKind.Entry
|
|
365
|
-
? row.ownerNodeRid
|
|
366
|
-
: row.spotId;
|
|
368
|
+
const spotId = row.spotKind === ZLinkSpotKind.Entry ? row.ownerNodeRid : row.spotId;
|
|
367
369
|
return {
|
|
368
370
|
meshName: row.meshName,
|
|
369
371
|
nodeRid: String(row.ownerNodeRid),
|
|
@@ -436,18 +438,16 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
436
438
|
return unavailable;
|
|
437
439
|
}
|
|
438
440
|
if (
|
|
439
|
-
decoded === undefined
|
|
440
|
-
|
|
441
|
-
|
|
441
|
+
decoded === undefined ||
|
|
442
|
+
decoded.actor.actorId !== actorId ||
|
|
443
|
+
decoded.actor.objectGeneration !== current.objectGeneration
|
|
442
444
|
) {
|
|
443
445
|
const route = await this.cacheDirectActorRoute(
|
|
444
446
|
actorId,
|
|
445
447
|
projectCanonicalActorRoute(current, actorId),
|
|
446
448
|
remainingLeaseMs
|
|
447
449
|
);
|
|
448
|
-
return route === undefined
|
|
449
|
-
? { kind: 'missing' }
|
|
450
|
-
: { kind: 'ready', route };
|
|
450
|
+
return route === undefined ? { kind: 'missing' } : { kind: 'ready', route };
|
|
451
451
|
}
|
|
452
452
|
let enclosingSpotRoute: ZLinkSpotRouteTarget | undefined;
|
|
453
453
|
if (decoded.spotKind === ZLinkSpotKind.User) {
|
|
@@ -455,8 +455,8 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
455
455
|
enclosingSpotRoute = await this.authoritySpotResolver.resolve(decoded.spotId, signal);
|
|
456
456
|
} catch (error) {
|
|
457
457
|
if (
|
|
458
|
-
error instanceof ZLinkFrameworkException
|
|
459
|
-
|
|
458
|
+
error instanceof ZLinkFrameworkException &&
|
|
459
|
+
internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.SpotRouteNotFound
|
|
460
460
|
) {
|
|
461
461
|
return { kind: 'missing' };
|
|
462
462
|
}
|
|
@@ -482,9 +482,7 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
482
482
|
enclosingSpotRoute
|
|
483
483
|
};
|
|
484
484
|
const cachedRoute = await this.cacheDirectActorRoute(actorId, route, remainingLeaseMs);
|
|
485
|
-
return cachedRoute === undefined
|
|
486
|
-
? { kind: 'missing' }
|
|
487
|
-
: { kind: 'ready', route: cachedRoute };
|
|
485
|
+
return cachedRoute === undefined ? { kind: 'missing' } : { kind: 'ready', route: cachedRoute };
|
|
488
486
|
}
|
|
489
487
|
|
|
490
488
|
private async cacheDirectActorRoute(
|
|
@@ -520,10 +518,8 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
520
518
|
): Promise<SpotHandle | undefined> {
|
|
521
519
|
const initial = await this.resolveActorSpotRef(meshName, actorId, signal);
|
|
522
520
|
if (initial === undefined) return undefined;
|
|
523
|
-
return createSpotHandle(
|
|
524
|
-
|
|
525
|
-
initial,
|
|
526
|
-
(refreshSignal) => this.resolveActorSpotRef(meshName, actorId, refreshSignal)
|
|
521
|
+
return createSpotHandle(initial.spotId, initial, (refreshSignal) =>
|
|
522
|
+
this.resolveActorSpotRef(meshName, actorId, refreshSignal)
|
|
527
523
|
);
|
|
528
524
|
}
|
|
529
525
|
|
|
@@ -543,14 +539,16 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
543
539
|
this.options.events?.spotResolveMiss(key);
|
|
544
540
|
return undefined;
|
|
545
541
|
}
|
|
546
|
-
if (
|
|
547
|
-
this.
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
542
|
+
if (
|
|
543
|
+
!(await this.cacheReady(
|
|
544
|
+
this.spotRoutes,
|
|
545
|
+
cacheKey,
|
|
546
|
+
row,
|
|
547
|
+
row.ownerId,
|
|
548
|
+
row.leaseGeneration,
|
|
549
|
+
signal
|
|
550
|
+
))
|
|
551
|
+
) {
|
|
554
552
|
this.options.events?.spotResolveMiss(key);
|
|
555
553
|
return undefined;
|
|
556
554
|
}
|
|
@@ -577,16 +575,13 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
577
575
|
expectedLifecycleGeneration?: bigint,
|
|
578
576
|
signal?: AbortSignal
|
|
579
577
|
): Promise<ZLinkFrameworkRuntimeState | undefined> {
|
|
580
|
-
const descriptor = (
|
|
581
|
-
meshName,
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
expectedLifecycleGeneration === undefined
|
|
588
|
-
|| candidate.lifecycleGeneration === expectedLifecycleGeneration
|
|
589
|
-
)
|
|
578
|
+
const descriptor = (
|
|
579
|
+
await this.options.stores.locationStore.listMeshNodes(meshName, undefined, signal)
|
|
580
|
+
).items.find(
|
|
581
|
+
(candidate) =>
|
|
582
|
+
routingIdsEqual(candidate.rid, nodeRid) &&
|
|
583
|
+
(expectedLifecycleGeneration === undefined ||
|
|
584
|
+
candidate.lifecycleGeneration === expectedLifecycleGeneration)
|
|
590
585
|
);
|
|
591
586
|
return descriptor?.state;
|
|
592
587
|
}
|
|
@@ -598,15 +593,17 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
598
593
|
const cacheKey = `${key.meshName}\u0000${key.actorId}`;
|
|
599
594
|
const cached = await this.lane.run(() => this.getCachedCore(this.actorRoutes, cacheKey));
|
|
600
595
|
if (cached !== undefined) return cached;
|
|
601
|
-
const meshNames =
|
|
602
|
-
? this.options.spotMeshNames ?? []
|
|
603
|
-
: [key.meshName];
|
|
596
|
+
const meshNames =
|
|
597
|
+
key.meshName.length === 0 ? (this.options.spotMeshNames ?? []) : [key.meshName];
|
|
604
598
|
let stored: ZLinkActorLocation | undefined;
|
|
605
599
|
for (const meshName of meshNames) {
|
|
606
|
-
stored = await this.options.stores.actorStore.resolveActor(
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
600
|
+
stored = await this.options.stores.actorStore.resolveActor(
|
|
601
|
+
{
|
|
602
|
+
meshName,
|
|
603
|
+
actorId: key.actorId
|
|
604
|
+
},
|
|
605
|
+
signal
|
|
606
|
+
);
|
|
610
607
|
if (stored !== undefined) break;
|
|
611
608
|
}
|
|
612
609
|
const row = await this.liveRows.resolve(
|
|
@@ -614,22 +611,24 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
614
611
|
(candidate) => candidate.ownerId,
|
|
615
612
|
signal,
|
|
616
613
|
(candidate) =>
|
|
617
|
-
candidate.actorRef.objectGeneration > 0n
|
|
618
|
-
|
|
619
|
-
|
|
614
|
+
candidate.actorRef.objectGeneration > 0n &&
|
|
615
|
+
candidate.ownerNodeGeneration > 0n &&
|
|
616
|
+
candidate.membershipEpoch > 0n
|
|
620
617
|
);
|
|
621
618
|
if (row === undefined) {
|
|
622
619
|
this.options.events?.actorResolveMiss(key);
|
|
623
620
|
return undefined;
|
|
624
621
|
}
|
|
625
|
-
if (
|
|
626
|
-
this.
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
622
|
+
if (
|
|
623
|
+
!(await this.cacheReady(
|
|
624
|
+
this.actorRoutes,
|
|
625
|
+
cacheKey,
|
|
626
|
+
row,
|
|
627
|
+
row.ownerId,
|
|
628
|
+
row.leaseGeneration,
|
|
629
|
+
signal
|
|
630
|
+
))
|
|
631
|
+
) {
|
|
633
632
|
this.options.events?.actorResolveMiss(key);
|
|
634
633
|
return undefined;
|
|
635
634
|
}
|
|
@@ -673,9 +672,10 @@ export class ZLinkStoreLocationResolvers implements
|
|
|
673
672
|
}
|
|
674
673
|
for (const [key, cached] of this.actorRoutes) {
|
|
675
674
|
if (
|
|
676
|
-
cached.row.spotId === spotId
|
|
677
|
-
|
|
678
|
-
)
|
|
675
|
+
cached.row.spotId === spotId &&
|
|
676
|
+
(meshName === undefined || cached.row.meshName === meshName)
|
|
677
|
+
)
|
|
678
|
+
this.actorRoutes.delete(key);
|
|
679
679
|
}
|
|
680
680
|
}
|
|
681
681
|
|
|
@@ -749,45 +749,53 @@ function directActorRouteMatchesFence(
|
|
|
749
749
|
route: ZLinkResolvedActorRoute,
|
|
750
750
|
fence: ZLinkActorRouteInvalidationFence
|
|
751
751
|
): boolean {
|
|
752
|
-
return
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
752
|
+
return (
|
|
753
|
+
route.actorRef.actorId === fence.actorId &&
|
|
754
|
+
route.actorRef.objectGeneration === fence.objectGeneration &&
|
|
755
|
+
routingIdsEqual(route.actorRef.nodeRid, fence.targetNodeRid) &&
|
|
756
|
+
route.ownerNodeGeneration === fence.targetNodeGeneration &&
|
|
757
|
+
route.authorityOwnerGeneration === fence.authorityOwnerGeneration &&
|
|
758
|
+
route.ownerLeaseGeneration === fence.ownerLeaseGeneration
|
|
759
|
+
);
|
|
758
760
|
}
|
|
759
761
|
|
|
760
762
|
function legacyActorRouteMatchesFence(
|
|
761
763
|
route: ZLinkActorLocation,
|
|
762
764
|
fence: ZLinkActorRouteInvalidationFence
|
|
763
765
|
): boolean {
|
|
764
|
-
return
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
766
|
+
return (
|
|
767
|
+
route.actorId === fence.actorId &&
|
|
768
|
+
route.actorRef.objectGeneration === fence.objectGeneration &&
|
|
769
|
+
routingIdsEqual(route.actorRef.nodeRid, fence.targetNodeRid) &&
|
|
770
|
+
route.ownerNodeGeneration === fence.targetNodeGeneration &&
|
|
771
|
+
route.leaseGeneration === fence.ownerLeaseGeneration
|
|
772
|
+
);
|
|
769
773
|
}
|
|
770
774
|
|
|
771
775
|
function spotRouteMatchesFence(
|
|
772
776
|
route: ZLinkSpotLocation,
|
|
773
777
|
fence: ZLinkSpotRouteInvalidationFence
|
|
774
778
|
): boolean {
|
|
775
|
-
return
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
779
|
+
return (
|
|
780
|
+
route.spotId === fence.spotId &&
|
|
781
|
+
route.spotGeneration === fence.objectGeneration &&
|
|
782
|
+
routingIdsEqual(route.ownerNodeRid, fence.targetNodeRid) &&
|
|
783
|
+
route.ownerNodeGeneration === fence.targetNodeGeneration &&
|
|
784
|
+
route.leaseGeneration === fence.ownerLeaseGeneration
|
|
785
|
+
);
|
|
780
786
|
}
|
|
781
787
|
|
|
782
788
|
function actorEnclosingSpotMatchesFence(
|
|
783
789
|
route: ZLinkActorLocation,
|
|
784
790
|
fence: ZLinkSpotRouteInvalidationFence
|
|
785
791
|
): boolean {
|
|
786
|
-
return
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
792
|
+
return (
|
|
793
|
+
route.spotId === fence.spotId &&
|
|
794
|
+
route.spotGeneration === fence.objectGeneration &&
|
|
795
|
+
routingIdsEqual(route.ownerNodeRid, fence.targetNodeRid) &&
|
|
796
|
+
route.ownerNodeGeneration === fence.targetNodeGeneration &&
|
|
797
|
+
route.leaseGeneration === fence.ownerLeaseGeneration
|
|
798
|
+
);
|
|
791
799
|
}
|
|
792
800
|
|
|
793
801
|
function resolvedActorEnclosingSpotMatchesFence(
|
|
@@ -795,13 +803,15 @@ function resolvedActorEnclosingSpotMatchesFence(
|
|
|
795
803
|
fence: ZLinkSpotRouteInvalidationFence
|
|
796
804
|
): boolean {
|
|
797
805
|
const enclosing = route.enclosingSpotRoute;
|
|
798
|
-
return
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
806
|
+
return (
|
|
807
|
+
enclosing !== undefined &&
|
|
808
|
+
enclosing.spotId === fence.spotId &&
|
|
809
|
+
enclosing.targetSpotGeneration === fence.objectGeneration &&
|
|
810
|
+
routingIdsEqual(enclosing.targetNodeRid, fence.targetNodeRid) &&
|
|
811
|
+
enclosing.targetNodeGeneration === fence.targetNodeGeneration &&
|
|
812
|
+
enclosing.authorityOwnerGeneration === fence.authorityOwnerGeneration &&
|
|
813
|
+
enclosing.ownerLeaseGeneration === fence.ownerLeaseGeneration
|
|
814
|
+
);
|
|
805
815
|
}
|
|
806
816
|
|
|
807
817
|
export class DefaultZLinkLocationReadiness implements ZLinkLocationReadiness {
|
|
@@ -815,11 +825,15 @@ export class DefaultZLinkLocationReadiness implements ZLinkLocationReadiness {
|
|
|
815
825
|
): Promise<boolean> {
|
|
816
826
|
try {
|
|
817
827
|
void role;
|
|
818
|
-
const page = await this.query.listTopology(
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
828
|
+
const page = await this.query.listTopology(
|
|
829
|
+
{
|
|
830
|
+
meshName,
|
|
831
|
+
nodeRid,
|
|
832
|
+
state: ZLinkLocationTopologyState.Ready
|
|
833
|
+
},
|
|
834
|
+
undefined,
|
|
835
|
+
signal
|
|
836
|
+
);
|
|
823
837
|
return page.items.length > 0;
|
|
824
838
|
} catch {
|
|
825
839
|
return false;
|
|
@@ -914,26 +928,27 @@ export class ZLinkAuthoritySpotRouteResolver implements ZLinkSpotRouteResolver {
|
|
|
914
928
|
try {
|
|
915
929
|
if (prepared.cached !== undefined) return prepared.cached;
|
|
916
930
|
|
|
917
|
-
const current = await this.store.readAuthority(
|
|
918
|
-
encodeAuthorityKey('user_spot', key),
|
|
919
|
-
signal
|
|
920
|
-
);
|
|
931
|
+
const current = await this.store.readAuthority(encodeAuthorityKey('user_spot', key), signal);
|
|
921
932
|
if (current.kind === 'snapshot' && current.allocation.state === 'active') {
|
|
922
933
|
const decoded = decodeServiceReadySpotAuthority(
|
|
923
934
|
serviceRelocationAuthorityApplicationPayload(current.payload)
|
|
924
935
|
);
|
|
925
936
|
if (
|
|
926
|
-
decoded !== undefined
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
937
|
+
decoded !== undefined &&
|
|
938
|
+
decoded.spotId === String(spotId) &&
|
|
939
|
+
decoded.ownerId === current.ownerId &&
|
|
940
|
+
decoded.ownerLeaseGeneration === current.ownerLeaseGeneration
|
|
930
941
|
) {
|
|
931
|
-
const remainingLeaseMs =
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
942
|
+
const remainingLeaseMs =
|
|
943
|
+
this.leaseTracker === undefined
|
|
944
|
+
? undefined
|
|
945
|
+
: await this.leaseTracker.remainingOwnerTokenLeaseMs(
|
|
946
|
+
{
|
|
947
|
+
ownerId: current.ownerId,
|
|
948
|
+
leaseGeneration: current.ownerLeaseGeneration
|
|
949
|
+
},
|
|
950
|
+
signal
|
|
951
|
+
);
|
|
937
952
|
if (remainingLeaseMs !== undefined && remainingLeaseMs <= 0) {
|
|
938
953
|
throw new ZLinkFrameworkException(
|
|
939
954
|
ZLinkFrameworkErrorKind.Unavailable,
|
|
@@ -944,9 +959,8 @@ export class ZLinkAuthoritySpotRouteResolver implements ZLinkSpotRouteResolver {
|
|
|
944
959
|
routerChannelId: this.routerChannelIdForMesh(decoded.ownerMeshName),
|
|
945
960
|
targetNodeRid: decoded.ownerNodeRid,
|
|
946
961
|
spotId,
|
|
947
|
-
spotKind:
|
|
948
|
-
? ZLinkSpotKind.Instance
|
|
949
|
-
: ZLinkSpotKind.User,
|
|
962
|
+
spotKind:
|
|
963
|
+
decoded.kind === 'instance_spot' ? ZLinkSpotKind.Instance : ZLinkSpotKind.User,
|
|
950
964
|
stableType: decoded.stableType,
|
|
951
965
|
targetSpotGeneration: current.objectGeneration,
|
|
952
966
|
targetNodeGeneration: current.allocation.descriptorLifecycleGeneration,
|
|
@@ -961,9 +975,15 @@ export class ZLinkAuthoritySpotRouteResolver implements ZLinkSpotRouteResolver {
|
|
|
961
975
|
signal
|
|
962
976
|
)
|
|
963
977
|
};
|
|
964
|
-
await this.lane.run(() =>
|
|
965
|
-
|
|
966
|
-
|
|
978
|
+
await this.lane.run(() =>
|
|
979
|
+
this.cacheResolutionCore(
|
|
980
|
+
key,
|
|
981
|
+
prepared.epoch,
|
|
982
|
+
target,
|
|
983
|
+
remainingLeaseMs,
|
|
984
|
+
current.storeVersion.value
|
|
985
|
+
)
|
|
986
|
+
);
|
|
967
987
|
return target;
|
|
968
988
|
}
|
|
969
989
|
}
|
|
@@ -1001,7 +1021,10 @@ export class ZLinkAuthoritySpotRouteResolver implements ZLinkSpotRouteResolver {
|
|
|
1001
1021
|
}
|
|
1002
1022
|
}
|
|
1003
1023
|
|
|
1004
|
-
private beginResolutionCore(key: string): {
|
|
1024
|
+
private beginResolutionCore(key: string): {
|
|
1025
|
+
readonly epoch: number;
|
|
1026
|
+
readonly cached?: ZLinkSpotRouteTarget;
|
|
1027
|
+
} {
|
|
1005
1028
|
const epoch = this.currentEpochCore(key);
|
|
1006
1029
|
this.routeEpochs.set(key, epoch);
|
|
1007
1030
|
this.activeResolutions.set(key, (this.activeResolutions.get(key) ?? 0) + 1);
|