@zlink-systems/framework 0.26.0 → 0.28.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/Actors/ZLinkActorClient.d.ts +1 -1
- package/dist/contracts/Channels/Calls.d.ts +1 -1
- 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/Builders.d.ts +0 -1
- package/dist/contracts/Configuration/Configs.d.ts +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 -5
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
- 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/Spots/Contracts.d.ts +2 -2
- package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
- package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -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 +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- 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 +49 -153
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- 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 +83 -105
- 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 +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +1 -0
- package/dist/runtime/actors/actor-request-deadline.js +6 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
- 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/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- 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 +2 -0
- package/dist/runtime/admission.js +7 -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 +7 -27
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- 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-support.d.ts +3 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +41 -34
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -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 -8
- package/dist/runtime/channels/channel-clients.js +73 -59
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.d.ts +1 -1
- package/dist/runtime/channels/channel-envelope.js +51 -39
- package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
- package/dist/runtime/channels/channel-outbound-operations.js +25 -42
- 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 +4 -4
- package/dist/runtime/channels/channel-runtime-manager.js +13 -10
- package/dist/runtime/channels/channel-socket-options.js +3 -12
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +240 -177
- package/dist/runtime/channels/channel-transports.d.ts +21 -31
- package/dist/runtime/channels/channel-transports.js +80 -62
- 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 +130 -72
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +1 -3
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
- package/dist/runtime/channels/source-spot-router.d.ts +1 -1
- package/dist/runtime/channels/source-spot-router.js +2 -4
- 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.d.ts +1 -1
- package/dist/runtime/channels/spot-node-route-transport.js +5 -5
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
- package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
- 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 +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- 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/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 +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +79 -94
- 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.js +22 -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 +0 -6
- 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-object-owner.js +3 -2
- 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 -12
- 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 +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- 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 +11 -8
- package/dist/runtime/host/actor-packet-relay.js +54 -99
- 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 +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- 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 +14 -13
- package/dist/runtime/host/index.js +190 -171
- 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 +15 -28
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- 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 +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +3 -12
- package/dist/runtime/host/spot-address-transport.js +78 -220
- 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 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- 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 +72 -22
- 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 +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- 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 +309 -336
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- 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 +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/request-deadline.d.ts +3 -0
- package/dist/runtime/messaging/request-deadline.js +39 -0
- package/dist/runtime/messaging/submission-result.d.ts +4 -0
- package/dist/runtime/messaging/submission-result.js +56 -1
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- 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 +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- 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 +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- 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 +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +7 -8
- package/dist/runtime/spots/spot-outbound.js +21 -23
- 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 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- 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 +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -2
- package/dist/runtime/streams/index.d.ts +16 -17
- package/dist/runtime/streams/index.js +22 -23
- package/dist/runtime/streams/managed-stream.d.ts +5 -2
- package/dist/runtime/streams/managed-stream.js +20 -13
- package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
- 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 +6 -8
- package/dist/runtime/streams/session-calls.js +6 -22
- package/dist/runtime/streams/session-context.d.ts +10 -10
- package/dist/runtime/streams/session-context.js +25 -10
- package/dist/runtime/streams/session-requests.js +2 -1
- 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/Actors/ZLinkActorClient.ts +1 -1
- package/src/contracts/Channels/Calls.ts +1 -1
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/Builders.ts +0 -1
- package/src/contracts/Configuration/Configs.ts +0 -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 -71
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
- 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/Spots/Contracts.ts +2 -2
- package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
- package/src/contracts/Streams/IZLinkSession.ts +2 -3
- package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +85 -218
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- 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 +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +4 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- 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 +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +14 -37
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +67 -10
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +44 -49
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +139 -102
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +74 -57
- package/src/runtime/channels/channel-outbound-operations.ts +40 -55
- 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 +12 -30
- package/src/runtime/channels/channel-socket-options.ts +8 -15
- package/src/runtime/channels/channel-socket-registry.ts +291 -196
- package/src/runtime/channels/channel-transports.ts +168 -145
- 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 +172 -91
- package/src/runtime/channels/local-spot-route-transport.ts +1 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
- package/src/runtime/channels/source-spot-router.ts +2 -9
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +7 -9
- package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
- 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 +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- 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/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +127 -125
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -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 +0 -10
- 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-object-owner.ts +5 -2
- 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 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- 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 +63 -160
- 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 +180 -260
- 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 +327 -320
- 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 +16 -57
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- 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 +699 -561
- package/src/runtime/host/spot-address-transport.ts +175 -356
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- 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 +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- 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 +457 -482
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/request-deadline.ts +58 -0
- package/src/runtime/messaging/submission-result.ts +72 -2
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- 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 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +59 -47
- 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 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +98 -66
- package/src/runtime/streams/bound-session-service.ts +22 -2
- package/src/runtime/streams/index.ts +78 -68
- package/src/runtime/streams/managed-stream.ts +32 -23
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
- 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 +11 -36
- package/src/runtime/streams/session-context.ts +60 -25
- package/src/runtime/streams/session-requests.ts +2 -1
- 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/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/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -51,7 +51,8 @@ export interface ZLinkSpotNodeRuntimeOptionsFactoryOptions {
|
|
|
51
51
|
export class ZLinkSpotNodeRuntimeOptionsFactory {
|
|
52
52
|
constructor(private readonly options: ZLinkSpotNodeRuntimeOptionsFactoryOptions) {}
|
|
53
53
|
|
|
54
|
-
create(): ZLinkSpotNodeRuntimeManagerOptions {
|
|
54
|
+
create(): Omit<ZLinkSpotNodeRuntimeManagerOptions, 'errorSink'> {
|
|
55
|
+
const spotRouterChannelIdForMesh = this.options.meshRouters.spotRouterChannelIdByMesh();
|
|
55
56
|
return {
|
|
56
57
|
registration: this.options.registration,
|
|
57
58
|
primaryMeshName: this.options.meshRouters.primaryMeshName(),
|
|
@@ -59,7 +60,9 @@ export class ZLinkSpotNodeRuntimeOptionsFactory {
|
|
|
59
60
|
context: this.options.context,
|
|
60
61
|
channelClient: new DefaultZLinkChannelClient(
|
|
61
62
|
this.options.registration,
|
|
62
|
-
this.options.channelTransport
|
|
63
|
+
this.options.channelTransport,
|
|
64
|
+
this.options.routeTransport,
|
|
65
|
+
spotRouterChannelIdForMesh
|
|
63
66
|
),
|
|
64
67
|
fanoutClient: new DefaultZLinkFanoutClient(
|
|
65
68
|
this.options.registration,
|
|
@@ -70,7 +73,7 @@ export class ZLinkSpotNodeRuntimeOptionsFactory {
|
|
|
70
73
|
this.options.spotPublisherTransport
|
|
71
74
|
),
|
|
72
75
|
routedTransport: this.options.routeTransport,
|
|
73
|
-
spotRouterChannelIdForMesh
|
|
76
|
+
spotRouterChannelIdForMesh,
|
|
74
77
|
providerResolver: this.options.providerResolver,
|
|
75
78
|
dispatchErrors: this.options.dispatchErrors,
|
|
76
79
|
runtimeEventPublisher: this.options.runtimeEventPublisher,
|
|
@@ -51,18 +51,24 @@ export interface ZLinkSpotRuntimeOptionsFactoryOptions {
|
|
|
51
51
|
meshName: string,
|
|
52
52
|
spotId: string,
|
|
53
53
|
onCommitted: () => void
|
|
54
|
-
) => Promise<
|
|
54
|
+
) => Promise<
|
|
55
|
+
import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined
|
|
56
|
+
>;
|
|
55
57
|
readonly beginInstanceClosingAuthority: (
|
|
56
58
|
meshName: string,
|
|
57
59
|
spotId: string,
|
|
58
60
|
onCommitted: () => void
|
|
59
|
-
) => Promise<
|
|
61
|
+
) => Promise<
|
|
62
|
+
import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined
|
|
63
|
+
>;
|
|
60
64
|
readonly beginUserClosingAuthority: (
|
|
61
65
|
meshName: string,
|
|
62
66
|
spotId: string,
|
|
63
67
|
objectGeneration: bigint,
|
|
64
68
|
onCommitted: () => void
|
|
65
|
-
) => Promise<
|
|
69
|
+
) => Promise<
|
|
70
|
+
import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined
|
|
71
|
+
>;
|
|
66
72
|
readonly createLocationSpotRouteResolver: () => ZLinkSpotRouteResolver | undefined;
|
|
67
73
|
readonly boundSessionRelay: ZLinkBoundSessionRelay;
|
|
68
74
|
readonly actorHandoff: ZLinkActorHandoffCoordinator;
|
|
@@ -71,13 +77,14 @@ export interface ZLinkSpotRuntimeOptionsFactoryOptions {
|
|
|
71
77
|
readonly detachedTaskRunner: ZLinkDetachedTaskRunner;
|
|
72
78
|
readonly metrics: import('../diagnostics').ZLinkRuntimeMetrics;
|
|
73
79
|
readonly admission: ZLinkRuntimeAdmissionGate;
|
|
74
|
-
readonly
|
|
80
|
+
readonly statefulExecution: NonNullable<ZLinkSpotManagerOptions['statefulExecution']>;
|
|
75
81
|
}
|
|
76
82
|
|
|
77
83
|
export class ZLinkSpotRuntimeOptionsFactory {
|
|
78
84
|
constructor(private readonly options: ZLinkSpotRuntimeOptionsFactoryOptions) {}
|
|
79
85
|
|
|
80
86
|
create(actorTransferRuntime: ZLinkActorTransferRuntime): Partial<ZLinkSpotManagerOptions> {
|
|
87
|
+
const spotRouterChannelIdForMesh = this.options.meshRouters.spotRouterChannelIdByMesh();
|
|
81
88
|
return {
|
|
82
89
|
nodeRid: undefined,
|
|
83
90
|
nodeRidProvider: (meshName) => this.meshNodeRoutingId(meshName),
|
|
@@ -128,9 +135,20 @@ export class ZLinkSpotRuntimeOptionsFactory {
|
|
|
128
135
|
}
|
|
129
136
|
await runtime.dispatchEntryActorJoin(meshName, actor, handoffBacklog);
|
|
130
137
|
},
|
|
138
|
+
executeEntryActor: (meshName, actorId, operation) => {
|
|
139
|
+
const runtime = this.options.spotNodeRuntime();
|
|
140
|
+
if (runtime === undefined) {
|
|
141
|
+
throw new ZLinkConfigurationException(
|
|
142
|
+
'Entry Spot Actor completion requires the MeshNode runtime.'
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
return runtime.executeEntryActor(meshName, actorId, operation);
|
|
146
|
+
},
|
|
131
147
|
channelClient: new DefaultZLinkChannelClient(
|
|
132
148
|
this.options.registration,
|
|
133
|
-
this.options.channelTransport
|
|
149
|
+
this.options.channelTransport,
|
|
150
|
+
this.options.routeTransport,
|
|
151
|
+
spotRouterChannelIdForMesh
|
|
134
152
|
),
|
|
135
153
|
fanoutClient: new DefaultZLinkFanoutClient(
|
|
136
154
|
this.options.registration,
|
|
@@ -142,15 +160,7 @@ export class ZLinkSpotRuntimeOptionsFactory {
|
|
|
142
160
|
),
|
|
143
161
|
routedTransport: this.options.routeTransport,
|
|
144
162
|
addressTransport: this.options.addressTransport,
|
|
145
|
-
spotRouterChannelIdForMesh
|
|
146
|
-
channelMeshNameForChannel: (channelName) => {
|
|
147
|
-
const matches = [...this.options.registration.spotNodes.entries()]
|
|
148
|
-
.filter(([, node]) =>
|
|
149
|
-
Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, channelName)
|
|
150
|
-
)
|
|
151
|
-
.map(([meshName]) => meshName);
|
|
152
|
-
return matches.length === 1 ? matches[0] : undefined;
|
|
153
|
-
},
|
|
163
|
+
spotRouterChannelIdForMesh,
|
|
154
164
|
messageSerializers: this.options.registration.messageSerializers,
|
|
155
165
|
runtimeEventPublisher: this.options.runtimeEventPublisher,
|
|
156
166
|
detachedTaskRunner: this.options.detachedTaskRunner,
|
|
@@ -159,8 +169,54 @@ export class ZLinkSpotRuntimeOptionsFactory {
|
|
|
159
169
|
this.options.releaseInstanceAuthority(meshName, String(spotId), objectGeneration),
|
|
160
170
|
beginInstanceIdleClosingAuthority: (meshName, spotId, onCommitted) =>
|
|
161
171
|
this.options.beginInstanceIdleClosingAuthority(meshName, String(spotId), onCommitted),
|
|
162
|
-
beginInstanceClosingAuthority: (meshName, spotId, onCommitted) =>
|
|
163
|
-
this.options.beginInstanceClosingAuthority(
|
|
172
|
+
beginInstanceClosingAuthority: async (meshName, spotId, onCommitted, objectGeneration) => {
|
|
173
|
+
const authority = await this.options.beginInstanceClosingAuthority(
|
|
174
|
+
meshName,
|
|
175
|
+
String(spotId),
|
|
176
|
+
onCommitted
|
|
177
|
+
);
|
|
178
|
+
if (authority === undefined) return undefined;
|
|
179
|
+
// A Close without Reincarnate ends this incarnation. The Instance authority
|
|
180
|
+
// release also forgets the node's Ready projection, so a request on a cached
|
|
181
|
+
// Ready route is refused instead of rematerializing the closed generation.
|
|
182
|
+
const release = () =>
|
|
183
|
+
this.options.releaseInstanceAuthority(meshName, String(spotId), objectGeneration);
|
|
184
|
+
if (authority.reincarnate === undefined) return { release };
|
|
185
|
+
return {
|
|
186
|
+
release,
|
|
187
|
+
reincarnate: async (initialize) => {
|
|
188
|
+
const current = await authority.reincarnate!(initialize);
|
|
189
|
+
const node = this.options.spotNodeRuntime()?.meshNode(meshName);
|
|
190
|
+
const route = {
|
|
191
|
+
targetSpotId: String(spotId),
|
|
192
|
+
targetNodeRid: String(current.allocation.descriptor.rid),
|
|
193
|
+
targetNodeGeneration: current.allocation.descriptorLifecycleGeneration,
|
|
194
|
+
objectGeneration: current.objectGeneration,
|
|
195
|
+
authorityOwnerGeneration: current.authorityOwnerGeneration,
|
|
196
|
+
ownerId: current.ownerId,
|
|
197
|
+
leaseGeneration: current.ownerLeaseGeneration,
|
|
198
|
+
storeVersion: current.storeVersion.value
|
|
199
|
+
};
|
|
200
|
+
node?.restoreSpotAuthority?.(
|
|
201
|
+
String(spotId),
|
|
202
|
+
'instance_spot',
|
|
203
|
+
current.stableType,
|
|
204
|
+
current.objectGeneration,
|
|
205
|
+
current.authorityOwnerGeneration
|
|
206
|
+
);
|
|
207
|
+
node?.registerInstanceIntent?.(current.stableType, route);
|
|
208
|
+
node?.rememberSpotRoute?.({
|
|
209
|
+
spot: { spotId: String(spotId), generation: current.objectGeneration },
|
|
210
|
+
targetNodeRid: route.targetNodeRid,
|
|
211
|
+
targetNodeGeneration: route.targetNodeGeneration,
|
|
212
|
+
authorityOwnerGeneration: route.authorityOwnerGeneration,
|
|
213
|
+
ownerLeaseGeneration: route.leaseGeneration,
|
|
214
|
+
storeVersion: route.storeVersion
|
|
215
|
+
});
|
|
216
|
+
return current;
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
},
|
|
164
220
|
beginUserClosingAuthority: (meshName, spotId, objectGeneration, onCommitted) =>
|
|
165
221
|
this.options.beginUserClosingAuthority(
|
|
166
222
|
meshName,
|
|
@@ -274,17 +330,12 @@ export class ZLinkSpotRuntimeOptionsFactory {
|
|
|
274
330
|
ZLinkSpotRelocationCoordinationMode.FrameworkManaged
|
|
275
331
|
);
|
|
276
332
|
},
|
|
277
|
-
actorBindingGenerationObserver: (actorId, generation) =>
|
|
278
|
-
this.options
|
|
279
|
-
.actorManager()
|
|
280
|
-
?.getState(actorId)
|
|
281
|
-
?.setBoundSessionBindingGeneration(generation),
|
|
282
333
|
actorTransferRuntime,
|
|
283
334
|
boundSessionRuntime: this.options.boundSessionRelay.boundSessions,
|
|
284
335
|
actorHandoffRuntime: this.options.actorHandoff,
|
|
285
336
|
metrics: this.options.metrics,
|
|
286
337
|
admission: this.options.admission,
|
|
287
|
-
|
|
338
|
+
statefulExecution: this.options.statefulExecution,
|
|
288
339
|
closeErrorSink: this.options.runtimeOrPreStartErrorSink,
|
|
289
340
|
dispatchErrors: this.options.dispatchErrorReporter(this.options.runtimeOrPreStartErrorSink)
|
|
290
341
|
};
|
|
@@ -1,10 +1,29 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import {
|
|
3
|
+
type RoutingId,
|
|
4
|
+
type SpotRef,
|
|
5
|
+
type ZLinkSpotCreateResult,
|
|
6
|
+
ZLinkFrameworkException,
|
|
7
|
+
ZLinkSpotCreateState
|
|
8
|
+
} from '../../contracts';
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
decodeServiceClosingSpotAuthority,
|
|
12
|
+
decodeServiceReadySpotAuthority,
|
|
13
|
+
encodeServiceUserSpotAuthorityPayload
|
|
14
|
+
} from '../foundation/service-authority-payload-codec';
|
|
15
|
+
import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
|
|
16
|
+
import type {
|
|
17
|
+
ServiceDirectSpotRouteFence,
|
|
18
|
+
ServiceUserSpotCloseRecord,
|
|
19
|
+
ServiceUserSpotCreateRecord
|
|
20
|
+
} from '../foundation/service-stateful-wire-codec';
|
|
1
21
|
import {
|
|
2
22
|
ZLinkFrameworkInternalErrorKind,
|
|
3
23
|
createInternalFrameworkException,
|
|
4
24
|
wireReplyFailureException
|
|
5
25
|
} from '../framework-errors-internal';
|
|
6
|
-
import {
|
|
7
|
-
import type { RoutingId, SpotRef, ZLinkSpotCreateResult } from '../../contracts';
|
|
26
|
+
import { encodeAuthorityKey } from '../locations/authority-key-codec';
|
|
8
27
|
import type {
|
|
9
28
|
ZLinkAuthoritySnapshot,
|
|
10
29
|
ZLinkLocationOwnerToken,
|
|
@@ -14,20 +33,9 @@ import type {
|
|
|
14
33
|
ZLinkAuthorityStore,
|
|
15
34
|
ZLinkObjectCreationStore
|
|
16
35
|
} from '../locations/internal-store-contracts';
|
|
17
|
-
import { ZLinkFrameworkException, ZLinkSpotCreateState } from '../../contracts';
|
|
18
|
-
import {
|
|
19
|
-
decodeServiceReadySpotAuthority,
|
|
20
|
-
decodeServiceClosingSpotAuthority,
|
|
21
|
-
encodeServiceUserSpotAuthorityPayload
|
|
22
|
-
} from '../foundation/service-authority-payload-codec';
|
|
23
|
-
import { encodeAuthorityKey } from '../locations/authority-key-codec';
|
|
24
36
|
import type { ZLinkLocalSpotCreateResult } from '../spots/spot-manager-internal-contracts';
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
ServiceUserSpotCloseRecord,
|
|
28
|
-
ServiceUserSpotCreateRecord,
|
|
29
|
-
ServiceDirectSpotRouteFence
|
|
30
|
-
} from '../foundation/service-stateful-wire-codec';
|
|
37
|
+
const DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS = 1_000;
|
|
38
|
+
const DEFAULT_USER_SPOT_POLL_INTERVAL_MS = 10;
|
|
31
39
|
|
|
32
40
|
export interface ZLinkUserSpotCreationCoordinatorOptions {
|
|
33
41
|
readonly store: ZLinkObjectCreationStore & ZLinkAuthorityStore;
|
|
@@ -109,9 +117,10 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
109
117
|
) => Promise<ZLinkLocalSpotCreateResult>,
|
|
110
118
|
discard?: (signal?: AbortSignal) => Promise<void>
|
|
111
119
|
): Promise<ZLinkUserSpotCreationResult> {
|
|
112
|
-
const deadline = createDeadline(request.timeoutMs, request.signal);
|
|
113
|
-
const deadlineMs = performance.now() + request.timeoutMs;
|
|
114
120
|
const deadlineUnixMs = Date.now() + request.timeoutMs;
|
|
121
|
+
const remainingMs = Math.max(0, deadlineUnixMs - Date.now());
|
|
122
|
+
const deadline = createDeadline(remainingMs, request.signal);
|
|
123
|
+
const deadlineMs = performance.now() + remainingMs;
|
|
115
124
|
const signal = deadline.signal;
|
|
116
125
|
signal.throwIfAborted();
|
|
117
126
|
const sha256 = createHash('sha256').update(request.requestPayload).digest();
|
|
@@ -187,7 +196,8 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
187
196
|
}
|
|
188
197
|
}
|
|
189
198
|
},
|
|
190
|
-
signal
|
|
199
|
+
signal,
|
|
200
|
+
BigInt(deadlineUnixMs)
|
|
191
201
|
);
|
|
192
202
|
} catch (error) {
|
|
193
203
|
deadline.close();
|
|
@@ -530,7 +540,8 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
530
540
|
}
|
|
531
541
|
}
|
|
532
542
|
},
|
|
533
|
-
signal
|
|
543
|
+
signal,
|
|
544
|
+
record.deadlineUnixMs
|
|
534
545
|
);
|
|
535
546
|
await discard?.(signal);
|
|
536
547
|
return {
|
|
@@ -565,7 +576,8 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
565
576
|
ownerNodeGeneration: current.allocation.descriptorLifecycleGeneration
|
|
566
577
|
})
|
|
567
578
|
},
|
|
568
|
-
signal
|
|
579
|
+
signal,
|
|
580
|
+
record.deadlineUnixMs
|
|
569
581
|
);
|
|
570
582
|
} catch (error) {
|
|
571
583
|
throw createInternalFrameworkException(
|
|
@@ -596,7 +608,9 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
596
608
|
};
|
|
597
609
|
} catch (error) {
|
|
598
610
|
local?.publication?.abort();
|
|
599
|
-
const cleanupDeadline = createDeadline(
|
|
611
|
+
const cleanupDeadline = createDeadline(
|
|
612
|
+
this.options.cleanupTimeoutMs ?? DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS
|
|
613
|
+
);
|
|
600
614
|
const cleanupSignal = cleanupDeadline.signal;
|
|
601
615
|
const cleanup = await Promise.allSettled([
|
|
602
616
|
waitForAbort(
|
|
@@ -760,7 +774,7 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
760
774
|
if (current.kind === 'snapshot' && current.allocation.state === 'active') {
|
|
761
775
|
return spotRef(current, request);
|
|
762
776
|
}
|
|
763
|
-
await wait(this.options.pollIntervalMs ??
|
|
777
|
+
await wait(this.options.pollIntervalMs ?? DEFAULT_USER_SPOT_POLL_INTERVAL_MS, signal);
|
|
764
778
|
}
|
|
765
779
|
}
|
|
766
780
|
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { createHash, timingSafeEqual } from 'node:crypto';
|
|
2
2
|
import type { ZLinkLocationStore, ZLinkStoreKey, ZLinkStoreReadResult } from '../../contracts';
|
|
3
|
+
import { SHA256_DIGEST_BYTES } from '../foundation/actor-join-recovery-codec';
|
|
4
|
+
import { PROVIDER_STORAGE_NAMESPACE_PREFIX, storeKey } from './in-memory-provider-location-store';
|
|
3
5
|
import type {
|
|
4
6
|
ZLinkAggregateFence,
|
|
5
7
|
ZLinkAggregatePrepareRequest
|
|
6
8
|
} from './internal-location-contracts';
|
|
7
|
-
import { storeKey } from './in-memory-provider-location-store';
|
|
8
9
|
|
|
9
|
-
const
|
|
10
|
+
const INVENTORY_PAGE_KIND = 'aggregate-inventory-page-v1';
|
|
11
|
+
const INVENTORY_ROOT_KIND = 'aggregate-inventory-root-v1';
|
|
12
|
+
const PREFIX = `${PROVIDER_STORAGE_NAMESPACE_PREFIX}aggregate-inventory:`;
|
|
10
13
|
const MAX_PAGE_ENTRIES = 1_024;
|
|
11
14
|
const MAX_PAGE_BYTES = 1_024 * 1_024;
|
|
12
15
|
const MAX_TREE_LEVELS = 32;
|
|
@@ -30,7 +33,7 @@ interface InventoryReference {
|
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
interface InventoryPage {
|
|
33
|
-
readonly kind:
|
|
36
|
+
readonly kind: typeof INVENTORY_PAGE_KIND;
|
|
34
37
|
readonly level: number;
|
|
35
38
|
readonly index: number;
|
|
36
39
|
readonly startIndex: number;
|
|
@@ -40,7 +43,7 @@ interface InventoryPage {
|
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
interface InventoryRoot {
|
|
43
|
-
readonly kind:
|
|
46
|
+
readonly kind: typeof INVENTORY_ROOT_KIND;
|
|
44
47
|
readonly totalCount: number;
|
|
45
48
|
readonly digest: string;
|
|
46
49
|
readonly declaredDigest: string;
|
|
@@ -209,8 +212,8 @@ function buildTree(request: ZLinkAggregatePrepareRequest): InventoryTree {
|
|
|
209
212
|
if (request.participants.length < 1) {
|
|
210
213
|
throw new RangeError('Aggregate inventory requires at least one participant.');
|
|
211
214
|
}
|
|
212
|
-
if (request.inventoryDigest.byteLength !==
|
|
213
|
-
throw new TypeError(
|
|
215
|
+
if (request.inventoryDigest.byteLength !== SHA256_DIGEST_BYTES) {
|
|
216
|
+
throw new TypeError(`Aggregate inventory digest must contain ${SHA256_DIGEST_BYTES} bytes.`);
|
|
214
217
|
}
|
|
215
218
|
const entries = request.participants.map((participant, index): InventoryEntry => ({
|
|
216
219
|
index,
|
|
@@ -240,7 +243,7 @@ function buildTree(request: ZLinkAggregatePrepareRequest): InventoryTree {
|
|
|
240
243
|
) {
|
|
241
244
|
level++;
|
|
242
245
|
if (level >= MAX_TREE_LEVELS) {
|
|
243
|
-
throw new RangeError(
|
|
246
|
+
throw new RangeError(`Aggregate inventory tree exceeds ${MAX_TREE_LEVELS} levels.`);
|
|
244
247
|
}
|
|
245
248
|
references = packIndexPages(level, references, pages);
|
|
246
249
|
}
|
|
@@ -269,7 +272,7 @@ function packLeafPages(
|
|
|
269
272
|
let bytes: Uint8Array;
|
|
270
273
|
do {
|
|
271
274
|
page = {
|
|
272
|
-
kind:
|
|
275
|
+
kind: INVENTORY_PAGE_KIND,
|
|
273
276
|
level: 0,
|
|
274
277
|
index: references.length,
|
|
275
278
|
startIndex: offset,
|
|
@@ -304,7 +307,7 @@ function packIndexPages(
|
|
|
304
307
|
do {
|
|
305
308
|
const selected = children.slice(offset, offset + count);
|
|
306
309
|
page = {
|
|
307
|
-
kind:
|
|
310
|
+
kind: INVENTORY_PAGE_KIND,
|
|
308
311
|
level,
|
|
309
312
|
index: references.length,
|
|
310
313
|
startIndex: selected[0]!.startIndex,
|
|
@@ -339,7 +342,7 @@ function rootCandidate(
|
|
|
339
342
|
if (page.level <= topLevel) pageCountsByLevel[page.level]!++;
|
|
340
343
|
}
|
|
341
344
|
return {
|
|
342
|
-
kind:
|
|
345
|
+
kind: INVENTORY_ROOT_KIND,
|
|
343
346
|
totalCount,
|
|
344
347
|
digest,
|
|
345
348
|
declaredDigest,
|
|
@@ -456,7 +459,7 @@ function decodeRoot(bytes: Uint8Array): InventoryRoot {
|
|
|
456
459
|
value === null ||
|
|
457
460
|
typeof value !== 'object' ||
|
|
458
461
|
!('kind' in value) ||
|
|
459
|
-
value.kind !==
|
|
462
|
+
value.kind !== INVENTORY_ROOT_KIND
|
|
460
463
|
) {
|
|
461
464
|
throw new Error('Invalid inventory root.');
|
|
462
465
|
}
|
|
@@ -469,7 +472,7 @@ function decodePage(bytes: Uint8Array): InventoryPage {
|
|
|
469
472
|
value === null ||
|
|
470
473
|
typeof value !== 'object' ||
|
|
471
474
|
!('kind' in value) ||
|
|
472
|
-
value.kind !==
|
|
475
|
+
value.kind !== INVENTORY_PAGE_KIND ||
|
|
473
476
|
!('entries' in value) ||
|
|
474
477
|
!Array.isArray(value.entries) ||
|
|
475
478
|
!('children' in value) ||
|
|
@@ -524,7 +527,7 @@ function isSha256(value: unknown): value is string {
|
|
|
524
527
|
function sameHash(expected: string, actual: Uint8Array): boolean {
|
|
525
528
|
return (
|
|
526
529
|
isSha256(expected) &&
|
|
527
|
-
actual.byteLength ===
|
|
530
|
+
actual.byteLength === SHA256_DIGEST_BYTES &&
|
|
528
531
|
timingSafeEqual(Buffer.from(expected, 'hex'), Buffer.from(actual))
|
|
529
532
|
);
|
|
530
533
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ZLINK_MAX_IDENTITY_TEXT_BYTES } from '../../contracts/Common/CoreTypes';
|
|
1
2
|
import type {
|
|
2
3
|
ZLinkAuthorityKey,
|
|
3
4
|
ZLinkPlacementObjectKind
|
|
@@ -8,8 +9,10 @@ export function encodeAuthorityKey(
|
|
|
8
9
|
globalId: string
|
|
9
10
|
): ZLinkAuthorityKey {
|
|
10
11
|
const bytes = Buffer.from(globalId);
|
|
11
|
-
if (bytes.byteLength < 1 || bytes.byteLength >
|
|
12
|
-
throw new RangeError(
|
|
12
|
+
if (bytes.byteLength < 1 || bytes.byteLength > ZLINK_MAX_IDENTITY_TEXT_BYTES) {
|
|
13
|
+
throw new RangeError(
|
|
14
|
+
`Authority identity must contain 1..${ZLINK_MAX_IDENTITY_TEXT_BYTES} UTF-8 bytes.`
|
|
15
|
+
);
|
|
13
16
|
}
|
|
14
17
|
const discriminator = kind === 'actor' ? 'a' : 's';
|
|
15
18
|
return {
|
|
@@ -27,7 +30,8 @@ export function decodeAuthorityKey(key: ZLinkAuthorityKey): {
|
|
|
27
30
|
const match = /^zla1:([as]):([1-9][0-9]{0,2}):(.*)$/.exec(key.value);
|
|
28
31
|
if (match === null) throw new TypeError('Authority key is not canonical.');
|
|
29
32
|
const declaredLength = Number(match[2]);
|
|
30
|
-
if (declaredLength >
|
|
33
|
+
if (declaredLength > ZLINK_MAX_IDENTITY_TEXT_BYTES)
|
|
34
|
+
throw new TypeError('Authority key identity exceeds the byte limit.');
|
|
31
35
|
const encoded = match[3]!;
|
|
32
36
|
const bytes: number[] = [];
|
|
33
37
|
for (let index = 0; index < encoded.length;) {
|
|
@@ -13,6 +13,8 @@ import { ZLinkLocationKeyCodec } from './key-codec';
|
|
|
13
13
|
import { normalizeEndpoint } from '../../contracts/Configuration/EndpointNotation';
|
|
14
14
|
import { ZLinkAutoConnectPlanner } from './auto-connect-planner';
|
|
15
15
|
import { ZLinkStateLane } from '../execution/state-lane';
|
|
16
|
+
import { ConnectError } from '@zlink-systems/zlink';
|
|
17
|
+
import type { ZLinkDispatchErrorSink } from '../diagnostics/dispatch-error-port';
|
|
16
18
|
import type {
|
|
17
19
|
IZLinkAutoConnectExecutor,
|
|
18
20
|
IZLinkAutoConnectPeerPublisher,
|
|
@@ -33,6 +35,7 @@ export interface ZLinkAutoConnectReconcilerOptions {
|
|
|
33
35
|
readonly events?: ZLinkAutoConnectEventSink;
|
|
34
36
|
readonly options?: ZLinkLocationOptionOverrides;
|
|
35
37
|
readonly monotonicNowMs?: () => number;
|
|
38
|
+
readonly errorSink: ZLinkDispatchErrorSink;
|
|
36
39
|
}
|
|
37
40
|
|
|
38
41
|
export class ZLinkAutoConnectReconciler {
|
|
@@ -46,6 +49,7 @@ export class ZLinkAutoConnectReconciler {
|
|
|
46
49
|
private readonly events?: ZLinkAutoConnectEventSink;
|
|
47
50
|
private readonly options: Required<ZLinkLocationOptionOverrides>;
|
|
48
51
|
private readonly monotonicNowMs: () => number;
|
|
52
|
+
private readonly errorSink: ZLinkDispatchErrorSink;
|
|
49
53
|
private readonly active = new Map<string, ZLinkAutoConnectTarget>();
|
|
50
54
|
private readonly pendingDisconnects = new Map<string, ZLinkAutoConnectTarget>();
|
|
51
55
|
private readonly failedEndpoints = new Set<string>();
|
|
@@ -73,6 +77,7 @@ export class ZLinkAutoConnectReconciler {
|
|
|
73
77
|
this.events = options.events;
|
|
74
78
|
this.options = { ...zlinkRuntimeDefaultLocationOptions, ...options.options };
|
|
75
79
|
this.monotonicNowMs = options.monotonicNowMs ?? (() => performance.now());
|
|
80
|
+
this.errorSink = options.errorSink;
|
|
76
81
|
this.executor.onDisconnected?.((endpoint) => this.recordDisconnectedEndpoint(endpoint));
|
|
77
82
|
}
|
|
78
83
|
|
|
@@ -155,13 +160,6 @@ export class ZLinkAutoConnectReconciler {
|
|
|
155
160
|
await this.lane.run(() => {
|
|
156
161
|
this.storeFailedValue = false;
|
|
157
162
|
this.storeFailureStartedAtMs = undefined;
|
|
158
|
-
// After a store restart, owners may need one full lease interval to
|
|
159
|
-
// reclaim their token and republish a descriptor. Do not interpret the
|
|
160
|
-
// incomplete post-restart scan as a definitive removal.
|
|
161
|
-
// Keep the existing transport set through one lease interval while
|
|
162
|
-
// owners reclaim their tokens and republish descriptors. This deferral
|
|
163
|
-
// applies only after a Store operation failed; a successful empty scan
|
|
164
|
-
// is authoritative and must remove stale peers promptly.
|
|
165
163
|
this.recoveryDeferUntilMs = this.monotonicNowMs() + this.options.ownerLeaseTtlMs;
|
|
166
164
|
});
|
|
167
165
|
}
|
|
@@ -175,7 +173,6 @@ export class ZLinkAutoConnectReconciler {
|
|
|
175
173
|
);
|
|
176
174
|
});
|
|
177
175
|
const candidates = ZLinkAutoConnectPlanner.computeCandidates(this.local, rows);
|
|
178
|
-
const nowMs = this.monotonicNowMs();
|
|
179
176
|
this.executor.expectPeers?.([...candidates.values()]);
|
|
180
177
|
this.executor.replaceNotRequired?.(
|
|
181
178
|
ZLinkAutoConnectPlanner.computeNotRequired(this.local, rows)
|
|
@@ -196,6 +193,18 @@ export class ZLinkAutoConnectReconciler {
|
|
|
196
193
|
for (const [key, target] of existingTargets) {
|
|
197
194
|
if (activeKeys.has(key)) desired.set(key, target);
|
|
198
195
|
}
|
|
196
|
+
const deferringMissingTargets =
|
|
197
|
+
this.monotonicNowMs() < (await this.lane.run(() => this.recoveryDeferUntilMs));
|
|
198
|
+
let staleCandidates = candidates;
|
|
199
|
+
if (deferringMissingTargets) {
|
|
200
|
+
const retainedCandidates = new Map(candidates);
|
|
201
|
+
const lastDesired = await this.lane.run(() => [...this.lastDesired]);
|
|
202
|
+
for (const [key, target] of lastDesired) {
|
|
203
|
+
if (!desired.has(key)) desired.set(key, target);
|
|
204
|
+
if (!retainedCandidates.has(key)) retainedCandidates.set(key, target);
|
|
205
|
+
}
|
|
206
|
+
staleCandidates = retainedCandidates;
|
|
207
|
+
}
|
|
199
208
|
await this.lane.run(() => {
|
|
200
209
|
this.lastDesired = new Map(desired);
|
|
201
210
|
});
|
|
@@ -226,14 +235,13 @@ export class ZLinkAutoConnectReconciler {
|
|
|
226
235
|
await this.lane.run(() => {
|
|
227
236
|
this.pendingDisconnects.delete(key);
|
|
228
237
|
});
|
|
229
|
-
|
|
230
|
-
if (connected) {
|
|
238
|
+
await this.connectTarget(target, async () => {
|
|
231
239
|
connectedEndpoints.push(target.endpoint);
|
|
232
240
|
await this.lane.run(() => {
|
|
233
241
|
this.active.set(key, target);
|
|
234
242
|
this.failedEndpoints.delete(target.endpoint);
|
|
235
243
|
});
|
|
236
|
-
}
|
|
244
|
+
});
|
|
237
245
|
continue;
|
|
238
246
|
}
|
|
239
247
|
|
|
@@ -252,27 +260,17 @@ export class ZLinkAutoConnectReconciler {
|
|
|
252
260
|
await this.lane.run(() => {
|
|
253
261
|
this.pendingDisconnects.delete(key);
|
|
254
262
|
});
|
|
255
|
-
|
|
256
|
-
if (connected) {
|
|
263
|
+
await this.connectTarget(target, async () => {
|
|
257
264
|
connectedEndpoints.push(target.endpoint);
|
|
258
265
|
await this.lane.run(() => {
|
|
259
266
|
this.active.set(key, target);
|
|
260
267
|
this.failedEndpoints.delete(target.endpoint);
|
|
261
268
|
});
|
|
262
|
-
}
|
|
269
|
+
});
|
|
263
270
|
}
|
|
264
271
|
}
|
|
265
272
|
|
|
266
|
-
|
|
267
|
-
this.publishDesiredSetChange(connectedEndpoints, disconnectedEndpoints);
|
|
268
|
-
return;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
// A store restart can expose an incomplete descriptor set while peers are
|
|
272
|
-
// reclaiming their owner leases. Preserve existing transport connections
|
|
273
|
-
// during that recovery window; stale-peer cleanup is safe after the
|
|
274
|
-
// deferred reconciliation has completed.
|
|
275
|
-
this.executor.disconnectStalePeers?.([...candidates.values()]);
|
|
273
|
+
this.executor.disconnectStalePeers?.([...staleCandidates.values()]);
|
|
276
274
|
|
|
277
275
|
const activeTargets = await this.lane.run(() => [...this.active]);
|
|
278
276
|
for (const [key, target] of activeTargets) {
|
|
@@ -409,10 +407,25 @@ export class ZLinkAutoConnectReconciler {
|
|
|
409
407
|
const retryTargets = await this.lane.run(() => this.beginStoreFailureCore());
|
|
410
408
|
if (retryTargets === undefined) return;
|
|
411
409
|
for (const [key, target] of retryTargets) {
|
|
412
|
-
|
|
410
|
+
await this.connectTarget(target, async () => {
|
|
413
411
|
await this.lane.run(() => this.completeStoreFailureConnectCore(key, target));
|
|
414
|
-
}
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
private async connectTarget(
|
|
417
|
+
target: ZLinkAutoConnectTarget,
|
|
418
|
+
accept: () => Promise<void>
|
|
419
|
+
): Promise<void> {
|
|
420
|
+
let accepted: boolean;
|
|
421
|
+
try {
|
|
422
|
+
accepted = await this.executor.connect(target);
|
|
423
|
+
} catch (error) {
|
|
424
|
+
if (!(error instanceof ConnectError)) throw error;
|
|
425
|
+
this.errorSink.reportRuntimeTaskException('auto-connect', error);
|
|
426
|
+
return;
|
|
415
427
|
}
|
|
428
|
+
if (accepted) await accept();
|
|
416
429
|
}
|
|
417
430
|
|
|
418
431
|
private beginStoreFailureCore():
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
import { UINT64_BYTES } from '@zlink-systems/stream-wire';
|
|
2
|
+
import { OPERATION_IDENTITY_BYTES } from '../foundation/operation-identity';
|
|
1
3
|
import { randomBytes } from 'node:crypto';
|
|
2
4
|
|
|
3
|
-
export function randomOperationId(entropy: Uint8Array = randomBytes(
|
|
5
|
+
export function randomOperationId(entropy: Uint8Array = randomBytes(OPERATION_IDENTITY_BYTES)): {
|
|
4
6
|
readonly high: bigint;
|
|
5
7
|
readonly low: bigint;
|
|
6
8
|
} {
|
|
7
|
-
if (entropy.byteLength !==
|
|
9
|
+
if (entropy.byteLength !== OPERATION_IDENTITY_BYTES)
|
|
10
|
+
throw new RangeError(`Operation ID entropy must be ${OPERATION_IDENTITY_BYTES} bytes.`);
|
|
8
11
|
const bytes = Buffer.from(entropy);
|
|
9
12
|
const high = bytes.readBigUInt64BE(0);
|
|
10
|
-
const low = bytes.readBigUInt64BE(
|
|
13
|
+
const low = bytes.readBigUInt64BE(UINT64_BYTES);
|
|
11
14
|
return high === 0n && low === 0n ? { high, low: 1n } : { high, low };
|
|
12
15
|
}
|
|
@@ -128,14 +128,23 @@ export interface ZLinkDomainLocationStore {
|
|
|
128
128
|
): Promise<ZLinkCreationTerminalReadResult>;
|
|
129
129
|
reserve(
|
|
130
130
|
request: ZLinkObjectReserveRequest,
|
|
131
|
-
signal?: AbortSignal
|
|
131
|
+
signal?: AbortSignal,
|
|
132
|
+
deadlineUnixMs?: bigint
|
|
132
133
|
): Promise<ZLinkObjectReserveResult>;
|
|
133
|
-
commit(
|
|
134
|
+
commit(
|
|
135
|
+
request: ZLinkObjectCommitRequest,
|
|
136
|
+
signal?: AbortSignal,
|
|
137
|
+
deadlineUnixMs?: bigint
|
|
138
|
+
): Promise<ZLinkObjectCommitResult>;
|
|
134
139
|
completeCreation(
|
|
135
140
|
request: ZLinkObjectCreationCompleteRequest,
|
|
136
141
|
signal?: AbortSignal
|
|
137
142
|
): Promise<ZLinkObjectCreationCompleteResult>;
|
|
138
|
-
abort(
|
|
143
|
+
abort(
|
|
144
|
+
request: ZLinkObjectAbortRequest,
|
|
145
|
+
signal?: AbortSignal,
|
|
146
|
+
deadlineUnixMs?: bigint
|
|
147
|
+
): Promise<ZLinkObjectAbortResult>;
|
|
139
148
|
|
|
140
149
|
prepareAggregate(
|
|
141
150
|
request: ZLinkAggregatePrepareRequest,
|