@zlink-systems/framework 0.20.0 → 0.22.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/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +43 -33
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +244 -227
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +208 -219
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +0 -1
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +138 -130
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +73 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +215 -197
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/flow-context.ts +12 -3
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +95 -76
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +593 -563
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -1,29 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ZLinkFrameworkInternalErrorKind,
|
|
3
|
+
createInternalFrameworkException,
|
|
4
|
+
wireReplyFailureException
|
|
5
|
+
} from '../framework-errors-internal';
|
|
2
6
|
import { createHash } from 'node:crypto';
|
|
3
|
-
import type {
|
|
4
|
-
RoutingId,
|
|
5
|
-
SpotRef,
|
|
6
|
-
ZLinkSpotCreateResult
|
|
7
|
-
} from '../../contracts';
|
|
7
|
+
import type { RoutingId, SpotRef, ZLinkSpotCreateResult } from '../../contracts';
|
|
8
8
|
import type {
|
|
9
9
|
ZLinkAuthoritySnapshot,
|
|
10
10
|
ZLinkLocationOwnerToken,
|
|
11
11
|
ZLinkObjectReserveResult
|
|
12
12
|
} from '../locations/internal-location-contracts';
|
|
13
|
-
import type {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} from '../../contracts';
|
|
13
|
+
import type {
|
|
14
|
+
ZLinkAuthorityStore,
|
|
15
|
+
ZLinkObjectCreationStore
|
|
16
|
+
} from '../locations/internal-store-contracts';
|
|
17
|
+
import { ZLinkFrameworkException, ZLinkSpotCreateState } from '../../contracts';
|
|
18
18
|
import {
|
|
19
19
|
decodeServiceReadySpotAuthority,
|
|
20
20
|
encodeServiceUserSpotAuthorityPayload
|
|
21
21
|
} from '../foundation/service-authority-payload-codec';
|
|
22
22
|
import { encodeAuthorityKey } from '../locations/authority-key-codec';
|
|
23
23
|
import type { ZLinkLocalSpotCreateResult } from '../spots/spot-manager-internal-contracts';
|
|
24
|
-
import type {
|
|
25
|
-
ServiceUserSpotOperationResult
|
|
26
|
-
} from '../foundation/service-stateful-runtime';
|
|
24
|
+
import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
|
|
27
25
|
import type {
|
|
28
26
|
ServiceUserSpotCloseRecord,
|
|
29
27
|
ServiceUserSpotCreateRecord,
|
|
@@ -32,16 +30,20 @@ import type {
|
|
|
32
30
|
|
|
33
31
|
export interface ZLinkUserSpotCreationCoordinatorOptions {
|
|
34
32
|
readonly store: ZLinkObjectCreationStore & ZLinkAuthorityStore;
|
|
35
|
-
readonly target: (
|
|
36
|
-
ZLinkUserSpotCreationRequest,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
33
|
+
readonly target: (
|
|
34
|
+
request: Pick<ZLinkUserSpotCreationRequest, 'meshName' | 'stableType'>,
|
|
35
|
+
signal?: AbortSignal,
|
|
36
|
+
excludedNodeRids?: ReadonlySet<string>
|
|
37
|
+
) => Promise<
|
|
38
|
+
| {
|
|
39
|
+
readonly meshName: string;
|
|
40
|
+
readonly nodeRid: RoutingId;
|
|
41
|
+
readonly nodeGeneration: bigint;
|
|
42
|
+
readonly owner: ZLinkLocationOwnerToken;
|
|
43
|
+
readonly isLocal: boolean;
|
|
44
|
+
}
|
|
45
|
+
| undefined
|
|
46
|
+
>;
|
|
45
47
|
readonly pollIntervalMs?: number;
|
|
46
48
|
readonly cleanupTimeoutMs?: number;
|
|
47
49
|
readonly remoteCreate?: (
|
|
@@ -83,20 +85,27 @@ export interface ZLinkUserSpotCloseTarget {
|
|
|
83
85
|
*/
|
|
84
86
|
export class ZLinkUserSpotCreationCoordinator {
|
|
85
87
|
private readonly localCreations = new Map<string, Promise<ZLinkUserSpotCreationResult>>();
|
|
86
|
-
private readonly remoteCreations = new Map<
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
private readonly remoteCreations = new Map<
|
|
89
|
+
string,
|
|
90
|
+
{
|
|
91
|
+
readonly fingerprint: string;
|
|
92
|
+
readonly result: Promise<ZLinkUserSpotCreationResult>;
|
|
93
|
+
}
|
|
94
|
+
>();
|
|
90
95
|
|
|
91
96
|
constructor(private readonly options: ZLinkUserSpotCreationCoordinatorOptions) {}
|
|
92
97
|
|
|
93
98
|
async getOrCreate(
|
|
94
99
|
request: ZLinkUserSpotCreationRequest,
|
|
95
|
-
materialize: (
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
+
materialize: (
|
|
101
|
+
target: {
|
|
102
|
+
readonly meshName: string;
|
|
103
|
+
readonly nodeRid: RoutingId;
|
|
104
|
+
readonly isLocal: boolean;
|
|
105
|
+
},
|
|
106
|
+
authority: ZLinkAuthoritySnapshot,
|
|
107
|
+
signal: AbortSignal
|
|
108
|
+
) => Promise<ZLinkLocalSpotCreateResult>,
|
|
100
109
|
discard?: (signal?: AbortSignal) => Promise<void>
|
|
101
110
|
): Promise<ZLinkUserSpotCreationResult> {
|
|
102
111
|
const deadline = createDeadline(request.timeoutMs, request.signal);
|
|
@@ -147,35 +156,38 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
147
156
|
owner
|
|
148
157
|
};
|
|
149
158
|
try {
|
|
150
|
-
reserved = await this.options.store.reserve(
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
spotId: String(request.spotId),
|
|
163
|
-
ownerId: owner.ownerId,
|
|
164
|
-
ownerLeaseGeneration: owner.leaseGeneration,
|
|
165
|
-
ownerMeshName: target.meshName,
|
|
166
|
-
ownerNodeRid: String(target.nodeRid),
|
|
167
|
-
ownerNodeGeneration: target.nodeGeneration
|
|
168
|
-
}),
|
|
169
|
-
capacity: {
|
|
170
|
-
actors: 0,
|
|
171
|
-
spots: 1,
|
|
172
|
-
spotType: {
|
|
173
|
-
objectKind: 'user_spot',
|
|
159
|
+
reserved = await this.options.store.reserve(
|
|
160
|
+
{
|
|
161
|
+
key: { kind: 'user_spot', globalId: String(request.spotId) },
|
|
162
|
+
intent: {
|
|
163
|
+
stableType: request.stableType,
|
|
164
|
+
requestContentReference: contentReference,
|
|
165
|
+
requestSha256: sha256,
|
|
166
|
+
requestEncodedSize: BigInt(request.requestPayload.byteLength)
|
|
167
|
+
},
|
|
168
|
+
target: authorityTarget,
|
|
169
|
+
creatingPayload: encodeServiceUserSpotAuthorityPayload({
|
|
170
|
+
state: 'creating',
|
|
174
171
|
stableType: request.stableType,
|
|
175
|
-
|
|
172
|
+
spotId: String(request.spotId),
|
|
173
|
+
ownerId: owner.ownerId,
|
|
174
|
+
ownerLeaseGeneration: owner.leaseGeneration,
|
|
175
|
+
ownerMeshName: target.meshName,
|
|
176
|
+
ownerNodeRid: String(target.nodeRid),
|
|
177
|
+
ownerNodeGeneration: target.nodeGeneration
|
|
178
|
+
}),
|
|
179
|
+
capacity: {
|
|
180
|
+
actors: 0,
|
|
181
|
+
spots: 1,
|
|
182
|
+
spotType: {
|
|
183
|
+
objectKind: 'user_spot',
|
|
184
|
+
stableType: request.stableType,
|
|
185
|
+
count: 1
|
|
186
|
+
}
|
|
176
187
|
}
|
|
177
|
-
}
|
|
178
|
-
|
|
188
|
+
},
|
|
189
|
+
signal
|
|
190
|
+
);
|
|
179
191
|
} catch (error) {
|
|
180
192
|
deadline.close();
|
|
181
193
|
if (error instanceof ZLinkFrameworkException) throw error;
|
|
@@ -190,21 +202,14 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
190
202
|
excludedNodeRids.add(String(target.nodeRid));
|
|
191
203
|
}
|
|
192
204
|
if (
|
|
193
|
-
reserved.kind === 'alreadyExists'
|
|
194
|
-
|
|
195
|
-
reserved.kind === '
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
&& reserved.current.allocation.stableType === request.stableType
|
|
199
|
-
)
|
|
205
|
+
reserved.kind === 'alreadyExists' ||
|
|
206
|
+
(reserved.kind === 'conflict' &&
|
|
207
|
+
reserved.current.kind === 'snapshot' &&
|
|
208
|
+
reserved.current.allocation.objectKind === 'user_spot' &&
|
|
209
|
+
reserved.current.allocation.stableType === request.stableType)
|
|
200
210
|
) {
|
|
201
|
-
const current = reserved.kind === 'alreadyExists'
|
|
202
|
-
|
|
203
|
-
: reserved.current;
|
|
204
|
-
if (
|
|
205
|
-
current.kind === 'snapshot'
|
|
206
|
-
&& current.allocation.state === 'active'
|
|
207
|
-
) {
|
|
211
|
+
const current = reserved.kind === 'alreadyExists' ? reserved.current : reserved.current;
|
|
212
|
+
if (current.kind === 'snapshot' && current.allocation.state === 'active') {
|
|
208
213
|
if (request.generatedIdentity === true) {
|
|
209
214
|
deadline.close();
|
|
210
215
|
throw spotIdConflict(request.spotId);
|
|
@@ -216,10 +221,7 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
216
221
|
spot
|
|
217
222
|
};
|
|
218
223
|
}
|
|
219
|
-
if (
|
|
220
|
-
current.kind !== 'snapshot'
|
|
221
|
-
|| !sameCreationTarget(current, authorityTarget)
|
|
222
|
-
) {
|
|
224
|
+
if (current.kind !== 'snapshot' || !sameCreationTarget(current, authorityTarget)) {
|
|
223
225
|
deadline.close();
|
|
224
226
|
if (request.generatedIdentity === true) {
|
|
225
227
|
throw spotIdConflict(request.spotId);
|
|
@@ -245,9 +247,8 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
245
247
|
}
|
|
246
248
|
if (current.allocation.state === 'reserved' && target.isLocal) {
|
|
247
249
|
const pending = current.pendingCreation;
|
|
248
|
-
const admitted =
|
|
249
|
-
? undefined
|
|
250
|
-
: this.localCreations.get(pending.reservationId);
|
|
250
|
+
const admitted =
|
|
251
|
+
pending === undefined ? undefined : this.localCreations.get(pending.reservationId);
|
|
251
252
|
if (admitted === undefined) {
|
|
252
253
|
try {
|
|
253
254
|
const spot = await this.awaitReady(request, signal);
|
|
@@ -312,8 +313,7 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
312
313
|
target.nodeGeneration,
|
|
313
314
|
deadlineUnixMs
|
|
314
315
|
),
|
|
315
|
-
(_payload, authority, localSignal) =>
|
|
316
|
-
materialize(target, authority, localSignal),
|
|
316
|
+
(_payload, authority, localSignal) => materialize(target, authority, localSignal),
|
|
317
317
|
discard,
|
|
318
318
|
signal
|
|
319
319
|
)
|
|
@@ -405,8 +405,8 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
405
405
|
timeoutMs: 1
|
|
406
406
|
});
|
|
407
407
|
if (
|
|
408
|
-
String(current.allocation.descriptor.rid) !== String(spot.nodeRid)
|
|
409
|
-
|
|
408
|
+
String(current.allocation.descriptor.rid) !== String(spot.nodeRid) ||
|
|
409
|
+
current.allocation.descriptor.meshName !== spot.meshName
|
|
410
410
|
) {
|
|
411
411
|
throw createInternalFrameworkException(
|
|
412
412
|
ZLinkFrameworkInternalErrorKind.SpotGenerationStale,
|
|
@@ -439,11 +439,13 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
439
439
|
const result = this.materializeRemoteCreate(record, materialize, discard, signal);
|
|
440
440
|
admitted = { fingerprint, result };
|
|
441
441
|
this.remoteCreations.set(key, admitted);
|
|
442
|
-
void result
|
|
443
|
-
|
|
444
|
-
this.remoteCreations.
|
|
445
|
-
|
|
446
|
-
|
|
442
|
+
void result
|
|
443
|
+
.finally(() => {
|
|
444
|
+
if (this.remoteCreations.get(key)?.result === result) {
|
|
445
|
+
this.remoteCreations.delete(key);
|
|
446
|
+
}
|
|
447
|
+
})
|
|
448
|
+
.catch(() => undefined);
|
|
447
449
|
}
|
|
448
450
|
return await admitted.result;
|
|
449
451
|
}
|
|
@@ -463,11 +465,13 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
463
465
|
if (admitted === undefined) {
|
|
464
466
|
admitted = this.materializeRemoteCreate(record, materialize, discard, signal);
|
|
465
467
|
this.localCreations.set(key, admitted);
|
|
466
|
-
void admitted
|
|
467
|
-
|
|
468
|
-
this.localCreations.
|
|
469
|
-
|
|
470
|
-
|
|
468
|
+
void admitted
|
|
469
|
+
.finally(() => {
|
|
470
|
+
if (this.localCreations.get(key) === admitted) {
|
|
471
|
+
this.localCreations.delete(key);
|
|
472
|
+
}
|
|
473
|
+
})
|
|
474
|
+
.catch(() => undefined);
|
|
471
475
|
}
|
|
472
476
|
return await admitted;
|
|
473
477
|
}
|
|
@@ -487,21 +491,20 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
487
491
|
const exactIdentity =
|
|
488
492
|
current.kind !== 'snapshot'
|
|
489
493
|
? false
|
|
490
|
-
: current.allocation.objectKind === 'user_spot'
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
=== record.reservation.pendingCapacityDelta;
|
|
494
|
+
: current.allocation.objectKind === 'user_spot' &&
|
|
495
|
+
current.allocation.stableType === record.stableType &&
|
|
496
|
+
current.objectGeneration === record.reservation.objectGeneration &&
|
|
497
|
+
current.authorityOwnerGeneration === record.reservation.authorityOwnerGeneration &&
|
|
498
|
+
String(current.allocation.descriptor.rid) === record.reservation.targetNodeRid &&
|
|
499
|
+
current.allocation.descriptorLifecycleGeneration ===
|
|
500
|
+
record.reservation.targetNodeGeneration &&
|
|
501
|
+
current.ownerId === record.reservation.targetOwnerId &&
|
|
502
|
+
current.ownerLeaseGeneration === record.reservation.targetOwnerLeaseGeneration &&
|
|
503
|
+
current.allocation.capacity.actors === 0 &&
|
|
504
|
+
current.allocation.capacity.spots === record.reservation.pendingCapacityDelta &&
|
|
505
|
+
current.allocation.capacity.spotType?.objectKind === 'user_spot' &&
|
|
506
|
+
current.allocation.capacity.spotType.stableType === record.stableType &&
|
|
507
|
+
current.allocation.capacity.spotType.count === record.reservation.pendingCapacityDelta;
|
|
505
508
|
if (!exactIdentity || current.kind !== 'snapshot') {
|
|
506
509
|
throw createInternalFrameworkException(
|
|
507
510
|
ZLinkFrameworkInternalErrorKind.SpotMoving,
|
|
@@ -531,10 +534,7 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
531
534
|
);
|
|
532
535
|
}
|
|
533
536
|
const pending = current.pendingCreation;
|
|
534
|
-
if (
|
|
535
|
-
pending === undefined
|
|
536
|
-
|| pending.reservationId !== record.reservation.reservationId
|
|
537
|
-
) {
|
|
537
|
+
if (pending === undefined || pending.reservationId !== record.reservation.reservationId) {
|
|
538
538
|
throw createInternalFrameworkException(
|
|
539
539
|
ZLinkFrameworkInternalErrorKind.RequestFailed,
|
|
540
540
|
'Remote User Spot Pending creation projection is missing.'
|
|
@@ -547,27 +547,26 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
547
547
|
);
|
|
548
548
|
let local: ZLinkLocalSpotCreateResult | undefined;
|
|
549
549
|
try {
|
|
550
|
-
local = await materialize(
|
|
551
|
-
requestPayload,
|
|
552
|
-
current,
|
|
553
|
-
signal ?? new AbortController().signal
|
|
554
|
-
);
|
|
550
|
+
local = await materialize(requestPayload, current, signal ?? new AbortController().signal);
|
|
555
551
|
if (local.state === ZLinkSpotCreateState.Rejected) {
|
|
556
552
|
local.publication?.abort();
|
|
557
|
-
await this.options.store.abort(
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
553
|
+
await this.options.store.abort(
|
|
554
|
+
{
|
|
555
|
+
key: { kind: 'user_spot', globalId: record.spotId },
|
|
556
|
+
reservationId: pending.reservationId,
|
|
557
|
+
expectedStoreVersion: current.storeVersion.value,
|
|
558
|
+
target: {
|
|
559
|
+
meshName: current.allocation.descriptor.meshName,
|
|
560
|
+
nodeRid: current.allocation.descriptor.rid,
|
|
561
|
+
nodeLifecycleGeneration: current.allocation.descriptorLifecycleGeneration,
|
|
562
|
+
owner: {
|
|
563
|
+
ownerId: current.ownerId,
|
|
564
|
+
leaseGeneration: current.ownerLeaseGeneration
|
|
565
|
+
}
|
|
568
566
|
}
|
|
569
|
-
}
|
|
570
|
-
|
|
567
|
+
},
|
|
568
|
+
signal
|
|
569
|
+
);
|
|
571
570
|
await discard?.(signal);
|
|
572
571
|
return {
|
|
573
572
|
result: { spot, state: local.state, reply: local.reply },
|
|
@@ -576,30 +575,33 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
576
575
|
}
|
|
577
576
|
let committed;
|
|
578
577
|
try {
|
|
579
|
-
committed = await this.options.store.commit(
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
578
|
+
committed = await this.options.store.commit(
|
|
579
|
+
{
|
|
580
|
+
key: { kind: 'user_spot', globalId: record.spotId },
|
|
581
|
+
reservationId: pending.reservationId,
|
|
582
|
+
expectedStoreVersion: current.storeVersion.value,
|
|
583
|
+
target: {
|
|
584
|
+
meshName: current.allocation.descriptor.meshName,
|
|
585
|
+
nodeRid: current.allocation.descriptor.rid,
|
|
586
|
+
nodeLifecycleGeneration: current.allocation.descriptorLifecycleGeneration,
|
|
587
|
+
owner: {
|
|
588
|
+
ownerId: current.ownerId,
|
|
589
|
+
leaseGeneration: current.ownerLeaseGeneration
|
|
590
|
+
}
|
|
591
|
+
},
|
|
592
|
+
readyPayload: encodeServiceUserSpotAuthorityPayload({
|
|
593
|
+
state: 'ready',
|
|
594
|
+
stableType: record.stableType,
|
|
595
|
+
spotId: record.spotId,
|
|
588
596
|
ownerId: current.ownerId,
|
|
589
|
-
|
|
590
|
-
|
|
597
|
+
ownerLeaseGeneration: current.ownerLeaseGeneration,
|
|
598
|
+
ownerMeshName: current.allocation.descriptor.meshName,
|
|
599
|
+
ownerNodeRid: String(current.allocation.descriptor.rid),
|
|
600
|
+
ownerNodeGeneration: current.allocation.descriptorLifecycleGeneration
|
|
601
|
+
})
|
|
591
602
|
},
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
stableType: record.stableType,
|
|
595
|
-
spotId: record.spotId,
|
|
596
|
-
ownerId: current.ownerId,
|
|
597
|
-
ownerLeaseGeneration: current.ownerLeaseGeneration,
|
|
598
|
-
ownerMeshName: current.allocation.descriptor.meshName,
|
|
599
|
-
ownerNodeRid: String(current.allocation.descriptor.rid),
|
|
600
|
-
ownerNodeGeneration: current.allocation.descriptorLifecycleGeneration
|
|
601
|
-
})
|
|
602
|
-
}, signal);
|
|
603
|
+
signal
|
|
604
|
+
);
|
|
603
605
|
} catch (error) {
|
|
604
606
|
throw createInternalFrameworkException(
|
|
605
607
|
ZLinkFrameworkInternalErrorKind.RequestFailed,
|
|
@@ -632,26 +634,32 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
632
634
|
const cleanupDeadline = createDeadline(this.options.cleanupTimeoutMs ?? 1_000);
|
|
633
635
|
const cleanupSignal = cleanupDeadline.signal;
|
|
634
636
|
const cleanup = await Promise.allSettled([
|
|
635
|
-
waitForAbort(
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
637
|
+
waitForAbort(
|
|
638
|
+
this.options.store.abort(
|
|
639
|
+
{
|
|
640
|
+
key: { kind: 'user_spot', globalId: record.spotId },
|
|
641
|
+
reservationId: pending.reservationId,
|
|
642
|
+
expectedStoreVersion: current.storeVersion.value,
|
|
643
|
+
target: {
|
|
644
|
+
meshName: current.allocation.descriptor.meshName,
|
|
645
|
+
nodeRid: current.allocation.descriptor.rid,
|
|
646
|
+
nodeLifecycleGeneration: current.allocation.descriptorLifecycleGeneration,
|
|
647
|
+
owner: {
|
|
648
|
+
ownerId: current.ownerId,
|
|
649
|
+
leaseGeneration: current.ownerLeaseGeneration
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
},
|
|
653
|
+
cleanupSignal
|
|
654
|
+
),
|
|
655
|
+
cleanupSignal
|
|
656
|
+
),
|
|
649
657
|
waitForAbort(discard?.(cleanupSignal) ?? Promise.resolve(), cleanupSignal)
|
|
650
658
|
]);
|
|
651
659
|
cleanupDeadline.close();
|
|
652
660
|
const cleanupErrors = cleanup
|
|
653
661
|
.filter((item): item is PromiseRejectedResult => item.status === 'rejected')
|
|
654
|
-
.map(item => item.reason);
|
|
662
|
+
.map((item) => item.reason);
|
|
655
663
|
if (cleanupErrors.length > 0) {
|
|
656
664
|
throw new AggregateError(
|
|
657
665
|
[error, ...cleanupErrors],
|
|
@@ -670,22 +678,19 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
670
678
|
const key = encodeAuthorityKey('user_spot', record.target.spotId);
|
|
671
679
|
const current = await this.options.store.readAuthority(key, signal);
|
|
672
680
|
if (current.kind === 'missing') return false;
|
|
673
|
-
if (
|
|
674
|
-
current.objectGeneration !== record.target.objectGeneration
|
|
675
|
-
) {
|
|
681
|
+
if (current.objectGeneration !== record.target.objectGeneration) {
|
|
676
682
|
throw createInternalFrameworkException(
|
|
677
683
|
ZLinkFrameworkInternalErrorKind.SpotGenerationStale,
|
|
678
684
|
`User Spot '${record.target.spotId}' generation is stale.`
|
|
679
685
|
);
|
|
680
686
|
}
|
|
681
687
|
if (
|
|
682
|
-
current.authorityOwnerGeneration !== record.target.authorityOwnerGeneration
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|| current.allocation.state !== 'active'
|
|
688
|
+
current.authorityOwnerGeneration !== record.target.authorityOwnerGeneration ||
|
|
689
|
+
current.storeVersion.value !== record.target.expectedStoreVersion ||
|
|
690
|
+
String(current.allocation.descriptor.rid) !== record.target.targetNodeRid ||
|
|
691
|
+
current.allocation.descriptorLifecycleGeneration !== record.target.targetNodeGeneration ||
|
|
692
|
+
current.allocation.objectKind !== 'user_spot' ||
|
|
693
|
+
current.allocation.state !== 'active'
|
|
689
694
|
) {
|
|
690
695
|
throw createInternalFrameworkException(
|
|
691
696
|
ZLinkFrameworkInternalErrorKind.SpotMoving,
|
|
@@ -743,9 +748,9 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
743
748
|
): Promise<ZLinkAuthoritySnapshot> {
|
|
744
749
|
const ready = decodeServiceReadySpotAuthority(current.payload);
|
|
745
750
|
if (
|
|
746
|
-
ready?.kind !== 'user_spot'
|
|
747
|
-
|
|
748
|
-
|
|
751
|
+
ready?.kind !== 'user_spot' ||
|
|
752
|
+
ready.spotId !== spotId ||
|
|
753
|
+
ready.stableType !== current.allocation.stableType
|
|
749
754
|
) {
|
|
750
755
|
throw createInternalFrameworkException(
|
|
751
756
|
ZLinkFrameworkInternalErrorKind.SpotMoving,
|
|
@@ -861,10 +866,7 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
861
866
|
},
|
|
862
867
|
timeoutMs
|
|
863
868
|
);
|
|
864
|
-
if (
|
|
865
|
-
result.terminalResult !== 0
|
|
866
|
-
|| result.tail?.kind !== 'userSpotCreate'
|
|
867
|
-
) {
|
|
869
|
+
if (result.terminalResult !== 0 || result.tail?.kind !== 'userSpotCreate') {
|
|
868
870
|
throw remoteUserSpotFailure(
|
|
869
871
|
result.terminalResult,
|
|
870
872
|
result.failureCode,
|
|
@@ -877,11 +879,12 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
877
879
|
meshName: snapshot.allocation.descriptor.meshName,
|
|
878
880
|
nodeRid: targetNodeRid
|
|
879
881
|
};
|
|
880
|
-
const state =
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
882
|
+
const state =
|
|
883
|
+
result.tail.createResult === 'existing'
|
|
884
|
+
? ZLinkSpotCreateState.Existing
|
|
885
|
+
: result.tail.createResult === 'created'
|
|
886
|
+
? ZLinkSpotCreateState.Created
|
|
887
|
+
: ZLinkSpotCreateState.Rejected;
|
|
885
888
|
return {
|
|
886
889
|
result: {
|
|
887
890
|
spot,
|
|
@@ -889,14 +892,14 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
889
892
|
...(result.payload === undefined
|
|
890
893
|
? {}
|
|
891
894
|
: {
|
|
892
|
-
reply:
|
|
893
|
-
|
|
895
|
+
reply:
|
|
896
|
+
this.options.decodeRemoteReply?.(result.payload.payload) ??
|
|
897
|
+
Buffer.from(result.payload.payload)
|
|
894
898
|
})
|
|
895
899
|
},
|
|
896
900
|
spot
|
|
897
901
|
};
|
|
898
902
|
}
|
|
899
|
-
|
|
900
903
|
}
|
|
901
904
|
|
|
902
905
|
function spotIdConflict(spotId: RoutingId): ZLinkFrameworkException {
|
|
@@ -930,18 +933,12 @@ function spotRef(
|
|
|
930
933
|
): SpotRef {
|
|
931
934
|
const decoded = decodeServiceReadySpotAuthority(snapshot.payload);
|
|
932
935
|
if (
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
: (
|
|
940
|
-
decoded?.kind !== 'user_spot'
|
|
941
|
-
|| decoded.stableType !== request.stableType
|
|
942
|
-
|| decoded.spotId !== String(request.spotId)
|
|
943
|
-
)
|
|
944
|
-
)
|
|
936
|
+
allowPending
|
|
937
|
+
? snapshot.allocation.objectKind !== 'user_spot' ||
|
|
938
|
+
snapshot.allocation.stableType !== request.stableType
|
|
939
|
+
: decoded?.kind !== 'user_spot' ||
|
|
940
|
+
decoded.stableType !== request.stableType ||
|
|
941
|
+
decoded.spotId !== String(request.spotId)
|
|
945
942
|
) {
|
|
946
943
|
throw new Error('User Spot Ready authority does not match the requested identity.');
|
|
947
944
|
}
|
|
@@ -1037,11 +1034,13 @@ function sameCreationTarget(
|
|
|
1037
1034
|
snapshot: ZLinkAuthoritySnapshot,
|
|
1038
1035
|
target: Parameters<ZLinkObjectCreationStore['reserve']>[0]['target']
|
|
1039
1036
|
): boolean {
|
|
1040
|
-
return
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1037
|
+
return (
|
|
1038
|
+
snapshot.allocation.descriptor.meshName === target.meshName &&
|
|
1039
|
+
String(snapshot.allocation.descriptor.rid) === String(target.nodeRid) &&
|
|
1040
|
+
snapshot.allocation.descriptorLifecycleGeneration === target.nodeLifecycleGeneration &&
|
|
1041
|
+
snapshot.ownerId === target.owner.ownerId &&
|
|
1042
|
+
snapshot.ownerLeaseGeneration === target.owner.leaseGeneration
|
|
1043
|
+
);
|
|
1045
1044
|
}
|
|
1046
1045
|
|
|
1047
1046
|
function remoteCreationFingerprint(record: ServiceUserSpotCreateRecord): string {
|
|
@@ -1051,7 +1050,7 @@ function remoteCreationFingerprint(record: ServiceUserSpotCreateRecord): string
|
|
|
1051
1050
|
stableType: record.stableType,
|
|
1052
1051
|
reservation: record.reservation
|
|
1053
1052
|
},
|
|
1054
|
-
(_key, value: unknown) => typeof value === 'bigint' ? `${value}n` : value
|
|
1053
|
+
(_key, value: unknown) => (typeof value === 'bigint' ? `${value}n` : value)
|
|
1055
1054
|
);
|
|
1056
1055
|
}
|
|
1057
1056
|
|
|
@@ -1091,17 +1090,23 @@ function remoteUserSpotFailure(
|
|
|
1091
1090
|
);
|
|
1092
1091
|
}
|
|
1093
1092
|
|
|
1094
|
-
function createDeadline(
|
|
1093
|
+
function createDeadline(
|
|
1094
|
+
timeoutMs: number,
|
|
1095
|
+
parent?: AbortSignal
|
|
1096
|
+
): {
|
|
1095
1097
|
readonly signal: AbortSignal;
|
|
1096
1098
|
close(): void;
|
|
1097
1099
|
} {
|
|
1098
1100
|
const controller = new AbortController();
|
|
1099
1101
|
const timeout = setTimeout(
|
|
1100
|
-
() =>
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1102
|
+
() =>
|
|
1103
|
+
controller.abort(
|
|
1104
|
+
createInternalFrameworkException(
|
|
1105
|
+
ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
|
|
1106
|
+
'User Spot creation exceeded its end-to-end deadline.',
|
|
1107
|
+
true
|
|
1108
|
+
)
|
|
1109
|
+
),
|
|
1105
1110
|
timeoutMs
|
|
1106
1111
|
);
|
|
1107
1112
|
const abort = () => controller.abort(parent?.reason);
|
|
@@ -1136,11 +1141,11 @@ function waitForAbort<T>(operation: Promise<T>, signal: AbortSignal): Promise<T>
|
|
|
1136
1141
|
const abort = () => reject(signal.reason);
|
|
1137
1142
|
signal.addEventListener('abort', abort, { once: true });
|
|
1138
1143
|
operation.then(
|
|
1139
|
-
value => {
|
|
1144
|
+
(value) => {
|
|
1140
1145
|
signal.removeEventListener('abort', abort);
|
|
1141
1146
|
resolve(value);
|
|
1142
1147
|
},
|
|
1143
|
-
error => {
|
|
1148
|
+
(error) => {
|
|
1144
1149
|
signal.removeEventListener('abort', abort);
|
|
1145
1150
|
reject(error);
|
|
1146
1151
|
}
|