@zlink-systems/framework 0.21.0 → 0.23.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/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
- 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 +28 -22
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
- package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
- 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 +160 -130
- 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/contracts/index.d.ts +1 -0
- 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.d.ts +3 -0
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
- 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 +12 -20
- 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 +46 -42
- 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.d.ts +1 -0
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
- 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/dispatch-error-details.d.ts +6 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
- package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
- package/dist/runtime/diagnostics/flow-context.js +2 -2
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +58 -42
- 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 -27
- 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.d.ts +4 -2
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
- 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-session-binding-ingress-port.d.ts +1 -0
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
- package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
- package/dist/runtime/foundation/service-topology-registry.js +105 -96
- 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 +245 -228
- 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/protocol/service_wire_pilot_codec.generated.js +20 -18
- 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 +209 -220
- 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.d.ts +2 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
- package/dist/runtime/spots/spot-actor-packet-drain.js +14 -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 +79 -86
- 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 +17 -15
- 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 +2 -3
- 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 +6 -6
- package/dist/runtime/spots/spot-timer.js +26 -30
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
- package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
- package/dist/runtime/streams/bound-session-response-target.js +8 -1
- package/dist/runtime/streams/bound-session-service.d.ts +1 -0
- package/dist/runtime/streams/bound-session-service.js +14 -12
- package/dist/runtime/streams/index.js +28 -20
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +52 -31
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.d.ts +5 -1
- package/dist/runtime/streams/protocol.js +68 -20
- package/dist/runtime/streams/session-actor-coordinator.js +37 -41
- package/dist/runtime/streams/session-context.d.ts +9 -2
- package/dist/runtime/streams/session-context.js +50 -32
- package/dist/runtime/streams/session-local-actors.d.ts +3 -1
- package/dist/runtime/streams/session-local-actors.js +17 -2
- 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.d.ts +1 -1
- package/dist/runtime/streams/stream-frame-factory.js +14 -7
- package/dist/runtime/streams/stream-session-runtime.js +112 -78
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +3 -3
- 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 +2 -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 +2 -2
- 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 +142 -134
- 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 +1 -32
- 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 +353 -326
- 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 +77 -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 +370 -390
- 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 +44 -44
- 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 +218 -206
- 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 +12 -47
- 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/dispatch-error-details.ts +62 -0
- package/src/runtime/diagnostics/flow-context.ts +18 -7
- 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 +107 -79
- 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 -55
- 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 +364 -396
- 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 +2 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +170 -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 +19 -18
- 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 +595 -564
- 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 +196 -148
- package/src/runtime/spots/spot-actor-packet-drain.ts +56 -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 +235 -222
- 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 +129 -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 +13 -18
- 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 +58 -47
- package/src/runtime/spots/spot-timer.ts +103 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
- package/src/runtime/streams/bound-session-response-target.ts +39 -9
- package/src/runtime/streams/bound-session-service.ts +52 -42
- package/src/runtime/streams/index.ts +183 -100
- package/src/runtime/streams/managed-stream.ts +123 -90
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +115 -46
- package/src/runtime/streams/session-actor-coordinator.ts +109 -93
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +96 -51
- package/src/runtime/streams/session-local-actors.ts +19 -3
- 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 +59 -40
- package/src/runtime/streams/stream-session-runtime.ts +317 -214
- package/src/runtime/workers/index.ts +68 -29
|
@@ -82,8 +82,10 @@ interface AggregateRecord {
|
|
|
82
82
|
*/
|
|
83
83
|
export class ZLinkInMemoryAuthorityStore {
|
|
84
84
|
private readonly rows = new Map<string, AuthorityRow>();
|
|
85
|
-
private readonly creationTerminals =
|
|
86
|
-
|
|
85
|
+
private readonly creationTerminals = new Map<
|
|
86
|
+
string,
|
|
87
|
+
'committed' | 'rejected' | 'failed' | 'aborted'
|
|
88
|
+
>();
|
|
87
89
|
private readonly operationTerminals = new Map<string, ZLinkCreationTerminalRecord>();
|
|
88
90
|
private readonly aggregates = new Map<string, AggregateRecord>();
|
|
89
91
|
private readonly activeCapacity = new Map<string, number>();
|
|
@@ -118,9 +120,9 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
118
120
|
validateAuthorityMutation(mutation);
|
|
119
121
|
const row = this.rows.get(keyValue);
|
|
120
122
|
if (
|
|
121
|
-
row === undefined
|
|
122
|
-
|
|
123
|
-
|
|
123
|
+
row === undefined ||
|
|
124
|
+
row.snapshot.allocation.state !== 'active' ||
|
|
125
|
+
row.snapshot.storeVersion.value !== expectedStoreVersion.value
|
|
124
126
|
) {
|
|
125
127
|
return { kind: 'conflict', current: this.read(keyValue) };
|
|
126
128
|
}
|
|
@@ -144,10 +146,10 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
144
146
|
leaseGeneration: row.snapshot.ownerLeaseGeneration
|
|
145
147
|
};
|
|
146
148
|
if (
|
|
147
|
-
!sameOwner(mutation.expectedOwner, currentOwner)
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
!sameOwner(mutation.expectedOwner, currentOwner) ||
|
|
150
|
+
mutation.targetOwner.ownerId !== currentOwner.ownerId ||
|
|
151
|
+
mutation.targetOwner.leaseGeneration === currentOwner.leaseGeneration ||
|
|
152
|
+
!this.validation.isTargetLive(
|
|
151
153
|
row.snapshot.allocation.descriptor,
|
|
152
154
|
row.snapshot.allocation.descriptorLifecycleGeneration,
|
|
153
155
|
mutation.targetOwner
|
|
@@ -167,10 +169,12 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
167
169
|
return this.stored(row.snapshot);
|
|
168
170
|
}
|
|
169
171
|
if (mutation.kind === 'restore') {
|
|
170
|
-
if (
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
172
|
+
if (
|
|
173
|
+
!sameOwner(mutation.expectedOwner, {
|
|
174
|
+
ownerId: row.snapshot.ownerId,
|
|
175
|
+
leaseGeneration: row.snapshot.ownerLeaseGeneration
|
|
176
|
+
})
|
|
177
|
+
) {
|
|
174
178
|
return { kind: 'conflict', current: this.read(keyValue) };
|
|
175
179
|
}
|
|
176
180
|
const nextVersion = this.tryNextStoreVersion();
|
|
@@ -207,9 +211,10 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
207
211
|
if (!Number.isInteger(limit) || limit < 1 || limit > 1000) {
|
|
208
212
|
throw new RangeError('Authority scan limit must be in 1..1000.');
|
|
209
213
|
}
|
|
210
|
-
const decoded =
|
|
211
|
-
|
|
212
|
-
|
|
214
|
+
const decoded =
|
|
215
|
+
cursor === undefined
|
|
216
|
+
? { revision: this.scanRevision, offset: 0, prefix }
|
|
217
|
+
: decodeCursor(cursor.encoded);
|
|
213
218
|
if (decoded.revision !== this.scanRevision || decoded.prefix !== prefix) {
|
|
214
219
|
return { kind: 'scanExpired' };
|
|
215
220
|
}
|
|
@@ -224,23 +229,20 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
224
229
|
key: authorityKey(key),
|
|
225
230
|
snapshot: this.snapshot(row.snapshot)
|
|
226
231
|
})),
|
|
227
|
-
nextCursor:
|
|
228
|
-
? scanCursor(this.scanRevision, nextOffset, prefix)
|
|
229
|
-
: undefined
|
|
232
|
+
nextCursor:
|
|
233
|
+
nextOffset < rows.length ? scanCursor(this.scanRevision, nextOffset, prefix) : undefined
|
|
230
234
|
};
|
|
231
235
|
}
|
|
232
236
|
|
|
233
|
-
async removeAllByOwner(
|
|
234
|
-
owner: ZLinkLocationOwnerToken,
|
|
235
|
-
signal?: AbortSignal
|
|
236
|
-
): Promise<bigint> {
|
|
237
|
+
async removeAllByOwner(owner: ZLinkLocationOwnerToken, signal?: AbortSignal): Promise<bigint> {
|
|
237
238
|
signal?.throwIfAborted();
|
|
238
239
|
let removed = 0;
|
|
239
240
|
for (const [key, row] of [...this.rows.entries()]) {
|
|
240
241
|
if (
|
|
241
|
-
row.snapshot.ownerId !== owner.ownerId
|
|
242
|
-
|
|
243
|
-
)
|
|
242
|
+
row.snapshot.ownerId !== owner.ownerId ||
|
|
243
|
+
row.snapshot.ownerLeaseGeneration !== owner.leaseGeneration
|
|
244
|
+
)
|
|
245
|
+
continue;
|
|
244
246
|
if (row.snapshot.allocation.state === 'active') {
|
|
245
247
|
this.adjustCapacity(this.activeCapacity, row.snapshot.allocation, -1);
|
|
246
248
|
} else {
|
|
@@ -266,8 +268,8 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
266
268
|
const current = this.rows.get(key);
|
|
267
269
|
if (current !== undefined) {
|
|
268
270
|
if (
|
|
269
|
-
current.snapshot.allocation.objectKind !== request.key.kind
|
|
270
|
-
|
|
271
|
+
current.snapshot.allocation.objectKind !== request.key.kind ||
|
|
272
|
+
current.snapshot.allocation.stableType !== request.intent.stableType
|
|
271
273
|
) {
|
|
272
274
|
return { kind: 'typeMismatch', current: this.snapshot(current.snapshot) };
|
|
273
275
|
}
|
|
@@ -285,7 +287,9 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
285
287
|
this.scanRevision++;
|
|
286
288
|
}
|
|
287
289
|
const target = creationTarget(request);
|
|
288
|
-
if (
|
|
290
|
+
if (
|
|
291
|
+
!this.validation.isTargetLive(target.descriptor, target.lifecycleGeneration, target.owner)
|
|
292
|
+
) {
|
|
289
293
|
return { kind: 'conflict', current: this.read(key) };
|
|
290
294
|
}
|
|
291
295
|
const allocation: ZLinkPlacementAllocation = {
|
|
@@ -300,9 +304,9 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
300
304
|
return { kind: 'placementCapacityExhausted' };
|
|
301
305
|
}
|
|
302
306
|
if (
|
|
303
|
-
this.storeVersion >= MAX_GENERATION
|
|
304
|
-
|
|
305
|
-
|
|
307
|
+
this.storeVersion >= MAX_GENERATION ||
|
|
308
|
+
this.objectGeneration >= MAX_GENERATION ||
|
|
309
|
+
this.ownerGeneration >= MAX_GENERATION
|
|
306
310
|
) {
|
|
307
311
|
return { kind: 'generationExhausted' };
|
|
308
312
|
}
|
|
@@ -350,12 +354,12 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
350
354
|
return { kind: 'alreadyCommitted', ready: this.snapshot(row.snapshot) };
|
|
351
355
|
}
|
|
352
356
|
if (
|
|
353
|
-
row === undefined
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
357
|
+
row === undefined ||
|
|
358
|
+
row.snapshot.allocation.state !== 'reserved' ||
|
|
359
|
+
row.creation?.reservationId !== request.reservationId ||
|
|
360
|
+
row.snapshot.storeVersion.value !== request.expectedStoreVersion ||
|
|
361
|
+
!sameCreationTarget(row.creation.target, request.target) ||
|
|
362
|
+
!this.validation.isTargetLive(
|
|
359
363
|
row.creation.target.descriptor,
|
|
360
364
|
row.creation.target.lifecycleGeneration,
|
|
361
365
|
row.creation.target.owner
|
|
@@ -393,27 +397,26 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
393
397
|
if (request.completion.kind === 'created') {
|
|
394
398
|
validatePayload(request.completion.readyPayload);
|
|
395
399
|
}
|
|
396
|
-
const terminalRecord = validateTerminalForMutation(
|
|
397
|
-
request.completion.terminal,
|
|
398
|
-
this.now()
|
|
399
|
-
)!;
|
|
400
|
+
const terminalRecord = validateTerminalForMutation(request.completion.terminal, this.now())!;
|
|
400
401
|
const existingTerminal = this.operationTerminals.get(
|
|
401
402
|
creationOperationKey(terminalRecord.operation)
|
|
402
403
|
);
|
|
403
|
-
if (
|
|
404
|
-
|
|
404
|
+
if (
|
|
405
|
+
existingTerminal !== undefined &&
|
|
406
|
+
existingTerminal.expiresAt.getTime() > this.now().getTime()
|
|
407
|
+
) {
|
|
405
408
|
return {
|
|
406
409
|
kind: 'alreadyCompleted',
|
|
407
410
|
terminal: copyTerminalRecord(existingTerminal)
|
|
408
411
|
};
|
|
409
412
|
}
|
|
410
413
|
const reservationTerminal = this.creationTerminals.get(request.reservationId);
|
|
411
|
-
if (
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
);
|
|
414
|
+
if (
|
|
415
|
+
reservationTerminal === 'committed' ||
|
|
416
|
+
reservationTerminal === 'rejected' ||
|
|
417
|
+
reservationTerminal === 'failed'
|
|
418
|
+
) {
|
|
419
|
+
const retained = this.operationTerminals.get(creationOperationKey(terminalRecord.operation));
|
|
417
420
|
return retained === undefined
|
|
418
421
|
? { kind: 'stale' }
|
|
419
422
|
: { kind: 'alreadyCompleted', terminal: copyTerminalRecord(retained) };
|
|
@@ -421,12 +424,12 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
421
424
|
const key = creationKey(request.key);
|
|
422
425
|
const row = this.rows.get(key);
|
|
423
426
|
if (
|
|
424
|
-
row === undefined
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
427
|
+
row === undefined ||
|
|
428
|
+
row.snapshot.allocation.state !== 'reserved' ||
|
|
429
|
+
row.creation?.reservationId !== request.reservationId ||
|
|
430
|
+
row.snapshot.storeVersion.value !== request.expectedStoreVersion ||
|
|
431
|
+
!sameCreationTarget(row.creation.target, request.target) ||
|
|
432
|
+
!this.validation.isTargetLive(
|
|
430
433
|
row.creation.target.descriptor,
|
|
431
434
|
row.creation.target.lifecycleGeneration,
|
|
432
435
|
row.creation.target.owner
|
|
@@ -460,10 +463,7 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
460
463
|
row.creation.terminal = request.completion.kind;
|
|
461
464
|
this.creationTerminals.set(request.reservationId, request.completion.kind);
|
|
462
465
|
}
|
|
463
|
-
this.operationTerminals.set(
|
|
464
|
-
creationOperationKey(terminalRecord.operation),
|
|
465
|
-
terminalRecord
|
|
466
|
-
);
|
|
466
|
+
this.operationTerminals.set(creationOperationKey(terminalRecord.operation), terminalRecord);
|
|
467
467
|
this.scanRevision++;
|
|
468
468
|
const terminal = copyTerminalRecord(terminalRecord);
|
|
469
469
|
return request.completion.kind === 'created'
|
|
@@ -508,11 +508,11 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
508
508
|
const key = creationKey(request.key);
|
|
509
509
|
const row = this.rows.get(key);
|
|
510
510
|
if (
|
|
511
|
-
row === undefined
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
511
|
+
row === undefined ||
|
|
512
|
+
row.snapshot.allocation.state !== 'reserved' ||
|
|
513
|
+
row.creation?.reservationId !== request.reservationId ||
|
|
514
|
+
row.snapshot.storeVersion.value !== request.expectedStoreVersion ||
|
|
515
|
+
!sameCreationTarget(row.creation.target, request.target)
|
|
516
516
|
) {
|
|
517
517
|
return { kind: 'stale' };
|
|
518
518
|
}
|
|
@@ -535,15 +535,15 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
535
535
|
if (existing.state === 'prepared' && sameAggregateRequest(existing.request, request)) {
|
|
536
536
|
return { kind: 'alreadyPrepared', fence: existing.fence };
|
|
537
537
|
}
|
|
538
|
-
return existing.state === 'committed'
|
|
539
|
-
? { kind: 'stale' }
|
|
540
|
-
: { kind: 'conflict' };
|
|
538
|
+
return existing.state === 'committed' ? { kind: 'stale' } : { kind: 'conflict' };
|
|
541
539
|
}
|
|
542
|
-
if (
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
540
|
+
if (
|
|
541
|
+
!this.validation.isTargetLive(
|
|
542
|
+
request.targetDescriptor,
|
|
543
|
+
request.targetDescriptorLifecycleGeneration,
|
|
544
|
+
request.targetOwner
|
|
545
|
+
)
|
|
546
|
+
) {
|
|
547
547
|
return { kind: 'conflict' };
|
|
548
548
|
}
|
|
549
549
|
const target = aggregateTargetAllocation(request);
|
|
@@ -554,9 +554,9 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
554
554
|
for (const participant of request.participants) {
|
|
555
555
|
const row = this.rows.get(participant.authorityKey.value);
|
|
556
556
|
if (
|
|
557
|
-
row === undefined
|
|
558
|
-
|
|
559
|
-
|
|
557
|
+
row === undefined ||
|
|
558
|
+
row.snapshot.allocation.state !== 'active' ||
|
|
559
|
+
row.snapshot.storeVersion.value !== participant.expectedStoreVersion.value
|
|
560
560
|
) {
|
|
561
561
|
return { kind: 'conflict' };
|
|
562
562
|
}
|
|
@@ -600,18 +600,20 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
600
600
|
for (const participant of aggregate.request.participants) {
|
|
601
601
|
const row = this.rows.get(participant.authorityKey.value);
|
|
602
602
|
if (
|
|
603
|
-
row === undefined
|
|
604
|
-
|
|
605
|
-
|
|
603
|
+
row === undefined ||
|
|
604
|
+
row.snapshot.allocation.state !== 'active' ||
|
|
605
|
+
row.snapshot.storeVersion.value !== participant.expectedStoreVersion.value
|
|
606
606
|
) {
|
|
607
607
|
return { kind: 'stale' };
|
|
608
608
|
}
|
|
609
609
|
if (participant.ownerTransition === 'newOwner') {
|
|
610
|
-
if (
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
610
|
+
if (
|
|
611
|
+
!this.validation.isTargetLive(
|
|
612
|
+
aggregate.request.targetDescriptor,
|
|
613
|
+
aggregate.request.targetDescriptorLifecycleGeneration,
|
|
614
|
+
aggregate.request.targetOwner
|
|
615
|
+
)
|
|
616
|
+
) {
|
|
615
617
|
return { kind: 'stale' };
|
|
616
618
|
}
|
|
617
619
|
ownersNeeded++;
|
|
@@ -622,8 +624,8 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
622
624
|
rows.push({ participant, row, changesOwner: participant.ownerTransition === 'newOwner' });
|
|
623
625
|
}
|
|
624
626
|
if (
|
|
625
|
-
this.storeVersion + versionsNeeded > MAX_GENERATION
|
|
626
|
-
|
|
627
|
+
this.storeVersion + versionsNeeded > MAX_GENERATION ||
|
|
628
|
+
this.ownerGeneration + ownersNeeded > MAX_GENERATION
|
|
627
629
|
) {
|
|
628
630
|
return { kind: 'generationExhausted' };
|
|
629
631
|
}
|
|
@@ -648,8 +650,7 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
648
650
|
allocation: {
|
|
649
651
|
...entry.row.snapshot.allocation,
|
|
650
652
|
descriptor: { ...aggregate.request.targetDescriptor },
|
|
651
|
-
descriptorLifecycleGeneration:
|
|
652
|
-
aggregate.request.targetDescriptorLifecycleGeneration,
|
|
653
|
+
descriptorLifecycleGeneration: aggregate.request.targetDescriptorLifecycleGeneration,
|
|
653
654
|
capacity: cloneCapacity(entry.row.snapshot.allocation.capacity)
|
|
654
655
|
}
|
|
655
656
|
};
|
|
@@ -673,11 +674,7 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
673
674
|
if (aggregate === undefined) return { kind: 'stale' };
|
|
674
675
|
if (aggregate.state === 'aborted') return { kind: 'alreadyAborted' };
|
|
675
676
|
if (aggregate.state !== 'prepared') return { kind: 'stale' };
|
|
676
|
-
this.adjustCapacity(
|
|
677
|
-
this.pendingCapacity,
|
|
678
|
-
aggregateTargetAllocation(aggregate.request),
|
|
679
|
-
-1
|
|
680
|
-
);
|
|
677
|
+
this.adjustCapacity(this.pendingCapacity, aggregateTargetAllocation(aggregate.request), -1);
|
|
681
678
|
aggregate.state = 'aborted';
|
|
682
679
|
return { kind: 'aborted' };
|
|
683
680
|
}
|
|
@@ -722,12 +719,14 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
722
719
|
}
|
|
723
720
|
|
|
724
721
|
private hasPendingCapacity(allocation: ZLinkPlacementAllocation): boolean {
|
|
725
|
-
return
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
722
|
+
return (
|
|
723
|
+
this.validation.placementCapacityAvailable?.(
|
|
724
|
+
allocation.descriptor,
|
|
725
|
+
allocation.capacity,
|
|
726
|
+
this.capacityVectorUsage(this.pendingCapacity, allocation),
|
|
727
|
+
this.capacityVectorUsage(this.activeCapacity, allocation)
|
|
728
|
+
) ?? true
|
|
729
|
+
);
|
|
731
730
|
}
|
|
732
731
|
|
|
733
732
|
private adjustCapacity(
|
|
@@ -754,17 +753,17 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
754
753
|
return {
|
|
755
754
|
actors: values.get(capacityKey(descriptor, lifecycle, 'actor', '')) ?? 0,
|
|
756
755
|
spots: values.get(capacityKey(descriptor, lifecycle, 'spot', '')) ?? 0,
|
|
757
|
-
...(spotType === undefined
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
756
|
+
...(spotType === undefined
|
|
757
|
+
? {}
|
|
758
|
+
: {
|
|
759
|
+
spotType: {
|
|
760
|
+
...spotType,
|
|
761
|
+
count:
|
|
762
|
+
values.get(
|
|
763
|
+
capacityKey(descriptor, lifecycle, spotType.objectKind, spotType.stableType)
|
|
764
|
+
) ?? 0
|
|
765
|
+
}
|
|
766
|
+
})
|
|
768
767
|
};
|
|
769
768
|
}
|
|
770
769
|
|
|
@@ -781,11 +780,12 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
781
780
|
objectKind: string,
|
|
782
781
|
stableType: string
|
|
783
782
|
): { readonly active: number; readonly reserved: number } {
|
|
784
|
-
const key =
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
783
|
+
const key =
|
|
784
|
+
objectKind === 'actor'
|
|
785
|
+
? capacityKey(descriptor, lifecycleGeneration, 'actor', '')
|
|
786
|
+
: objectKind === 'user_spot' || objectKind === 'instance_spot'
|
|
787
|
+
? capacityKey(descriptor, lifecycleGeneration, objectKind, stableType)
|
|
788
|
+
: capacityKey(descriptor, lifecycleGeneration, 'spot', '');
|
|
789
789
|
return {
|
|
790
790
|
active: this.activeCapacity.get(key) ?? 0,
|
|
791
791
|
reserved: this.pendingCapacity.get(key) ?? 0
|
|
@@ -801,18 +801,19 @@ function validateAuthorityMutation(mutation: ZLinkAuthorityMutation): void {
|
|
|
801
801
|
if (mutation.kind === 'delete' || mutation.kind === 'restore') return;
|
|
802
802
|
if (mutation.kind === 'rebindOwnerLease') {
|
|
803
803
|
if (
|
|
804
|
-
mutation.expectedOwner.ownerId !== mutation.targetOwner.ownerId
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
804
|
+
mutation.expectedOwner.ownerId !== mutation.targetOwner.ownerId ||
|
|
805
|
+
mutation.expectedOwner.leaseGeneration === mutation.targetOwner.leaseGeneration ||
|
|
806
|
+
mutation.expectedOwner.leaseGeneration <= 0n ||
|
|
807
|
+
mutation.targetOwner.leaseGeneration <= 0n
|
|
808
808
|
) {
|
|
809
|
-
throw new TypeError(
|
|
809
|
+
throw new TypeError(
|
|
810
|
+
'Authority lease rebind must retain the owner and change the lease generation.'
|
|
811
|
+
);
|
|
810
812
|
}
|
|
811
813
|
return;
|
|
812
814
|
}
|
|
813
|
-
const generationTransition = (
|
|
814
|
-
|
|
815
|
-
).generationTransition;
|
|
815
|
+
const generationTransition = (mutation as { readonly generationTransition?: unknown })
|
|
816
|
+
.generationTransition;
|
|
816
817
|
if (generationTransition !== 'preserve') {
|
|
817
818
|
throw new TypeError('Authority owner transitions require an aggregate CAS.');
|
|
818
819
|
}
|
|
@@ -825,9 +826,9 @@ function validateReserve(request: ZLinkObjectReserveRequest): void {
|
|
|
825
826
|
validatePayload(request.creatingPayload);
|
|
826
827
|
validateCapacityVector(request.capacity);
|
|
827
828
|
if (
|
|
828
|
-
request.intent.requestSha256.byteLength !== 32
|
|
829
|
-
|
|
830
|
-
|
|
829
|
+
request.intent.requestSha256.byteLength !== 32 ||
|
|
830
|
+
request.intent.requestEncodedSize < 0n ||
|
|
831
|
+
request.intent.requestEncodedSize > BigInt(MAX_PAYLOAD_BYTES)
|
|
831
832
|
) {
|
|
832
833
|
throw new TypeError('Object creation content receipt is invalid.');
|
|
833
834
|
}
|
|
@@ -837,16 +838,18 @@ function validateCreationOperation(operation: ZLinkCreationOperationIdentity): v
|
|
|
837
838
|
const sourceRid = String(operation.sourceNodeRid);
|
|
838
839
|
const sourceRidBytes = Buffer.byteLength(sourceRid, 'utf8');
|
|
839
840
|
if (sourceRidBytes < 1 || sourceRidBytes > 255 || sourceRid.includes('\0')) {
|
|
840
|
-
throw new TypeError(
|
|
841
|
+
throw new TypeError(
|
|
842
|
+
'Creation terminal source node RID must contain 1..255 UTF-8 bytes without NUL.'
|
|
843
|
+
);
|
|
841
844
|
}
|
|
842
845
|
if (
|
|
843
|
-
operation.sourceNodeGeneration < 1n
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
846
|
+
operation.sourceNodeGeneration < 1n ||
|
|
847
|
+
operation.sourceNodeGeneration > MAX_U64 ||
|
|
848
|
+
operation.operationId.high < 0n ||
|
|
849
|
+
operation.operationId.high > MAX_U64 ||
|
|
850
|
+
operation.operationId.low < 0n ||
|
|
851
|
+
operation.operationId.low > MAX_U64 ||
|
|
852
|
+
(operation.operationId.high === 0n && operation.operationId.low === 0n)
|
|
850
853
|
) {
|
|
851
854
|
throw new RangeError('Creation terminal source generation and operation ID are invalid.');
|
|
852
855
|
}
|
|
@@ -864,11 +867,13 @@ function validateTerminalForMutation(
|
|
|
864
867
|
const deadlineMs = publication.operationDeadline.getTime();
|
|
865
868
|
const expiresAtMs = deadlineMs + CREATION_TERMINAL_RETENTION_MS;
|
|
866
869
|
if (
|
|
867
|
-
!Number.isSafeInteger(deadlineMs)
|
|
868
|
-
|
|
869
|
-
|
|
870
|
+
!Number.isSafeInteger(deadlineMs) ||
|
|
871
|
+
!Number.isSafeInteger(expiresAtMs) ||
|
|
872
|
+
expiresAtMs <= storeNow.getTime()
|
|
870
873
|
) {
|
|
871
|
-
throw new RangeError(
|
|
874
|
+
throw new RangeError(
|
|
875
|
+
'Creation terminal expiry must be the live operation deadline plus five minutes.'
|
|
876
|
+
);
|
|
872
877
|
}
|
|
873
878
|
return {
|
|
874
879
|
operation: copyCreationOperation(publication.operation),
|
|
@@ -914,7 +919,7 @@ function validateAggregateRequest(request: ZLinkAggregatePrepareRequest): void {
|
|
|
914
919
|
throw new TypeError('Aggregate inventory digest must contain 32 bytes.');
|
|
915
920
|
}
|
|
916
921
|
validateCapacityVector(request.capacity);
|
|
917
|
-
const keys = request.participants.map(participant => participant.authorityKey.value);
|
|
922
|
+
const keys = request.participants.map((participant) => participant.authorityKey.value);
|
|
918
923
|
const sorted = [...keys].sort();
|
|
919
924
|
if (new Set(keys).size !== keys.length || keys.some((key, index) => key !== sorted[index])) {
|
|
920
925
|
throw new TypeError('Aggregate participants must be unique and canonically sorted.');
|
|
@@ -929,9 +934,11 @@ function validatePayload(payload: Uint8Array): void {
|
|
|
929
934
|
|
|
930
935
|
function validateCapacityVector(value: ZLinkCapacityVector): void {
|
|
931
936
|
const counts = [value.actors, value.spots, value.spotType?.count ?? 0];
|
|
932
|
-
if (
|
|
933
|
-
|
|
934
|
-
|
|
937
|
+
if (
|
|
938
|
+
counts.some((count) => !Number.isInteger(count) || count < 0 || count > 0x7fff_ffff) ||
|
|
939
|
+
counts.every((count) => count === 0) ||
|
|
940
|
+
(value.spotType !== undefined && value.spotType.count === 0)
|
|
941
|
+
) {
|
|
935
942
|
throw new RangeError('Placement capacity vector is invalid.');
|
|
936
943
|
}
|
|
937
944
|
}
|
|
@@ -949,15 +956,14 @@ function aggregateTargetAllocation(
|
|
|
949
956
|
};
|
|
950
957
|
}
|
|
951
958
|
|
|
952
|
-
function addCapacity(
|
|
953
|
-
left: ZLinkCapacityVector,
|
|
954
|
-
right: ZLinkCapacityVector
|
|
955
|
-
): ZLinkCapacityVector {
|
|
959
|
+
function addCapacity(left: ZLinkCapacityVector, right: ZLinkCapacityVector): ZLinkCapacityVector {
|
|
956
960
|
let spotType = left.spotType;
|
|
957
961
|
if (right.spotType !== undefined) {
|
|
958
|
-
if (
|
|
959
|
-
|
|
960
|
-
|
|
962
|
+
if (
|
|
963
|
+
spotType !== undefined &&
|
|
964
|
+
(spotType.objectKind !== right.spotType.objectKind ||
|
|
965
|
+
spotType.stableType !== right.spotType.stableType)
|
|
966
|
+
) {
|
|
961
967
|
throw new TypeError('Aggregate capacity contains more than one Spot type.');
|
|
962
968
|
}
|
|
963
969
|
spotType = {
|
|
@@ -988,18 +994,26 @@ function creationTarget(request: ZLinkObjectReserveRequest): CreationTarget {
|
|
|
988
994
|
};
|
|
989
995
|
}
|
|
990
996
|
|
|
991
|
-
function sameCreationTarget(
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
997
|
+
function sameCreationTarget(
|
|
998
|
+
target: CreationTarget,
|
|
999
|
+
actual: ZLinkObjectCommitRequest['target']
|
|
1000
|
+
): boolean {
|
|
1001
|
+
return (
|
|
1002
|
+
target.descriptor.meshName === actual.meshName &&
|
|
1003
|
+
sameRid(target.descriptor.rid, actual.nodeRid) &&
|
|
1004
|
+
target.lifecycleGeneration === actual.nodeLifecycleGeneration &&
|
|
1005
|
+
sameOwner(target.owner, actual.owner)
|
|
1006
|
+
);
|
|
996
1007
|
}
|
|
997
1008
|
|
|
998
1009
|
function sameOwner(left: ZLinkLocationOwnerToken, right: ZLinkLocationOwnerToken): boolean {
|
|
999
1010
|
return left.ownerId === right.ownerId && left.leaseGeneration === right.leaseGeneration;
|
|
1000
1011
|
}
|
|
1001
1012
|
|
|
1002
|
-
function sameDescriptor(
|
|
1013
|
+
function sameDescriptor(
|
|
1014
|
+
left: ZLinkMeshNodeDescriptorKey,
|
|
1015
|
+
right: ZLinkMeshNodeDescriptorKey
|
|
1016
|
+
): boolean {
|
|
1003
1017
|
return left.meshName === right.meshName && sameRid(left.rid, right.rid);
|
|
1004
1018
|
}
|
|
1005
1019
|
|
|
@@ -1013,23 +1027,35 @@ function capacityEntries(
|
|
|
1013
1027
|
capacity: ZLinkCapacityVector
|
|
1014
1028
|
): readonly { readonly key: string; readonly count: number }[] {
|
|
1015
1029
|
return [
|
|
1016
|
-
...(capacity.actors === 0
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
...(capacity.
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1030
|
+
...(capacity.actors === 0
|
|
1031
|
+
? []
|
|
1032
|
+
: [
|
|
1033
|
+
{
|
|
1034
|
+
key: capacityKey(descriptor, lifecycle, 'actor', ''),
|
|
1035
|
+
count: capacity.actors
|
|
1036
|
+
}
|
|
1037
|
+
]),
|
|
1038
|
+
...(capacity.spots === 0
|
|
1039
|
+
? []
|
|
1040
|
+
: [
|
|
1041
|
+
{
|
|
1042
|
+
key: capacityKey(descriptor, lifecycle, 'spot', ''),
|
|
1043
|
+
count: capacity.spots
|
|
1044
|
+
}
|
|
1045
|
+
]),
|
|
1046
|
+
...(capacity.spotType === undefined
|
|
1047
|
+
? []
|
|
1048
|
+
: [
|
|
1049
|
+
{
|
|
1050
|
+
key: capacityKey(
|
|
1051
|
+
descriptor,
|
|
1052
|
+
lifecycle,
|
|
1053
|
+
capacity.spotType.objectKind,
|
|
1054
|
+
capacity.spotType.stableType
|
|
1055
|
+
),
|
|
1056
|
+
count: capacity.spotType.count
|
|
1057
|
+
}
|
|
1058
|
+
])
|
|
1033
1059
|
];
|
|
1034
1060
|
}
|
|
1035
1061
|
|
|
@@ -1042,11 +1068,13 @@ function cloneCapacity(value: ZLinkCapacityVector): ZLinkCapacityVector {
|
|
|
1042
1068
|
}
|
|
1043
1069
|
|
|
1044
1070
|
function sameCapacity(left: ZLinkCapacityVector, right: ZLinkCapacityVector): boolean {
|
|
1045
|
-
return
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1071
|
+
return (
|
|
1072
|
+
left.actors === right.actors &&
|
|
1073
|
+
left.spots === right.spots &&
|
|
1074
|
+
left.spotType?.objectKind === right.spotType?.objectKind &&
|
|
1075
|
+
left.spotType?.stableType === right.spotType?.stableType &&
|
|
1076
|
+
left.spotType?.count === right.spotType?.count
|
|
1077
|
+
);
|
|
1050
1078
|
}
|
|
1051
1079
|
|
|
1052
1080
|
function capacityKey(
|
|
@@ -1071,18 +1099,20 @@ function version(value: bigint): ZLinkAuthorityStoreVersion {
|
|
|
1071
1099
|
}
|
|
1072
1100
|
|
|
1073
1101
|
function scanCursor(revision: bigint, offset: number, prefix: string): ZLinkAuthorityScanCursor {
|
|
1074
|
-
const encoded = Buffer.from(
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1102
|
+
const encoded = Buffer.from(
|
|
1103
|
+
JSON.stringify({
|
|
1104
|
+
revision: revision.toString(),
|
|
1105
|
+
offset,
|
|
1106
|
+
prefix
|
|
1107
|
+
})
|
|
1108
|
+
).toString('base64url');
|
|
1079
1109
|
const factory = requireScanCursorFactory();
|
|
1080
1110
|
return factory(encoded);
|
|
1081
1111
|
}
|
|
1082
1112
|
|
|
1083
1113
|
function requireScanCursorFactory(): (encoded: string) => ZLinkAuthorityScanCursor {
|
|
1084
1114
|
// Imported as a type to keep the provider contract free of runtime cycles.
|
|
1085
|
-
return (encoded) => ({ encoded } as ZLinkAuthorityScanCursor
|
|
1115
|
+
return (encoded) => ({ encoded }) as ZLinkAuthorityScanCursor;
|
|
1086
1116
|
}
|
|
1087
1117
|
|
|
1088
1118
|
function decodeCursor(encoded: string): { revision: bigint; offset: number; prefix: string } {
|
|
@@ -1110,29 +1140,32 @@ function sameAggregateRequest(
|
|
|
1110
1140
|
right: ZLinkAggregatePrepareRequest
|
|
1111
1141
|
): boolean {
|
|
1112
1142
|
if (
|
|
1113
|
-
left.aggregateId.value !== right.aggregateId.value
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|| !sameCapacity(left.capacity, right.capacity)
|
|
1143
|
+
left.aggregateId.value !== right.aggregateId.value ||
|
|
1144
|
+
left.aggregateGeneration !== right.aggregateGeneration ||
|
|
1145
|
+
!sameOwner(left.targetOwner, right.targetOwner) ||
|
|
1146
|
+
!Buffer.from(left.inventoryDigest).equals(Buffer.from(right.inventoryDigest)) ||
|
|
1147
|
+
left.participants.length !== right.participants.length ||
|
|
1148
|
+
!sameDescriptor(left.targetDescriptor, right.targetDescriptor) ||
|
|
1149
|
+
left.targetDescriptorLifecycleGeneration !== right.targetDescriptorLifecycleGeneration ||
|
|
1150
|
+
!sameCapacity(left.capacity, right.capacity)
|
|
1122
1151
|
) {
|
|
1123
1152
|
return false;
|
|
1124
1153
|
}
|
|
1125
1154
|
return left.participants.every((participant, index) => {
|
|
1126
1155
|
const other = right.participants[index]!;
|
|
1127
|
-
return
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1156
|
+
return (
|
|
1157
|
+
participant.authorityKey.value === other.authorityKey.value &&
|
|
1158
|
+
participant.expectedStoreVersion.value === other.expectedStoreVersion.value &&
|
|
1159
|
+
participant.ownerTransition === other.ownerTransition &&
|
|
1160
|
+
Buffer.from(participant.authorityPayload).equals(Buffer.from(other.authorityPayload)) &&
|
|
1161
|
+
Buffer.from(participant.membershipMutation).equals(Buffer.from(other.membershipMutation))
|
|
1162
|
+
);
|
|
1132
1163
|
});
|
|
1133
1164
|
}
|
|
1134
1165
|
|
|
1135
|
-
function cloneAggregateRequest(
|
|
1166
|
+
function cloneAggregateRequest(
|
|
1167
|
+
request: ZLinkAggregatePrepareRequest
|
|
1168
|
+
): ZLinkAggregatePrepareRequest {
|
|
1136
1169
|
return {
|
|
1137
1170
|
...request,
|
|
1138
1171
|
aggregateId: { ...request.aggregateId },
|
|
@@ -1140,7 +1173,7 @@ function cloneAggregateRequest(request: ZLinkAggregatePrepareRequest): ZLinkAggr
|
|
|
1140
1173
|
targetDescriptor: { ...request.targetDescriptor },
|
|
1141
1174
|
capacity: cloneCapacity(request.capacity),
|
|
1142
1175
|
inventoryDigest: Buffer.from(request.inventoryDigest),
|
|
1143
|
-
participants: request.participants.map(participant => ({
|
|
1176
|
+
participants: request.participants.map((participant) => ({
|
|
1144
1177
|
...participant,
|
|
1145
1178
|
authorityKey: { ...participant.authorityKey },
|
|
1146
1179
|
expectedStoreVersion: { ...participant.expectedStoreVersion },
|