@zlink-systems/framework 0.26.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/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/Spots/Contracts.d.ts +1 -1
- 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 +42 -143
- 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 +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-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 +6 -23
- 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 +1 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
- 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 +40 -16
- 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 +3 -2
- 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 +68 -52
- 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 -10
- 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.js +5 -2
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +248 -174
- package/dist/runtime/channels/channel-transports.d.ts +11 -17
- 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 +130 -72
- 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 +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 +62 -83
- 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 +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 +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 -157
- 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 +7 -20
- 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 +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 -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 +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 +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/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 +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 +4 -3
- package/dist/runtime/spots/spot-outbound.js +9 -8
- 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 +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 +11 -1
- package/dist/runtime/streams/index.d.ts +14 -15
- package/dist/runtime/streams/index.js +20 -21
- 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/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/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/Spots/Contracts.ts +1 -1
- 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 +77 -204
- 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 +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- 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 +13 -29
- 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 +23 -6
- 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 +41 -20
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
- 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 +132 -85
- 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 -23
- 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 +6 -2
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +301 -192
- package/src/runtime/channels/channel-transports.ts +161 -112
- 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/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 +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 +110 -111
- 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 +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 +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 -296
- 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 +8 -41
- 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 +73 -195
- 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 +450 -478
- 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/submission-result.ts +57 -1
- 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 +45 -23
- 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 +89 -43
- package/src/runtime/streams/bound-session-service.ts +21 -1
- package/src/runtime/streams/index.ts +76 -64
- 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/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
|
@@ -1,24 +1,10 @@
|
|
|
1
|
+
import { ZLinkFrameworkException, ZLinkSpotKind, type RoutingId } from '../../contracts';
|
|
1
2
|
import {
|
|
2
|
-
ZLinkFrameworkInternalErrorKind,
|
|
3
|
-
createInternalFrameworkException,
|
|
4
|
-
internalFrameworkErrorKind,
|
|
5
|
-
internalFrameworkErrorKindFromWireReply,
|
|
6
|
-
isCanonicalWireReplyTerminal
|
|
7
|
-
} from '../framework-errors-internal';
|
|
8
|
-
import {
|
|
9
|
-
RequestResult,
|
|
10
|
-
SubmitResult,
|
|
11
|
-
type ZLinkBackendMessageLike as MessageLike
|
|
12
|
-
} from '../backend/runtime-values';
|
|
13
|
-
import { ZLinkFrameworkException, type RoutingId } from '../../contracts';
|
|
14
|
-
import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
15
|
-
import { ZLinkSpotKind } from '../../contracts';
|
|
16
|
-
import {
|
|
17
|
-
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
|
|
18
3
|
ZLinkRuntimeDispatchErrorAction as ZLinkDispatchErrorAction,
|
|
19
4
|
ZLinkRuntimeDispatchErrorReason as ZLinkDispatchErrorReason,
|
|
20
5
|
ZLinkDispatchErrorSurface,
|
|
21
|
-
ZLinkDispatchMessageKind
|
|
6
|
+
ZLinkDispatchMessageKind,
|
|
7
|
+
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome
|
|
22
8
|
} from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
23
9
|
import { awaitWithAbort } from '../abort';
|
|
24
10
|
import type { ZLinkBackendMeshNode } from '../backend/contracts';
|
|
@@ -27,16 +13,32 @@ import {
|
|
|
27
13
|
type ZLinkMeshCompletionTable
|
|
28
14
|
} from '../backend/mesh-completion-table';
|
|
29
15
|
import {
|
|
16
|
+
RequestResult,
|
|
17
|
+
type ZLinkBackendMessageLike as MessageLike
|
|
18
|
+
} from '../backend/runtime-values';
|
|
19
|
+
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
20
|
+
import {
|
|
21
|
+
ZLinkChannelMessageKind,
|
|
30
22
|
decodeChannelReply,
|
|
31
23
|
encodeChannelEnvelopeParts,
|
|
32
24
|
encodeChannelEnvelopePartsAtDeadline,
|
|
33
|
-
type ZLinkChannelEnvelopeCodecRegistry
|
|
34
|
-
ZLinkChannelMessageKind
|
|
25
|
+
type ZLinkChannelEnvelopeCodecRegistry
|
|
35
26
|
} from '../channels/channel-envelope';
|
|
36
|
-
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
37
27
|
import { flowIfEnabled } from '../diagnostics';
|
|
38
28
|
import { runWithOutboundFlow } from '../diagnostics/flow-context';
|
|
29
|
+
import {
|
|
30
|
+
ZLinkFrameworkInternalErrorKind,
|
|
31
|
+
createInternalFrameworkException,
|
|
32
|
+
internalFrameworkErrorKind,
|
|
33
|
+
internalFrameworkErrorKindFromWireReply,
|
|
34
|
+
isCanonicalWireReplyTerminal
|
|
35
|
+
} from '../framework-errors-internal';
|
|
39
36
|
import { resolveFrameworkPacketName } from '../messaging/packet-name';
|
|
37
|
+
import {
|
|
38
|
+
ZLinkSubmitStatus,
|
|
39
|
+
classifySubmitResult,
|
|
40
|
+
type ZLinkSubmitResult
|
|
41
|
+
} from '../messaging/submission-result';
|
|
40
42
|
import type {
|
|
41
43
|
ZLinkSpotAddressCallOptions,
|
|
42
44
|
ZLinkSpotAddressTransport,
|
|
@@ -84,11 +86,6 @@ type MissingTargetSelection =
|
|
|
84
86
|
| { readonly kind: 'capacity' }
|
|
85
87
|
| { readonly kind: 'unavailable' };
|
|
86
88
|
|
|
87
|
-
// Only a synchronous target-admission rejection is safe to retry. A
|
|
88
|
-
// completion with the same public error kind may already represent an
|
|
89
|
-
// admitted application operation, so it must not enter the retry loop.
|
|
90
|
-
const PRE_ADMISSION_MISSING_INSTANCE_ERRORS = new WeakSet<ZLinkFrameworkException>();
|
|
91
|
-
|
|
92
89
|
/** Owns global Spot authority lookup and Missing Instance placement. */
|
|
93
90
|
export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport {
|
|
94
91
|
constructor(private readonly options: ZLinkHostSpotAddressTransportOptions) {}
|
|
@@ -123,6 +120,7 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
123
120
|
try {
|
|
124
121
|
const result = await awaitWithAbort(
|
|
125
122
|
this.options.routed.sendToSpot(existing, message, {
|
|
123
|
+
instanceSpot: call.instanceSpot,
|
|
126
124
|
timeoutMs: deadline.requireRemaining(),
|
|
127
125
|
signal: deadline.signal,
|
|
128
126
|
metadata: call.metadata
|
|
@@ -226,7 +224,7 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
226
224
|
const encoded = this.encode(ZLinkChannelMessageKind.Command, selected.meshName, message);
|
|
227
225
|
const sourceSpotId =
|
|
228
226
|
call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId);
|
|
229
|
-
const mapped =
|
|
227
|
+
const mapped = classifySubmitResult(
|
|
230
228
|
await awaitWithAbort(
|
|
231
229
|
selected.node.sendToMissingInstanceSpot(
|
|
232
230
|
selected.target,
|
|
@@ -236,7 +234,8 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
236
234
|
call.metadata
|
|
237
235
|
),
|
|
238
236
|
deadline.signal
|
|
239
|
-
)
|
|
237
|
+
),
|
|
238
|
+
'Instance Spot submission'
|
|
240
239
|
);
|
|
241
240
|
this.traceInstanceAddress(
|
|
242
241
|
submitResultFlowOutcome(mapped.status),
|
|
@@ -280,57 +279,41 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
280
279
|
const timeoutMs = call.timeoutMs ?? this.options.defaultRequestTimeoutMs;
|
|
281
280
|
const deadline = createSpotAddressDeadline(timeoutMs, call.signal);
|
|
282
281
|
try {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
}
|
|
295
|
-
const recovery = await this.recoverStaleInstanceRoute(
|
|
296
|
-
spotId,
|
|
297
|
-
call,
|
|
298
|
-
deadline,
|
|
299
|
-
error,
|
|
300
|
-
existing
|
|
301
|
-
);
|
|
302
|
-
if (recovery.kind === 'route') {
|
|
303
|
-
// Retry only after the resolver exposes a different route. The
|
|
304
|
-
// stale target cannot have admitted the application operation.
|
|
305
|
-
continue;
|
|
306
|
-
}
|
|
307
|
-
if (recovery.kind !== 'cold') {
|
|
308
|
-
this.reportInstanceRequestError(
|
|
309
|
-
spotId,
|
|
310
|
-
request,
|
|
311
|
-
error,
|
|
312
|
-
existing.routerChannelId,
|
|
313
|
-
existing.targetNodeRid,
|
|
314
|
-
existing.stableType,
|
|
315
|
-
addressedInstanceErrorReason(error)
|
|
316
|
-
);
|
|
317
|
-
throw error;
|
|
318
|
-
}
|
|
319
|
-
// The logical authority is no longer Ready, so the Instance
|
|
320
|
-
// intent path below may submit the original operation once.
|
|
321
|
-
}
|
|
282
|
+
const existing = await this.resolveExisting(spotId, deadline.signal);
|
|
283
|
+
deadline.requireRemaining();
|
|
284
|
+
if (existing === undefined) {
|
|
285
|
+
return await this.requestToMissingInstance(spotId, request, call, deadline);
|
|
286
|
+
}
|
|
287
|
+
this.validateExisting(existing, call);
|
|
288
|
+
try {
|
|
289
|
+
return await this.requestToExistingSpot(spotId, request, call, existing, deadline);
|
|
290
|
+
} catch (error) {
|
|
291
|
+
if (isSpotRouteRefreshError(error)) {
|
|
292
|
+
this.options.resolver()?.invalidate?.(spotId);
|
|
322
293
|
}
|
|
323
|
-
|
|
324
|
-
|
|
294
|
+
// Failover policy §4.4: SpotMoving is the owner's Ready owner-fence
|
|
295
|
+
// refusal, made before admission. With Instance intent, one authority
|
|
296
|
+
// read under the same deadline decides: Missing means Close released
|
|
297
|
+
// the incarnation, so the request activates a new one. Any other
|
|
298
|
+
// answer, and any message the owner admitted, keeps this terminal.
|
|
299
|
+
if (
|
|
300
|
+
call.instanceSpot &&
|
|
301
|
+
isOwnerFenceRefusal(error) &&
|
|
302
|
+
(await this.resolveExisting(spotId, deadline.signal)) === undefined
|
|
303
|
+
) {
|
|
304
|
+
deadline.requireRemaining();
|
|
325
305
|
return await this.requestToMissingInstance(spotId, request, call, deadline);
|
|
326
|
-
} catch (error) {
|
|
327
|
-
if (!isMissingInstanceRetryError(error)) throw error;
|
|
328
|
-
// A placement node can finish cleanup before its stale native result
|
|
329
|
-
// reaches this process. Refresh authority and select again under the
|
|
330
|
-
// same end-to-end deadline; the old envelope was not admitted.
|
|
331
|
-
this.options.resolver()?.invalidate?.(spotId);
|
|
332
|
-
await waitForSpotRouteRefresh(Math.min(10, deadline.requireRemaining()), deadline.signal);
|
|
333
306
|
}
|
|
307
|
+
this.reportInstanceRequestError(
|
|
308
|
+
spotId,
|
|
309
|
+
request,
|
|
310
|
+
error,
|
|
311
|
+
existing.routerChannelId,
|
|
312
|
+
existing.targetNodeRid,
|
|
313
|
+
existing.stableType,
|
|
314
|
+
addressedInstanceErrorReason(error)
|
|
315
|
+
);
|
|
316
|
+
throw error;
|
|
334
317
|
}
|
|
335
318
|
} catch (error) {
|
|
336
319
|
if (
|
|
@@ -372,6 +355,7 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
372
355
|
);
|
|
373
356
|
const reply = await awaitWithAbort(
|
|
374
357
|
this.options.routed.requestToSpot<TReply>(existing, request, {
|
|
358
|
+
instanceSpot: call.instanceSpot,
|
|
375
359
|
timeoutMs: deadline.requireRemaining(),
|
|
376
360
|
signal: deadline.signal,
|
|
377
361
|
metadata: call.metadata
|
|
@@ -446,28 +430,17 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
446
430
|
const table = this.options.completions(selected.meshName);
|
|
447
431
|
if (table === undefined)
|
|
448
432
|
throw new Error(`MeshNode '${selected.meshName}' completion table is not started.`);
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
deadline.signal
|
|
461
|
-
);
|
|
462
|
-
} catch (error) {
|
|
463
|
-
if (
|
|
464
|
-
error instanceof ZLinkFrameworkException &&
|
|
465
|
-
internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound
|
|
466
|
-
) {
|
|
467
|
-
PRE_ADMISSION_MISSING_INSTANCE_ERRORS.add(error);
|
|
468
|
-
}
|
|
469
|
-
throw error;
|
|
470
|
-
}
|
|
433
|
+
const completionPromise = table.submit(
|
|
434
|
+
() =>
|
|
435
|
+
selected.node.requestToMissingInstanceSpot(
|
|
436
|
+
selected.target,
|
|
437
|
+
encoded,
|
|
438
|
+
deadlineUnixMs,
|
|
439
|
+
call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId),
|
|
440
|
+
call.metadata
|
|
441
|
+
),
|
|
442
|
+
deadline.signal
|
|
443
|
+
);
|
|
471
444
|
this.traceInstanceAddress(
|
|
472
445
|
ZLinkMessageFlowOutcome.Sent,
|
|
473
446
|
ZLinkDispatchMessageKind.Request,
|
|
@@ -580,35 +553,6 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
580
553
|
}
|
|
581
554
|
}
|
|
582
555
|
|
|
583
|
-
private async recoverStaleInstanceRoute(
|
|
584
|
-
spotId: RoutingId,
|
|
585
|
-
call: ZLinkSpotAddressCallOptions,
|
|
586
|
-
deadline: ZLinkSpotAddressDeadline,
|
|
587
|
-
error: unknown,
|
|
588
|
-
staleRoute: ZLinkSpotRouteTarget
|
|
589
|
-
): Promise<
|
|
590
|
-
| { readonly kind: 'route'; readonly route: ZLinkSpotRouteTarget }
|
|
591
|
-
| { readonly kind: 'cold' }
|
|
592
|
-
| { readonly kind: 'fail' }
|
|
593
|
-
> {
|
|
594
|
-
if (
|
|
595
|
-
!call.instanceSpot ||
|
|
596
|
-
!(error instanceof ZLinkFrameworkException) ||
|
|
597
|
-
!isInstanceRouteStaleError(error)
|
|
598
|
-
) {
|
|
599
|
-
return { kind: 'fail' };
|
|
600
|
-
}
|
|
601
|
-
for (;;) {
|
|
602
|
-
deadline.requireRemaining();
|
|
603
|
-
const current = await this.resolveExisting(spotId, deadline.signal);
|
|
604
|
-
if (current === undefined) return { kind: 'cold' };
|
|
605
|
-
if (!sameSpotRouteSnapshot(current, staleRoute)) {
|
|
606
|
-
return { kind: 'route', route: current };
|
|
607
|
-
}
|
|
608
|
-
await waitForSpotRouteRefresh(Math.min(10, deadline.requireRemaining()), deadline.signal);
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
|
|
612
556
|
private selectMissingTarget(
|
|
613
557
|
spotId: RoutingId,
|
|
614
558
|
call: ZLinkSpotAddressCallOptions
|
|
@@ -771,25 +715,6 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
771
715
|
}
|
|
772
716
|
}
|
|
773
717
|
|
|
774
|
-
function isInstanceRouteStaleError(error: unknown): error is ZLinkFrameworkException {
|
|
775
|
-
if (!(error instanceof ZLinkFrameworkException)) return false;
|
|
776
|
-
const kind = internalFrameworkErrorKind(error);
|
|
777
|
-
// RequestTargetNotFound from an existing route is a pre-admission route
|
|
778
|
-
// lookup failure. A stale owner result is terminal for this application
|
|
779
|
-
// operation: the routed request may already have crossed the transport
|
|
780
|
-
// boundary, so refreshing the route and resubmitting it could execute the
|
|
781
|
-
// same operation twice. Instance cold activation is selected only when the
|
|
782
|
-
// authority resolver itself reports that the Ready route is absent.
|
|
783
|
-
if (kind === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound) return true;
|
|
784
|
-
return false;
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
function isMissingInstanceRetryError(error: unknown): error is ZLinkFrameworkException {
|
|
788
|
-
return (
|
|
789
|
-
error instanceof ZLinkFrameworkException && PRE_ADMISSION_MISSING_INSTANCE_ERRORS.has(error)
|
|
790
|
-
);
|
|
791
|
-
}
|
|
792
|
-
|
|
793
718
|
function missingInstanceRequestFailure(
|
|
794
719
|
result: number,
|
|
795
720
|
nativeErrno: number
|
|
@@ -819,27 +744,6 @@ function missingInstanceRequestFailure(
|
|
|
819
744
|
);
|
|
820
745
|
}
|
|
821
746
|
|
|
822
|
-
function mapSubmitResult(result: number): ZLinkSubmitResult {
|
|
823
|
-
switch (result) {
|
|
824
|
-
case SubmitResult.Ok:
|
|
825
|
-
return { status: ZLinkSubmitStatus.Submitted };
|
|
826
|
-
case SubmitResult.Backpressured:
|
|
827
|
-
case SubmitResult.NotAdmitted:
|
|
828
|
-
return { status: ZLinkSubmitStatus.Backpressured };
|
|
829
|
-
case SubmitResult.NotFound:
|
|
830
|
-
return { status: ZLinkSubmitStatus.TargetNotFound };
|
|
831
|
-
case SubmitResult.NotConnected:
|
|
832
|
-
return { status: ZLinkSubmitStatus.RouteNotConnected };
|
|
833
|
-
case SubmitResult.Terminated:
|
|
834
|
-
return { status: ZLinkSubmitStatus.Shutdown };
|
|
835
|
-
default:
|
|
836
|
-
throw createInternalFrameworkException(
|
|
837
|
-
ZLinkFrameworkInternalErrorKind.RequestFailed,
|
|
838
|
-
`Instance Spot submission failed with result ${result}.`
|
|
839
|
-
);
|
|
840
|
-
}
|
|
841
|
-
}
|
|
842
|
-
|
|
843
747
|
function missingInstancePlacementCapacity(
|
|
844
748
|
spotId: RoutingId,
|
|
845
749
|
stableType: string | undefined
|
|
@@ -877,39 +781,13 @@ function isSpotRouteRefreshError(error: unknown): error is ZLinkFrameworkExcepti
|
|
|
877
781
|
);
|
|
878
782
|
}
|
|
879
783
|
|
|
880
|
-
function
|
|
784
|
+
function isOwnerFenceRefusal(error: unknown): boolean {
|
|
881
785
|
return (
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
left.routerChannelId === right.routerChannelId &&
|
|
885
|
-
left.spotKind === right.spotKind &&
|
|
886
|
-
left.stableType === right.stableType &&
|
|
887
|
-
left.targetSpotGeneration === right.targetSpotGeneration &&
|
|
888
|
-
left.targetNodeGeneration === right.targetNodeGeneration &&
|
|
889
|
-
left.authorityOwnerGeneration === right.authorityOwnerGeneration &&
|
|
890
|
-
left.targetOwnerId === right.targetOwnerId &&
|
|
891
|
-
left.ownerLeaseGeneration === right.ownerLeaseGeneration &&
|
|
892
|
-
left.authorityStoreVersion === right.authorityStoreVersion
|
|
786
|
+
error instanceof ZLinkFrameworkException &&
|
|
787
|
+
internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.SpotMoving
|
|
893
788
|
);
|
|
894
789
|
}
|
|
895
790
|
|
|
896
|
-
function waitForSpotRouteRefresh(delayMs: number, signal: AbortSignal): Promise<void> {
|
|
897
|
-
return new Promise((resolve, reject) => {
|
|
898
|
-
const finish = () => {
|
|
899
|
-
signal.removeEventListener('abort', abort);
|
|
900
|
-
resolve();
|
|
901
|
-
};
|
|
902
|
-
const abort = () => {
|
|
903
|
-
clearTimeout(timer);
|
|
904
|
-
signal.removeEventListener('abort', abort);
|
|
905
|
-
reject(signal.reason);
|
|
906
|
-
};
|
|
907
|
-
const timer = setTimeout(finish, delayMs);
|
|
908
|
-
signal.addEventListener('abort', abort, { once: true });
|
|
909
|
-
if (signal.aborted) abort();
|
|
910
|
-
});
|
|
911
|
-
}
|
|
912
|
-
|
|
913
791
|
function submitResultReason(status: ZLinkSubmitStatus): ZLinkDispatchErrorReason {
|
|
914
792
|
switch (status) {
|
|
915
793
|
case ZLinkSubmitStatus.Backpressured:
|
|
@@ -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
|
|