@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,9 +1,9 @@
|
|
|
1
1
|
import { type RoutingId } from '../../contracts';
|
|
2
|
-
import { type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
3
2
|
import type { ZLinkBackendMeshNode } from '../backend/contracts';
|
|
4
3
|
import { type ZLinkMeshCompletionTable } from '../backend/mesh-completion-table';
|
|
5
|
-
import { type ZLinkChannelEnvelopeCodecRegistry } from '../channels/channel-envelope';
|
|
6
4
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
5
|
+
import { type ZLinkChannelEnvelopeCodecRegistry } from '../channels/channel-envelope';
|
|
6
|
+
import { type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
7
7
|
import type { ZLinkSpotAddressCallOptions, ZLinkSpotAddressTransport, ZLinkSpotRoutedTransport } from '../spots/spot-outbound';
|
|
8
8
|
import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
|
|
9
9
|
export interface ZLinkHostSpotAddressTransportOptions {
|
|
@@ -37,7 +37,6 @@ export declare class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTr
|
|
|
37
37
|
private reportInstanceRequestError;
|
|
38
38
|
private traceInstanceAddress;
|
|
39
39
|
private resolveExisting;
|
|
40
|
-
private recoverStaleInstanceRoute;
|
|
41
40
|
private selectMissingTarget;
|
|
42
41
|
private sendTimeoutMsForMesh;
|
|
43
42
|
private sendTimeoutMsForRouteChannel;
|
|
@@ -2,25 +2,20 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkHostSpotAddressTransport = void 0;
|
|
4
4
|
exports.hasObjectClientCapability = hasObjectClientCapability;
|
|
5
|
-
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
6
|
-
const runtime_values_1 = require("../backend/runtime-values");
|
|
7
5
|
const contracts_1 = require("../../contracts");
|
|
8
|
-
const submission_result_1 = require("../messaging/submission-result");
|
|
9
|
-
const contracts_2 = require("../../contracts");
|
|
10
6
|
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
11
7
|
const abort_1 = require("../abort");
|
|
12
8
|
const mesh_completion_table_1 = require("../backend/mesh-completion-table");
|
|
9
|
+
const runtime_values_1 = require("../backend/runtime-values");
|
|
13
10
|
const channel_envelope_1 = require("../channels/channel-envelope");
|
|
14
11
|
const diagnostics_1 = require("../diagnostics");
|
|
15
12
|
const flow_context_1 = require("../diagnostics/flow-context");
|
|
13
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
16
14
|
const packet_name_1 = require("../messaging/packet-name");
|
|
15
|
+
const submission_result_1 = require("../messaging/submission-result");
|
|
17
16
|
function hasObjectClientCapability(role) {
|
|
18
17
|
return role === 'client' || role === 'server';
|
|
19
18
|
}
|
|
20
|
-
// Only a synchronous target-admission rejection is safe to retry. A
|
|
21
|
-
// completion with the same public error kind may already represent an
|
|
22
|
-
// admitted application operation, so it must not enter the retry loop.
|
|
23
|
-
const PRE_ADMISSION_MISSING_INSTANCE_ERRORS = new WeakSet();
|
|
24
19
|
/** Owns global Spot authority lookup and Missing Instance placement. */
|
|
25
20
|
class ZLinkHostSpotAddressTransport {
|
|
26
21
|
options;
|
|
@@ -44,6 +39,7 @@ class ZLinkHostSpotAddressTransport {
|
|
|
44
39
|
deadline.setOwnerTimeout(this.sendTimeoutMsForRouteChannel(existing.routerChannelId));
|
|
45
40
|
try {
|
|
46
41
|
const result = await (0, abort_1.awaitWithAbort)(this.options.routed.sendToSpot(existing, message, {
|
|
42
|
+
instanceSpot: call.instanceSpot,
|
|
47
43
|
timeoutMs: deadline.requireRemaining(),
|
|
48
44
|
signal: deadline.signal,
|
|
49
45
|
metadata: call.metadata
|
|
@@ -91,7 +87,7 @@ class ZLinkHostSpotAddressTransport {
|
|
|
91
87
|
deadline.setOwnerTimeout(this.sendTimeoutMsForMesh(selected.meshName));
|
|
92
88
|
const encoded = this.encode(3 /* ZLinkChannelMessageKind.Command */, selected.meshName, message);
|
|
93
89
|
const sourceSpotId = call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId);
|
|
94
|
-
const mapped =
|
|
90
|
+
const mapped = (0, submission_result_1.classifySubmitResult)(await (0, abort_1.awaitWithAbort)(selected.node.sendToMissingInstanceSpot(selected.target, encoded, BigInt(deadline.deadlineUnixMs), sourceSpotId, call.metadata), deadline.signal), 'Instance Spot submission');
|
|
95
91
|
this.traceInstanceAddress(submitResultFlowOutcome(mapped.status), ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send, spotId, message, selected.meshName, selected.target.stableType, selected.target.targetNodeRid, mapped.status === submission_result_1.ZLinkSubmitStatus.Submitted
|
|
96
92
|
? undefined
|
|
97
93
|
: submitResultReason(mapped.status));
|
|
@@ -114,44 +110,32 @@ class ZLinkHostSpotAddressTransport {
|
|
|
114
110
|
const timeoutMs = call.timeoutMs ?? this.options.defaultRequestTimeoutMs;
|
|
115
111
|
const deadline = createSpotAddressDeadline(timeoutMs, call.signal);
|
|
116
112
|
try {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const recovery = await this.recoverStaleInstanceRoute(spotId, call, deadline, error, existing);
|
|
130
|
-
if (recovery.kind === 'route') {
|
|
131
|
-
// Retry only after the resolver exposes a different route. The
|
|
132
|
-
// stale target cannot have admitted the application operation.
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
if (recovery.kind !== 'cold') {
|
|
136
|
-
this.reportInstanceRequestError(spotId, request, error, existing.routerChannelId, existing.targetNodeRid, existing.stableType, addressedInstanceErrorReason(error));
|
|
137
|
-
throw error;
|
|
138
|
-
}
|
|
139
|
-
// The logical authority is no longer Ready, so the Instance
|
|
140
|
-
// intent path below may submit the original operation once.
|
|
141
|
-
}
|
|
113
|
+
const existing = await this.resolveExisting(spotId, deadline.signal);
|
|
114
|
+
deadline.requireRemaining();
|
|
115
|
+
if (existing === undefined) {
|
|
116
|
+
return await this.requestToMissingInstance(spotId, request, call, deadline);
|
|
117
|
+
}
|
|
118
|
+
this.validateExisting(existing, call);
|
|
119
|
+
try {
|
|
120
|
+
return await this.requestToExistingSpot(spotId, request, call, existing, deadline);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (isSpotRouteRefreshError(error)) {
|
|
124
|
+
this.options.resolver()?.invalidate?.(spotId);
|
|
142
125
|
}
|
|
143
|
-
|
|
126
|
+
// Failover policy §4.4: SpotMoving is the owner's Ready owner-fence
|
|
127
|
+
// refusal, made before admission. With Instance intent, one authority
|
|
128
|
+
// read under the same deadline decides: Missing means Close released
|
|
129
|
+
// the incarnation, so the request activates a new one. Any other
|
|
130
|
+
// answer, and any message the owner admitted, keeps this terminal.
|
|
131
|
+
if (call.instanceSpot &&
|
|
132
|
+
isOwnerFenceRefusal(error) &&
|
|
133
|
+
(await this.resolveExisting(spotId, deadline.signal)) === undefined) {
|
|
134
|
+
deadline.requireRemaining();
|
|
144
135
|
return await this.requestToMissingInstance(spotId, request, call, deadline);
|
|
145
136
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
throw error;
|
|
149
|
-
// A placement node can finish cleanup before its stale native result
|
|
150
|
-
// reaches this process. Refresh authority and select again under the
|
|
151
|
-
// same end-to-end deadline; the old envelope was not admitted.
|
|
152
|
-
this.options.resolver()?.invalidate?.(spotId);
|
|
153
|
-
await waitForSpotRouteRefresh(Math.min(10, deadline.requireRemaining()), deadline.signal);
|
|
154
|
-
}
|
|
137
|
+
this.reportInstanceRequestError(spotId, request, error, existing.routerChannelId, existing.targetNodeRid, existing.stableType, addressedInstanceErrorReason(error));
|
|
138
|
+
throw error;
|
|
155
139
|
}
|
|
156
140
|
}
|
|
157
141
|
catch (error) {
|
|
@@ -170,6 +154,7 @@ class ZLinkHostSpotAddressTransport {
|
|
|
170
154
|
async requestToExistingSpot(spotId, request, call, existing, deadline) {
|
|
171
155
|
this.traceInstanceAddress(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent, ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request, spotId, request, existing.routerChannelId, existing.stableType, existing.targetNodeRid);
|
|
172
156
|
const reply = await (0, abort_1.awaitWithAbort)(this.options.routed.requestToSpot(existing, request, {
|
|
157
|
+
instanceSpot: call.instanceSpot,
|
|
173
158
|
timeoutMs: deadline.requireRemaining(),
|
|
174
159
|
signal: deadline.signal,
|
|
175
160
|
metadata: call.metadata
|
|
@@ -201,17 +186,7 @@ class ZLinkHostSpotAddressTransport {
|
|
|
201
186
|
const table = this.options.completions(selected.meshName);
|
|
202
187
|
if (table === undefined)
|
|
203
188
|
throw new Error(`MeshNode '${selected.meshName}' completion table is not started.`);
|
|
204
|
-
|
|
205
|
-
try {
|
|
206
|
-
completionPromise = table.submit(() => selected.node.requestToMissingInstanceSpot(selected.target, encoded, deadlineUnixMs, call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId), call.metadata), deadline.signal);
|
|
207
|
-
}
|
|
208
|
-
catch (error) {
|
|
209
|
-
if (error instanceof contracts_1.ZLinkFrameworkException &&
|
|
210
|
-
(0, framework_errors_internal_1.internalFrameworkErrorKind)(error) === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound) {
|
|
211
|
-
PRE_ADMISSION_MISSING_INSTANCE_ERRORS.add(error);
|
|
212
|
-
}
|
|
213
|
-
throw error;
|
|
214
|
-
}
|
|
189
|
+
const completionPromise = table.submit(() => selected.node.requestToMissingInstanceSpot(selected.target, encoded, deadlineUnixMs, call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId), call.metadata), deadline.signal);
|
|
215
190
|
this.traceInstanceAddress(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent, ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request, spotId, request, selected.meshName, selected.target.stableType, selected.target.targetNodeRid);
|
|
216
191
|
const completion = await (0, abort_1.awaitWithAbort)(completionPromise, deadline.signal);
|
|
217
192
|
try {
|
|
@@ -274,23 +249,6 @@ class ZLinkHostSpotAddressTransport {
|
|
|
274
249
|
throw error;
|
|
275
250
|
}
|
|
276
251
|
}
|
|
277
|
-
async recoverStaleInstanceRoute(spotId, call, deadline, error, staleRoute) {
|
|
278
|
-
if (!call.instanceSpot ||
|
|
279
|
-
!(error instanceof contracts_1.ZLinkFrameworkException) ||
|
|
280
|
-
!isInstanceRouteStaleError(error)) {
|
|
281
|
-
return { kind: 'fail' };
|
|
282
|
-
}
|
|
283
|
-
for (;;) {
|
|
284
|
-
deadline.requireRemaining();
|
|
285
|
-
const current = await this.resolveExisting(spotId, deadline.signal);
|
|
286
|
-
if (current === undefined)
|
|
287
|
-
return { kind: 'cold' };
|
|
288
|
-
if (!sameSpotRouteSnapshot(current, staleRoute)) {
|
|
289
|
-
return { kind: 'route', route: current };
|
|
290
|
-
}
|
|
291
|
-
await waitForSpotRouteRefresh(Math.min(10, deadline.requireRemaining()), deadline.signal);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
252
|
selectMissingTarget(spotId, call) {
|
|
295
253
|
const configuredMeshes = this.options.meshNames();
|
|
296
254
|
if (call.initialMeshName !== undefined &&
|
|
@@ -370,7 +328,7 @@ class ZLinkHostSpotAddressTransport {
|
|
|
370
328
|
validateExisting(target, call) {
|
|
371
329
|
if (!call.instanceSpot)
|
|
372
330
|
return;
|
|
373
|
-
if (target.spotKind !==
|
|
331
|
+
if (target.spotKind !== contracts_1.ZLinkSpotKind.Instance ||
|
|
374
332
|
(call.instanceSpotType !== undefined && target.stableType !== call.instanceSpotType)) {
|
|
375
333
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotTypeMismatch, `Spot '${String(target.spotId)}' is not the requested Instance Spot type.`);
|
|
376
334
|
}
|
|
@@ -383,23 +341,6 @@ class ZLinkHostSpotAddressTransport {
|
|
|
383
341
|
}
|
|
384
342
|
}
|
|
385
343
|
exports.ZLinkHostSpotAddressTransport = ZLinkHostSpotAddressTransport;
|
|
386
|
-
function isInstanceRouteStaleError(error) {
|
|
387
|
-
if (!(error instanceof contracts_1.ZLinkFrameworkException))
|
|
388
|
-
return false;
|
|
389
|
-
const kind = (0, framework_errors_internal_1.internalFrameworkErrorKind)(error);
|
|
390
|
-
// RequestTargetNotFound from an existing route is a pre-admission route
|
|
391
|
-
// lookup failure. A stale owner result is terminal for this application
|
|
392
|
-
// operation: the routed request may already have crossed the transport
|
|
393
|
-
// boundary, so refreshing the route and resubmitting it could execute the
|
|
394
|
-
// same operation twice. Instance cold activation is selected only when the
|
|
395
|
-
// authority resolver itself reports that the Ready route is absent.
|
|
396
|
-
if (kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound)
|
|
397
|
-
return true;
|
|
398
|
-
return false;
|
|
399
|
-
}
|
|
400
|
-
function isMissingInstanceRetryError(error) {
|
|
401
|
-
return (error instanceof contracts_1.ZLinkFrameworkException && PRE_ADMISSION_MISSING_INSTANCE_ERRORS.has(error));
|
|
402
|
-
}
|
|
403
344
|
function missingInstanceRequestFailure(result, nativeErrno) {
|
|
404
345
|
const canonical = (0, framework_errors_internal_1.isCanonicalWireReplyTerminal)(result, nativeErrno);
|
|
405
346
|
const wireKind = canonical
|
|
@@ -422,23 +363,6 @@ function missingInstanceRequestFailure(result, nativeErrno) {
|
|
|
422
363
|
: (wireKind ?? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed);
|
|
423
364
|
return (0, framework_errors_internal_1.createInternalFrameworkException)(kind, `Instance Spot request failed with result ${result} and errno ${nativeErrno}.`);
|
|
424
365
|
}
|
|
425
|
-
function mapSubmitResult(result) {
|
|
426
|
-
switch (result) {
|
|
427
|
-
case runtime_values_1.SubmitResult.Ok:
|
|
428
|
-
return { status: submission_result_1.ZLinkSubmitStatus.Submitted };
|
|
429
|
-
case runtime_values_1.SubmitResult.Backpressured:
|
|
430
|
-
case runtime_values_1.SubmitResult.NotAdmitted:
|
|
431
|
-
return { status: submission_result_1.ZLinkSubmitStatus.Backpressured };
|
|
432
|
-
case runtime_values_1.SubmitResult.NotFound:
|
|
433
|
-
return { status: submission_result_1.ZLinkSubmitStatus.TargetNotFound };
|
|
434
|
-
case runtime_values_1.SubmitResult.NotConnected:
|
|
435
|
-
return { status: submission_result_1.ZLinkSubmitStatus.RouteNotConnected };
|
|
436
|
-
case runtime_values_1.SubmitResult.Terminated:
|
|
437
|
-
return { status: submission_result_1.ZLinkSubmitStatus.Shutdown };
|
|
438
|
-
default:
|
|
439
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, `Instance Spot submission failed with result ${result}.`);
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
366
|
function missingInstancePlacementCapacity(spotId, stableType) {
|
|
443
367
|
const type = stableType === undefined ? '' : ` of type '${stableType}'`;
|
|
444
368
|
return (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PlacementCapacityExhausted, `No eligible Instance Spot placement target${type} is available for '${String(spotId)}'.`, true);
|
|
@@ -458,35 +382,9 @@ function isSpotRouteRefreshError(error) {
|
|
|
458
382
|
kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale ||
|
|
459
383
|
kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected);
|
|
460
384
|
}
|
|
461
|
-
function
|
|
462
|
-
return (
|
|
463
|
-
|
|
464
|
-
left.routerChannelId === right.routerChannelId &&
|
|
465
|
-
left.spotKind === right.spotKind &&
|
|
466
|
-
left.stableType === right.stableType &&
|
|
467
|
-
left.targetSpotGeneration === right.targetSpotGeneration &&
|
|
468
|
-
left.targetNodeGeneration === right.targetNodeGeneration &&
|
|
469
|
-
left.authorityOwnerGeneration === right.authorityOwnerGeneration &&
|
|
470
|
-
left.targetOwnerId === right.targetOwnerId &&
|
|
471
|
-
left.ownerLeaseGeneration === right.ownerLeaseGeneration &&
|
|
472
|
-
left.authorityStoreVersion === right.authorityStoreVersion);
|
|
473
|
-
}
|
|
474
|
-
function waitForSpotRouteRefresh(delayMs, signal) {
|
|
475
|
-
return new Promise((resolve, reject) => {
|
|
476
|
-
const finish = () => {
|
|
477
|
-
signal.removeEventListener('abort', abort);
|
|
478
|
-
resolve();
|
|
479
|
-
};
|
|
480
|
-
const abort = () => {
|
|
481
|
-
clearTimeout(timer);
|
|
482
|
-
signal.removeEventListener('abort', abort);
|
|
483
|
-
reject(signal.reason);
|
|
484
|
-
};
|
|
485
|
-
const timer = setTimeout(finish, delayMs);
|
|
486
|
-
signal.addEventListener('abort', abort, { once: true });
|
|
487
|
-
if (signal.aborted)
|
|
488
|
-
abort();
|
|
489
|
-
});
|
|
385
|
+
function isOwnerFenceRefusal(error) {
|
|
386
|
+
return (error instanceof contracts_1.ZLinkFrameworkException &&
|
|
387
|
+
(0, framework_errors_internal_1.internalFrameworkErrorKind)(error) === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving);
|
|
490
388
|
}
|
|
491
389
|
function submitResultReason(status) {
|
|
492
390
|
switch (status) {
|
|
@@ -34,5 +34,5 @@ export interface ZLinkSpotNodeRuntimeOptionsFactoryOptions {
|
|
|
34
34
|
export declare class ZLinkSpotNodeRuntimeOptionsFactory {
|
|
35
35
|
private readonly options;
|
|
36
36
|
constructor(options: ZLinkSpotNodeRuntimeOptionsFactoryOptions);
|
|
37
|
-
create(): ZLinkSpotNodeRuntimeManagerOptions
|
|
37
|
+
create(): Omit<ZLinkSpotNodeRuntimeManagerOptions, 'errorSink'>;
|
|
38
38
|
}
|
|
@@ -8,16 +8,17 @@ class ZLinkSpotNodeRuntimeOptionsFactory {
|
|
|
8
8
|
this.options = options;
|
|
9
9
|
}
|
|
10
10
|
create() {
|
|
11
|
+
const spotRouterChannelIdForMesh = this.options.meshRouters.spotRouterChannelIdByMesh();
|
|
11
12
|
return {
|
|
12
13
|
registration: this.options.registration,
|
|
13
14
|
primaryMeshName: this.options.meshRouters.primaryMeshName(),
|
|
14
15
|
backendAdapterFactory: this.options.backendAdapterFactory,
|
|
15
16
|
context: this.options.context,
|
|
16
|
-
channelClient: new channels_1.DefaultZLinkChannelClient(this.options.registration, this.options.channelTransport),
|
|
17
|
+
channelClient: new channels_1.DefaultZLinkChannelClient(this.options.registration, this.options.channelTransport, this.options.routeTransport, spotRouterChannelIdForMesh),
|
|
17
18
|
fanoutClient: new channels_1.DefaultZLinkFanoutClient(this.options.registration, this.options.channelTransport),
|
|
18
19
|
spotPublisherClient: new channels_1.DefaultZLinkSpotPublisherClient(this.options.registration, this.options.spotPublisherTransport),
|
|
19
20
|
routedTransport: this.options.routeTransport,
|
|
20
|
-
spotRouterChannelIdForMesh
|
|
21
|
+
spotRouterChannelIdForMesh,
|
|
21
22
|
providerResolver: this.options.providerResolver,
|
|
22
23
|
dispatchErrors: this.options.dispatchErrors,
|
|
23
24
|
runtimeEventPublisher: this.options.runtimeEventPublisher,
|
|
@@ -22,15 +22,9 @@ export interface ZLinkSpotRuntimeOptionsFactoryOptions {
|
|
|
22
22
|
readonly actorManager: () => DefaultZLinkActorManager | undefined;
|
|
23
23
|
readonly locationLifecycle: () => ZLinkLocationLifecycle | undefined;
|
|
24
24
|
readonly releaseInstanceAuthority: (meshName: string, spotId: string, objectGeneration: bigint) => Promise<void>;
|
|
25
|
-
readonly beginInstanceIdleClosingAuthority: (meshName: string, spotId: string, onCommitted: () => void) => Promise<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
readonly beginInstanceClosingAuthority: (meshName: string, spotId: string, onCommitted: () => void) => Promise<{
|
|
29
|
-
release(): Promise<void>;
|
|
30
|
-
} | undefined>;
|
|
31
|
-
readonly beginUserClosingAuthority: (meshName: string, spotId: string, objectGeneration: bigint, onCommitted: () => void) => Promise<{
|
|
32
|
-
release(): Promise<void>;
|
|
33
|
-
} | undefined>;
|
|
25
|
+
readonly beginInstanceIdleClosingAuthority: (meshName: string, spotId: string, onCommitted: () => void) => Promise<import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined>;
|
|
26
|
+
readonly beginInstanceClosingAuthority: (meshName: string, spotId: string, onCommitted: () => void) => Promise<import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined>;
|
|
27
|
+
readonly beginUserClosingAuthority: (meshName: string, spotId: string, objectGeneration: bigint, onCommitted: () => void) => Promise<import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined>;
|
|
34
28
|
readonly createLocationSpotRouteResolver: () => ZLinkSpotRouteResolver | undefined;
|
|
35
29
|
readonly boundSessionRelay: ZLinkBoundSessionRelay;
|
|
36
30
|
readonly actorHandoff: ZLinkActorHandoffCoordinator;
|
|
@@ -39,7 +33,7 @@ export interface ZLinkSpotRuntimeOptionsFactoryOptions {
|
|
|
39
33
|
readonly detachedTaskRunner: ZLinkDetachedTaskRunner;
|
|
40
34
|
readonly metrics: import('../diagnostics').ZLinkRuntimeMetrics;
|
|
41
35
|
readonly admission: ZLinkRuntimeAdmissionGate;
|
|
42
|
-
readonly
|
|
36
|
+
readonly statefulExecution: NonNullable<ZLinkSpotManagerOptions['statefulExecution']>;
|
|
43
37
|
}
|
|
44
38
|
export declare class ZLinkSpotRuntimeOptionsFactory {
|
|
45
39
|
private readonly options;
|
|
@@ -11,6 +11,7 @@ class ZLinkSpotRuntimeOptionsFactory {
|
|
|
11
11
|
this.options = options;
|
|
12
12
|
}
|
|
13
13
|
create(actorTransferRuntime) {
|
|
14
|
+
const spotRouterChannelIdForMesh = this.options.meshRouters.spotRouterChannelIdByMesh();
|
|
14
15
|
return {
|
|
15
16
|
nodeRid: undefined,
|
|
16
17
|
nodeRidProvider: (meshName) => this.meshNodeRoutingId(meshName),
|
|
@@ -38,25 +39,64 @@ class ZLinkSpotRuntimeOptionsFactory {
|
|
|
38
39
|
}
|
|
39
40
|
await runtime.dispatchEntryActorJoin(meshName, actor, handoffBacklog);
|
|
40
41
|
},
|
|
41
|
-
|
|
42
|
+
executeEntryActor: (meshName, actorId, operation) => {
|
|
43
|
+
const runtime = this.options.spotNodeRuntime();
|
|
44
|
+
if (runtime === undefined) {
|
|
45
|
+
throw new configuration_1.ZLinkConfigurationException('Entry Spot Actor completion requires the MeshNode runtime.');
|
|
46
|
+
}
|
|
47
|
+
return runtime.executeEntryActor(meshName, actorId, operation);
|
|
48
|
+
},
|
|
49
|
+
channelClient: new channels_1.DefaultZLinkChannelClient(this.options.registration, this.options.channelTransport, this.options.routeTransport, spotRouterChannelIdForMesh),
|
|
42
50
|
fanoutClient: new channels_1.DefaultZLinkFanoutClient(this.options.registration, this.options.channelTransport),
|
|
43
51
|
spotPublisherClient: new channels_1.DefaultZLinkSpotPublisherClient(this.options.registration, this.options.spotPublisherTransport),
|
|
44
52
|
routedTransport: this.options.routeTransport,
|
|
45
53
|
addressTransport: this.options.addressTransport,
|
|
46
|
-
spotRouterChannelIdForMesh
|
|
47
|
-
channelMeshNameForChannel: (channelName) => {
|
|
48
|
-
const matches = [...this.options.registration.spotNodes.entries()]
|
|
49
|
-
.filter(([, node]) => Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, channelName))
|
|
50
|
-
.map(([meshName]) => meshName);
|
|
51
|
-
return matches.length === 1 ? matches[0] : undefined;
|
|
52
|
-
},
|
|
54
|
+
spotRouterChannelIdForMesh,
|
|
53
55
|
messageSerializers: this.options.registration.messageSerializers,
|
|
54
56
|
runtimeEventPublisher: this.options.runtimeEventPublisher,
|
|
55
57
|
detachedTaskRunner: this.options.detachedTaskRunner,
|
|
56
58
|
locationLifecycle: this.options.locationLifecycle(),
|
|
57
59
|
releaseInstanceAuthority: (meshName, spotId, objectGeneration) => this.options.releaseInstanceAuthority(meshName, String(spotId), objectGeneration),
|
|
58
60
|
beginInstanceIdleClosingAuthority: (meshName, spotId, onCommitted) => this.options.beginInstanceIdleClosingAuthority(meshName, String(spotId), onCommitted),
|
|
59
|
-
beginInstanceClosingAuthority: (meshName, spotId, onCommitted) =>
|
|
61
|
+
beginInstanceClosingAuthority: async (meshName, spotId, onCommitted, objectGeneration) => {
|
|
62
|
+
const authority = await this.options.beginInstanceClosingAuthority(meshName, String(spotId), onCommitted);
|
|
63
|
+
if (authority === undefined)
|
|
64
|
+
return undefined;
|
|
65
|
+
// A Close without Reincarnate ends this incarnation. The Instance authority
|
|
66
|
+
// release also forgets the node's Ready projection, so a request on a cached
|
|
67
|
+
// Ready route is refused instead of rematerializing the closed generation.
|
|
68
|
+
const release = () => this.options.releaseInstanceAuthority(meshName, String(spotId), objectGeneration);
|
|
69
|
+
if (authority.reincarnate === undefined)
|
|
70
|
+
return { release };
|
|
71
|
+
return {
|
|
72
|
+
release,
|
|
73
|
+
reincarnate: async (initialize) => {
|
|
74
|
+
const current = await authority.reincarnate(initialize);
|
|
75
|
+
const node = this.options.spotNodeRuntime()?.meshNode(meshName);
|
|
76
|
+
const route = {
|
|
77
|
+
targetSpotId: String(spotId),
|
|
78
|
+
targetNodeRid: String(current.allocation.descriptor.rid),
|
|
79
|
+
targetNodeGeneration: current.allocation.descriptorLifecycleGeneration,
|
|
80
|
+
objectGeneration: current.objectGeneration,
|
|
81
|
+
authorityOwnerGeneration: current.authorityOwnerGeneration,
|
|
82
|
+
ownerId: current.ownerId,
|
|
83
|
+
leaseGeneration: current.ownerLeaseGeneration,
|
|
84
|
+
storeVersion: current.storeVersion.value
|
|
85
|
+
};
|
|
86
|
+
node?.restoreSpotAuthority?.(String(spotId), 'instance_spot', current.stableType, current.objectGeneration, current.authorityOwnerGeneration);
|
|
87
|
+
node?.registerInstanceIntent?.(current.stableType, route);
|
|
88
|
+
node?.rememberSpotRoute?.({
|
|
89
|
+
spot: { spotId: String(spotId), generation: current.objectGeneration },
|
|
90
|
+
targetNodeRid: route.targetNodeRid,
|
|
91
|
+
targetNodeGeneration: route.targetNodeGeneration,
|
|
92
|
+
authorityOwnerGeneration: route.authorityOwnerGeneration,
|
|
93
|
+
ownerLeaseGeneration: route.leaseGeneration,
|
|
94
|
+
storeVersion: route.storeVersion
|
|
95
|
+
});
|
|
96
|
+
return current;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
},
|
|
60
100
|
beginUserClosingAuthority: (meshName, spotId, objectGeneration, onCommitted) => this.options.beginUserClosingAuthority(meshName, String(spotId), objectGeneration, onCommitted),
|
|
61
101
|
instanceSpotApplicationTargetProvider: (meshName, spotId) => this.options
|
|
62
102
|
.spotNodeRuntime()
|
|
@@ -137,16 +177,12 @@ class ZLinkSpotRuntimeOptionsFactory {
|
|
|
137
177
|
return (registration?.options?.relocationCoordinationMode ??
|
|
138
178
|
contracts_1.ZLinkSpotRelocationCoordinationMode.FrameworkManaged);
|
|
139
179
|
},
|
|
140
|
-
actorBindingGenerationObserver: (actorId, generation) => this.options
|
|
141
|
-
.actorManager()
|
|
142
|
-
?.getState(actorId)
|
|
143
|
-
?.setBoundSessionBindingGeneration(generation),
|
|
144
180
|
actorTransferRuntime,
|
|
145
181
|
boundSessionRuntime: this.options.boundSessionRelay.boundSessions,
|
|
146
182
|
actorHandoffRuntime: this.options.actorHandoff,
|
|
147
183
|
metrics: this.options.metrics,
|
|
148
184
|
admission: this.options.admission,
|
|
149
|
-
|
|
185
|
+
statefulExecution: this.options.statefulExecution,
|
|
150
186
|
closeErrorSink: this.options.runtimeOrPreStartErrorSink,
|
|
151
187
|
dispatchErrors: this.options.dispatchErrorReporter(this.options.runtimeOrPreStartErrorSink)
|
|
152
188
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type RoutingId, type SpotRef, type ZLinkSpotCreateResult } from '../../contracts';
|
|
2
|
+
import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
|
|
3
|
+
import type { ServiceDirectSpotRouteFence, ServiceUserSpotCloseRecord, ServiceUserSpotCreateRecord } from '../foundation/service-stateful-wire-codec';
|
|
2
4
|
import type { ZLinkAuthoritySnapshot, ZLinkLocationOwnerToken } from '../locations/internal-location-contracts';
|
|
3
5
|
import type { ZLinkAuthorityStore, ZLinkObjectCreationStore } from '../locations/internal-store-contracts';
|
|
4
6
|
import type { ZLinkLocalSpotCreateResult } from '../spots/spot-manager-internal-contracts';
|
|
5
|
-
import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
|
|
6
|
-
import type { ServiceUserSpotCloseRecord, ServiceUserSpotCreateRecord, ServiceDirectSpotRouteFence } from '../foundation/service-stateful-wire-codec';
|
|
7
7
|
export interface ZLinkUserSpotCreationCoordinatorOptions {
|
|
8
8
|
readonly store: ZLinkObjectCreationStore & ZLinkAuthorityStore;
|
|
9
9
|
readonly target: (request: Pick<ZLinkUserSpotCreationRequest, 'meshName' | 'stableType'>, signal?: AbortSignal, excludedNodeRids?: ReadonlySet<string>) => Promise<{
|
|
@@ -3,11 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ZLinkUserSpotCreationCoordinator = void 0;
|
|
4
4
|
exports.encodeLocationCreationContent = encodeLocationCreationContent;
|
|
5
5
|
exports.decodeLocationCreationContent = decodeLocationCreationContent;
|
|
6
|
-
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
7
6
|
const node_crypto_1 = require("node:crypto");
|
|
8
7
|
const contracts_1 = require("../../contracts");
|
|
9
8
|
const service_authority_payload_codec_1 = require("../foundation/service-authority-payload-codec");
|
|
9
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
10
10
|
const authority_key_codec_1 = require("../locations/authority-key-codec");
|
|
11
|
+
const DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS = 1_000;
|
|
12
|
+
const DEFAULT_USER_SPOT_POLL_INTERVAL_MS = 10;
|
|
11
13
|
/**
|
|
12
14
|
* Makes generic Location Store reservation the only visibility barrier for a
|
|
13
15
|
* User Spot. Only the reservation winner invokes application lifecycle code.
|
|
@@ -20,9 +22,10 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
20
22
|
this.options = options;
|
|
21
23
|
}
|
|
22
24
|
async getOrCreate(request, materialize, discard) {
|
|
23
|
-
const deadline = createDeadline(request.timeoutMs, request.signal);
|
|
24
|
-
const deadlineMs = performance.now() + request.timeoutMs;
|
|
25
25
|
const deadlineUnixMs = Date.now() + request.timeoutMs;
|
|
26
|
+
const remainingMs = Math.max(0, deadlineUnixMs - Date.now());
|
|
27
|
+
const deadline = createDeadline(remainingMs, request.signal);
|
|
28
|
+
const deadlineMs = performance.now() + remainingMs;
|
|
26
29
|
const signal = deadline.signal;
|
|
27
30
|
signal.throwIfAborted();
|
|
28
31
|
const sha256 = (0, node_crypto_1.createHash)('sha256').update(request.requestPayload).digest();
|
|
@@ -85,7 +88,7 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
85
88
|
count: 1
|
|
86
89
|
}
|
|
87
90
|
}
|
|
88
|
-
}, signal);
|
|
91
|
+
}, signal, BigInt(deadlineUnixMs));
|
|
89
92
|
}
|
|
90
93
|
catch (error) {
|
|
91
94
|
deadline.close();
|
|
@@ -323,7 +326,7 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
323
326
|
leaseGeneration: current.ownerLeaseGeneration
|
|
324
327
|
}
|
|
325
328
|
}
|
|
326
|
-
}, signal);
|
|
329
|
+
}, signal, record.deadlineUnixMs);
|
|
327
330
|
await discard?.(signal);
|
|
328
331
|
return {
|
|
329
332
|
result: { spot, state: local.state, reply: local.reply },
|
|
@@ -355,7 +358,7 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
355
358
|
ownerNodeRid: String(current.allocation.descriptor.rid),
|
|
356
359
|
ownerNodeGeneration: current.allocation.descriptorLifecycleGeneration
|
|
357
360
|
})
|
|
358
|
-
}, signal);
|
|
361
|
+
}, signal, record.deadlineUnixMs);
|
|
359
362
|
}
|
|
360
363
|
catch (error) {
|
|
361
364
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, 'User Spot Ready commit Store operation failed.', false, error);
|
|
@@ -376,7 +379,7 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
376
379
|
}
|
|
377
380
|
catch (error) {
|
|
378
381
|
local?.publication?.abort();
|
|
379
|
-
const cleanupDeadline = createDeadline(this.options.cleanupTimeoutMs ??
|
|
382
|
+
const cleanupDeadline = createDeadline(this.options.cleanupTimeoutMs ?? DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS);
|
|
380
383
|
const cleanupSignal = cleanupDeadline.signal;
|
|
381
384
|
const cleanup = await Promise.allSettled([
|
|
382
385
|
waitForAbort(this.options.store.abort({
|
|
@@ -474,7 +477,7 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
474
477
|
if (current.kind === 'snapshot' && current.allocation.state === 'active') {
|
|
475
478
|
return spotRef(current, request);
|
|
476
479
|
}
|
|
477
|
-
await wait(this.options.pollIntervalMs ??
|
|
480
|
+
await wait(this.options.pollIntervalMs ?? DEFAULT_USER_SPOT_POLL_INTERVAL_MS, signal);
|
|
478
481
|
}
|
|
479
482
|
}
|
|
480
483
|
async remoteCreate(request, snapshot, targetNodeRid, targetNodeGeneration, deadlineUnixMs, deadlineMs) {
|
|
@@ -2,8 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkAggregateInventoryStore = void 0;
|
|
4
4
|
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const actor_join_recovery_codec_1 = require("../foundation/actor-join-recovery-codec");
|
|
5
6
|
const in_memory_provider_location_store_1 = require("./in-memory-provider-location-store");
|
|
6
|
-
const
|
|
7
|
+
const INVENTORY_PAGE_KIND = 'aggregate-inventory-page-v1';
|
|
8
|
+
const INVENTORY_ROOT_KIND = 'aggregate-inventory-root-v1';
|
|
9
|
+
const PREFIX = `${in_memory_provider_location_store_1.PROVIDER_STORAGE_NAMESPACE_PREFIX}aggregate-inventory:`;
|
|
7
10
|
const MAX_PAGE_ENTRIES = 1_024;
|
|
8
11
|
const MAX_PAGE_BYTES = 1_024 * 1_024;
|
|
9
12
|
const MAX_TREE_LEVELS = 32;
|
|
@@ -135,8 +138,8 @@ function buildTree(request) {
|
|
|
135
138
|
if (request.participants.length < 1) {
|
|
136
139
|
throw new RangeError('Aggregate inventory requires at least one participant.');
|
|
137
140
|
}
|
|
138
|
-
if (request.inventoryDigest.byteLength !==
|
|
139
|
-
throw new TypeError(
|
|
141
|
+
if (request.inventoryDigest.byteLength !== actor_join_recovery_codec_1.SHA256_DIGEST_BYTES) {
|
|
142
|
+
throw new TypeError(`Aggregate inventory digest must contain ${actor_join_recovery_codec_1.SHA256_DIGEST_BYTES} bytes.`);
|
|
140
143
|
}
|
|
141
144
|
const entries = request.participants.map((participant, index) => ({
|
|
142
145
|
index,
|
|
@@ -162,7 +165,7 @@ function buildTree(request) {
|
|
|
162
165
|
MAX_PAGE_BYTES) {
|
|
163
166
|
level++;
|
|
164
167
|
if (level >= MAX_TREE_LEVELS) {
|
|
165
|
-
throw new RangeError(
|
|
168
|
+
throw new RangeError(`Aggregate inventory tree exceeds ${MAX_TREE_LEVELS} levels.`);
|
|
166
169
|
}
|
|
167
170
|
references = packIndexPages(level, references, pages);
|
|
168
171
|
}
|
|
@@ -180,7 +183,7 @@ function packLeafPages(entries, pages) {
|
|
|
180
183
|
let bytes;
|
|
181
184
|
do {
|
|
182
185
|
page = {
|
|
183
|
-
kind:
|
|
186
|
+
kind: INVENTORY_PAGE_KIND,
|
|
184
187
|
level: 0,
|
|
185
188
|
index: references.length,
|
|
186
189
|
startIndex: offset,
|
|
@@ -211,7 +214,7 @@ function packIndexPages(level, children, pages) {
|
|
|
211
214
|
do {
|
|
212
215
|
const selected = children.slice(offset, offset + count);
|
|
213
216
|
page = {
|
|
214
|
-
kind:
|
|
217
|
+
kind: INVENTORY_PAGE_KIND,
|
|
215
218
|
level,
|
|
216
219
|
index: references.length,
|
|
217
220
|
startIndex: selected[0].startIndex,
|
|
@@ -240,7 +243,7 @@ function rootCandidate(totalCount, topLevel, topPages, pages, digest, declaredDi
|
|
|
240
243
|
pageCountsByLevel[page.level]++;
|
|
241
244
|
}
|
|
242
245
|
return {
|
|
243
|
-
kind:
|
|
246
|
+
kind: INVENTORY_ROOT_KIND,
|
|
244
247
|
totalCount,
|
|
245
248
|
digest,
|
|
246
249
|
declaredDigest,
|
|
@@ -325,7 +328,7 @@ function decodeRoot(bytes) {
|
|
|
325
328
|
if (value === null ||
|
|
326
329
|
typeof value !== 'object' ||
|
|
327
330
|
!('kind' in value) ||
|
|
328
|
-
value.kind !==
|
|
331
|
+
value.kind !== INVENTORY_ROOT_KIND) {
|
|
329
332
|
throw new Error('Invalid inventory root.');
|
|
330
333
|
}
|
|
331
334
|
return value;
|
|
@@ -335,7 +338,7 @@ function decodePage(bytes) {
|
|
|
335
338
|
if (value === null ||
|
|
336
339
|
typeof value !== 'object' ||
|
|
337
340
|
!('kind' in value) ||
|
|
338
|
-
value.kind !==
|
|
341
|
+
value.kind !== INVENTORY_PAGE_KIND ||
|
|
339
342
|
!('entries' in value) ||
|
|
340
343
|
!Array.isArray(value.entries) ||
|
|
341
344
|
!('children' in value) ||
|
|
@@ -379,7 +382,7 @@ function isSha256(value) {
|
|
|
379
382
|
}
|
|
380
383
|
function sameHash(expected, actual) {
|
|
381
384
|
return (isSha256(expected) &&
|
|
382
|
-
actual.byteLength ===
|
|
385
|
+
actual.byteLength === actor_join_recovery_codec_1.SHA256_DIGEST_BYTES &&
|
|
383
386
|
(0, node_crypto_1.timingSafeEqual)(Buffer.from(expected, 'hex'), Buffer.from(actual)));
|
|
384
387
|
}
|
|
385
388
|
function dataLost(fence, reason) {
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.encodeAuthorityKey = encodeAuthorityKey;
|
|
4
4
|
exports.decodeAuthorityKey = decodeAuthorityKey;
|
|
5
|
+
const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
|
|
5
6
|
function encodeAuthorityKey(kind, globalId) {
|
|
6
7
|
const bytes = Buffer.from(globalId);
|
|
7
|
-
if (bytes.byteLength < 1 || bytes.byteLength >
|
|
8
|
-
throw new RangeError(
|
|
8
|
+
if (bytes.byteLength < 1 || bytes.byteLength > CoreTypes_1.ZLINK_MAX_IDENTITY_TEXT_BYTES) {
|
|
9
|
+
throw new RangeError(`Authority identity must contain 1..${CoreTypes_1.ZLINK_MAX_IDENTITY_TEXT_BYTES} UTF-8 bytes.`);
|
|
9
10
|
}
|
|
10
11
|
const discriminator = kind === 'actor' ? 'a' : 's';
|
|
11
12
|
return {
|
|
@@ -20,7 +21,7 @@ function decodeAuthorityKey(key) {
|
|
|
20
21
|
if (match === null)
|
|
21
22
|
throw new TypeError('Authority key is not canonical.');
|
|
22
23
|
const declaredLength = Number(match[2]);
|
|
23
|
-
if (declaredLength >
|
|
24
|
+
if (declaredLength > CoreTypes_1.ZLINK_MAX_IDENTITY_TEXT_BYTES)
|
|
24
25
|
throw new TypeError('Authority key identity exceeds the byte limit.');
|
|
25
26
|
const encoded = match[3];
|
|
26
27
|
const bytes = [];
|