@zlink-systems/framework 0.30.0 → 0.30.2
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/LICENSE +150 -68
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
- package/dist/contracts/Channels/Calls.d.ts +2 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
- package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
- package/dist/contracts/Common/encoded-payload-storage.js +5 -2
- package/dist/contracts/Configuration/Builders.d.ts +1 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
- package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
- package/dist/contracts/Handlers/Attributes.d.ts +5 -13
- package/dist/contracts/Handlers/Attributes.js +7 -11
- package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
- package/dist/contracts/Handlers/JsonContract.js +4 -153
- package/dist/contracts/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +6 -1
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- package/dist/nest-integration.d.ts +1 -1
- package/dist/nest-integration.js +2 -1
- package/dist/runtime/abort.d.ts +5 -0
- package/dist/runtime/abort.js +10 -0
- package/dist/runtime/actors/actor-authority-publication.js +3 -2
- package/dist/runtime/actors/actor-client.d.ts +1 -2
- package/dist/runtime/actors/actor-client.js +52 -57
- package/dist/runtime/actors/actor-context.d.ts +2 -0
- package/dist/runtime/actors/actor-context.js +46 -9
- package/dist/runtime/actors/actor-handoff.d.ts +8 -4
- package/dist/runtime/actors/actor-handoff.js +219 -92
- package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
- package/dist/runtime/actors/actor-local-native-join.js +13 -12
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-remote-wire.js +15 -0
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -0
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
- package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-state.js +2 -20
- package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
- package/dist/runtime/actors/index.d.ts +8 -3
- package/dist/runtime/actors/index.js +55 -27
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +56 -23
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
- package/dist/runtime/application-jobs/contracts.d.ts +12 -1
- package/dist/runtime/backend/contracts/index.d.ts +37 -12
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
- package/dist/runtime/backend/mesh-completion-table.js +154 -49
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
- package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
- package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
- package/dist/runtime/backend/runtime-message.d.ts +1 -0
- package/dist/runtime/backend/runtime-message.js +5 -0
- package/dist/runtime/backend/runtime-values.d.ts +1 -0
- package/dist/runtime/backend/runtime-values.js +2 -1
- package/dist/runtime/channels/channel-clients.d.ts +2 -0
- package/dist/runtime/channels/channel-clients.js +75 -23
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
- package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
- package/dist/runtime/channels/channel-dispatch-services.js +45 -0
- package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
- package/dist/runtime/channels/channel-dispatchers.js +62 -54
- package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
- package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
- package/dist/runtime/channels/channel-envelope.d.ts +2 -0
- package/dist/runtime/channels/channel-envelope.js +146 -28
- package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
- package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
- package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
- package/dist/runtime/channels/channel-runtime-manager.js +16 -16
- package/dist/runtime/channels/channel-transports.d.ts +18 -16
- package/dist/runtime/channels/channel-transports.js +77 -58
- package/dist/runtime/channels/client-server-location-runtime.js +5 -4
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/fanout-location-runtime.js +3 -3
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +2 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
- package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
- package/dist/runtime/channels/source-spot-router.d.ts +2 -2
- package/dist/runtime/channels/source-spot-router.js +4 -4
- package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-node-route-transport.js +4 -4
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
- package/dist/runtime/diagnostics/flow-context.js +19 -7
- package/dist/runtime/diagnostics/index.js +4 -9
- package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
- package/dist/runtime/diagnostics/message-flow.js +35 -5
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
- package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
- package/dist/runtime/execution/index.d.ts +4 -2
- package/dist/runtime/execution/index.js +33 -10
- package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
- package/dist/runtime/execution/serial-execution-queue.js +22 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
- package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
- package/dist/runtime/foundation/durable-service-request.js +98 -0
- package/dist/runtime/foundation/operation-identity.d.ts +1 -0
- package/dist/runtime/foundation/operation-identity.js +5 -1
- package/dist/runtime/foundation/operation-registry.d.ts +25 -1
- package/dist/runtime/foundation/operation-registry.js +86 -18
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
- package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
- package/dist/runtime/foundation/service-liveness-registry.js +38 -0
- package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
- package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
- package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
- package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
- package/dist/runtime/foundation/service-stateful-registry.js +24 -26
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
- package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
- package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
- package/dist/runtime/foundation/service-topology-registry.js +61 -27
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
- package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
- package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
- package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
- package/dist/runtime/handlers/handler-instance-scope.js +54 -11
- package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
- package/dist/runtime/host/actor-packet-relay.js +59 -72
- package/dist/runtime/host/actor-placement-coordinator.js +25 -8
- package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
- package/dist/runtime/host/actor-transfer-runtime.js +85 -331
- package/dist/runtime/host/application-job-queue.d.ts +40 -7
- package/dist/runtime/host/application-job-queue.js +137 -42
- package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
- package/dist/runtime/host/entry-actor-runtime.js +3 -0
- package/dist/runtime/host/index.d.ts +12 -2
- package/dist/runtime/host/index.js +300 -202
- package/dist/runtime/host/location-runtime-owner.js +2 -6
- package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
- package/dist/runtime/host/mesh-router-resolver.js +14 -6
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
- package/dist/runtime/host/remote-bound-session-relay.js +73 -208
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +6 -4
- package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
- package/dist/runtime/host/runtime-shutdown.js +3 -2
- package/dist/runtime/host/service-relocation-control.d.ts +1 -0
- package/dist/runtime/host/service-relocation-control.js +10 -4
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
- package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
- package/dist/runtime/host/spot-address-transport.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
- package/dist/runtime/locations/actor-location-claims.js +34 -19
- package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
- package/dist/runtime/locations/auto-connect-loop.js +22 -14
- package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
- package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
- package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
- package/dist/runtime/locations/descriptor-publication.js +11 -0
- package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
- package/dist/runtime/locations/in-memory-authority-store.js +56 -19
- package/dist/runtime/locations/in-memory-location-store.js +1 -10
- package/dist/runtime/locations/index.d.ts +1 -0
- package/dist/runtime/locations/index.js +1 -0
- package/dist/runtime/locations/lease-tracker.js +1 -6
- package/dist/runtime/locations/lifecycle.d.ts +1 -2
- package/dist/runtime/locations/lifecycle.js +2 -5
- package/dist/runtime/locations/location-store-repository.d.ts +51 -1
- package/dist/runtime/locations/location-store-repository.js +363 -139
- package/dist/runtime/locations/relocation-blob.d.ts +18 -1
- package/dist/runtime/locations/relocation-blob.js +52 -1
- package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
- package/dist/runtime/locations/request-source-resolver.js +80 -0
- package/dist/runtime/locations/resolvers.js +1 -1
- package/dist/runtime/locations/runtime.d.ts +7 -3
- package/dist/runtime/locations/runtime.js +61 -53
- package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
- package/dist/runtime/messaging/framework-json-v1.js +38 -294
- package/dist/runtime/messaging/packet-name.d.ts +1 -1
- package/dist/runtime/messaging/packet-name.js +8 -24
- package/dist/runtime/messaging/payload-codec.d.ts +7 -1
- package/dist/runtime/messaging/payload-codec.js +7 -6
- package/dist/runtime/messaging/request-result.d.ts +2 -0
- package/dist/runtime/messaging/request-result.js +57 -0
- package/dist/runtime/messaging/submission-result.d.ts +1 -0
- package/dist/runtime/messaging/submission-result.js +5 -2
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
- package/dist/runtime/spots/index.d.ts +21 -11
- package/dist/runtime/spots/index.js +243 -178
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
- package/dist/runtime/spots/spot-activation-registry.js +21 -11
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +7 -7
- package/dist/runtime/spots/spot-activation.d.ts +7 -3
- package/dist/runtime/spots/spot-activation.js +140 -52
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
- package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-membership.js +0 -8
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
- package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
- package/dist/runtime/spots/spot-entry-activation.js +20 -11
- package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
- package/dist/runtime/spots/spot-handler-registry.js +24 -10
- package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
- package/dist/runtime/spots/spot-manager-public.js +2 -2
- package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
- package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
- package/dist/runtime/spots/spot-outbound.d.ts +3 -0
- package/dist/runtime/spots/spot-outbound.js +27 -18
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
- package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
- package/dist/runtime/spots/spot-serial-executor.js +61 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
- package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +288 -103
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
- package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
- package/dist/runtime/streams/bound-session-service.d.ts +1 -1
- package/dist/runtime/streams/bound-session-service.js +6 -11
- package/dist/runtime/streams/index.d.ts +3 -2
- package/dist/runtime/streams/index.js +6 -4
- package/dist/runtime/streams/managed-stream.js +3 -2
- package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
- package/dist/runtime/streams/session-actor-coordinator.js +15 -32
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
- package/dist/runtime/streams/stream-session-runtime.js +14 -31
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
- package/src/contracts/Channels/Calls.ts +2 -1
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
- package/src/contracts/Common/encoded-payload-storage.ts +6 -3
- package/src/contracts/Configuration/Builders.ts +4 -1
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
- package/src/contracts/Handlers/Attributes.ts +14 -21
- package/src/contracts/Handlers/JsonContract.ts +8 -216
- package/src/contracts/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +10 -1
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/nest-integration.ts +1 -0
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +100 -85
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +291 -110
- package/src/runtime/actors/actor-join-relocation.ts +3 -0
- package/src/runtime/actors/actor-local-native-join.ts +21 -26
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-remote-wire.ts +17 -0
- package/src/runtime/actors/actor-reply.ts +42 -0
- package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
- package/src/runtime/actors/actor-routed-json-request.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
- package/src/runtime/actors/actor-runtime-state.ts +2 -20
- package/src/runtime/actors/actor-source-transfer.ts +1 -34
- package/src/runtime/actors/index.ts +60 -32
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
- package/src/runtime/admission.ts +69 -21
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
- package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
- package/src/runtime/application-jobs/contracts.ts +16 -1
- package/src/runtime/backend/contracts/index.ts +92 -18
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +160 -57
- package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
- package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
- package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
- package/src/runtime/backend/raw-binding-port.ts +7 -2
- package/src/runtime/backend/runtime-message.ts +6 -0
- package/src/runtime/backend/runtime-values.ts +1 -0
- package/src/runtime/channels/channel-clients.ts +132 -58
- package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
- package/src/runtime/channels/channel-dispatch-services.ts +69 -1
- package/src/runtime/channels/channel-dispatchers.ts +136 -90
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
- package/src/runtime/channels/channel-envelope.ts +225 -31
- package/src/runtime/channels/channel-outbound-operations.ts +22 -8
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +41 -17
- package/src/runtime/channels/channel-transports.ts +171 -112
- package/src/runtime/channels/client-server-location-runtime.ts +11 -10
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
- package/src/runtime/channels/fanout-location-runtime.ts +17 -9
- package/src/runtime/channels/local-spot-route-transport.ts +3 -1
- package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
- package/src/runtime/channels/source-spot-router.ts +8 -4
- package/src/runtime/channels/spot-node-route-transport.ts +8 -4
- package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
- package/src/runtime/diagnostics/flow-context.ts +20 -7
- package/src/runtime/diagnostics/index.ts +1 -7
- package/src/runtime/diagnostics/message-flow.ts +47 -9
- package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
- package/src/runtime/execution/index.ts +40 -14
- package/src/runtime/execution/serial-execution-queue.ts +33 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
- package/src/runtime/foundation/durable-service-request.ts +137 -0
- package/src/runtime/foundation/operation-identity.ts +5 -1
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
- package/src/runtime/foundation/service-liveness-registry.ts +39 -0
- package/src/runtime/foundation/service-mailbox.ts +8 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
- package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
- package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
- package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
- package/src/runtime/foundation/service-stateful-registry.ts +38 -35
- package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
- package/src/runtime/foundation/service-topology-registry.ts +91 -36
- package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
- package/src/runtime/handlers/handler-instance-scope.ts +67 -16
- package/src/runtime/host/actor-packet-relay.ts +113 -94
- package/src/runtime/host/actor-placement-coordinator.ts +31 -8
- package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
- package/src/runtime/host/actor-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +160 -41
- package/src/runtime/host/entry-actor-runtime.ts +4 -0
- package/src/runtime/host/index.ts +473 -271
- package/src/runtime/host/location-runtime-owner.ts +2 -6
- package/src/runtime/host/mesh-router-resolver.ts +13 -5
- package/src/runtime/host/remote-bound-session-relay.ts +88 -271
- package/src/runtime/host/route-mesh-runtime.ts +12 -6
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-control.ts +11 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
- package/src/runtime/host/spot-address-transport.ts +4 -2
- package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- package/src/runtime/locations/actor-location-claims.ts +52 -30
- package/src/runtime/locations/auto-connect-loop.ts +22 -14
- package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
- package/src/runtime/locations/auto-connect-types.ts +0 -1
- package/src/runtime/locations/descriptor-publication.ts +7 -0
- package/src/runtime/locations/domain-store-contract.ts +5 -0
- package/src/runtime/locations/in-memory-authority-store.ts +85 -23
- package/src/runtime/locations/in-memory-location-store.ts +1 -12
- package/src/runtime/locations/index.ts +1 -0
- package/src/runtime/locations/lease-tracker.ts +2 -9
- package/src/runtime/locations/lifecycle.ts +8 -26
- package/src/runtime/locations/location-store-repository.ts +628 -152
- package/src/runtime/locations/relocation-blob.ts +75 -1
- package/src/runtime/locations/request-source-resolver.ts +138 -0
- package/src/runtime/locations/resolvers.ts +2 -2
- package/src/runtime/locations/runtime.ts +98 -64
- package/src/runtime/messaging/framework-json-v1.ts +5 -325
- package/src/runtime/messaging/packet-name.ts +5 -25
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +62 -0
- package/src/runtime/messaging/submission-result.ts +5 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
- package/src/runtime/spots/index.ts +389 -283
- package/src/runtime/spots/spot-activation-registry.ts +25 -13
- package/src/runtime/spots/spot-activation-state.ts +12 -19
- package/src/runtime/spots/spot-activation.ts +198 -96
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
- package/src/runtime/spots/spot-actor-membership.ts +0 -15
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
- package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
- package/src/runtime/spots/spot-entry-activation.ts +33 -21
- package/src/runtime/spots/spot-handler-registry.ts +56 -12
- package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
- package/src/runtime/spots/spot-manager-public.ts +2 -2
- package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +39 -19
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
- package/src/runtime/spots/spot-runtime-ports.ts +1 -1
- package/src/runtime/spots/spot-serial-executor.ts +97 -25
- package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
- package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
- package/src/runtime/spots/spot-timer.ts +418 -158
- package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
- package/src/runtime/streams/bound-session-service.ts +7 -10
- package/src/runtime/streams/index.ts +12 -6
- package/src/runtime/streams/managed-stream.ts +4 -2
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
- package/src/runtime/streams/session-actor-coordinator.ts +39 -88
- package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
- package/src/runtime/streams/stream-session-runtime.ts +13 -34
- package/src/runtime/workers/index.ts +1 -1
|
@@ -144,7 +144,8 @@ class ZLinkHostSpotAddressTransport {
|
|
|
144
144
|
instanceSpot: call.instanceSpot,
|
|
145
145
|
timeoutMs: deadline.requireRemaining(),
|
|
146
146
|
signal: deadline.signal,
|
|
147
|
-
metadata: call.metadata
|
|
147
|
+
metadata: call.metadata,
|
|
148
|
+
onAdmitted: call.onAdmitted
|
|
148
149
|
}), deadline.signal);
|
|
149
150
|
this.traceInstanceAddress(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.ReplyReceived, ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request, spotId, request, existing.routerChannelId, existing.stableType, existing.targetNodeRid);
|
|
150
151
|
return reply;
|
|
@@ -173,7 +174,7 @@ class ZLinkHostSpotAddressTransport {
|
|
|
173
174
|
const table = this.options.completions(selected.meshName);
|
|
174
175
|
if (table === undefined)
|
|
175
176
|
throw new Error(`MeshNode '${selected.meshName}' completion table is not started.`);
|
|
176
|
-
const completionPromise = table.submit(() => selected.node.requestToMissingInstanceSpot(selected.target, encoded, deadlineUnixMs, call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId), call.metadata), deadline.signal);
|
|
177
|
+
const completionPromise = table.submit(() => selected.node.requestToMissingInstanceSpot(selected.target, encoded, deadlineUnixMs, call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId), call.metadata, call.onAdmitted), deadline.signal);
|
|
177
178
|
this.traceInstanceAddress(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent, ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request, spotId, request, selected.meshName, selected.target.stableType, selected.target.targetNodeRid);
|
|
178
179
|
const completion = await (0, abort_1.awaitWithAbort)(completionPromise, deadline.signal);
|
|
179
180
|
try {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkSpotRuntimeOptionsFactory = void 0;
|
|
4
|
+
const routing_id_1 = require("../routing-id");
|
|
4
5
|
const contracts_1 = require("../../contracts");
|
|
5
6
|
const actors_1 = require("../actors");
|
|
6
7
|
const channels_1 = require("../channels");
|
|
@@ -39,6 +40,13 @@ class ZLinkSpotRuntimeOptionsFactory {
|
|
|
39
40
|
}
|
|
40
41
|
await runtime.dispatchEntryActorJoin(meshName, actor, handoffBacklog);
|
|
41
42
|
},
|
|
43
|
+
admitEntryActorPacketPrefix: (meshName, actorId, records) => {
|
|
44
|
+
const runtime = this.options.spotNodeRuntime();
|
|
45
|
+
if (runtime === undefined) {
|
|
46
|
+
throw new configuration_1.ZLinkConfigurationException('Entry Actor replay requires the MeshNode runtime.');
|
|
47
|
+
}
|
|
48
|
+
return runtime.admitEntryActorPacketPrefix(meshName, actorId, records);
|
|
49
|
+
},
|
|
42
50
|
executeEntryActor: (meshName, actorId, operation) => {
|
|
43
51
|
const runtime = this.options.spotNodeRuntime();
|
|
44
52
|
if (runtime === undefined) {
|
|
@@ -135,8 +143,9 @@ class ZLinkSpotRuntimeOptionsFactory {
|
|
|
135
143
|
nativeSpotNodeProvider: (meshName) => this.options.spotNodeRuntime()?.meshNode(meshName),
|
|
136
144
|
spotRouteResolver: this.options.createLocationSpotRouteResolver(),
|
|
137
145
|
actorResolver: (actorId) => {
|
|
138
|
-
const
|
|
139
|
-
|
|
146
|
+
const manager = this.options.actorManager();
|
|
147
|
+
const state = manager?.getState(actorId);
|
|
148
|
+
return state?.isMoving === true ? undefined : manager?.resolveLocalActor(actorId);
|
|
140
149
|
},
|
|
141
150
|
canonicalActorJoinResolver: (fence) => this.options.boundSessionRelay.actorJoins.prepareCanonicalActorJoin({
|
|
142
151
|
actorId: fence.actorId,
|
|
@@ -152,13 +161,12 @@ class ZLinkSpotRuntimeOptionsFactory {
|
|
|
152
161
|
const actorRef = state?.nativeActorRef === undefined
|
|
153
162
|
? undefined
|
|
154
163
|
: (0, actors_1.toFrameworkActorRef)(state.nativeActorRef, state.meshName ?? '');
|
|
155
|
-
const localNodeRid = this.
|
|
164
|
+
const localNodeRid = state?.meshName === undefined ? undefined : this.meshNodeRoutingId(state.meshName);
|
|
156
165
|
if (state?.actor === undefined ||
|
|
157
|
-
state.spot === undefined ||
|
|
158
166
|
state.remoteActorPacketTarget !== undefined ||
|
|
159
167
|
actorRef === undefined ||
|
|
160
168
|
localNodeRid === undefined ||
|
|
161
|
-
|
|
169
|
+
!(0, routing_id_1.routingIdsEqual)(actorRef.nodeRid, localNodeRid)) {
|
|
162
170
|
return {};
|
|
163
171
|
}
|
|
164
172
|
return {
|
|
@@ -178,6 +186,7 @@ class ZLinkSpotRuntimeOptionsFactory {
|
|
|
178
186
|
contracts_1.ZLinkSpotRelocationCoordinationMode.FrameworkManaged);
|
|
179
187
|
},
|
|
180
188
|
actorTransferRuntime,
|
|
189
|
+
releaseActorMembers: (meshName, spotId) => this.options.actorManager()?.releaseSpotActorMembers(meshName, spotId) ?? Promise.resolve(),
|
|
181
190
|
boundSessionRuntime: this.options.boundSessionRelay.boundSessions,
|
|
182
191
|
actorHandoffRuntime: this.options.actorHandoff,
|
|
183
192
|
metrics: this.options.metrics,
|
|
@@ -192,11 +201,11 @@ class ZLinkSpotRuntimeOptionsFactory {
|
|
|
192
201
|
}
|
|
193
202
|
primaryNodeRoutingId() {
|
|
194
203
|
const node = this.primaryNode();
|
|
195
|
-
return node === undefined ? undefined :
|
|
204
|
+
return node === undefined ? undefined : node.status().routingId;
|
|
196
205
|
}
|
|
197
206
|
meshNodeRoutingId(meshName) {
|
|
198
207
|
const node = this.options.spotNodeRuntime()?.meshNode(meshName);
|
|
199
|
-
return node === undefined ? undefined :
|
|
208
|
+
return node === undefined ? undefined : node.status().routingId;
|
|
200
209
|
}
|
|
201
210
|
}
|
|
202
211
|
exports.ZLinkSpotRuntimeOptionsFactory = ZLinkSpotRuntimeOptionsFactory;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ZLinkUserSpotCreationCoordinator = void 0;
|
|
4
4
|
exports.encodeLocationCreationContent = encodeLocationCreationContent;
|
|
5
5
|
exports.decodeLocationCreationContent = decodeLocationCreationContent;
|
|
6
|
+
const routing_id_1 = require("../routing-id");
|
|
6
7
|
const node_crypto_1 = require("node:crypto");
|
|
7
8
|
const contracts_1 = require("../../contracts");
|
|
8
9
|
const service_authority_payload_codec_1 = require("../foundation/service-authority-payload-codec");
|
|
@@ -32,7 +33,6 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
32
33
|
const contentReference = encodeLocationCreationContent(request.requestPayload);
|
|
33
34
|
const excludedNodeRids = new Set();
|
|
34
35
|
let target;
|
|
35
|
-
let authorityTarget;
|
|
36
36
|
let reserved;
|
|
37
37
|
for (;;) {
|
|
38
38
|
try {
|
|
@@ -48,12 +48,12 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
48
48
|
deadline.close();
|
|
49
49
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PlacementCapacityExhausted, 'No eligible User Spot placement target is ready.', true);
|
|
50
50
|
}
|
|
51
|
-
if (excludedNodeRids.has(
|
|
51
|
+
if (excludedNodeRids.has((0, routing_id_1.encodeRoutingIdStorageHex)(target.nodeRid))) {
|
|
52
52
|
deadline.close();
|
|
53
53
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PlacementCapacityExhausted, 'No additional User Spot placement target is ready.', true);
|
|
54
54
|
}
|
|
55
55
|
const owner = target.owner;
|
|
56
|
-
authorityTarget = {
|
|
56
|
+
const authorityTarget = {
|
|
57
57
|
meshName: target.meshName,
|
|
58
58
|
nodeRid: target.nodeRid,
|
|
59
59
|
nodeLifecycleGeneration: target.nodeGeneration,
|
|
@@ -97,84 +97,31 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
97
97
|
throw error;
|
|
98
98
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, 'User Spot reservation Store operation failed.', false, error);
|
|
99
99
|
}
|
|
100
|
-
if (reserved.kind
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
(reserved.kind === 'conflict' &&
|
|
106
|
-
reserved.current.kind === 'snapshot' &&
|
|
107
|
-
reserved.current.allocation.objectKind === 'user_spot' &&
|
|
108
|
-
reserved.current.allocation.stableType === request.stableType)) {
|
|
109
|
-
const current = reserved.kind === 'alreadyExists' ? reserved.current : reserved.current;
|
|
110
|
-
if (current.kind === 'snapshot' && current.allocation.state === 'active') {
|
|
100
|
+
if (reserved.kind === 'alreadyExists' ||
|
|
101
|
+
(reserved.kind === 'conflict' &&
|
|
102
|
+
reserved.current.kind === 'snapshot' &&
|
|
103
|
+
reserved.current.allocation.objectKind === 'user_spot' &&
|
|
104
|
+
reserved.current.allocation.stableType === request.stableType)) {
|
|
111
105
|
if (request.generatedIdentity === true) {
|
|
112
106
|
deadline.close();
|
|
113
107
|
throw spotIdConflict(request.spotId);
|
|
114
108
|
}
|
|
115
|
-
const spot = spotRef(current, request);
|
|
116
|
-
deadline.close();
|
|
117
|
-
return {
|
|
118
|
-
result: { spot, state: contracts_1.ZLinkSpotCreateState.Existing },
|
|
119
|
-
spot
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
if (current.kind !== 'snapshot' || !sameCreationTarget(current, authorityTarget)) {
|
|
123
|
-
deadline.close();
|
|
124
|
-
if (request.generatedIdentity === true) {
|
|
125
|
-
throw spotIdConflict(request.spotId);
|
|
126
|
-
}
|
|
127
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, 'User Spot creation requires a remote generation-fenced create operation.');
|
|
128
|
-
}
|
|
129
|
-
if (current.allocation.state === 'reserved' && !target.isLocal) {
|
|
130
109
|
try {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
finally {
|
|
134
|
-
deadline.close();
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
if (current.allocation.state === 'reserved' && target.isLocal) {
|
|
138
|
-
const pending = current.pendingCreation;
|
|
139
|
-
const admitted = pending === undefined ? undefined : this.localCreations.get(pending.reservationId);
|
|
140
|
-
if (admitted === undefined) {
|
|
141
|
-
try {
|
|
142
|
-
const spot = await this.awaitReady(request, signal);
|
|
143
|
-
return {
|
|
144
|
-
result: { spot, state: contracts_1.ZLinkSpotCreateState.Existing },
|
|
145
|
-
spot
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
finally {
|
|
110
|
+
const spot = await this.awaitReady(request, signal);
|
|
111
|
+
if (spot !== undefined) {
|
|
149
112
|
deadline.close();
|
|
113
|
+
return { result: { spot, state: contracts_1.ZLinkSpotCreateState.Existing }, spot };
|
|
150
114
|
}
|
|
151
115
|
}
|
|
152
|
-
|
|
153
|
-
const result = await admitted;
|
|
154
|
-
return result.result.state === contracts_1.ZLinkSpotCreateState.Created
|
|
155
|
-
? {
|
|
156
|
-
result: {
|
|
157
|
-
...result.result,
|
|
158
|
-
state: contracts_1.ZLinkSpotCreateState.Existing
|
|
159
|
-
},
|
|
160
|
-
spot: result.spot
|
|
161
|
-
}
|
|
162
|
-
: result;
|
|
163
|
-
}
|
|
164
|
-
finally {
|
|
116
|
+
catch (error) {
|
|
165
117
|
deadline.close();
|
|
118
|
+
throw error;
|
|
166
119
|
}
|
|
120
|
+
continue;
|
|
167
121
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
result: { spot, state: contracts_1.ZLinkSpotCreateState.Existing },
|
|
172
|
-
spot
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
finally {
|
|
176
|
-
deadline.close();
|
|
177
|
-
}
|
|
122
|
+
if (reserved.kind !== 'placementCapacityExhausted')
|
|
123
|
+
break;
|
|
124
|
+
excludedNodeRids.add((0, routing_id_1.encodeRoutingIdStorageHex)(target.nodeRid));
|
|
178
125
|
}
|
|
179
126
|
if (reserved.kind === 'typeMismatch') {
|
|
180
127
|
deadline.close();
|
|
@@ -272,7 +219,7 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
272
219
|
current.allocation.stableType === record.stableType &&
|
|
273
220
|
current.objectGeneration === record.reservation.objectGeneration &&
|
|
274
221
|
current.authorityOwnerGeneration === record.reservation.authorityOwnerGeneration &&
|
|
275
|
-
|
|
222
|
+
(0, routing_id_1.routingIdsEqual)(current.allocation.descriptor.rid, record.reservation.targetNodeRid) &&
|
|
276
223
|
current.allocation.descriptorLifecycleGeneration ===
|
|
277
224
|
record.reservation.targetNodeGeneration &&
|
|
278
225
|
current.ownerId === record.reservation.targetOwnerId &&
|
|
@@ -313,7 +260,7 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
313
260
|
try {
|
|
314
261
|
local = await materialize(requestPayload, current, signal ?? new AbortController().signal);
|
|
315
262
|
if (local.state === contracts_1.ZLinkSpotCreateState.Rejected) {
|
|
316
|
-
local.publication?.abort();
|
|
263
|
+
await local.publication?.abort();
|
|
317
264
|
await this.options.store.abort({
|
|
318
265
|
key: { kind: 'user_spot', globalId: record.spotId },
|
|
319
266
|
reservationId: pending.reservationId,
|
|
@@ -372,14 +319,16 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
372
319
|
objectGeneration: committed.ready.objectGeneration
|
|
373
320
|
};
|
|
374
321
|
this.options.publishReadyRoute?.(committed.ready.allocation.descriptor.meshName, readySpotRoute(record.spotId, committed.ready));
|
|
375
|
-
local.publication?.publish();
|
|
322
|
+
await local.publication?.publish();
|
|
376
323
|
return {
|
|
377
324
|
result: { spot: readySpot, state: local.state, reply: local.reply },
|
|
378
325
|
spot: readySpot
|
|
379
326
|
};
|
|
380
327
|
}
|
|
381
328
|
catch (error) {
|
|
382
|
-
|
|
329
|
+
const publicationCleanup = await Promise.allSettled([
|
|
330
|
+
Promise.resolve().then(() => local?.publication?.abort())
|
|
331
|
+
]);
|
|
383
332
|
const cleanupDeadline = createDeadline(this.options.cleanupTimeoutMs ?? DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS);
|
|
384
333
|
const cleanupSignal = cleanupDeadline.signal;
|
|
385
334
|
const cleanup = await Promise.allSettled([
|
|
@@ -400,7 +349,7 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
400
349
|
waitForAbort(discard?.(cleanupSignal) ?? Promise.resolve(), cleanupSignal)
|
|
401
350
|
]);
|
|
402
351
|
cleanupDeadline.close();
|
|
403
|
-
const cleanupErrors = cleanup
|
|
352
|
+
const cleanupErrors = [...publicationCleanup, ...cleanup]
|
|
404
353
|
.filter((item) => item.status === 'rejected')
|
|
405
354
|
.map((item) => item.reason);
|
|
406
355
|
if (cleanupErrors.length > 0) {
|
|
@@ -475,7 +424,14 @@ class ZLinkUserSpotCreationCoordinator {
|
|
|
475
424
|
for (;;) {
|
|
476
425
|
signal.throwIfAborted();
|
|
477
426
|
const current = await this.options.store.readAuthority(key, signal);
|
|
478
|
-
if (current.kind === '
|
|
427
|
+
if (current.kind === 'missing')
|
|
428
|
+
return undefined;
|
|
429
|
+
if (current.allocation.objectKind !== 'user_spot' ||
|
|
430
|
+
current.allocation.stableType !== request.stableType) {
|
|
431
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotTypeMismatch, `User Spot '${String(request.spotId)}' has another stable type.`);
|
|
432
|
+
}
|
|
433
|
+
if (current.allocation.state === 'active' &&
|
|
434
|
+
(0, service_authority_payload_codec_1.decodeServiceClosingSpotAuthority)(current.payload) === undefined) {
|
|
479
435
|
return spotRef(current, request);
|
|
480
436
|
}
|
|
481
437
|
await wait(this.options.pollIntervalMs ?? DEFAULT_USER_SPOT_POLL_INTERVAL_MS, signal);
|
|
@@ -574,7 +530,7 @@ function requireCloseTarget(current, spotId, fence) {
|
|
|
574
530
|
decoded.ownerLeaseGeneration !== current.ownerLeaseGeneration ||
|
|
575
531
|
allocation.objectKind !== 'user_spot' ||
|
|
576
532
|
allocation.state !== 'active' ||
|
|
577
|
-
|
|
533
|
+
!(0, routing_id_1.routingIdsEqual)(allocation.descriptor.rid, fence.nodeRid) ||
|
|
578
534
|
(fence.meshName !== undefined && allocation.descriptor.meshName !== fence.meshName) ||
|
|
579
535
|
(fence.nodeGeneration !== undefined &&
|
|
580
536
|
allocation.descriptorLifecycleGeneration !== fence.nodeGeneration) ||
|
|
@@ -662,13 +618,6 @@ function decodeLocationCreationContent(reference, expectedSha256, expectedEncode
|
|
|
662
618
|
}
|
|
663
619
|
return payload;
|
|
664
620
|
}
|
|
665
|
-
function sameCreationTarget(snapshot, target) {
|
|
666
|
-
return (snapshot.allocation.descriptor.meshName === target.meshName &&
|
|
667
|
-
String(snapshot.allocation.descriptor.rid) === String(target.nodeRid) &&
|
|
668
|
-
snapshot.allocation.descriptorLifecycleGeneration === target.nodeLifecycleGeneration &&
|
|
669
|
-
snapshot.ownerId === target.owner.ownerId &&
|
|
670
|
-
snapshot.ownerLeaseGeneration === target.owner.leaseGeneration);
|
|
671
|
-
}
|
|
672
621
|
function remoteCreationFingerprint(record) {
|
|
673
622
|
return JSON.stringify({
|
|
674
623
|
spotId: record.spotId,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ActorRef, RoutingId } from '../../contracts/Common';
|
|
2
2
|
import { type ZLinkActorLocation } from './internal-location-contracts';
|
|
3
3
|
import type { ZLinkActorLocationStore, ZLinkAuthorityStore } from './internal-store-contracts';
|
|
4
|
+
import { ZLinkSpotKind } from '../../contracts/Spots';
|
|
4
5
|
import type { IZLinkLocationLifecycleRuntime, ZLinkOwnershipLostEvent } from './lifecycle-runtime';
|
|
5
6
|
export declare enum ZLinkActorClaimStatus {
|
|
6
7
|
Claimed = "claimed",
|
|
@@ -31,8 +32,7 @@ export declare class ZLinkActorLocationClaims {
|
|
|
31
32
|
claim(actorType: string, actorId: string, nodeRid: RoutingId, deactivate?: () => Promise<void>): Promise<ZLinkActorClaimResult>;
|
|
32
33
|
setRef(actorType: string, actorId: string, actorRef: ActorRef, ownerNodeGeneration: bigint): Promise<void>;
|
|
33
34
|
takeoverJoinedSpot(actorType: string, actorId: string, actorRef: ActorRef, spotMeshName: string, spotId: RoutingId, spotGeneration: bigint, membershipEpoch: bigint, ownerNodeGeneration: bigint, deactivate?: () => Promise<void>): Promise<ZLinkActorClaimResult>;
|
|
34
|
-
|
|
35
|
-
notifyLeftSpot(actorType: string, actorId: string, entrySpotId: RoutingId, entrySpotGeneration: bigint, membershipEpoch: bigint, ownerNodeGeneration: bigint): Promise<void>;
|
|
35
|
+
commitMembership(actorType: string, actorRef: ActorRef, authorityOwnerGeneration: bigint, spotId: RoutingId, spotGeneration: bigint, spotKind: ZLinkSpotKind.Entry | ZLinkSpotKind.User, ownerNodeGeneration: bigint): Promise<void>;
|
|
36
36
|
release(_actorType: string, actorId: string, actorRef?: ActorRef): Promise<void>;
|
|
37
37
|
owns(_actorType: string, actorId: string): boolean;
|
|
38
38
|
snapshot(actorId: string): ZLinkActorLocation | undefined;
|
|
@@ -6,6 +6,7 @@ const Spots_1 = require("../../contracts/Spots");
|
|
|
6
6
|
const key_codec_1 = require("./key-codec");
|
|
7
7
|
const authority_key_codec_1 = require("./authority-key-codec");
|
|
8
8
|
const routing_id_1 = require("../routing-id");
|
|
9
|
+
const actor_authority_publication_1 = require("../actors/actor-authority-publication");
|
|
9
10
|
var ZLinkActorClaimStatus;
|
|
10
11
|
(function (ZLinkActorClaimStatus) {
|
|
11
12
|
ZLinkActorClaimStatus["Claimed"] = "claimed";
|
|
@@ -149,25 +150,39 @@ class ZLinkActorLocationClaims {
|
|
|
149
150
|
});
|
|
150
151
|
return { status: ZLinkActorClaimStatus.Claimed, claimed, generation: result.generation };
|
|
151
152
|
}
|
|
152
|
-
async
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
153
|
+
async commitMembership(actorType, actorRef, authorityOwnerGeneration, spotId, spotGeneration, spotKind, ownerNodeGeneration) {
|
|
154
|
+
const actorId = actorRef.actorId;
|
|
155
|
+
const store = this.authorityStore;
|
|
156
|
+
const owner = this.runtime.currentOwnerToken;
|
|
157
|
+
if (store === undefined || owner === undefined) {
|
|
158
|
+
throw new Error('Actor membership commit requires Location Store authority and owner.');
|
|
159
|
+
}
|
|
160
|
+
const key = (0, authority_key_codec_1.encodeAuthorityKey)('actor', actorId);
|
|
161
|
+
const current = await store.readAuthority(key);
|
|
162
|
+
if (!matchesActorAuthority(current, actorRef, owner) ||
|
|
163
|
+
current.allocation.stableType !== actorType ||
|
|
164
|
+
current.authorityOwnerGeneration !== authorityOwnerGeneration ||
|
|
165
|
+
current.allocation.descriptorLifecycleGeneration !== ownerNodeGeneration) {
|
|
166
|
+
throw new Error(`Actor '${actorId}' membership authority fence does not match.`);
|
|
167
|
+
}
|
|
168
|
+
const identity = (0, actor_authority_publication_1.decodeActorAuthorityIdentity)(current.payload, current.objectGeneration);
|
|
169
|
+
if (identity === undefined ||
|
|
170
|
+
identity.actorType !== actorType ||
|
|
171
|
+
identity.ownerNodeGeneration !== ownerNodeGeneration ||
|
|
172
|
+
identity.owner.ownerId !== owner.ownerId ||
|
|
173
|
+
identity.owner.leaseGeneration !== owner.leaseGeneration ||
|
|
174
|
+
!(0, routing_id_1.routingIdsEqual)(identity.actor.nodeRid, actorRef.nodeRid) ||
|
|
175
|
+
identity.meshName !== actorRef.meshName) {
|
|
176
|
+
throw new Error(`Actor '${actorId}' membership authority identity does not match.`);
|
|
177
|
+
}
|
|
178
|
+
const result = await store.compareExchangeAuthority(key, current.storeVersion, {
|
|
179
|
+
kind: 'put',
|
|
180
|
+
generationTransition: 'preserve',
|
|
181
|
+
payload: (0, actor_authority_publication_1.rewriteActorAuthorityRoute)(current.payload, actorRef, String(spotId), spotGeneration, spotKind)
|
|
182
|
+
});
|
|
183
|
+
if (result.kind !== 'stored') {
|
|
184
|
+
throw new Error(`Actor '${actorId}' membership commit was rejected with status ${result.kind}.`);
|
|
185
|
+
}
|
|
171
186
|
}
|
|
172
187
|
async release(_actorType, actorId, actorRef) {
|
|
173
188
|
const key = { meshName: this.entryMeshName, actorId };
|
|
@@ -28,10 +28,12 @@ export declare class ZLinkAutoConnectLoop {
|
|
|
28
28
|
private lastTickFailed;
|
|
29
29
|
constructor(options: ZLinkAutoConnectLoopOptions);
|
|
30
30
|
start(signal?: AbortSignal): Promise<void>;
|
|
31
|
+
requestPeerReconcile(meshName: string, _peerRid: string): Promise<void>;
|
|
31
32
|
stop(signal?: AbortSignal): Promise<void>;
|
|
32
33
|
prepareTransportShutdown(): Promise<void>;
|
|
33
34
|
finishTransportShutdown(signal?: AbortSignal): Promise<void>;
|
|
34
35
|
tick(signal?: AbortSignal): Promise<void>;
|
|
36
|
+
private tickCore;
|
|
35
37
|
private runReconcile;
|
|
36
38
|
private scheduleNext;
|
|
37
39
|
}
|
|
@@ -40,6 +40,16 @@ class ZLinkAutoConnectLoop {
|
|
|
40
40
|
return;
|
|
41
41
|
this.scheduleNext();
|
|
42
42
|
}
|
|
43
|
+
async requestPeerReconcile(meshName, _peerRid) {
|
|
44
|
+
const controller = this.controller;
|
|
45
|
+
if (meshName !== this.meshName || controller === undefined)
|
|
46
|
+
return;
|
|
47
|
+
// A fresh descriptor scan uses the same RID ordering and connection owner as a periodic tick.
|
|
48
|
+
await this.lane.run(async () => {
|
|
49
|
+
if (!controller.signal.aborted)
|
|
50
|
+
await this.runReconcile(controller.signal);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
43
53
|
async stop(signal) {
|
|
44
54
|
await this.prepareTransportShutdown();
|
|
45
55
|
await this.finishTransportShutdown(signal);
|
|
@@ -60,7 +70,10 @@ class ZLinkAutoConnectLoop {
|
|
|
60
70
|
await this.reconciler.unpublishLocal(signal);
|
|
61
71
|
}
|
|
62
72
|
async tick(signal) {
|
|
63
|
-
|
|
73
|
+
await this.lane.run(() => this.tickCore(signal));
|
|
74
|
+
}
|
|
75
|
+
async tickCore(signal) {
|
|
76
|
+
const lastTickFailed = this.lastTickFailed;
|
|
64
77
|
if (this.changeStampStore?.getMeshNodeChangeStamp !== undefined && !lastTickFailed) {
|
|
65
78
|
try {
|
|
66
79
|
const stamp = await this.changeStampStore.getMeshNodeChangeStamp(this.meshName, signal);
|
|
@@ -73,11 +86,10 @@ class ZLinkAutoConnectLoop {
|
|
|
73
86
|
return;
|
|
74
87
|
}
|
|
75
88
|
const tickFailed = await this.runReconcile(signal);
|
|
76
|
-
if (!tickFailed)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
});
|
|
89
|
+
if (!tickFailed) {
|
|
90
|
+
this.lastStamp = stamp;
|
|
91
|
+
this.lastLiveOwnerSetVersion = liveOwners;
|
|
92
|
+
}
|
|
81
93
|
return;
|
|
82
94
|
}
|
|
83
95
|
catch {
|
|
@@ -85,17 +97,13 @@ class ZLinkAutoConnectLoop {
|
|
|
85
97
|
}
|
|
86
98
|
}
|
|
87
99
|
await this.runReconcile(signal);
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
this.lastLiveOwnerSetVersion = undefined;
|
|
91
|
-
});
|
|
100
|
+
this.lastStamp = undefined;
|
|
101
|
+
this.lastLiveOwnerSetVersion = undefined;
|
|
92
102
|
}
|
|
93
103
|
async runReconcile(signal) {
|
|
94
104
|
await this.reconciler.tick(signal);
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
return this.lastTickFailed;
|
|
98
|
-
});
|
|
105
|
+
this.lastTickFailed = this.reconciler.storeFailed;
|
|
106
|
+
return this.lastTickFailed;
|
|
99
107
|
}
|
|
100
108
|
scheduleNext() {
|
|
101
109
|
if (this.controller === undefined || this.controller.signal.aborted) {
|
|
@@ -148,17 +148,12 @@ class ZLinkAutoConnectReconciler {
|
|
|
148
148
|
desired.set(key, target);
|
|
149
149
|
}
|
|
150
150
|
const deferringMissingTargets = this.monotonicNowMs() < (await this.lane.run(() => this.recoveryDeferUntilMs));
|
|
151
|
-
let staleCandidates = candidates;
|
|
152
151
|
if (deferringMissingTargets) {
|
|
153
|
-
const retainedCandidates = new Map(candidates);
|
|
154
152
|
const lastDesired = await this.lane.run(() => [...this.lastDesired]);
|
|
155
153
|
for (const [key, target] of lastDesired) {
|
|
156
154
|
if (!desired.has(key))
|
|
157
155
|
desired.set(key, target);
|
|
158
|
-
if (!retainedCandidates.has(key))
|
|
159
|
-
retainedCandidates.set(key, target);
|
|
160
156
|
}
|
|
161
|
-
staleCandidates = retainedCandidates;
|
|
162
157
|
}
|
|
163
158
|
await this.lane.run(() => {
|
|
164
159
|
this.lastDesired = new Map(desired);
|
|
@@ -219,7 +214,6 @@ class ZLinkAutoConnectReconciler {
|
|
|
219
214
|
});
|
|
220
215
|
}
|
|
221
216
|
}
|
|
222
|
-
this.executor.disconnectStalePeers?.([...staleCandidates.values()]);
|
|
223
217
|
const activeTargets = await this.lane.run(() => [...this.active]);
|
|
224
218
|
for (const [key, target] of activeTargets) {
|
|
225
219
|
if (!desired.has(key)) {
|
|
@@ -22,7 +22,6 @@ export interface ZLinkAutoConnectTarget {
|
|
|
22
22
|
export interface IZLinkAutoConnectExecutor {
|
|
23
23
|
connect(target: ZLinkAutoConnectTarget): Promise<boolean>;
|
|
24
24
|
disconnect(target: ZLinkAutoConnectTarget): void;
|
|
25
|
-
disconnectStalePeers?(targets: readonly ZLinkAutoConnectTarget[]): void;
|
|
26
25
|
isDisconnected?(target: ZLinkAutoConnectTarget): boolean;
|
|
27
26
|
onDisconnected?(handler: (endpoint: string) => void): void;
|
|
28
27
|
replaceNotRequired?(targets: readonly ZLinkAutoConnectTarget[]): void;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ZLinkDescriptorPublicationUnconfirmedError = void 0;
|
|
4
|
+
/** A descriptor Store write failed without a confirmed result (Location runtime section 5). */
|
|
5
|
+
class ZLinkDescriptorPublicationUnconfirmedError extends Error {
|
|
6
|
+
constructor(cause) {
|
|
7
|
+
super(cause instanceof Error ? cause.message : String(cause), { cause });
|
|
8
|
+
this.name = 'ZLinkDescriptorPublicationUnconfirmedError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.ZLinkDescriptorPublicationUnconfirmedError = ZLinkDescriptorPublicationUnconfirmedError;
|
|
@@ -6,6 +6,7 @@ import type { ZLinkObjectReserveRequest, ZLinkEndedOwnerReleaseIntent } from './
|
|
|
6
6
|
* implement this interface; the framework maps it to the opaque Store SPI.
|
|
7
7
|
*/
|
|
8
8
|
export interface ZLinkDomainLocationStore {
|
|
9
|
+
confirmedCapacity?(key: ZLinkMeshNodeDescriptorKey, limits: ZLinkMeshNodeDescriptor['populationCapacity']): ZLinkMeshNodeDescriptor['populationCapacity'] | undefined;
|
|
9
10
|
updateMeshNode(descriptor: ZLinkMeshNodeDescriptor, intent: ZLinkLocationWriteIntent, signal?: AbortSignal): Promise<ZLinkLocationWriteResult>;
|
|
10
11
|
removeMeshNode(key: ZLinkMeshNodeDescriptorKey, owner: ZLinkLocationOwnerToken, signal?: AbortSignal): Promise<ZLinkLocationWriteStatus>;
|
|
11
12
|
listMeshNodes(meshName: string, page?: ZLinkPageRequest, signal?: AbortSignal): Promise<ZLinkLocationPage<ZLinkMeshNodeDescriptor>>;
|
|
@@ -4,7 +4,6 @@ export interface ZLinkInMemoryAuthorityValidation {
|
|
|
4
4
|
isTargetLive(descriptor: ZLinkMeshNodeDescriptorKey, lifecycleGeneration: bigint, owner: ZLinkLocationOwnerToken): boolean;
|
|
5
5
|
placementCapacityAvailable?(descriptor: ZLinkMeshNodeDescriptorKey, requested: ZLinkCapacityVector, currentReserved: ZLinkCapacityVector, currentActive: ZLinkCapacityVector): boolean;
|
|
6
6
|
identityClaimed?(authorityKey: string): boolean;
|
|
7
|
-
hasSpotMembers?(spotId: string, objectGeneration: bigint): boolean;
|
|
8
7
|
}
|
|
9
8
|
/**
|
|
10
9
|
* In-memory reference provider for the provider-owned authority state machine.
|
|
@@ -31,6 +30,13 @@ export declare class ZLinkInMemoryAuthorityStore {
|
|
|
31
30
|
releaseEndedReservation(key: ZLinkAuthorityKey, expectedStoreVersion: string, signal?: AbortSignal, request?: ZLinkEndedOwnerReleaseIntent): Promise<boolean>;
|
|
32
31
|
acceptsUserSpotMembership(spotId: string, objectGeneration: bigint): boolean;
|
|
33
32
|
private tryReleaseEndedReservation;
|
|
33
|
+
/**
|
|
34
|
+
* Every Actor membership of the old User Spot incarnation must belong to an ended-owner
|
|
35
|
+
* member (location runtime §6.1): a steady Ready, activated authority outside any aggregate
|
|
36
|
+
* with an invalid owner lease. The release must fit one provider batch; its key set mirrors
|
|
37
|
+
* the provider repository batch (authorities, owner leases, descriptor and capacity records).
|
|
38
|
+
*/
|
|
39
|
+
private endedSpotMembers;
|
|
34
40
|
reserve(request: ZLinkObjectReserveRequest, signal?: AbortSignal): Promise<ZLinkObjectReserveResult>;
|
|
35
41
|
commit(request: ZLinkObjectCommitRequest, signal?: AbortSignal): Promise<ZLinkObjectCommitResult>;
|
|
36
42
|
completeCreation(request: ZLinkObjectCreationCompleteRequest, signal?: AbortSignal): Promise<ZLinkObjectCreationCompleteResult>;
|