@zlink-systems/framework 0.25.0 → 0.27.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/Channels/IZLinkFanoutClient.d.ts +0 -6
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.js +16 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +28 -0
- package/dist/runtime/activation-admission.js +57 -0
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +19 -17
- package/dist/runtime/actors/actor-handoff.d.ts +13 -7
- package/dist/runtime/actors/actor-handoff.js +36 -25
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +85 -123
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
- package/dist/runtime/actors/actor-remote-joiner.js +11 -17
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
- package/dist/runtime/actors/deferred-join-completion.js +21 -0
- package/dist/runtime/actors/index.d.ts +10 -8
- package/dist/runtime/actors/index.js +101 -73
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +7 -1
- package/dist/runtime/admission.js +11 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +8 -33
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
- package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -9
- package/dist/runtime/channels/channel-clients.js +68 -60
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -18
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
- package/dist/runtime/channels/channel-runtime-manager.js +4 -12
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
- package/dist/runtime/channels/channel-socket-registry.js +296 -235
- package/dist/runtime/channels/channel-transports.d.ts +11 -20
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +133 -81
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +22 -9
- package/dist/runtime/execution/index.js +107 -37
- package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
- package/dist/runtime/execution/serial-execution-queue.js +99 -26
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/listener-records.d.ts +11 -0
- package/dist/runtime/foundation/listener-records.js +20 -0
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
- package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
- package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
- package/dist/runtime/foundation/service-topology-registry.js +22 -61
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
- package/dist/runtime/host/actor-transfer-runtime.js +210 -256
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +19 -14
- package/dist/runtime/host/index.js +234 -175
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +11 -23
- package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
- package/dist/runtime/host/route-mesh-runtime.js +178 -257
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
- package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
- package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
- package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
- package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +5 -10
- package/dist/runtime/locations/lifecycle.js +4 -33
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +44 -30
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
- package/dist/runtime/locations/spot-location-claims.js +40 -23
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
- package/dist/runtime/spots/index.d.ts +29 -29
- package/dist/runtime/spots/index.js +441 -313
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
- package/dist/runtime/spots/spot-activation-registry.js +27 -60
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
- package/dist/runtime/spots/spot-activation-state.js +4 -17
- package/dist/runtime/spots/spot-activation.d.ts +10 -9
- package/dist/runtime/spots/spot-activation.js +103 -81
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
- package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
- package/dist/runtime/spots/spot-actor-membership.js +44 -53
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-entry-activation.js +9 -21
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +6 -5
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
- package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +10 -37
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
- package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
- package/dist/runtime/spots/spot-serial-executor.js +9 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
- package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
- package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -19
- package/dist/runtime/streams/index.d.ts +15 -14
- package/dist/runtime/streams/index.js +38 -39
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/session-serial-executor.js +2 -2
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +15 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +72 -0
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +45 -39
- package/src/runtime/actors/actor-handoff.ts +55 -45
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +174 -215
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +15 -36
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/actor-source-transfer.ts +5 -18
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +44 -0
- package/src/runtime/actors/index.ts +122 -88
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +13 -2
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +15 -42
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
- package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
- package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
- package/src/runtime/backend/raw-binding-port.ts +14 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -31
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +8 -15
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +369 -262
- package/src/runtime/channels/channel-transports.ts +161 -115
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +175 -106
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +116 -38
- package/src/runtime/execution/serial-execution-queue.ts +179 -34
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/listener-records.ts +21 -0
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
- package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
- package/src/runtime/foundation/service-topology-registry.ts +30 -79
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +266 -418
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +408 -312
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +12 -44
- package/src/runtime/host/route-mesh-runtime.ts +236 -275
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
- package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
- package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +16 -45
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +90 -58
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +54 -26
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
- package/src/runtime/spots/index.ts +687 -437
- package/src/runtime/spots/spot-activation-registry.ts +42 -71
- package/src/runtime/spots/spot-activation-state.ts +4 -16
- package/src/runtime/spots/spot-activation.ts +167 -115
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
- package/src/runtime/spots/spot-actor-membership.ts +107 -75
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -33
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +29 -21
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
- package/src/runtime/spots/spot-outbound.ts +47 -68
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +10 -43
- package/src/runtime/spots/spot-serial-executor.ts +10 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +23 -37
- package/src/runtime/streams/index.ts +102 -88
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/session-serial-executor.ts +2 -2
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
- package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { listAllMeshNodeDescriptors } from './location-store-pages';
|
|
2
|
+
import { MILLISECONDS_PER_SECOND } from '../diagnostics/runtime-metrics';
|
|
3
|
+
import { ZLINK_PROVIDER_MAX_PAGE_SIZE } from '../../contracts/Locations/Stores';
|
|
1
4
|
import {
|
|
2
5
|
zlinkRuntimeDefaultLocationOptions,
|
|
3
6
|
type ZLinkLocationOptionOverrides
|
|
@@ -63,6 +66,7 @@ import type { ZLinkDomainLocationStore } from './domain-store-contract';
|
|
|
63
66
|
import { zlinkLocationAutoConnectTypeName, zlinkLocationRoleName } from './canonical-codec';
|
|
64
67
|
import { ZLinkLocationKeyCodec } from './key-codec';
|
|
65
68
|
import { ZLinkLiveRowFilter, ZLinkOwnerLeaseTracker } from './lease-tracker';
|
|
69
|
+
import { isAbortError } from '../abort';
|
|
66
70
|
import type { ZLinkOwnershipLostEvent } from './lifecycle-runtime';
|
|
67
71
|
|
|
68
72
|
export interface ZLinkLocationRuntimeStores {
|
|
@@ -142,11 +146,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
142
146
|
private readonly clearTimer: (handle: unknown) => void;
|
|
143
147
|
private readonly monotonicNowMs: () => number;
|
|
144
148
|
private readonly liveRows: ZLinkLiveRowFilter;
|
|
149
|
+
private readonly leaseTracker: ZLinkOwnerLeaseTracker;
|
|
145
150
|
private readonly ownershipLostHandlers = new Set<(event: ZLinkOwnershipLostEvent) => void>();
|
|
146
151
|
private readonly ownerLeaseRenewedHandlers = new Set<(renewal: ZLinkOwnerLeaseRenewed) => void>();
|
|
147
152
|
private readonly ownerLeaseRenewalFailedHandlers = new Set<() => void>();
|
|
148
153
|
private heartbeatTimer: unknown;
|
|
149
|
-
private heartbeatRenewal?: Promise<
|
|
154
|
+
private heartbeatRenewal?: Promise<unknown>;
|
|
150
155
|
private nodeRidValue?: RoutingId;
|
|
151
156
|
private started = false;
|
|
152
157
|
private ownerCleanupComplete = true;
|
|
@@ -189,14 +194,14 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
189
194
|
runtimeOptions.setTimer ?? ((callback, delayMs) => setTimeout(callback, delayMs));
|
|
190
195
|
this.clearTimer =
|
|
191
196
|
runtimeOptions.clearTimer ?? ((handle) => clearTimeout(handle as NodeJS.Timeout));
|
|
192
|
-
|
|
197
|
+
this.leaseTracker =
|
|
193
198
|
runtimeOptions.leaseTracker ??
|
|
194
199
|
new ZLinkOwnerLeaseTracker({
|
|
195
200
|
store: this.stores.ownerLeaseStore,
|
|
196
201
|
options: this.options,
|
|
197
202
|
monotonicNowMs: this.monotonicNowMs
|
|
198
203
|
});
|
|
199
|
-
this.liveRows = new ZLinkLiveRowFilter(
|
|
204
|
+
this.liveRows = new ZLinkLiveRowFilter();
|
|
200
205
|
}
|
|
201
206
|
|
|
202
207
|
get isStarted(): boolean {
|
|
@@ -278,7 +283,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
278
283
|
let cursor: ZLinkAuthorityScanCursor | undefined;
|
|
279
284
|
let expired = false;
|
|
280
285
|
do {
|
|
281
|
-
const page = await this.stores.authorityStore.listAuthorities(
|
|
286
|
+
const page = await this.stores.authorityStore.listAuthorities(
|
|
287
|
+
'',
|
|
288
|
+
cursor,
|
|
289
|
+
ZLINK_PROVIDER_MAX_PAGE_SIZE,
|
|
290
|
+
signal
|
|
291
|
+
);
|
|
282
292
|
if (page.kind === 'scanExpired') {
|
|
283
293
|
expired = true;
|
|
284
294
|
break;
|
|
@@ -314,7 +324,14 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
314
324
|
this.ownerLeaseRenewalFailedHandlers.delete(handler);
|
|
315
325
|
}
|
|
316
326
|
|
|
317
|
-
|
|
327
|
+
start(nodeRid: RoutingId): Promise<void>;
|
|
328
|
+
start(nodeRid: RoutingId, signal: AbortSignal): Promise<void>;
|
|
329
|
+
start(nodeRid: RoutingId, signal: AbortSignal, shutdownSignal: () => AbortSignal): Promise<void>;
|
|
330
|
+
async start(
|
|
331
|
+
nodeRid: RoutingId,
|
|
332
|
+
signal?: AbortSignal,
|
|
333
|
+
shutdownSignal?: () => AbortSignal
|
|
334
|
+
): Promise<void> {
|
|
318
335
|
if (this.started) {
|
|
319
336
|
return;
|
|
320
337
|
}
|
|
@@ -322,8 +339,10 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
322
339
|
this.started = true;
|
|
323
340
|
this.ownerCleanupComplete = false;
|
|
324
341
|
this.nodeRidValue = nodeRid;
|
|
342
|
+
const claim = this.renewOwnerLeaseOnce(signal, shutdownSignal);
|
|
343
|
+
this.heartbeatRenewal = claim;
|
|
325
344
|
try {
|
|
326
|
-
const claimed = await
|
|
345
|
+
const claimed = await claim;
|
|
327
346
|
if (claimed) {
|
|
328
347
|
this.scheduleHeartbeat();
|
|
329
348
|
return;
|
|
@@ -333,15 +352,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
333
352
|
} catch (error) {
|
|
334
353
|
this.started = false;
|
|
335
354
|
this.ownerCleanupComplete = true;
|
|
336
|
-
throw error;
|
|
355
|
+
throw signal?.aborted === true ? signal.reason : error;
|
|
337
356
|
}
|
|
338
357
|
}
|
|
339
358
|
|
|
340
359
|
async stop(signal?: AbortSignal): Promise<void> {
|
|
341
|
-
if (!this.started && this.ownerCleanupComplete) {
|
|
342
|
-
return;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
360
|
this.started = false;
|
|
346
361
|
if (this.heartbeatTimer !== undefined) {
|
|
347
362
|
this.clearTimer(this.heartbeatTimer);
|
|
@@ -349,12 +364,18 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
349
364
|
}
|
|
350
365
|
this.nextLeaseRenewAtMs = undefined;
|
|
351
366
|
this.ownerLeaseDeadlineMs = undefined;
|
|
352
|
-
await this.heartbeatRenewal;
|
|
353
|
-
|
|
354
367
|
await this.cleanupOwner(signal);
|
|
355
368
|
}
|
|
356
369
|
|
|
357
370
|
async cleanupOwner(signal?: AbortSignal): Promise<void> {
|
|
371
|
+
const pending = this.heartbeatRenewal;
|
|
372
|
+
try {
|
|
373
|
+
await withTimeout(() => pending ?? Promise.resolve(), undefined, signal);
|
|
374
|
+
} catch (error) {
|
|
375
|
+
if (!isAbortError(error)) throw error;
|
|
376
|
+
} finally {
|
|
377
|
+
if (this.heartbeatRenewal === pending) this.heartbeatRenewal = undefined;
|
|
378
|
+
}
|
|
358
379
|
if (this.ownerCleanupComplete) {
|
|
359
380
|
return;
|
|
360
381
|
}
|
|
@@ -364,11 +385,20 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
364
385
|
ownerId: this.ownerId,
|
|
365
386
|
leaseGeneration: 0n
|
|
366
387
|
};
|
|
367
|
-
await
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
388
|
+
await withTimeout(
|
|
389
|
+
async (cleanupSignal) => {
|
|
390
|
+
await this.stores.locationStore.removeAllByOwner(owner, cleanupSignal);
|
|
391
|
+
const currentLease = await this.stores.ownerLeaseStore.readOwnerLease(
|
|
392
|
+
this.ownerId,
|
|
393
|
+
cleanupSignal
|
|
394
|
+
);
|
|
395
|
+
if (currentLease.kind === 'found') {
|
|
396
|
+
await this.stores.ownerLeaseStore.releaseOwnerLease(currentLease.token, cleanupSignal);
|
|
397
|
+
}
|
|
398
|
+
},
|
|
399
|
+
undefined,
|
|
400
|
+
signal
|
|
401
|
+
);
|
|
372
402
|
this.ownerToken = undefined;
|
|
373
403
|
this.lastOwnerToken = undefined;
|
|
374
404
|
this.ownerCleanupComplete = true;
|
|
@@ -378,12 +408,15 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
378
408
|
}
|
|
379
409
|
}
|
|
380
410
|
|
|
381
|
-
async renewOwnerLeaseOnce(
|
|
411
|
+
async renewOwnerLeaseOnce(
|
|
412
|
+
signal?: AbortSignal,
|
|
413
|
+
shutdownSignal?: () => AbortSignal
|
|
414
|
+
): Promise<boolean> {
|
|
382
415
|
if (!this.started) {
|
|
383
416
|
return false;
|
|
384
417
|
}
|
|
385
418
|
if (this.ownerToken === undefined) {
|
|
386
|
-
return await this.claimFreshOwnerLease(signal);
|
|
419
|
+
return await this.claimFreshOwnerLease(signal, shutdownSignal);
|
|
387
420
|
}
|
|
388
421
|
|
|
389
422
|
const wasOwnerLeaseUsable = this.ownerLeaseUsable;
|
|
@@ -413,7 +446,7 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
413
446
|
// The store has already told us that this owner token cannot be
|
|
414
447
|
// renewed. Claim immediately so descriptor recovery does not wait for
|
|
415
448
|
// another heartbeat interval.
|
|
416
|
-
return await this.claimFreshOwnerLease(signal);
|
|
449
|
+
return await this.claimFreshOwnerLease(signal, shutdownSignal);
|
|
417
450
|
}
|
|
418
451
|
this.ownerLeaseHealthy = true;
|
|
419
452
|
this.ownerLeaseRenewedAt = result.storeNow;
|
|
@@ -437,12 +470,15 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
437
470
|
}
|
|
438
471
|
}
|
|
439
472
|
|
|
440
|
-
private async claimFreshOwnerLease(
|
|
473
|
+
private async claimFreshOwnerLease(
|
|
474
|
+
signal?: AbortSignal,
|
|
475
|
+
shutdownSignal?: () => AbortSignal
|
|
476
|
+
): Promise<boolean> {
|
|
441
477
|
const claimStartedAtMs = this.monotonicNowMs();
|
|
442
478
|
const timeoutDeadline = performance.now() + this.options.ownerLeaseRenewTimeoutMs;
|
|
443
479
|
let claim: Awaited<ReturnType<ZLinkOwnerLeaseStore['claimOwnerLease']>>;
|
|
444
480
|
try {
|
|
445
|
-
claim = await this.claimOwnerLeaseWithConfirmation(timeoutDeadline, signal);
|
|
481
|
+
claim = await this.claimOwnerLeaseWithConfirmation(timeoutDeadline, signal, shutdownSignal);
|
|
446
482
|
} catch (error) {
|
|
447
483
|
if (signal?.aborted === true) throw error;
|
|
448
484
|
if (error instanceof ZLinkOwnerLeaseClaimError) throw error;
|
|
@@ -458,17 +494,7 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
458
494
|
}
|
|
459
495
|
try {
|
|
460
496
|
if (!this.started) {
|
|
461
|
-
// stop
|
|
462
|
-
// not install a token into a stopped runtime or leave an orphan lease.
|
|
463
|
-
try {
|
|
464
|
-
await withTimeout(
|
|
465
|
-
(releaseSignal) =>
|
|
466
|
-
this.stores.ownerLeaseStore.releaseOwnerLease(claim.token, releaseSignal),
|
|
467
|
-
remainingTimeoutMs(timeoutDeadline)
|
|
468
|
-
);
|
|
469
|
-
} catch (error) {
|
|
470
|
-
this.recordFailure(errorMessage(error), 'owner_lease_release');
|
|
471
|
-
}
|
|
497
|
+
// stop owns confirmation and release under the host shutdown signal.
|
|
472
498
|
return false;
|
|
473
499
|
}
|
|
474
500
|
this.lastOwnerToken = this.ownerToken;
|
|
@@ -500,51 +526,86 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
500
526
|
|
|
501
527
|
private async claimOwnerLeaseWithConfirmation(
|
|
502
528
|
timeoutDeadline: number,
|
|
503
|
-
signal?: AbortSignal
|
|
529
|
+
signal?: AbortSignal,
|
|
530
|
+
shutdownSignal?: () => AbortSignal
|
|
504
531
|
): Promise<Awaited<ReturnType<ZLinkOwnerLeaseStore['claimOwnerLease']>>> {
|
|
505
532
|
signal?.throwIfAborted();
|
|
506
533
|
let claim: Awaited<ReturnType<ZLinkOwnerLeaseStore['claimOwnerLease']>>;
|
|
534
|
+
let request: ReturnType<ZLinkOwnerLeaseStore['claimOwnerLease']> | undefined;
|
|
507
535
|
try {
|
|
508
536
|
claim = await withTimeout(
|
|
509
537
|
(claimSignal) =>
|
|
510
|
-
this.stores.ownerLeaseStore.claimOwnerLease(
|
|
538
|
+
(request = this.stores.ownerLeaseStore.claimOwnerLease(
|
|
511
539
|
this.ownerId,
|
|
512
540
|
this.options.ownerLeaseTtlMs,
|
|
513
541
|
claimSignal
|
|
514
|
-
),
|
|
542
|
+
)),
|
|
515
543
|
remainingTimeoutMs(timeoutDeadline),
|
|
516
544
|
signal
|
|
517
545
|
);
|
|
518
546
|
} catch (error) {
|
|
519
547
|
if (error instanceof OwnerLeaseRenewTimeoutError) throw error;
|
|
520
|
-
|
|
548
|
+
if (signal?.aborted === true && request !== undefined) {
|
|
549
|
+
const cleanupSignal = shutdownSignal?.();
|
|
550
|
+
try {
|
|
551
|
+
await withTimeout(
|
|
552
|
+
() => request!,
|
|
553
|
+
cleanupSignal === undefined ? remainingTimeoutMs(timeoutDeadline) : undefined,
|
|
554
|
+
cleanupSignal
|
|
555
|
+
);
|
|
556
|
+
} catch (completionError) {
|
|
557
|
+
if (
|
|
558
|
+
cleanupSignal?.aborted === true ||
|
|
559
|
+
completionError instanceof OwnerLeaseRenewTimeoutError
|
|
560
|
+
) {
|
|
561
|
+
throw new ZLinkOwnerCleanupError(completionError);
|
|
562
|
+
}
|
|
563
|
+
if (!isAbortError(completionError)) {
|
|
564
|
+
this.recordFailure(errorMessage(completionError), 'owner_lease_claim');
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
const confirmed = await this.confirmOwnerLease(
|
|
569
|
+
error,
|
|
570
|
+
timeoutDeadline,
|
|
571
|
+
signal,
|
|
572
|
+
shutdownSignal
|
|
573
|
+
);
|
|
521
574
|
if (confirmed !== undefined) return confirmed;
|
|
522
575
|
throw error;
|
|
523
576
|
}
|
|
524
577
|
if (claim.kind !== 'conflict') return claim;
|
|
525
578
|
const conflict = new ZLinkOwnerLeaseClaimError(claim.kind);
|
|
526
|
-
return (
|
|
579
|
+
return (
|
|
580
|
+
(await this.confirmOwnerLease(conflict, timeoutDeadline, signal, shutdownSignal)) ?? claim
|
|
581
|
+
);
|
|
527
582
|
}
|
|
528
583
|
|
|
529
584
|
private async confirmOwnerLease(
|
|
530
585
|
originalError: unknown,
|
|
531
586
|
timeoutDeadline: number,
|
|
532
|
-
signal?: AbortSignal
|
|
587
|
+
signal?: AbortSignal,
|
|
588
|
+
shutdownSignal?: () => AbortSignal
|
|
533
589
|
): Promise<
|
|
534
590
|
| Extract<Awaited<ReturnType<ZLinkOwnerLeaseStore['claimOwnerLease']>>, { kind: 'claimed' }>
|
|
535
591
|
| undefined
|
|
536
592
|
> {
|
|
537
|
-
const
|
|
538
|
-
|
|
593
|
+
const cancelled = signal?.aborted === true;
|
|
594
|
+
const cleanupSignal = cancelled ? shutdownSignal?.() : undefined;
|
|
595
|
+
const confirmationTimeoutMs =
|
|
596
|
+
cleanupSignal === undefined ? remainingTimeoutMs(timeoutDeadline) : undefined;
|
|
597
|
+
if (confirmationTimeoutMs !== undefined && confirmationTimeoutMs <= 0) throw originalError;
|
|
539
598
|
let confirmed: Awaited<ReturnType<ZLinkOwnerLeaseStore['readOwnerLease']>>;
|
|
540
599
|
try {
|
|
541
600
|
confirmed = await withTimeout(
|
|
542
601
|
(readSignal) => this.stores.ownerLeaseStore.readOwnerLease(this.ownerId, readSignal),
|
|
543
|
-
confirmationTimeoutMs
|
|
602
|
+
confirmationTimeoutMs,
|
|
603
|
+
cleanupSignal
|
|
544
604
|
);
|
|
545
605
|
} catch (confirmationError) {
|
|
546
606
|
this.recordFailure(errorMessage(confirmationError), 'owner_lease_claim_confirmation');
|
|
547
|
-
throw
|
|
607
|
+
if (cancelled) throw new ZLinkOwnerCleanupError(confirmationError);
|
|
608
|
+
throw confirmationError;
|
|
548
609
|
}
|
|
549
610
|
if (confirmed.kind !== 'found' || confirmed.token.ownerId !== this.ownerId) {
|
|
550
611
|
throw originalError;
|
|
@@ -554,10 +615,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
554
615
|
await withTimeout(
|
|
555
616
|
(releaseSignal) =>
|
|
556
617
|
this.stores.ownerLeaseStore.releaseOwnerLease(confirmed.token, releaseSignal),
|
|
557
|
-
remainingTimeoutMs(timeoutDeadline)
|
|
618
|
+
cleanupSignal === undefined ? remainingTimeoutMs(timeoutDeadline) : undefined,
|
|
619
|
+
cleanupSignal
|
|
558
620
|
);
|
|
559
621
|
} catch (releaseError) {
|
|
560
622
|
this.recordFailure(errorMessage(releaseError), 'owner_lease_release');
|
|
623
|
+
throw new ZLinkOwnerCleanupError(releaseError);
|
|
561
624
|
}
|
|
562
625
|
throw originalError;
|
|
563
626
|
}
|
|
@@ -851,7 +914,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
851
914
|
signal?: AbortSignal
|
|
852
915
|
): Promise<readonly ZLinkPeerLocation[]> {
|
|
853
916
|
const rows = await this.stores.peerStore.listPeers(filter, signal);
|
|
854
|
-
const live = await this.
|
|
917
|
+
const live = await this.liveRows.filter(
|
|
918
|
+
rows,
|
|
919
|
+
(row, signal) => this.leaseTracker.isOwnerLive(row.ownerId, signal),
|
|
920
|
+
signal
|
|
921
|
+
);
|
|
855
922
|
// Location Store rows may have been written before this process adopted
|
|
856
923
|
// the endpoint-notation policy, or by another language/version's writer.
|
|
857
924
|
// Normalize on read so every comparison downstream sees the canonical
|
|
@@ -863,8 +930,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
863
930
|
meshName: string,
|
|
864
931
|
signal?: AbortSignal
|
|
865
932
|
): Promise<readonly ZLinkMeshNodeDescriptor[]> {
|
|
866
|
-
const rows =
|
|
867
|
-
const live = await this.
|
|
933
|
+
const rows = await listAllMeshNodeDescriptors(this.stores.locationStore, meshName, signal);
|
|
934
|
+
const live = await this.liveRows.filter(
|
|
935
|
+
rows,
|
|
936
|
+
(row, signal) => this.leaseTracker.isOwnerTokenLive(row, signal),
|
|
937
|
+
signal
|
|
938
|
+
);
|
|
868
939
|
return live.map((row) => ({ ...row, endpoint: normalizeEndpoint(row.endpoint) }));
|
|
869
940
|
}
|
|
870
941
|
|
|
@@ -878,7 +949,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
878
949
|
this.pageRequest(page),
|
|
879
950
|
signal
|
|
880
951
|
);
|
|
881
|
-
const live = await this.
|
|
952
|
+
const live = await this.liveRows.filter(
|
|
953
|
+
rows.items,
|
|
954
|
+
(row, signal) => this.leaseTracker.isOwnerTokenLive(row, signal),
|
|
955
|
+
signal
|
|
956
|
+
);
|
|
882
957
|
return {
|
|
883
958
|
items: live.map((row) => ({ ...row, endpoint: normalizeEndpoint(row.endpoint) })),
|
|
884
959
|
continuationToken: rows.continuationToken
|
|
@@ -899,7 +974,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
899
974
|
}
|
|
900
975
|
const rows = await queryStore.listSpots(filter, this.pageRequest(page), signal);
|
|
901
976
|
return {
|
|
902
|
-
items: await this.
|
|
977
|
+
items: await this.liveRows.filter(
|
|
978
|
+
rows.items,
|
|
979
|
+
(row, signal) => this.leaseTracker.isOwnerTokenLive(row, signal),
|
|
980
|
+
signal
|
|
981
|
+
),
|
|
903
982
|
continuationToken: rows.continuationToken
|
|
904
983
|
};
|
|
905
984
|
}
|
|
@@ -918,7 +997,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
918
997
|
}
|
|
919
998
|
const rows = await queryStore.listActors(filter, this.pageRequest(page), signal);
|
|
920
999
|
return {
|
|
921
|
-
items: await this.
|
|
1000
|
+
items: await this.liveRows.filter(
|
|
1001
|
+
rows.items,
|
|
1002
|
+
(row, signal) => this.leaseTracker.isOwnerTokenLive(row, signal),
|
|
1003
|
+
signal
|
|
1004
|
+
),
|
|
922
1005
|
continuationToken: rows.continuationToken
|
|
923
1006
|
};
|
|
924
1007
|
}
|
|
@@ -929,7 +1012,7 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
929
1012
|
signal?: AbortSignal
|
|
930
1013
|
): Promise<ZLinkLocationPage<ZLinkLocationObjectEntry>> {
|
|
931
1014
|
const normalizedPage = this.pageRequest(page);
|
|
932
|
-
const pageSize = normalizedPage.pageSize
|
|
1015
|
+
const pageSize = normalizedPage.pageSize;
|
|
933
1016
|
const requestedCursor = normalizedPage.continuationToken;
|
|
934
1017
|
let cursor =
|
|
935
1018
|
requestedCursor === undefined ? undefined : PublicAuthorityScanCursor.from(requestedCursor);
|
|
@@ -953,7 +1036,14 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
953
1036
|
const live =
|
|
954
1037
|
(await this.liveRows.resolve(
|
|
955
1038
|
entry,
|
|
956
|
-
(candidate) =>
|
|
1039
|
+
(candidate, signal) =>
|
|
1040
|
+
this.leaseTracker.isOwnerTokenLive(
|
|
1041
|
+
{
|
|
1042
|
+
ownerId: candidate.snapshot.ownerId,
|
|
1043
|
+
leaseGeneration: candidate.snapshot.ownerLeaseGeneration
|
|
1044
|
+
},
|
|
1045
|
+
signal
|
|
1046
|
+
),
|
|
957
1047
|
signal
|
|
958
1048
|
)) !== undefined;
|
|
959
1049
|
items.push(this.objectLocationEntry(identity.globalId, entry.snapshot, live));
|
|
@@ -987,7 +1077,15 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
987
1077
|
);
|
|
988
1078
|
if (found.kind === 'missing' || found.allocation.objectKind === 'actor') return undefined;
|
|
989
1079
|
const live =
|
|
990
|
-
(await this.liveRows.resolve(
|
|
1080
|
+
(await this.liveRows.resolve(
|
|
1081
|
+
found,
|
|
1082
|
+
(snapshot, signal) =>
|
|
1083
|
+
this.leaseTracker.isOwnerTokenLive(
|
|
1084
|
+
{ ownerId: snapshot.ownerId, leaseGeneration: snapshot.ownerLeaseGeneration },
|
|
1085
|
+
signal
|
|
1086
|
+
),
|
|
1087
|
+
signal
|
|
1088
|
+
)) !== undefined;
|
|
991
1089
|
return this.objectLocationEntry(String(spotId), found, live);
|
|
992
1090
|
}
|
|
993
1091
|
|
|
@@ -1002,7 +1100,15 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
1002
1100
|
);
|
|
1003
1101
|
if (found.kind === 'missing' || found.allocation.objectKind !== kind) return undefined;
|
|
1004
1102
|
const live =
|
|
1005
|
-
(await this.liveRows.resolve(
|
|
1103
|
+
(await this.liveRows.resolve(
|
|
1104
|
+
found,
|
|
1105
|
+
(snapshot, signal) =>
|
|
1106
|
+
this.leaseTracker.isOwnerTokenLive(
|
|
1107
|
+
{ ownerId: snapshot.ownerId, leaseGeneration: snapshot.ownerLeaseGeneration },
|
|
1108
|
+
signal
|
|
1109
|
+
),
|
|
1110
|
+
signal
|
|
1111
|
+
)) !== undefined;
|
|
1006
1112
|
return this.objectLocationEntry(globalId, found, live);
|
|
1007
1113
|
}
|
|
1008
1114
|
|
|
@@ -1029,7 +1135,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
1029
1135
|
): Promise<ZLinkLocationPage<ZLinkRouteLocation>> {
|
|
1030
1136
|
const rows = await this.stores.routeStore.listRoutes(filter, this.pageRequest(page), signal);
|
|
1031
1137
|
return {
|
|
1032
|
-
items: await this.
|
|
1138
|
+
items: await this.liveRows.filter(
|
|
1139
|
+
rows.items,
|
|
1140
|
+
(row, signal) => this.leaseTracker.isOwnerLive(row.ownerId, signal),
|
|
1141
|
+
signal
|
|
1142
|
+
),
|
|
1033
1143
|
continuationToken: rows.continuationToken
|
|
1034
1144
|
};
|
|
1035
1145
|
}
|
|
@@ -1041,8 +1151,13 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
1041
1151
|
): Promise<ZLinkLocationPage<ZLinkLocationTopologyEntry>> {
|
|
1042
1152
|
const entries: ZLinkLocationTopologyEntry[] = [];
|
|
1043
1153
|
for (const meshName of this.meshNamesOf(filter.meshName)) {
|
|
1044
|
-
for (const descriptor of await
|
|
1045
|
-
|
|
1154
|
+
for (const descriptor of await listAllMeshNodeDescriptors(
|
|
1155
|
+
this.stores.locationStore,
|
|
1156
|
+
meshName,
|
|
1157
|
+
signal,
|
|
1158
|
+
this.options.listPageSize
|
|
1159
|
+
)) {
|
|
1160
|
+
const live = await this.leaseTracker.isOwnerTokenLive(descriptor, signal);
|
|
1046
1161
|
const entry: ZLinkLocationTopologyEntry = {
|
|
1047
1162
|
meshName: descriptor.meshName,
|
|
1048
1163
|
nodeRid: descriptor.rid,
|
|
@@ -1069,8 +1184,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
1069
1184
|
return this.pageInMemory(entries, page);
|
|
1070
1185
|
}
|
|
1071
1186
|
|
|
1072
|
-
private pageRequest(
|
|
1073
|
-
|
|
1187
|
+
private pageRequest(
|
|
1188
|
+
page: ZLinkPageRequest | undefined
|
|
1189
|
+
): ZLinkPageRequest & { readonly pageSize: number } {
|
|
1190
|
+
return page?.pageSize === undefined
|
|
1191
|
+
? { ...page, pageSize: this.options.listPageSize }
|
|
1192
|
+
: (page as ZLinkPageRequest & { readonly pageSize: number });
|
|
1074
1193
|
}
|
|
1075
1194
|
|
|
1076
1195
|
async listServiceSummaries(
|
|
@@ -1080,16 +1199,24 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
1080
1199
|
): Promise<ZLinkLocationPage<ZLinkLocationServiceSummary>> {
|
|
1081
1200
|
const summaries: ZLinkLocationServiceSummary[] = [];
|
|
1082
1201
|
for (const meshName of this.meshNamesOf(filter.meshName)) {
|
|
1083
|
-
const descriptors = await
|
|
1202
|
+
const descriptors = await listAllMeshNodeDescriptors(
|
|
1203
|
+
this.stores.locationStore,
|
|
1204
|
+
meshName,
|
|
1205
|
+
signal,
|
|
1206
|
+
this.options.listPageSize
|
|
1207
|
+
);
|
|
1084
1208
|
if (descriptors.length === 0) continue;
|
|
1085
|
-
const live = await this.
|
|
1086
|
-
|
|
1209
|
+
const live = await this.liveRows.filter(
|
|
1210
|
+
descriptors,
|
|
1211
|
+
(row, signal) => this.leaseTracker.isOwnerTokenLive(row, signal),
|
|
1212
|
+
signal
|
|
1213
|
+
);
|
|
1087
1214
|
summaries.push({
|
|
1088
1215
|
meshName,
|
|
1089
1216
|
totalCount: descriptors.length,
|
|
1090
|
-
readyCount:
|
|
1217
|
+
readyCount: live.length,
|
|
1091
1218
|
errorCount: 0,
|
|
1092
|
-
stoppedCount: descriptors.
|
|
1219
|
+
stoppedCount: descriptors.length - live.length,
|
|
1093
1220
|
lastUpdatedAt: descriptors.reduce(
|
|
1094
1221
|
(latest, row) => (row.updatedAt > latest ? row.updatedAt : latest),
|
|
1095
1222
|
descriptors[0].updatedAt
|
|
@@ -1103,24 +1230,6 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
1103
1230
|
return meshName === undefined ? this.meshNames : [meshName];
|
|
1104
1231
|
}
|
|
1105
1232
|
|
|
1106
|
-
private async listAllMeshNodeDescriptors(
|
|
1107
|
-
meshName: string,
|
|
1108
|
-
signal?: AbortSignal
|
|
1109
|
-
): Promise<readonly ZLinkMeshNodeDescriptor[]> {
|
|
1110
|
-
const rows: ZLinkMeshNodeDescriptor[] = [];
|
|
1111
|
-
let continuationToken: string | undefined;
|
|
1112
|
-
do {
|
|
1113
|
-
const result = await this.stores.locationStore.listMeshNodes(
|
|
1114
|
-
meshName,
|
|
1115
|
-
{ pageSize: this.options.listPageSize, continuationToken },
|
|
1116
|
-
signal
|
|
1117
|
-
);
|
|
1118
|
-
rows.push(...result.items);
|
|
1119
|
-
continuationToken = result.continuationToken;
|
|
1120
|
-
} while (continuationToken !== undefined);
|
|
1121
|
-
return rows;
|
|
1122
|
-
}
|
|
1123
|
-
|
|
1124
1233
|
private pageInMemory<T>(
|
|
1125
1234
|
entries: readonly T[],
|
|
1126
1235
|
page: ZLinkPageRequest | undefined
|
|
@@ -1128,7 +1237,7 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
1128
1237
|
const normalized = this.pageRequest(page);
|
|
1129
1238
|
const parsedOffset = Number.parseInt(normalized.continuationToken ?? '0', 10);
|
|
1130
1239
|
const offset = Number.isFinite(parsedOffset) && parsedOffset >= 0 ? parsedOffset : 0;
|
|
1131
|
-
const pageSize = normalized.pageSize
|
|
1240
|
+
const pageSize = normalized.pageSize;
|
|
1132
1241
|
const items = entries.slice(offset, offset + pageSize);
|
|
1133
1242
|
const nextOffset = offset + items.length;
|
|
1134
1243
|
return {
|
|
@@ -1137,14 +1246,6 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
1137
1246
|
};
|
|
1138
1247
|
}
|
|
1139
1248
|
|
|
1140
|
-
private async filterLive<TRow>(
|
|
1141
|
-
rows: readonly TRow[],
|
|
1142
|
-
ownerIdOf: (row: TRow) => string,
|
|
1143
|
-
signal?: AbortSignal
|
|
1144
|
-
): Promise<TRow[]> {
|
|
1145
|
-
return await this.liveRows.filter(rows, ownerIdOf, signal);
|
|
1146
|
-
}
|
|
1147
|
-
|
|
1148
1249
|
private scheduleHeartbeat(): void {
|
|
1149
1250
|
if (!this.started) {
|
|
1150
1251
|
return;
|
|
@@ -1154,11 +1255,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
1154
1255
|
const delayMs = Math.max(0, scheduledAt - this.monotonicNowMs());
|
|
1155
1256
|
this.heartbeatTimer = this.setTimer(() => {
|
|
1156
1257
|
this.heartbeatTimer = undefined;
|
|
1157
|
-
const lateness = Math.max(0, this.monotonicNowMs() - scheduledAt) /
|
|
1258
|
+
const lateness = Math.max(0, this.monotonicNowMs() - scheduledAt) / MILLISECONDS_PER_SECOND;
|
|
1158
1259
|
for (const scope of this.leaseScopes) {
|
|
1159
1260
|
this.metrics?.recordOwnerLeaseRenewLateness(lateness, scope.kind, scope.name);
|
|
1160
1261
|
}
|
|
1161
|
-
this.nextLeaseRenewAtMs =
|
|
1262
|
+
this.nextLeaseRenewAtMs = this.monotonicNowMs() + this.options.ownerLeaseRenewIntervalMs;
|
|
1162
1263
|
if (
|
|
1163
1264
|
this.ownerLeaseDeadlineMs !== undefined &&
|
|
1164
1265
|
this.monotonicNowMs() >= this.ownerLeaseDeadlineMs
|
|
@@ -1257,25 +1358,30 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
|
|
|
1257
1358
|
}
|
|
1258
1359
|
|
|
1259
1360
|
async function withTimeout<T>(
|
|
1260
|
-
action: (signal
|
|
1261
|
-
timeoutMs: number,
|
|
1361
|
+
action: (signal?: AbortSignal) => Promise<T>,
|
|
1362
|
+
timeoutMs: number | undefined,
|
|
1262
1363
|
signal?: AbortSignal
|
|
1263
1364
|
): Promise<T> {
|
|
1264
|
-
const timeoutController = new AbortController();
|
|
1365
|
+
const timeoutController = timeoutMs === undefined ? undefined : new AbortController();
|
|
1265
1366
|
const operationSignal =
|
|
1266
1367
|
signal === undefined
|
|
1267
|
-
? timeoutController
|
|
1268
|
-
:
|
|
1368
|
+
? timeoutController?.signal
|
|
1369
|
+
: timeoutController === undefined
|
|
1370
|
+
? signal
|
|
1371
|
+
: AbortSignal.any([signal, timeoutController.signal]);
|
|
1269
1372
|
let timeout: ReturnType<typeof setTimeout> | undefined;
|
|
1270
1373
|
let abort: (() => void) | undefined;
|
|
1271
|
-
const deadline =
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1374
|
+
const deadline =
|
|
1375
|
+
timeoutMs === undefined
|
|
1376
|
+
? undefined
|
|
1377
|
+
: new Promise<never>((_resolve, reject) => {
|
|
1378
|
+
timeout = setTimeout(() => {
|
|
1379
|
+
const error = new OwnerLeaseRenewTimeoutError(timeoutMs);
|
|
1380
|
+
timeoutController!.abort(error);
|
|
1381
|
+
reject(error);
|
|
1382
|
+
}, timeoutMs);
|
|
1383
|
+
timeout.unref();
|
|
1384
|
+
});
|
|
1279
1385
|
const cancellation =
|
|
1280
1386
|
signal === undefined
|
|
1281
1387
|
? undefined
|
|
@@ -1285,10 +1391,14 @@ async function withTimeout<T>(
|
|
|
1285
1391
|
});
|
|
1286
1392
|
try {
|
|
1287
1393
|
signal?.throwIfAborted();
|
|
1394
|
+
const operation = action(operationSignal);
|
|
1395
|
+
if (deadline === undefined) {
|
|
1396
|
+
return cancellation === undefined
|
|
1397
|
+
? await operation
|
|
1398
|
+
: await Promise.race([operation, cancellation]);
|
|
1399
|
+
}
|
|
1288
1400
|
return await Promise.race(
|
|
1289
|
-
cancellation === undefined
|
|
1290
|
-
? [action(operationSignal), deadline]
|
|
1291
|
-
: [action(operationSignal), deadline, cancellation]
|
|
1401
|
+
cancellation === undefined ? [operation, deadline] : [operation, deadline, cancellation]
|
|
1292
1402
|
);
|
|
1293
1403
|
} finally {
|
|
1294
1404
|
if (timeout !== undefined) clearTimeout(timeout);
|