@zlink-systems/framework 0.20.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +43 -33
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +244 -227
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +208 -219
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +0 -1
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +138 -130
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +73 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +215 -197
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/flow-context.ts +12 -3
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +95 -76
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +593 -563
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ZLinkFrameworkInternalErrorKind,
|
|
3
|
+
createInternalFrameworkException
|
|
4
|
+
} from '../framework-errors-internal';
|
|
2
5
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
3
6
|
import { ZLinkConfigurationException } from '../configuration';
|
|
4
7
|
|
|
@@ -110,9 +113,7 @@ export function deferActorJoin(intent: DeferredActorJoin): void {
|
|
|
110
113
|
scope.register(intent);
|
|
111
114
|
}
|
|
112
115
|
|
|
113
|
-
export function runActorHandlerWithDeferredJoins<T>(
|
|
114
|
-
handler: () => Promise<T> | T
|
|
115
|
-
): Promise<T>;
|
|
116
|
+
export function runActorHandlerWithDeferredJoins<T>(handler: () => Promise<T> | T): Promise<T>;
|
|
116
117
|
export function runActorHandlerWithDeferredJoins<T, TResult>(
|
|
117
118
|
handler: () => Promise<T> | T,
|
|
118
119
|
afterHandler: (result: T) => Promise<TResult> | TResult,
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ActorRef,
|
|
3
|
-
ZLinkActor,
|
|
4
|
-
ZLinkActorMembership
|
|
5
|
-
} from '../../contracts';
|
|
1
|
+
import type { ActorRef, ZLinkActor, ZLinkActorMembership } from '../../contracts';
|
|
6
2
|
import { ZLinkConfigurationException } from '../configuration';
|
|
7
3
|
|
|
8
4
|
export const ZLINK_ACTOR_LIFECYCLE_SNAPSHOT = Symbol('zlink.actor.lifecycle-snapshot');
|
|
@@ -61,9 +57,10 @@ export function createActorMembership(
|
|
|
61
57
|
|
|
62
58
|
function lifecycleSource(actor: ZLinkActor): ZLinkActorLifecycleSnapshotSource {
|
|
63
59
|
const rawContext: unknown = actor.context;
|
|
64
|
-
const context =
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
const context =
|
|
61
|
+
typeof rawContext === 'object' && rawContext !== null
|
|
62
|
+
? (rawContext as ZLinkActorLifecycleSnapshotContext)
|
|
63
|
+
: undefined;
|
|
67
64
|
// A caller can hand in a value that carries no Framework context at all, so the
|
|
68
65
|
// failure path reports the configuration error instead of dereferencing it.
|
|
69
66
|
const actorId = context?.actorId ?? '<unknown>';
|
|
@@ -9,15 +9,12 @@ import type {
|
|
|
9
9
|
RoutingId,
|
|
10
10
|
ZLinkActor,
|
|
11
11
|
ZLinkActorJoinOperationId,
|
|
12
|
-
ZLinkMessageSerializer
|
|
12
|
+
ZLinkMessageSerializer
|
|
13
13
|
} from '../../contracts';
|
|
14
14
|
import { ZLinkFrameworkErrorKind, ZLinkSpotKind } from '../../contracts';
|
|
15
15
|
import type { ZLinkActorJoinRuntimeResult } from './actor-runtime-contracts';
|
|
16
16
|
import type { Message } from '../../contracts/Common/Message';
|
|
17
|
-
import type {
|
|
18
|
-
ZLinkBackendActorRef,
|
|
19
|
-
ZLinkBackendMeshNode
|
|
20
|
-
} from '../backend/contracts';
|
|
17
|
+
import type { ZLinkBackendActorRef, ZLinkBackendMeshNode } from '../backend/contracts';
|
|
21
18
|
import {
|
|
22
19
|
closeMeshCompletion,
|
|
23
20
|
type ZLinkMeshCompletion,
|
|
@@ -87,23 +84,21 @@ export class ZLinkLocalNativeActorJoin {
|
|
|
87
84
|
);
|
|
88
85
|
}
|
|
89
86
|
const completion = await this.waitForJoinCompletion(
|
|
90
|
-
() =>
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
87
|
+
() =>
|
|
88
|
+
node.joinActorSpot(
|
|
89
|
+
actorRef,
|
|
90
|
+
toBackendRoutingId(target.targetNodeRid),
|
|
91
|
+
toBackendRoutingId(target.spotId),
|
|
92
|
+
target.targetSpotGeneration,
|
|
93
|
+
actorJoinApplicationPayload(request),
|
|
94
|
+
timeoutMs
|
|
95
|
+
),
|
|
98
96
|
completions,
|
|
99
97
|
timeoutMs,
|
|
100
98
|
signal
|
|
101
99
|
);
|
|
102
100
|
const control = completion.kindData;
|
|
103
|
-
if (
|
|
104
|
-
control?.kind !== 'actorJoinCompletion' ||
|
|
105
|
-
control.actor === null
|
|
106
|
-
) {
|
|
101
|
+
if (control?.kind !== 'actorJoinCompletion' || control.actor === null) {
|
|
107
102
|
closeMeshCompletion(completion);
|
|
108
103
|
const message = `Actor join failed for '${actor.context.actorId}' with result '${completion.terminalResult}' and errno '${completion.failureErrno}'.`;
|
|
109
104
|
// Classify the (terminal, fine) pair instead of collapsing every non-OK
|
|
@@ -111,11 +106,7 @@ export class ZLinkLocalNativeActorJoin {
|
|
|
111
106
|
// 83-118). An OK terminal that carries no join control is a protocol
|
|
112
107
|
// violation, not a missing route.
|
|
113
108
|
throw completion.terminalResult !== 0 || completion.failureErrno !== 0
|
|
114
|
-
? wireReplyFailureException(
|
|
115
|
-
completion.terminalResult,
|
|
116
|
-
completion.failureErrno,
|
|
117
|
-
message
|
|
118
|
-
)
|
|
109
|
+
? wireReplyFailureException(completion.terminalResult, completion.failureErrno, message)
|
|
119
110
|
: createInternalFrameworkException(
|
|
120
111
|
ZLinkFrameworkInternalErrorKind.RequestProtocolError,
|
|
121
112
|
message
|
|
@@ -150,9 +141,7 @@ export class ZLinkLocalNativeActorJoin {
|
|
|
150
141
|
);
|
|
151
142
|
// The Session owner relays from the verified Ready authority snapshot;
|
|
152
143
|
// membership coordinates alone cannot recreate a User/Instance fence.
|
|
153
|
-
state.setRemoteActorPacketTarget(
|
|
154
|
-
target.spotKind === ZLinkSpotKind.Entry ? undefined : target
|
|
155
|
-
);
|
|
144
|
+
state.setRemoteActorPacketTarget(target.spotKind === ZLinkSpotKind.Entry ? undefined : target);
|
|
156
145
|
if (state.actorType !== undefined) {
|
|
157
146
|
this.options.postCommitLocation?.joinedEventually(
|
|
158
147
|
state.actorType,
|
|
@@ -170,10 +159,7 @@ export class ZLinkLocalNativeActorJoin {
|
|
|
170
159
|
try {
|
|
171
160
|
return {
|
|
172
161
|
accepted: true,
|
|
173
|
-
actor: toFrameworkActorRef(
|
|
174
|
-
control.actor as never,
|
|
175
|
-
actorMeshName
|
|
176
|
-
),
|
|
162
|
+
actor: toFrameworkActorRef(control.actor as never, actorMeshName),
|
|
177
163
|
reply: completion.parts[0]
|
|
178
164
|
};
|
|
179
165
|
} finally {
|
|
@@ -197,15 +183,13 @@ export class ZLinkLocalNativeActorJoin {
|
|
|
197
183
|
const completions = this.requireCompletions();
|
|
198
184
|
const actorMeshName = runtimeActorMeshName(actor, state, '');
|
|
199
185
|
const targetNodeRid = spotRouteTarget?.targetNodeRid ?? nodeRid;
|
|
200
|
-
const remote =
|
|
201
|
-
|
|
186
|
+
const remote =
|
|
187
|
+
spotRouteTarget !== undefined &&
|
|
188
|
+
(!routingIdsEqual(
|
|
202
189
|
toFrameworkRoutingId(node.status().routingId),
|
|
203
190
|
spotRouteTarget.targetNodeRid
|
|
204
|
-
) ||
|
|
205
|
-
toFrameworkRoutingId(actorRef.nodeRid),
|
|
206
|
-
spotRouteTarget.targetNodeRid
|
|
207
|
-
)
|
|
208
|
-
);
|
|
191
|
+
) ||
|
|
192
|
+
!routingIdsEqual(toFrameworkRoutingId(actorRef.nodeRid), spotRouteTarget.targetNodeRid));
|
|
209
193
|
if (remote) {
|
|
210
194
|
return await this.relocateRemoteActorJoin(
|
|
211
195
|
node,
|
|
@@ -221,32 +205,26 @@ export class ZLinkLocalNativeActorJoin {
|
|
|
221
205
|
);
|
|
222
206
|
}
|
|
223
207
|
const completion = await this.waitForJoinCompletion(
|
|
224
|
-
() =>
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
208
|
+
() =>
|
|
209
|
+
node.joinActorEntrySpot(
|
|
210
|
+
actorRef,
|
|
211
|
+
toBackendRoutingId(targetNodeRid),
|
|
212
|
+
actorJoinApplicationPayload(request),
|
|
213
|
+
timeoutMs
|
|
214
|
+
),
|
|
230
215
|
completions,
|
|
231
216
|
timeoutMs,
|
|
232
217
|
signal
|
|
233
218
|
);
|
|
234
219
|
const control = completion.kindData;
|
|
235
|
-
if (
|
|
236
|
-
control?.kind !== 'actorJoinCompletion' ||
|
|
237
|
-
control.actor === null
|
|
238
|
-
) {
|
|
220
|
+
if (control?.kind !== 'actorJoinCompletion' || control.actor === null) {
|
|
239
221
|
closeMeshCompletion(completion);
|
|
240
222
|
const message = `Actor entry SPOT join failed for '${actor.context.actorId}' with result '${completion.terminalResult}' and errno '${completion.failureErrno}'.`;
|
|
241
223
|
// Classify the (terminal, fine) pair instead of collapsing to NotFound
|
|
242
224
|
// (spec 32-framework-error-model:83-118); an OK terminal with no join
|
|
243
225
|
// control is a protocol violation.
|
|
244
226
|
throw completion.terminalResult !== 0 || completion.failureErrno !== 0
|
|
245
|
-
? wireReplyFailureException(
|
|
246
|
-
completion.terminalResult,
|
|
247
|
-
completion.failureErrno,
|
|
248
|
-
message
|
|
249
|
-
)
|
|
227
|
+
? wireReplyFailureException(completion.terminalResult, completion.failureErrno, message)
|
|
250
228
|
: createInternalFrameworkException(
|
|
251
229
|
ZLinkFrameworkInternalErrorKind.RequestProtocolError,
|
|
252
230
|
message
|
|
@@ -291,10 +269,7 @@ export class ZLinkLocalNativeActorJoin {
|
|
|
291
269
|
try {
|
|
292
270
|
return {
|
|
293
271
|
accepted: true,
|
|
294
|
-
actor: toFrameworkActorRef(
|
|
295
|
-
control.actor as never,
|
|
296
|
-
actorMeshName
|
|
297
|
-
),
|
|
272
|
+
actor: toFrameworkActorRef(control.actor as never, actorMeshName),
|
|
298
273
|
reply: completion.parts[0]
|
|
299
274
|
};
|
|
300
275
|
} finally {
|
|
@@ -311,11 +286,7 @@ export class ZLinkLocalNativeActorJoin {
|
|
|
311
286
|
// The operation ID identifies one Core request. Once it is submitted, a
|
|
312
287
|
// NotConnected completion is terminal for that request; resubmitting it
|
|
313
288
|
// could execute the target lifecycle twice after a delayed reply.
|
|
314
|
-
return submitJoinWhenConnected(
|
|
315
|
-
() => completions.submit(submit, signal),
|
|
316
|
-
timeoutMs,
|
|
317
|
-
signal
|
|
318
|
-
);
|
|
289
|
+
return submitJoinWhenConnected(() => completions.submit(submit, signal), timeoutMs, signal);
|
|
319
290
|
}
|
|
320
291
|
|
|
321
292
|
private async relocateRemoteActorJoin(
|
|
@@ -339,9 +310,8 @@ export class ZLinkLocalNativeActorJoin {
|
|
|
339
310
|
}
|
|
340
311
|
const completions = this.requireCompletions();
|
|
341
312
|
let relocationId: string = randomUUID();
|
|
342
|
-
const completionOperationKey =
|
|
343
|
-
? undefined
|
|
344
|
-
: operationIdentityKey(completionOperationId);
|
|
313
|
+
const completionOperationKey =
|
|
314
|
+
completionOperationId === undefined ? undefined : operationIdentityKey(completionOperationId);
|
|
345
315
|
if (completionOperationKey === relocationId) {
|
|
346
316
|
throw new Error('Actor Join OperationId must be distinct from RelocationId.');
|
|
347
317
|
}
|
|
@@ -351,59 +321,61 @@ export class ZLinkLocalNativeActorJoin {
|
|
|
351
321
|
// the existing internal admission route (wire protocol §10); fabricating
|
|
352
322
|
// an Actor fence from the destination Spot would let a stale source pass
|
|
353
323
|
// receiver-side Authority-row equality.
|
|
354
|
-
const canonicalAdmission =
|
|
355
|
-
|| !supportsCanonicalActorJoin(node, entrySpot)
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
324
|
+
const canonicalAdmission =
|
|
325
|
+
actorAuthorityFence === undefined || !supportsCanonicalActorJoin(node, entrySpot)
|
|
326
|
+
? undefined
|
|
327
|
+
: {
|
|
328
|
+
request: actorJoinApplicationPayload(request),
|
|
329
|
+
actorFence: {
|
|
330
|
+
targetNodeGeneration: actorAuthorityFence.nodeGeneration,
|
|
331
|
+
authorityOwnerGeneration: actorAuthorityFence.authorityOwnerGeneration,
|
|
332
|
+
ownerLeaseGeneration: actorAuthorityFence.ownerLeaseGeneration
|
|
333
|
+
},
|
|
334
|
+
local: { phase: 'admission', transferId: relocationId } as const
|
|
335
|
+
};
|
|
366
336
|
let admissionOperationId: ZLinkActorJoinOperationId | undefined;
|
|
367
337
|
const admission = await this.waitForJoinCompletion(
|
|
368
338
|
() => {
|
|
369
|
-
const legacyAdmission =
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
339
|
+
const legacyAdmission =
|
|
340
|
+
canonicalAdmission === undefined
|
|
341
|
+
? legacyRemoteActorJoinPayload(actor, state, actorRef, target, request, relocationId)
|
|
342
|
+
: undefined;
|
|
343
|
+
const operationId =
|
|
344
|
+
canonicalAdmission === undefined
|
|
345
|
+
? entrySpot
|
|
346
|
+
? node.joinActorEntrySpot(
|
|
347
|
+
actorRef,
|
|
348
|
+
toBackendRoutingId(target.targetNodeRid),
|
|
349
|
+
legacyAdmission!,
|
|
350
|
+
timeoutMs
|
|
351
|
+
)
|
|
352
|
+
: node.joinActorSpot(
|
|
353
|
+
actorRef,
|
|
354
|
+
toBackendRoutingId(target.targetNodeRid),
|
|
355
|
+
toBackendRoutingId(target.spotId),
|
|
356
|
+
target.targetSpotGeneration!,
|
|
357
|
+
legacyAdmission!,
|
|
358
|
+
timeoutMs
|
|
359
|
+
)
|
|
360
|
+
: entrySpot
|
|
361
|
+
? node.joinActorEntrySpotCanonical!(
|
|
362
|
+
actorRef,
|
|
363
|
+
toBackendRoutingId(target.targetNodeRid),
|
|
364
|
+
canonicalAdmission.request,
|
|
365
|
+
canonicalAdmission.actorFence,
|
|
366
|
+
canonicalAdmission.local,
|
|
367
|
+
timeoutMs
|
|
368
|
+
)
|
|
369
|
+
: node.joinActorSpotCanonical!(
|
|
370
|
+
actorRef,
|
|
371
|
+
toBackendRoutingId(target.targetNodeRid),
|
|
372
|
+
toBackendRoutingId(target.spotId),
|
|
373
|
+
target.targetSpotGeneration!,
|
|
374
|
+
canonicalAdmission.request,
|
|
375
|
+
canonicalAdmission.actorFence,
|
|
376
|
+
canonicalAdmission.local,
|
|
377
|
+
timeoutMs
|
|
378
|
+
);
|
|
407
379
|
admissionOperationId = operationId;
|
|
408
380
|
return operationId;
|
|
409
381
|
},
|
|
@@ -501,17 +473,16 @@ export class ZLinkLocalNativeActorJoin {
|
|
|
501
473
|
: {
|
|
502
474
|
replyContentType: control.replyContentType ?? 'application/octet-stream'
|
|
503
475
|
}),
|
|
504
|
-
reply:
|
|
505
|
-
|
|
506
|
-
|
|
476
|
+
reply:
|
|
477
|
+
completionOperationId === undefined
|
|
478
|
+
? Buffer.alloc(0)
|
|
479
|
+
: Buffer.from(admission.parts[0]?.data() ?? []),
|
|
507
480
|
actorNodeGeneration: actorAuthorityFence!.nodeGeneration,
|
|
508
481
|
expectedOwnerLeaseGeneration: actorAuthorityFence!.ownerLeaseGeneration,
|
|
509
482
|
targetNodeGeneration: target.targetNodeGeneration!,
|
|
510
483
|
targetSpotGeneration: control.location.spotGeneration,
|
|
511
|
-
targetAuthorityOwnerGeneration:
|
|
512
|
-
|
|
513
|
-
targetSpotAuthorityOwnerGeneration:
|
|
514
|
-
target.authorityOwnerGeneration ?? 1n
|
|
484
|
+
targetAuthorityOwnerGeneration: actorAuthorityFence!.authorityOwnerGeneration + 1n,
|
|
485
|
+
targetSpotAuthorityOwnerGeneration: target.authorityOwnerGeneration ?? 1n
|
|
515
486
|
}
|
|
516
487
|
}),
|
|
517
488
|
advertisedReceiveChunkLimitBytes: control.receiveChunkLimitBytes,
|
|
@@ -556,17 +527,18 @@ export class ZLinkLocalNativeActorJoin {
|
|
|
556
527
|
}
|
|
557
528
|
return completions;
|
|
558
529
|
}
|
|
559
|
-
|
|
560
530
|
}
|
|
561
531
|
|
|
562
532
|
function remoteJoinAuthorityFence(
|
|
563
533
|
node: ZLinkBackendMeshNode,
|
|
564
534
|
state: ZLinkActorRuntimeState
|
|
565
|
-
):
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
535
|
+
):
|
|
536
|
+
| {
|
|
537
|
+
readonly nodeGeneration: bigint;
|
|
538
|
+
readonly authorityOwnerGeneration: bigint;
|
|
539
|
+
readonly ownerLeaseGeneration: bigint;
|
|
540
|
+
}
|
|
541
|
+
| undefined {
|
|
570
542
|
if (state.locationGeneration === undefined || state.ownerLeaseGeneration === undefined) {
|
|
571
543
|
return undefined;
|
|
572
544
|
}
|
|
@@ -577,10 +549,7 @@ function remoteJoinAuthorityFence(
|
|
|
577
549
|
};
|
|
578
550
|
}
|
|
579
551
|
|
|
580
|
-
function supportsCanonicalActorJoin(
|
|
581
|
-
node: ZLinkBackendMeshNode,
|
|
582
|
-
entrySpot: boolean
|
|
583
|
-
): boolean {
|
|
552
|
+
function supportsCanonicalActorJoin(node: ZLinkBackendMeshNode, entrySpot: boolean): boolean {
|
|
584
553
|
return entrySpot
|
|
585
554
|
? typeof node.joinActorEntrySpotCanonical === 'function'
|
|
586
555
|
: typeof node.joinActorSpotCanonical === 'function';
|
|
@@ -606,20 +575,22 @@ function legacyRemoteActorJoinPayload(
|
|
|
606
575
|
// only when this backend cannot prove the source Actor fence needed for
|
|
607
576
|
// canonical admission; it never substitutes target-Spot values as an Actor
|
|
608
577
|
// authority fence.
|
|
609
|
-
const payload = Buffer.from(
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
578
|
+
const payload = Buffer.from(
|
|
579
|
+
JSON.stringify({
|
|
580
|
+
packetName: '__zlink.actor.join_spot.request',
|
|
581
|
+
phase: 'admission',
|
|
582
|
+
transferId,
|
|
583
|
+
spotId: String(target.spotId),
|
|
584
|
+
actorId: actor.context.actorId,
|
|
585
|
+
actorType: state.actorType,
|
|
586
|
+
actorNodeRid: String(actorRef.nodeRid),
|
|
587
|
+
actorGeneration: actorRef.generation.toString(),
|
|
588
|
+
...(state.spotId === undefined ? {} : { sourceSpotId: String(state.spotId) }),
|
|
589
|
+
...(target.routerChannelId.length === 0 ? {} : { routerChannelId: target.routerChannelId }),
|
|
590
|
+
request: Buffer.from(request.data()).toString('base64'),
|
|
591
|
+
requestContentType: frameworkPayloadContentType(request)
|
|
592
|
+
})
|
|
593
|
+
);
|
|
623
594
|
return {
|
|
624
595
|
packetName: ZLINK_FRAMEWORK_ACTOR_JOIN_PACKET_NAME,
|
|
625
596
|
contentType: 'application/json',
|
|
@@ -636,8 +607,10 @@ function canonicalHandoffRelocationId(handoffId: string): string {
|
|
|
636
607
|
if (!/^[0-9a-f]{32}$/u.test(hex) || /^0+$/u.test(hex)) {
|
|
637
608
|
throw new TypeError('Canonical Actor Join handoff id is not a non-zero 128-bit identity.');
|
|
638
609
|
}
|
|
639
|
-
return
|
|
640
|
-
|
|
610
|
+
return (
|
|
611
|
+
`${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}` +
|
|
612
|
+
`-${hex.slice(16, 20)}-${hex.slice(20)}`
|
|
613
|
+
);
|
|
641
614
|
}
|
|
642
615
|
|
|
643
616
|
function remoteActorJoinFailureException(
|
|
@@ -650,17 +623,18 @@ function remoteActorJoinFailureException(
|
|
|
650
623
|
const failure = wireReplyFailureException(terminalResult, failureErrno, message);
|
|
651
624
|
const targetGeneration = target.targetNodeGeneration;
|
|
652
625
|
if (
|
|
653
|
-
failure.kind === ZLinkFrameworkErrorKind.DeadlineExceeded
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
626
|
+
failure.kind === ZLinkFrameworkErrorKind.DeadlineExceeded &&
|
|
627
|
+
targetGeneration !== undefined &&
|
|
628
|
+
targetGeneration !== 0n &&
|
|
629
|
+
!node
|
|
630
|
+
.peers()
|
|
631
|
+
.some(
|
|
632
|
+
(peer) =>
|
|
633
|
+
peer.state === 3 &&
|
|
634
|
+
peer.routingId !== null &&
|
|
635
|
+
routingIdsEqual(peer.routingId, target.targetNodeRid) &&
|
|
636
|
+
peer.lifecycleGeneration === targetGeneration
|
|
662
637
|
)
|
|
663
|
-
&& peer.lifecycleGeneration === targetGeneration)
|
|
664
638
|
) {
|
|
665
639
|
return createInternalFrameworkException(
|
|
666
640
|
ZLinkFrameworkInternalErrorKind.RouteNotConnected,
|
|
@@ -680,9 +654,7 @@ function runtimeActorMeshName(
|
|
|
680
654
|
readonly context?: { readonly meshName?: string };
|
|
681
655
|
}
|
|
682
656
|
).context;
|
|
683
|
-
const stateMeshName = (
|
|
684
|
-
state as unknown as { readonly meshName?: string } | undefined
|
|
685
|
-
)?.meshName;
|
|
657
|
+
const stateMeshName = (state as unknown as { readonly meshName?: string } | undefined)?.meshName;
|
|
686
658
|
return context?.meshName ?? stateMeshName ?? fallback;
|
|
687
659
|
}
|
|
688
660
|
|
|
@@ -19,18 +19,13 @@ export class ZLinkActorSerialExecutor {
|
|
|
19
19
|
private readonly sourceSpotId: unknown,
|
|
20
20
|
options?: ZLinkSerialSchedulerOptions
|
|
21
21
|
) {
|
|
22
|
-
this.scheduler = new ZLinkSerialExecutionQueue(
|
|
23
|
-
(record) => this.runRecord(record),
|
|
24
|
-
options
|
|
25
|
-
);
|
|
22
|
+
this.scheduler = new ZLinkSerialExecutionQueue((record) => this.runRecord(record), options);
|
|
26
23
|
}
|
|
27
24
|
|
|
28
|
-
execute<T>(
|
|
29
|
-
operation: () => Promise<T> | T,
|
|
30
|
-
workOptions?: ZLinkSerialWorkOptions
|
|
31
|
-
): Promise<T> {
|
|
25
|
+
execute<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T> {
|
|
32
26
|
const boundOperation = bindApplicationJobPermit(() =>
|
|
33
|
-
runZLinkActorExecution(this.actorId, this.sourceSpotId, operation)
|
|
27
|
+
runZLinkActorExecution(this.actorId, this.sourceSpotId, operation)
|
|
28
|
+
);
|
|
34
29
|
return hasApplicationJobPermit()
|
|
35
30
|
? this.scheduler.submitPreAdmitted(boundOperation, workOptions)
|
|
36
31
|
: this.scheduler.submit(boundOperation, workOptions);
|
|
@@ -46,9 +41,7 @@ export class ZLinkActorSerialExecutor {
|
|
|
46
41
|
admitDurablePrefix(
|
|
47
42
|
records: readonly {
|
|
48
43
|
readonly operation: (
|
|
49
|
-
executeChild: <TChild>(
|
|
50
|
-
child: () => Promise<TChild> | TChild
|
|
51
|
-
) => Promise<TChild>
|
|
44
|
+
executeChild: <TChild>(child: () => Promise<TChild> | TChild) => Promise<TChild>
|
|
52
45
|
) => Promise<void>;
|
|
53
46
|
readonly preparation?: ZLinkSerialWorkPreparation;
|
|
54
47
|
readonly workOptions?: ZLinkSerialWorkOptions;
|
|
@@ -56,13 +49,17 @@ export class ZLinkActorSerialExecutor {
|
|
|
56
49
|
): readonly Promise<void>[] {
|
|
57
50
|
// No await occurs in this map: the whole durable prefix is appended in
|
|
58
51
|
// one event-loop turn before later ingress can observe the released hold.
|
|
59
|
-
return records.map(record =>
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
52
|
+
return records.map((record) =>
|
|
53
|
+
this.scheduler.admitDurablePrefix(
|
|
54
|
+
() =>
|
|
55
|
+
record.operation((child) =>
|
|
56
|
+
runZLinkActorExecution(this.actorId, this.sourceSpotId, child)
|
|
57
|
+
),
|
|
58
|
+
record.workOptions,
|
|
59
|
+
undefined,
|
|
60
|
+
record.preparation
|
|
61
|
+
)
|
|
62
|
+
);
|
|
66
63
|
}
|
|
67
64
|
|
|
68
65
|
close(): Promise<void> {
|