@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,4 +1,6 @@
|
|
|
1
|
-
import { ZLinkFrameworkRuntimeState } from '../../contracts';
|
|
1
|
+
import { ZLinkFrameworkRuntimeState, ZLinkTopologyState } from '../../contracts';
|
|
2
|
+
export declare function runtimeObservationIsTerminal(state: ZLinkFrameworkRuntimeState): boolean;
|
|
3
|
+
export declare function topologyObservationIsTerminal(state: ZLinkTopologyState): boolean;
|
|
2
4
|
export type MaintenanceAdmissionState = 'preparing' | 'serving' | 'retiring' | 'draining' | 'stopped' | 'error';
|
|
3
5
|
export type DiscoveryAvailability = 'preparing' | 'serving' | 'retiring' | 'stopped' | 'error' | 'disconnected';
|
|
4
6
|
/** Derives public readiness from the public runtime state authority. */
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runtimeObservationIsTerminal = runtimeObservationIsTerminal;
|
|
4
|
+
exports.topologyObservationIsTerminal = topologyObservationIsTerminal;
|
|
3
5
|
exports.runtimeStateIsReady = runtimeStateIsReady;
|
|
4
6
|
exports.runtimeAcceptsWork = runtimeAcceptsWork;
|
|
5
7
|
exports.maintenanceAdmissionState = maintenanceAdmissionState;
|
|
6
8
|
exports.discoveryAvailabilityForRuntimeState = discoveryAvailabilityForRuntimeState;
|
|
7
9
|
exports.topologyRuntimeIsReady = topologyRuntimeIsReady;
|
|
8
10
|
const contracts_1 = require("../../contracts");
|
|
11
|
+
function runtimeObservationIsTerminal(state) {
|
|
12
|
+
return state === contracts_1.ZLinkFrameworkRuntimeState.Stopped;
|
|
13
|
+
}
|
|
14
|
+
function topologyObservationIsTerminal(state) {
|
|
15
|
+
return state === contracts_1.ZLinkTopologyState.Stopped || state === contracts_1.ZLinkTopologyState.Failed;
|
|
16
|
+
}
|
|
9
17
|
/** Derives public readiness from the public runtime state authority. */
|
|
10
18
|
function runtimeStateIsReady(state) {
|
|
11
19
|
return state === contracts_1.ZLinkFrameworkRuntimeState.Serving;
|
|
@@ -47,6 +47,7 @@ export declare function replaceServiceAuthorityRelocationState(payload: Uint8Arr
|
|
|
47
47
|
export declare function encodeServiceUserSpotAuthorityPayload(value: ServiceUserSpotAuthorityPayload): Buffer;
|
|
48
48
|
export declare function encodeServiceInstanceAuthorityPayload(value: ServiceInstanceAuthorityPayload): Buffer;
|
|
49
49
|
export declare function decodeServiceReadySpotAuthority(payload: Uint8Array): ServiceReadySpotAuthority | undefined;
|
|
50
|
+
export declare function decodeServiceClosingSpotAuthority(payload: Uint8Array): ServiceReadySpotAuthority | undefined;
|
|
50
51
|
export declare function decodeServiceInstanceAuthorityPayload(payload: Uint8Array): ServiceDecodedInstanceAuthority | undefined;
|
|
51
52
|
export declare function rewriteServiceAuthorityOwner(payload: Uint8Array, owner: ZLinkLocationOwnerToken): Buffer | undefined;
|
|
52
53
|
export declare function rewriteServiceAuthorityRoute(payload: Uint8Array, owner: ZLinkLocationOwnerToken, target: {
|
|
@@ -4,10 +4,19 @@ exports.replaceServiceAuthorityRelocationState = replaceServiceAuthorityRelocati
|
|
|
4
4
|
exports.encodeServiceUserSpotAuthorityPayload = encodeServiceUserSpotAuthorityPayload;
|
|
5
5
|
exports.encodeServiceInstanceAuthorityPayload = encodeServiceInstanceAuthorityPayload;
|
|
6
6
|
exports.decodeServiceReadySpotAuthority = decodeServiceReadySpotAuthority;
|
|
7
|
+
exports.decodeServiceClosingSpotAuthority = decodeServiceClosingSpotAuthority;
|
|
7
8
|
exports.decodeServiceInstanceAuthorityPayload = decodeServiceInstanceAuthorityPayload;
|
|
8
9
|
exports.rewriteServiceAuthorityOwner = rewriteServiceAuthorityOwner;
|
|
9
10
|
exports.rewriteServiceAuthorityRoute = rewriteServiceAuthorityRoute;
|
|
11
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
12
|
+
const contracts_1 = require("../../contracts");
|
|
13
|
+
const actor_join_recovery_codec_1 = require("./actor-join-recovery-codec");
|
|
10
14
|
const service_relocation_runtime_1 = require("./service-relocation-runtime");
|
|
15
|
+
const service_wire_binary_primitives_1 = require("./service-wire-binary-primitives");
|
|
16
|
+
const SPOT_AUTHORITY_OBJECT_KIND = 2;
|
|
17
|
+
const USER_SPOT_WIRE_KIND = (0, contracts_1.zlinkSpotKindToWire)(contracts_1.ZLinkSpotKind.User);
|
|
18
|
+
const INSTANCE_SPOT_WIRE_KIND = (0, contracts_1.zlinkSpotKindToWire)(contracts_1.ZLinkSpotKind.Instance);
|
|
19
|
+
const AUTHORITY_TEXT16_MAX_BYTES = 0xffff;
|
|
11
20
|
const AUTHORITY_MAGIC = Buffer.from([0x5a, 0x4c, 0x41, 0x55]);
|
|
12
21
|
const AUTHORITY_FORMAT_VERSION = 1;
|
|
13
22
|
const AUTHORITY_FLAGS = 0;
|
|
@@ -84,6 +93,13 @@ function decodeServiceReadySpotAuthority(payload) {
|
|
|
84
93
|
const decoded = decodeSpotAuthority(payload);
|
|
85
94
|
return decoded?.state === 'ready' && decoded.operationKind === 0 ? decoded : undefined;
|
|
86
95
|
}
|
|
96
|
+
function decodeServiceClosingSpotAuthority(payload) {
|
|
97
|
+
const decoded = decodeSpotAuthority(payload);
|
|
98
|
+
return decoded?.operationKind === 3 &&
|
|
99
|
+
(decoded.kind === 'user_spot' || decoded.state === 'closing')
|
|
100
|
+
? decoded
|
|
101
|
+
: undefined;
|
|
102
|
+
}
|
|
87
103
|
function decodeServiceInstanceAuthorityPayload(payload) {
|
|
88
104
|
const decoded = decodeSpotAuthority(payload);
|
|
89
105
|
if (decoded?.kind !== 'instance_spot' ||
|
|
@@ -163,7 +179,7 @@ function decodeSpotAuthority(payload) {
|
|
|
163
179
|
const operationKind = body.u8();
|
|
164
180
|
const objectKind = body.u8();
|
|
165
181
|
const object = body.takeReader(body.u16());
|
|
166
|
-
if (objectKind !==
|
|
182
|
+
if (objectKind !== SPOT_AUTHORITY_OBJECT_KIND)
|
|
167
183
|
return undefined;
|
|
168
184
|
const spotKind = object.u8();
|
|
169
185
|
const spot = object.takeReader(object.u16());
|
|
@@ -173,13 +189,13 @@ function decodeSpotAuthority(payload) {
|
|
|
173
189
|
let state;
|
|
174
190
|
let stableType;
|
|
175
191
|
let spotId;
|
|
176
|
-
if (spotKind ===
|
|
192
|
+
if (spotKind === USER_SPOT_WIRE_KIND) {
|
|
177
193
|
kind = 'user_spot';
|
|
178
194
|
spotId = spot.rid();
|
|
179
195
|
stableType = spot.text8();
|
|
180
196
|
state = spot.u8();
|
|
181
197
|
}
|
|
182
|
-
else if (spotKind ===
|
|
198
|
+
else if (spotKind === INSTANCE_SPOT_WIRE_KIND) {
|
|
183
199
|
kind = 'instance_spot';
|
|
184
200
|
state = spot.u8();
|
|
185
201
|
const instance = spot.takeReader(spot.u16());
|
|
@@ -271,21 +287,23 @@ function rid(value, name) {
|
|
|
271
287
|
}
|
|
272
288
|
function text16(value, name) {
|
|
273
289
|
const bytes = Buffer.from(value);
|
|
274
|
-
if (bytes.byteLength < 1 || bytes.byteLength >
|
|
275
|
-
throw new RangeError(`${name} must contain 1
|
|
290
|
+
if (bytes.byteLength < 1 || bytes.byteLength > AUTHORITY_TEXT16_MAX_BYTES || bytes.includes(0)) {
|
|
291
|
+
throw new RangeError(`${name} must contain 1..${AUTHORITY_TEXT16_MAX_BYTES} UTF-8 bytes without NUL.`);
|
|
276
292
|
}
|
|
277
293
|
return concat(u16(bytes.byteLength), bytes);
|
|
278
294
|
}
|
|
279
295
|
function sha256(value) {
|
|
280
|
-
if (value.byteLength !==
|
|
281
|
-
throw new RangeError(
|
|
296
|
+
if (value.byteLength !== actor_join_recovery_codec_1.SHA256_DIGEST_BYTES) {
|
|
297
|
+
throw new RangeError(`activationRecovery.sha256 must contain exactly ${actor_join_recovery_codec_1.SHA256_DIGEST_BYTES} bytes.`);
|
|
282
298
|
}
|
|
283
|
-
return concat(Buffer.of(
|
|
299
|
+
return concat(Buffer.of(actor_join_recovery_codec_1.SHA256_DIGEST_BYTES), value);
|
|
284
300
|
}
|
|
285
301
|
function sized8(value, name) {
|
|
286
302
|
const bytes = Buffer.from(value);
|
|
287
|
-
if (bytes.byteLength < 1 ||
|
|
288
|
-
|
|
303
|
+
if (bytes.byteLength < 1 ||
|
|
304
|
+
bytes.byteLength > service_wire_binary_primitives_1.SERVICE_WIRE_TEXT8_MAX_BYTES ||
|
|
305
|
+
bytes.includes(0)) {
|
|
306
|
+
throw new RangeError(`${name} must contain 1..${service_wire_binary_primitives_1.SERVICE_WIRE_TEXT8_MAX_BYTES} UTF-8 bytes without NUL.`);
|
|
289
307
|
}
|
|
290
308
|
return concat(Buffer.of(bytes.byteLength), bytes);
|
|
291
309
|
}
|
|
@@ -306,7 +324,7 @@ function boundedU32(value, name) {
|
|
|
306
324
|
return u32(value);
|
|
307
325
|
}
|
|
308
326
|
function u64(value, name) {
|
|
309
|
-
if (value <= 0n || value >
|
|
327
|
+
if (value <= 0n || value > stream_wire_1.UINT64_MAX) {
|
|
310
328
|
throw new RangeError(`${name} must be a non-zero u64.`);
|
|
311
329
|
}
|
|
312
330
|
const result = Buffer.alloc(8);
|
|
@@ -314,7 +332,7 @@ function u64(value, name) {
|
|
|
314
332
|
return result;
|
|
315
333
|
}
|
|
316
334
|
function ordinalU64(value, name) {
|
|
317
|
-
if (value < 0n || value >
|
|
335
|
+
if (value < 0n || value > stream_wire_1.UINT64_MAX) {
|
|
318
336
|
throw new RangeError(`${name} must be a u64.`);
|
|
319
337
|
}
|
|
320
338
|
const result = Buffer.alloc(8);
|
|
@@ -23,6 +23,9 @@ export interface SelectedClientServer {
|
|
|
23
23
|
}
|
|
24
24
|
/** Dedicated discovery state; fanout publishers never reuse RouteMesh peer rows. */
|
|
25
25
|
export declare class ServiceDiscoveryRegistry {
|
|
26
|
+
private readonly clientServerChanged;
|
|
27
|
+
onClientServerChanged(listener: (error?: Error) => void): () => void;
|
|
28
|
+
dispose(error: Error): void;
|
|
26
29
|
private readonly clientServers;
|
|
27
30
|
private readonly fanoutPublishers;
|
|
28
31
|
private readonly clientServerSelections;
|
|
@@ -32,6 +35,7 @@ export declare class ServiceDiscoveryRegistry {
|
|
|
32
35
|
selectClientServer(channelName: string): ClientServerDescriptor | undefined;
|
|
33
36
|
selectClientServerConnection(channelName: string): SelectedClientServer | undefined;
|
|
34
37
|
private selectClientServerConnectionCore;
|
|
38
|
+
hasReadyClientServer(channelName: string): boolean;
|
|
35
39
|
clientServerDescriptors(channelName: string): readonly ClientServerDescriptor[];
|
|
36
40
|
admitFanoutPublisher(descriptor: FanoutPublisherDescriptor, connectionId: string): boolean;
|
|
37
41
|
removeFanoutPublisher(channelName: string, publisherRoutingId: string, connectionId: string): boolean;
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ServiceDiscoveryRegistry = void 0;
|
|
4
|
+
const RegistrationBuilderPolicy_1 = require("../../contracts/Configuration/RegistrationBuilderPolicy");
|
|
5
|
+
const service_weighted_selection_1 = require("./service-weighted-selection");
|
|
4
6
|
/** Dedicated discovery state; fanout publishers never reuse RouteMesh peer rows. */
|
|
5
7
|
class ServiceDiscoveryRegistry {
|
|
8
|
+
clientServerChanged = new Set();
|
|
9
|
+
onClientServerChanged(listener) {
|
|
10
|
+
this.clientServerChanged.add(listener);
|
|
11
|
+
return () => {
|
|
12
|
+
this.clientServerChanged.delete(listener);
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
dispose(error) {
|
|
16
|
+
for (const listener of this.clientServerChanged)
|
|
17
|
+
listener(error);
|
|
18
|
+
this.clientServerChanged.clear();
|
|
19
|
+
}
|
|
6
20
|
clientServers = new Map();
|
|
7
21
|
fanoutPublishers = new Map();
|
|
8
22
|
clientServerSelections = new Map();
|
|
@@ -56,6 +70,10 @@ class ServiceDiscoveryRegistry {
|
|
|
56
70
|
}
|
|
57
71
|
return selection.select();
|
|
58
72
|
}
|
|
73
|
+
hasReadyClientServer(channelName) {
|
|
74
|
+
return [...this.clientServers.values()].some(({ descriptor }) => descriptor.channelName === channelName &&
|
|
75
|
+
(descriptor.state === 'serving' || descriptor.state === 'retiring'));
|
|
76
|
+
}
|
|
59
77
|
clientServerDescriptors(channelName) {
|
|
60
78
|
return [...this.clientServers.values()]
|
|
61
79
|
.map((value) => value.descriptor)
|
|
@@ -94,6 +112,8 @@ class ServiceDiscoveryRegistry {
|
|
|
94
112
|
if (this.clientServerSelections.has(channelName)) {
|
|
95
113
|
this.clientServerSelections.get(channelName).rebuild();
|
|
96
114
|
}
|
|
115
|
+
for (const listener of this.clientServerChanged)
|
|
116
|
+
listener();
|
|
97
117
|
}
|
|
98
118
|
clientServerCandidates(channelName) {
|
|
99
119
|
return [...this.clientServers.values()]
|
|
@@ -150,8 +170,8 @@ function validateClientServer(descriptor) {
|
|
|
150
170
|
requireText(descriptor.securityIdentity, 'securityIdentity');
|
|
151
171
|
requireText(descriptor.advertisedEndpoint, 'advertisedEndpoint');
|
|
152
172
|
validateRevision(descriptor.lifecycleGeneration, descriptor.descriptorRevision);
|
|
153
|
-
if (!
|
|
154
|
-
throw new RangeError(
|
|
173
|
+
if (!(0, RegistrationBuilderPolicy_1.isValidPublicWeight)(descriptor.weight)) {
|
|
174
|
+
throw new RangeError(`ClientServer weight must be an integer in 0..${RegistrationBuilderPolicy_1.ZLINK_MAX_PUBLIC_WEIGHT}.`);
|
|
155
175
|
}
|
|
156
176
|
if (!Number.isSafeInteger(descriptor.effectiveMaxMessageBytes) ||
|
|
157
177
|
descriptor.effectiveMaxMessageBytes < 1) {
|
|
@@ -174,4 +194,3 @@ function requireText(value, field) {
|
|
|
174
194
|
throw new TypeError(`${field} must be non-empty text without NUL.`);
|
|
175
195
|
}
|
|
176
196
|
}
|
|
177
|
-
const service_weighted_selection_1 = require("./service-weighted-selection");
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.encodeInstanceActivationRecoveryEnvelope = encodeInstanceActivationRecoveryEnvelope;
|
|
4
4
|
exports.decodeInstanceActivationRecoveryEnvelope = decodeInstanceActivationRecoveryEnvelope;
|
|
5
|
+
const service_wire_binary_primitives_1 = require("./service-wire-binary-primitives");
|
|
6
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
5
7
|
const service_relocation_runtime_1 = require("./service-relocation-runtime");
|
|
6
8
|
const service_wire_m6a_codec_1 = require("./service-wire-m6a-codec");
|
|
7
9
|
const service_metadata_codec_1 = require("./service-metadata-codec");
|
|
@@ -175,8 +177,10 @@ function requireOperation(value) {
|
|
|
175
177
|
}
|
|
176
178
|
function textBytes(value, name) {
|
|
177
179
|
const bytes = Buffer.from(value, 'utf8');
|
|
178
|
-
if (bytes.byteLength < 1 ||
|
|
179
|
-
|
|
180
|
+
if (bytes.byteLength < 1 ||
|
|
181
|
+
bytes.byteLength > service_wire_binary_primitives_1.SERVICE_WIRE_TEXT8_MAX_BYTES ||
|
|
182
|
+
bytes.includes(0)) {
|
|
183
|
+
throw new RangeError(`${name} must contain 1..${service_wire_binary_primitives_1.SERVICE_WIRE_TEXT8_MAX_BYTES} UTF-8 bytes without NUL.`);
|
|
180
184
|
}
|
|
181
185
|
return bytes;
|
|
182
186
|
}
|
|
@@ -189,12 +193,12 @@ function writeText8(target, offset, value) {
|
|
|
189
193
|
return offset + 1 + value.byteLength;
|
|
190
194
|
}
|
|
191
195
|
function validatePositiveU64(value, name) {
|
|
192
|
-
if (value <= 0n || value >
|
|
196
|
+
if (value <= 0n || value > stream_wire_1.UINT64_MAX) {
|
|
193
197
|
throw new RangeError(`${name} is out of range.`);
|
|
194
198
|
}
|
|
195
199
|
}
|
|
196
200
|
function validateU64(value, name) {
|
|
197
|
-
if (value < 0n || value >
|
|
201
|
+
if (value < 0n || value > stream_wire_1.UINT64_MAX) {
|
|
198
202
|
throw new RangeError(`${name} is out of range.`);
|
|
199
203
|
}
|
|
200
204
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ServiceLivenessRegistry = exports.DEFAULT_SERVICE_PEER_TIMEOUT_MS = exports.DEFAULT_SERVICE_PROBE_INTERVAL_MS = void 0;
|
|
4
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
4
5
|
exports.DEFAULT_SERVICE_PROBE_INTERVAL_MS = 5_000;
|
|
5
6
|
exports.DEFAULT_SERVICE_PEER_TIMEOUT_MS = 15_000;
|
|
6
7
|
/** Uses monotonic milliseconds and never treats application traffic as a probe ACK. */
|
|
@@ -101,7 +102,7 @@ class ServiceLivenessRegistry {
|
|
|
101
102
|
}
|
|
102
103
|
allocateProbeId() {
|
|
103
104
|
const result = this.nextProbeId++;
|
|
104
|
-
if (this.nextProbeId >
|
|
105
|
+
if (this.nextProbeId > stream_wire_1.UINT64_MAX)
|
|
105
106
|
this.nextProbeId = 1n;
|
|
106
107
|
return result;
|
|
107
108
|
}
|
|
@@ -42,4 +42,3 @@ export declare class ServiceMaintenanceRuntime {
|
|
|
42
42
|
private publishCore;
|
|
43
43
|
private notify;
|
|
44
44
|
}
|
|
45
|
-
export declare function classifyRelocationRecovery(publishedReference: boolean, payloadPresent: boolean, checksumMatches: boolean, inventoryMatches: boolean): 'resume' | 'orphan' | 'relocationDataLost';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ServiceMaintenanceRuntime = void 0;
|
|
4
|
-
exports.classifyRelocationRecovery = classifyRelocationRecovery;
|
|
5
4
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
6
5
|
const state_lane_1 = require("../execution/state-lane");
|
|
7
6
|
const detachedStateLaneResource = new node_async_hooks_1.AsyncResource('zlink:service-maintenance-runtime');
|
|
@@ -110,13 +109,28 @@ class ServiceMaintenanceRuntime {
|
|
|
110
109
|
}
|
|
111
110
|
async runUnits(signal, stopStartingSignal) {
|
|
112
111
|
const pending = new Set();
|
|
112
|
+
// A unit failure is recorded before its promise leaves `pending`, so no
|
|
113
|
+
// failure is lost. Every started unit runs to its own terminal before the
|
|
114
|
+
// first failure is reported: the host result follows the settled
|
|
115
|
+
// authority of each unit (spec 30 §13).
|
|
116
|
+
const failures = [];
|
|
117
|
+
const reportFailure = async () => {
|
|
118
|
+
if (failures.length === 0)
|
|
119
|
+
return;
|
|
120
|
+
await Promise.allSettled(pending);
|
|
121
|
+
throw failures[0];
|
|
122
|
+
};
|
|
113
123
|
for (;;) {
|
|
124
|
+
await reportFailure();
|
|
114
125
|
const queued = await this.lane.run(() => this.units.length > 0);
|
|
115
|
-
if (!queued && pending.size === 0)
|
|
126
|
+
if (!queued && pending.size === 0) {
|
|
127
|
+
await reportFailure();
|
|
116
128
|
return;
|
|
129
|
+
}
|
|
117
130
|
signal.throwIfAborted();
|
|
118
131
|
if (stopStartingSignal?.aborted === true) {
|
|
119
132
|
await Promise.allSettled(pending);
|
|
133
|
+
await reportFailure();
|
|
120
134
|
stopStartingSignal.throwIfAborted();
|
|
121
135
|
}
|
|
122
136
|
let admitted = false;
|
|
@@ -142,7 +156,12 @@ class ServiceMaintenanceRuntime {
|
|
|
142
156
|
continue;
|
|
143
157
|
admitted = true;
|
|
144
158
|
let running;
|
|
145
|
-
running = startOutsideStateLane(() => unit
|
|
159
|
+
running = startOutsideStateLane(() => unit
|
|
160
|
+
.relocate(signal)
|
|
161
|
+
.catch((error) => {
|
|
162
|
+
failures.push(error);
|
|
163
|
+
})
|
|
164
|
+
.finally(async () => {
|
|
146
165
|
const publication = await this.lane.run(() => {
|
|
147
166
|
this.activeOutbound--;
|
|
148
167
|
pending.delete(running);
|
|
@@ -154,6 +173,7 @@ class ServiceMaintenanceRuntime {
|
|
|
154
173
|
this.notify(claim.publication);
|
|
155
174
|
}
|
|
156
175
|
if (pending.size === 0) {
|
|
176
|
+
await reportFailure();
|
|
157
177
|
if (!admitted)
|
|
158
178
|
throw new Error('No relocation unit is ready to start.');
|
|
159
179
|
}
|
|
@@ -189,8 +209,3 @@ exports.ServiceMaintenanceRuntime = ServiceMaintenanceRuntime;
|
|
|
189
209
|
function startOutsideStateLane(work) {
|
|
190
210
|
return detachedStateLaneResource.runInAsyncScope(work);
|
|
191
211
|
}
|
|
192
|
-
function classifyRelocationRecovery(publishedReference, payloadPresent, checksumMatches, inventoryMatches) {
|
|
193
|
-
if (!publishedReference)
|
|
194
|
-
return payloadPresent ? 'orphan' : 'resume';
|
|
195
|
-
return payloadPresent && checksumMatches && inventoryMatches ? 'resume' : 'relocationDataLost';
|
|
196
|
-
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.encodeServiceMetadataFrame = encodeServiceMetadataFrame;
|
|
4
4
|
exports.validateServiceMetadataFrame = validateServiceMetadataFrame;
|
|
5
|
-
const
|
|
5
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
6
6
|
const FATAL_UTF8 = new TextDecoder('utf-8', { fatal: true });
|
|
7
7
|
function encodeServiceMetadataFrame(entries) {
|
|
8
8
|
if (entries.size > 0xff) {
|
|
@@ -19,8 +19,8 @@ function encodeServiceMetadataFrame(entries) {
|
|
|
19
19
|
return validateServiceMetadataFrame(Buffer.concat(encoded));
|
|
20
20
|
}
|
|
21
21
|
function validateServiceMetadataFrame(frame) {
|
|
22
|
-
if (frame.byteLength >
|
|
23
|
-
throw new RangeError(
|
|
22
|
+
if (frame.byteLength > stream_wire_1.ZLINK_STREAM_MAX_METADATA_BYTES) {
|
|
23
|
+
throw new RangeError(`Application metadata frame exceeds ${stream_wire_1.ZLINK_STREAM_MAX_METADATA_BYTES} bytes.`);
|
|
24
24
|
}
|
|
25
25
|
const bytes = Buffer.from(frame);
|
|
26
26
|
let offset = 0;
|
|
@@ -20,16 +20,13 @@ export interface ServicePreparedRelocationAggregate {
|
|
|
20
20
|
readonly fence: ZLinkAggregateFence;
|
|
21
21
|
readonly plan: ServiceRelocationAggregatePlan;
|
|
22
22
|
}
|
|
23
|
-
type AggregateStore = Pick<ZLinkObjectCreationStore, 'prepareAggregate' | '
|
|
24
|
-
/**
|
|
23
|
+
type AggregateStore = Pick<ZLinkObjectCreationStore, 'prepareAggregate' | 'abortAggregate'> & Pick<ZLinkAuthorityStore, 'readAuthority'>;
|
|
24
|
+
/** Prepares and aborts relocation through one Location Store fence. */
|
|
25
25
|
export declare class ServiceRelocationAggregateCommitter {
|
|
26
26
|
private readonly store;
|
|
27
27
|
constructor(store: AggregateStore);
|
|
28
28
|
prepare(plan: ServiceRelocationAggregatePlan, signal?: AbortSignal): Promise<ServicePreparedRelocationAggregate>;
|
|
29
29
|
private authorityStoreVersionsUnchanged;
|
|
30
|
-
commit(prepared: ServicePreparedRelocationAggregate, signal?: AbortSignal): Promise<ReadonlyMap<string, ZLinkAuthoritySnapshot>>;
|
|
31
30
|
abort(prepared: ServicePreparedRelocationAggregate, signal?: AbortSignal): Promise<void>;
|
|
32
|
-
private commitFence;
|
|
33
|
-
private readCommittedParticipants;
|
|
34
31
|
}
|
|
35
32
|
export {};
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ServiceRelocationAggregateCommitter = void 0;
|
|
4
4
|
const service_relocation_runtime_1 = require("./service-relocation-runtime");
|
|
5
5
|
const MAX_PREPARE_CONFLICT_ATTEMPTS = 8;
|
|
6
|
-
/**
|
|
6
|
+
/** Prepares and aborts relocation through one Location Store fence. */
|
|
7
7
|
class ServiceRelocationAggregateCommitter {
|
|
8
8
|
store;
|
|
9
9
|
constructor(store) {
|
|
@@ -52,59 +52,12 @@ class ServiceRelocationAggregateCommitter {
|
|
|
52
52
|
}
|
|
53
53
|
return true;
|
|
54
54
|
}
|
|
55
|
-
async commit(prepared, signal) {
|
|
56
|
-
try {
|
|
57
|
-
await this.commitFence(prepared.fence, signal);
|
|
58
|
-
}
|
|
59
|
-
catch (firstError) {
|
|
60
|
-
// A lost commit response is reconciled by repeating the exact durable fence.
|
|
61
|
-
try {
|
|
62
|
-
await this.commitFence(prepared.fence, signal);
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
throw firstError;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return await this.readCommittedParticipants(prepared.plan, signal);
|
|
69
|
-
}
|
|
70
55
|
async abort(prepared, signal) {
|
|
71
56
|
const result = await this.store.abortAggregate(prepared.fence, signal);
|
|
72
57
|
if (result.kind !== 'aborted' && result.kind !== 'alreadyAborted') {
|
|
73
58
|
throw new Error(`Location Store rejected relocation aggregate abort: ${result.kind}.`);
|
|
74
59
|
}
|
|
75
60
|
}
|
|
76
|
-
async commitFence(fence, signal) {
|
|
77
|
-
const result = await this.store.commitAggregate(fence, signal);
|
|
78
|
-
if (result.kind !== 'committed' && result.kind !== 'alreadyCommitted') {
|
|
79
|
-
throw new Error(`Location Store rejected relocation aggregate commit: ${result.kind}.`);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
async readCommittedParticipants(plan, signal) {
|
|
83
|
-
const committed = new Map();
|
|
84
|
-
for (const participant of plan.participants) {
|
|
85
|
-
const current = await this.store.readAuthority(participant.key, signal);
|
|
86
|
-
if (current.kind !== 'snapshot' ||
|
|
87
|
-
current.objectGeneration !== participant.expected.objectGeneration ||
|
|
88
|
-
current.storeVersion.value === participant.expected.storeVersion.value ||
|
|
89
|
-
!Buffer.from(current.payload).equals(Buffer.from(participant.authorityPayload))) {
|
|
90
|
-
throw new Error('Committed relocation aggregate does not match its exact participant plan.');
|
|
91
|
-
}
|
|
92
|
-
if (participant.ownerTransition === 'newOwner') {
|
|
93
|
-
if (current.ownerId !== plan.targetOwner.ownerId ||
|
|
94
|
-
current.ownerLeaseGeneration !== plan.targetOwner.leaseGeneration ||
|
|
95
|
-
current.authorityOwnerGeneration <= participant.expected.authorityOwnerGeneration) {
|
|
96
|
-
throw new Error('Committed relocation participant has a different owner fence.');
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
else if (current.ownerId !== participant.expected.ownerId ||
|
|
100
|
-
current.ownerLeaseGeneration !== participant.expected.ownerLeaseGeneration ||
|
|
101
|
-
current.authorityOwnerGeneration !== participant.expected.authorityOwnerGeneration) {
|
|
102
|
-
throw new Error('Preserved relocation participant changed its owner fence.');
|
|
103
|
-
}
|
|
104
|
-
committed.set(participant.key.value, current);
|
|
105
|
-
}
|
|
106
|
-
return committed;
|
|
107
|
-
}
|
|
108
61
|
}
|
|
109
62
|
exports.ServiceRelocationAggregateCommitter = ServiceRelocationAggregateCommitter;
|
|
110
63
|
function validateAndEncodeParticipants(plan) {
|
|
@@ -17,3 +17,12 @@ export declare class ServiceRelocationPostCommitError extends Error {
|
|
|
17
17
|
readonly cause: unknown;
|
|
18
18
|
constructor(authority: ZLinkAuthoritySnapshot, staging: ServiceRelocationStaging, cause: unknown);
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* A relocation whose settled authority leaves the host in `Error` with
|
|
22
|
+
* `Blocked/RelocationFailed` (spec 30 §13): the source owner lease ended
|
|
23
|
+
* before its Preserve fence succeeded, or units settled on both the source
|
|
24
|
+
* and the target.
|
|
25
|
+
*/
|
|
26
|
+
export declare class ServiceRelocationAuthorityError extends Error {
|
|
27
|
+
constructor(message: string, options?: ErrorOptions);
|
|
28
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ServiceRelocationPostCommitError = void 0;
|
|
3
|
+
exports.ServiceRelocationAuthorityError = exports.ServiceRelocationPostCommitError = void 0;
|
|
4
4
|
class ServiceRelocationPostCommitError extends Error {
|
|
5
5
|
authority;
|
|
6
6
|
staging;
|
|
@@ -14,3 +14,16 @@ class ServiceRelocationPostCommitError extends Error {
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
exports.ServiceRelocationPostCommitError = ServiceRelocationPostCommitError;
|
|
17
|
+
/**
|
|
18
|
+
* A relocation whose settled authority leaves the host in `Error` with
|
|
19
|
+
* `Blocked/RelocationFailed` (spec 30 §13): the source owner lease ended
|
|
20
|
+
* before its Preserve fence succeeded, or units settled on both the source
|
|
21
|
+
* and the target.
|
|
22
|
+
*/
|
|
23
|
+
class ServiceRelocationAuthorityError extends Error {
|
|
24
|
+
constructor(message, options) {
|
|
25
|
+
super(message, options);
|
|
26
|
+
this.name = 'ServiceRelocationAuthorityError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.ServiceRelocationAuthorityError = ServiceRelocationAuthorityError;
|
|
@@ -16,6 +16,8 @@ export interface ServiceRelocationCaptureUnit {
|
|
|
16
16
|
captureApplicationState(signal?: AbortSignal): Promise<Uint8Array>;
|
|
17
17
|
commitSeal(): Promise<void> | void;
|
|
18
18
|
abortSeal(): Promise<void> | void;
|
|
19
|
+
/** Expired-owner terminal: pending requests fail once and dispatch stays closed. */
|
|
20
|
+
discardSeal?(reason: unknown): Promise<void> | void;
|
|
19
21
|
}
|
|
20
22
|
export declare class ServiceCapturedObjectRelocation {
|
|
21
23
|
readonly envelope: ServiceRelocationEnvelope;
|
|
@@ -24,6 +26,12 @@ export declare class ServiceCapturedObjectRelocation {
|
|
|
24
26
|
constructor(envelope: ServiceRelocationEnvelope, units: readonly ServiceRelocationCaptureUnit[]);
|
|
25
27
|
commitSource(): Promise<void>;
|
|
26
28
|
abortSource(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* The source owner lease ended before the authority settled (spec 28 §4.4):
|
|
31
|
+
* the source neither resumes nor commits. Retained work is dropped and
|
|
32
|
+
* every pending request without a terminal fails once with `reason`.
|
|
33
|
+
*/
|
|
34
|
+
discardSource(reason: unknown): Promise<void>;
|
|
27
35
|
}
|
|
28
36
|
/** Captures the two valid relocation units: User Spot aggregate or one Actor. */
|
|
29
37
|
export declare class ServiceRelocationObjectCaptureOwner {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ServiceRelocationObjectRestoreOwner = exports.ServiceRelocationObjectCaptureOwner = exports.ServiceCapturedObjectRelocation = void 0;
|
|
4
|
+
const DEFAULT_RELOCATION_CALLBACK_CONCURRENCY = 8;
|
|
4
5
|
class ServiceCapturedObjectRelocation {
|
|
5
6
|
envelope;
|
|
6
7
|
units;
|
|
@@ -12,8 +13,8 @@ class ServiceCapturedObjectRelocation {
|
|
|
12
13
|
async commitSource() {
|
|
13
14
|
if (this.terminal === 'committed')
|
|
14
15
|
return;
|
|
15
|
-
if (this.terminal
|
|
16
|
-
throw new Error(
|
|
16
|
+
if (this.terminal !== 'open') {
|
|
17
|
+
throw new Error(`Relocation source capture was already ${this.terminal}.`);
|
|
17
18
|
}
|
|
18
19
|
for (const unit of this.units)
|
|
19
20
|
await unit.commitSeal();
|
|
@@ -22,8 +23,8 @@ class ServiceCapturedObjectRelocation {
|
|
|
22
23
|
async abortSource() {
|
|
23
24
|
if (this.terminal === 'aborted')
|
|
24
25
|
return;
|
|
25
|
-
if (this.terminal
|
|
26
|
-
throw new Error(
|
|
26
|
+
if (this.terminal !== 'open') {
|
|
27
|
+
throw new Error(`A ${this.terminal} relocation source capture cannot be aborted.`);
|
|
27
28
|
}
|
|
28
29
|
const failures = [];
|
|
29
30
|
for (const unit of [...this.units].reverse()) {
|
|
@@ -39,12 +40,24 @@ class ServiceCapturedObjectRelocation {
|
|
|
39
40
|
throw new AggregateError(failures, 'Relocation source rollback was incomplete.');
|
|
40
41
|
}
|
|
41
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* The source owner lease ended before the authority settled (spec 28 §4.4):
|
|
45
|
+
* the source neither resumes nor commits. Retained work is dropped and
|
|
46
|
+
* every pending request without a terminal fails once with `reason`.
|
|
47
|
+
*/
|
|
48
|
+
async discardSource(reason) {
|
|
49
|
+
if (this.terminal !== 'open')
|
|
50
|
+
return;
|
|
51
|
+
this.terminal = 'discarded';
|
|
52
|
+
for (const unit of this.units)
|
|
53
|
+
await unit.discardSeal?.(reason);
|
|
54
|
+
}
|
|
42
55
|
}
|
|
43
56
|
exports.ServiceCapturedObjectRelocation = ServiceCapturedObjectRelocation;
|
|
44
57
|
/** Captures the two valid relocation units: User Spot aggregate or one Actor. */
|
|
45
58
|
class ServiceRelocationObjectCaptureOwner {
|
|
46
59
|
maxConcurrentCallbacks;
|
|
47
|
-
constructor(maxConcurrentCallbacks =
|
|
60
|
+
constructor(maxConcurrentCallbacks = DEFAULT_RELOCATION_CALLBACK_CONCURRENCY) {
|
|
48
61
|
this.maxConcurrentCallbacks = maxConcurrentCallbacks;
|
|
49
62
|
requireCallbackConcurrency(maxConcurrentCallbacks);
|
|
50
63
|
}
|
|
@@ -115,7 +128,7 @@ class ServiceRelocationObjectRestoreOwner {
|
|
|
115
128
|
target;
|
|
116
129
|
authorityKey;
|
|
117
130
|
maxConcurrentCallbacks;
|
|
118
|
-
constructor(target, authorityKey, maxConcurrentCallbacks =
|
|
131
|
+
constructor(target, authorityKey, maxConcurrentCallbacks = DEFAULT_RELOCATION_CALLBACK_CONCURRENCY) {
|
|
119
132
|
this.target = target;
|
|
120
133
|
this.authorityKey = authorityKey;
|
|
121
134
|
this.maxConcurrentCallbacks = maxConcurrentCallbacks;
|