@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
|
@@ -5,12 +5,14 @@ const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
|
5
5
|
const runtime_message_1 = require("../backend/runtime-message");
|
|
6
6
|
const contracts_1 = require("../../contracts");
|
|
7
7
|
const ConfigurationException_1 = require("../../contracts/Configuration/ConfigurationException");
|
|
8
|
+
const abort_1 = require("../abort");
|
|
8
9
|
const actors_1 = require("../actors");
|
|
9
10
|
const actor_packet_relay_wire_1 = require("../actors/actor-packet-relay-wire");
|
|
10
11
|
const actor_routed_json_request_1 = require("../actors/actor-routed-json-request");
|
|
11
12
|
const actor_message_follow_context_1 = require("../actors/actor-message-follow-context");
|
|
12
13
|
const bound_session_wire_1 = require("../actors/bound-session-wire");
|
|
13
14
|
const routing_id_1 = require("../routing-id");
|
|
15
|
+
const session_disconnected_wire_1 = require("../actors/session-disconnected-wire");
|
|
14
16
|
const submission_result_1 = require("../messaging/submission-result");
|
|
15
17
|
const actor_session_binding_runtime_owner_1 = require("../streams/actor-session-binding-runtime-owner");
|
|
16
18
|
const protocol_1 = require("../streams/protocol");
|
|
@@ -32,29 +34,14 @@ class ZLinkActorPacketRelay {
|
|
|
32
34
|
spotRouterChannelIdForMesh: spotRouterChannelIdByMesh?.call(options.meshRouters) ?? ((meshName) => meshName)
|
|
33
35
|
});
|
|
34
36
|
}
|
|
35
|
-
async notifyBoundActorDisconnected(actor, signal) {
|
|
36
|
-
|
|
37
|
-
const currentRemoteBoundSessionTarget = state?.spotId === undefined ? undefined : state.remoteBoundSessionTarget;
|
|
38
|
-
const currentRemoteActorPacketTarget = state?.spotId === undefined ? undefined : state.remoteActorPacketTarget;
|
|
39
|
-
const remoteTarget = currentRemoteBoundSessionTarget ??
|
|
40
|
-
currentRemoteActorPacketTarget ??
|
|
41
|
-
(state?.spotId === undefined ? undefined : this.targets.cachedTargetForActor(actor));
|
|
42
|
-
if (remoteTarget !== undefined) {
|
|
43
|
-
await this.notifyRemoteActorDisconnected(actor.actorId, remoteTarget, signal, actor.ref);
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
37
|
+
async notifyBoundActorDisconnected(actor, signal, binding) {
|
|
38
|
+
// The Session binding owns this route, including after relocation and detach (§5, §7).
|
|
46
39
|
const actorRefTarget = this.targets.targetForActorRef(actor.ref);
|
|
47
40
|
if (actorRefTarget !== undefined) {
|
|
48
|
-
await this.notifyRemoteActorDisconnected(actor.actorId, actorRefTarget, signal, actor.ref);
|
|
41
|
+
await this.notifyRemoteActorDisconnected(actor.actorId, actorRefTarget, signal, actor.ref, binding);
|
|
49
42
|
return;
|
|
50
43
|
}
|
|
51
|
-
|
|
52
|
-
const handled = await this.requireSpotManager().notifyJoinedSpotActorDisconnected(state.spotId, state.actor, signal);
|
|
53
|
-
if (handled) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
await this.notifyActorDisconnectedById(actor.actorId, signal);
|
|
44
|
+
await this.notifyLocalActorDisconnectedById(actor.actorId, signal, binding, actor.ref);
|
|
58
45
|
}
|
|
59
46
|
clearRemoteActorPacketTarget(actorId) {
|
|
60
47
|
this.targets.clear(actorId);
|
|
@@ -65,34 +52,22 @@ class ZLinkActorPacketRelay {
|
|
|
65
52
|
actorPacketTargetForState(actorId) {
|
|
66
53
|
return this.targets.targetForState(actorId);
|
|
67
54
|
}
|
|
68
|
-
async
|
|
55
|
+
async notifyLocalActorDisconnectedById(actorId, signal, binding, bindingActorRef) {
|
|
56
|
+
(0, abort_1.throwIfAborted)(signal);
|
|
69
57
|
const state = this.options.actorManager()?.getState(actorId);
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
async notifyLocalActorDisconnectedById(actorId, signal) {
|
|
80
|
-
const state = this.options.actorManager()?.getState(actorId);
|
|
81
|
-
if (state?.spotId !== undefined && state.actor !== undefined) {
|
|
82
|
-
const handled = await this.requireSpotManager().notifyJoinedSpotActorDisconnected(state.spotId, state.actor, signal);
|
|
83
|
-
if (handled) {
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
const localActor = state?.actor;
|
|
88
|
-
if (localActor === undefined) {
|
|
89
|
-
throw new Error(`Actor '${actorId}' does not have a local actor instance.`);
|
|
58
|
+
const frame = this.disconnectedFrame(actorId, binding);
|
|
59
|
+
const header = runtime_message_1.ZLinkBufferMessage.fromOwned(Buffer.from(frame.header));
|
|
60
|
+
const body = runtime_message_1.ZLinkBufferMessage.fromOwned(frame.payload);
|
|
61
|
+
try {
|
|
62
|
+
if (state?.spotId === undefined)
|
|
63
|
+
await this.requireSpotNodeRuntime().dispatchEntryActorPacket('local', actorId, [header, body], false, undefined, bindingActorRef);
|
|
64
|
+
else
|
|
65
|
+
await this.requireSpotManager().dispatchRoutedActorPacket('local', state.spotId, actorId, [header, body], false, undefined, bindingActorRef);
|
|
90
66
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
67
|
+
finally {
|
|
68
|
+
header.close();
|
|
69
|
+
body.close();
|
|
94
70
|
}
|
|
95
|
-
await this.requireSpotNodeRuntime().notifyEntrySpotActorDisconnected(meshName, localActor, signal);
|
|
96
71
|
}
|
|
97
72
|
async receiveRemoteActorPacketRelay(payload, _routeContext) {
|
|
98
73
|
const relay = (0, actor_packet_relay_wire_1.decodeRemoteActorPacketRelayPayload)(payload);
|
|
@@ -159,22 +134,23 @@ class ZLinkActorPacketRelay {
|
|
|
159
134
|
}
|
|
160
135
|
return { ok: true, response: { acknowledged: true } };
|
|
161
136
|
}
|
|
162
|
-
if (
|
|
163
|
-
|
|
164
|
-
await this.notifyLocalActorDisconnectedById(relay.actorId);
|
|
165
|
-
return {
|
|
166
|
-
ok: true,
|
|
167
|
-
actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId))
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
if (remoteBoundSessionTarget !== undefined) {
|
|
137
|
+
if (remoteBoundSessionTarget !== undefined &&
|
|
138
|
+
frameHeader.name !== actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
|
|
171
139
|
this.requireCurrentRemoteBinding(relay, _routeContext);
|
|
172
140
|
}
|
|
173
141
|
const state = this.options.actorManager()?.getState(relay.actorId);
|
|
174
|
-
if (frameHeader.kind === protocol_1.ZLinkStreamMessageKind.Send
|
|
142
|
+
if (frameHeader.kind === protocol_1.ZLinkStreamMessageKind.Send ||
|
|
143
|
+
frameHeader.name === actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
|
|
175
144
|
const dispatch = state?.spotId === undefined
|
|
176
145
|
? this.requireSpotNodeRuntime().dispatchEntryActorPacket('remote', relay.actorId, [header, body], false, remoteBoundSessionTarget, fallbackActorRef)
|
|
177
146
|
: this.requireSpotManager().dispatchRoutedActorPacket('remote', state.spotId, relay.actorId, [header, body], false, remoteBoundSessionTarget, fallbackActorRef);
|
|
147
|
+
if (frameHeader.name === actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
|
|
148
|
+
await dispatch;
|
|
149
|
+
return {
|
|
150
|
+
ok: true,
|
|
151
|
+
actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId))
|
|
152
|
+
};
|
|
153
|
+
}
|
|
178
154
|
// Spec 05 §1.3: a one-way Session Actor relay completes at relay
|
|
179
155
|
// queue admission, not after the remote application turn. In
|
|
180
156
|
// particular, a handler may register a deferred Join whose relocation
|
|
@@ -469,21 +445,14 @@ class ZLinkActorPacketRelay {
|
|
|
469
445
|
}
|
|
470
446
|
return true;
|
|
471
447
|
}
|
|
472
|
-
async notifyRemoteActorDisconnected(actorId, remoteTarget, signal, bindingActorRef) {
|
|
448
|
+
async notifyRemoteActorDisconnected(actorId, remoteTarget, signal, bindingActorRef, binding) {
|
|
473
449
|
const spotKind = 'spotKind' in remoteTarget ? remoteTarget.spotKind : undefined;
|
|
474
|
-
const
|
|
475
|
-
kind: protocol_1.ZLinkStreamMessageKind.Send,
|
|
476
|
-
codec: protocol_1.ZLinkStreamCodec.Raw,
|
|
477
|
-
flags: protocol_1.ZLinkStreamHeaderFlags.None,
|
|
478
|
-
name: actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET,
|
|
479
|
-
metadata: new Map()
|
|
480
|
-
};
|
|
450
|
+
const frame = this.disconnectedFrame(actorId, binding, 'sessionNodeRid' in remoteTarget ? remoteTarget : undefined);
|
|
481
451
|
const payload = (0, actor_packet_relay_wire_1.encodeRemoteActorPacketRelayPayload)({
|
|
482
452
|
actorId,
|
|
483
453
|
routerChannelId: remoteTarget.routerChannelId,
|
|
484
454
|
bindingActorRef,
|
|
485
|
-
|
|
486
|
-
payload: Buffer.alloc(0)
|
|
455
|
+
...frame
|
|
487
456
|
});
|
|
488
457
|
if ((spotKind ?? contracts_1.ZLinkSpotKind.Entry) === contracts_1.ZLinkSpotKind.Entry) {
|
|
489
458
|
await this.options.routeTransport.request(remoteTarget.routerChannelId, String(remoteTarget.targetNodeRid), actors_1.ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET, payload, this.options.requestTimeoutMs, signal);
|
|
@@ -500,18 +469,36 @@ class ZLinkActorPacketRelay {
|
|
|
500
469
|
signal
|
|
501
470
|
});
|
|
502
471
|
}
|
|
472
|
+
disconnectedFrame(actorId, binding, target) {
|
|
473
|
+
const current = binding === undefined
|
|
474
|
+
? (this.options.actorManager()?.getState(actorId)?.boundSession ?? target)
|
|
475
|
+
: undefined;
|
|
476
|
+
const header = {
|
|
477
|
+
kind: protocol_1.ZLinkStreamMessageKind.Send,
|
|
478
|
+
codec: protocol_1.ZLinkStreamCodec.Raw,
|
|
479
|
+
flags: protocol_1.ZLinkStreamHeaderFlags.None,
|
|
480
|
+
name: actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET,
|
|
481
|
+
metadata: new Map()
|
|
482
|
+
};
|
|
483
|
+
return {
|
|
484
|
+
header: (0, protocol_1.encodeStreamHeader)(header),
|
|
485
|
+
payload: (0, session_disconnected_wire_1.encodeSessionDisconnected)(binding?.sessionOwnerNodeRid ?? current?.sessionNodeRid, binding?.sessionOwnerNodeGeneration ?? current?.sessionOwnerNodeGeneration, binding?.bindingGeneration ?? current?.bindingGeneration)
|
|
486
|
+
};
|
|
487
|
+
}
|
|
503
488
|
requireCurrentRemoteBinding(relay, routeContext) {
|
|
504
|
-
|
|
505
|
-
const current = state?.boundSession;
|
|
506
|
-
if (current === undefined ||
|
|
507
|
-
current.sessionNodeRid === undefined ||
|
|
508
|
-
!(0, routing_id_1.routingIdsEqual)(current.sessionNodeRid, routeContext.sourceNodeRid) ||
|
|
509
|
-
current.bindingGeneration === undefined ||
|
|
510
|
-
relay.bindingGeneration === undefined ||
|
|
511
|
-
current.bindingGeneration !== BigInt(relay.bindingGeneration)) {
|
|
489
|
+
if (!this.matchesCurrentRemoteBinding(relay, routeContext)) {
|
|
512
490
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorSessionNotBound, `Actor '${relay.actorId}' bound session identity is stale.`, true);
|
|
513
491
|
}
|
|
514
492
|
}
|
|
493
|
+
matchesCurrentRemoteBinding(relay, routeContext) {
|
|
494
|
+
const current = this.options.actorManager()?.getState(relay.actorId)?.boundSession;
|
|
495
|
+
return (current !== undefined &&
|
|
496
|
+
current.sessionNodeRid !== undefined &&
|
|
497
|
+
(0, routing_id_1.routingIdsEqual)(current.sessionNodeRid, routeContext.sourceNodeRid) &&
|
|
498
|
+
current.bindingGeneration !== undefined &&
|
|
499
|
+
relay.bindingGeneration !== undefined &&
|
|
500
|
+
current.bindingGeneration === BigInt(relay.bindingGeneration));
|
|
501
|
+
}
|
|
515
502
|
async requestRemoteTarget(target, request, unavailableMessage, decodeReply, signal) {
|
|
516
503
|
if (target.spotKind === contracts_1.ZLinkSpotKind.Entry) {
|
|
517
504
|
try {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkActorPlacementCoordinator = void 0;
|
|
4
|
+
const routing_id_1 = require("../routing-id");
|
|
4
5
|
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
5
6
|
const node_crypto_1 = require("node:crypto");
|
|
6
7
|
const runtime_values_1 = require("../backend/runtime-values");
|
|
@@ -33,6 +34,13 @@ class ZLinkActorPlacementCoordinator {
|
|
|
33
34
|
for (;;) {
|
|
34
35
|
const target = await this.options.target(meshName, stableType, deadline.signal, excluded);
|
|
35
36
|
if (target === undefined) {
|
|
37
|
+
// Entry eligibility limits new creation, not lookup of a Ready Actor (Actor model §6.3, §6.5).
|
|
38
|
+
if (!createOnly) {
|
|
39
|
+
const current = await this.options.store.readAuthority((0, authority_key_codec_1.encodeAuthorityKey)('actor', actorId), deadline.signal);
|
|
40
|
+
const existing = existingActor(current, actorId, stableType);
|
|
41
|
+
if (existing !== undefined)
|
|
42
|
+
return { status: 'existing', actor: existing };
|
|
43
|
+
}
|
|
36
44
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PlacementCapacityExhausted, `No eligible Actor placement target is ready for '${stableType}'.`, true);
|
|
37
45
|
}
|
|
38
46
|
const creatingPayload = (0, actor_authority_publication_1.encodeActorAuthorityIdentity)({
|
|
@@ -75,7 +83,7 @@ class ZLinkActorPlacementCoordinator {
|
|
|
75
83
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorTypeMismatch, `Actor '${actorId}' is registered with another stable type.`);
|
|
76
84
|
}
|
|
77
85
|
if (reserved.kind === 'placementCapacityExhausted') {
|
|
78
|
-
excluded.add(
|
|
86
|
+
excluded.add((0, routing_id_1.encodeRoutingIdStorageHex)(target.nodeRid));
|
|
79
87
|
continue;
|
|
80
88
|
}
|
|
81
89
|
if (reserved.kind === 'alreadyExists' || reserved.kind === 'conflict') {
|
|
@@ -106,6 +114,13 @@ class ZLinkActorPlacementCoordinator {
|
|
|
106
114
|
}
|
|
107
115
|
if (remote === undefined)
|
|
108
116
|
throw transportFailure;
|
|
117
|
+
if ((0, framework_errors_internal_1.internalFrameworkErrorKindFromWireReply)(remote.terminalResult, remote.failureCode) ===
|
|
118
|
+
framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected) {
|
|
119
|
+
// The target refused before the callback and cancelled its reservation
|
|
120
|
+
// (Actor model §6.3); exclude this host run like a Reserve failure.
|
|
121
|
+
excluded.add((0, routing_id_1.encodeRoutingIdStorageHex)(target.nodeRid));
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
109
124
|
if (remote.terminalResult !== runtime_values_1.RequestResult.Ok || remote.failureCode !== 0) {
|
|
110
125
|
// Classify the (terminal, fine failure code) pair via the shared
|
|
111
126
|
// ownership-aware translator instead of collapsing every non-OK
|
|
@@ -274,12 +289,14 @@ function creationTarget(snapshot) {
|
|
|
274
289
|
}
|
|
275
290
|
};
|
|
276
291
|
}
|
|
277
|
-
function existingActor(
|
|
278
|
-
const snapshot =
|
|
279
|
-
?
|
|
280
|
-
:
|
|
281
|
-
?
|
|
282
|
-
:
|
|
292
|
+
function existingActor(current, actorId, stableType) {
|
|
293
|
+
const snapshot = current.kind === 'snapshot'
|
|
294
|
+
? current
|
|
295
|
+
: current.kind === 'alreadyExists'
|
|
296
|
+
? current.current
|
|
297
|
+
: current.kind === 'conflict' && current.current.kind === 'snapshot'
|
|
298
|
+
? current.current
|
|
299
|
+
: undefined;
|
|
283
300
|
if (snapshot === undefined ||
|
|
284
301
|
snapshot.allocation.state !== 'active' ||
|
|
285
302
|
snapshot.allocation.objectKind !== 'actor' ||
|
|
@@ -348,7 +365,7 @@ function requireExactReservation(current, record) {
|
|
|
348
365
|
current.allocation.stableType !== record.stableType ||
|
|
349
366
|
current.objectGeneration !== record.reservation.objectGeneration ||
|
|
350
367
|
current.authorityOwnerGeneration !== record.reservation.authorityOwnerGeneration ||
|
|
351
|
-
|
|
368
|
+
!(0, routing_id_1.routingIdsEqual)(current.allocation.descriptor.rid, record.reservation.targetNodeRid) ||
|
|
352
369
|
current.allocation.descriptorLifecycleGeneration !== record.reservation.targetNodeGeneration ||
|
|
353
370
|
current.ownerId !== record.reservation.targetOwnerId ||
|
|
354
371
|
current.ownerLeaseGeneration !== record.reservation.targetOwnerLeaseGeneration ||
|
|
@@ -149,9 +149,9 @@ class ZLinkActorRuntimeOptionsFactory {
|
|
|
149
149
|
staleActorRefReporter: (_meshName, actorId) => this.options.actorHandoff.recordStaleFailure(actorId),
|
|
150
150
|
staleActorRefPredicate: (meshName, actor) => this.actorBelongsToMesh(meshName, actor.actorId) &&
|
|
151
151
|
this.options.actorHandoff.isKnownStale(actor),
|
|
152
|
-
handoffCapture: (meshName, actorId, parts, returnResponse, actor, deadlineUnixMs) => this.actorBelongsToMesh(meshName, actorId) &&
|
|
152
|
+
handoffCapture: (meshName, actorId, parts, returnResponse, actor, deadlineUnixMs, onAdmitted) => this.actorBelongsToMesh(meshName, actorId) &&
|
|
153
153
|
!this.options.actorHandoff.isProvisional(actorId)
|
|
154
|
-
? this.options.actorHandoff.capture('local', actorId, parts, returnResponse, undefined, actor, deadlineUnixMs)
|
|
154
|
+
? this.options.actorHandoff.capture('local', actorId, parts, returnResponse, undefined, actor, deadlineUnixMs, undefined, undefined, onAdmitted)
|
|
155
155
|
: undefined,
|
|
156
156
|
sendErrorReporter: this.options.reportPostCommitError
|
|
157
157
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type ActorRef, type RoutingId, type ZLinkActor, type ZLinkActorJoinOperationId, type ZLinkMessageSerializer, type ZLinkSpot, ZLinkMessage } from '../../contracts';
|
|
1
|
+
import { type ActorRef, type RoutingId, type ZLinkActor, type ZLinkMeshNodeDescriptor, type ZLinkActorJoinOperationId, type ZLinkMessageSerializer, type ZLinkSpot, ZLinkMessage } from '../../contracts';
|
|
2
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
3
|
-
import { type ZLinkActorHandoffCoordinator, type ZLinkActorHandoffReplayPreparation, type ZLinkActorRoutedJoinTransport, type
|
|
3
|
+
import { type ZLinkActorHandoffCoordinator, type ZLinkActorHandoffReplayPreparation, type ZLinkActorRoutedJoinTransport, type ZLinkDeferredJoinCompletion, type ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
4
4
|
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult, ZLinkActorHandoffTerminalAcceptance, ZLinkActorHandoffTerminalAck } from '../actors/actor-handoff';
|
|
5
5
|
import { type ZLinkActorMessageFollowOwnerFence } from '../actors/actor-message-follow-context';
|
|
6
6
|
import type { ZLinkActorRuntimeState } from '../actors/actor-runtime-state';
|
|
@@ -32,7 +32,6 @@ export interface ZLinkActorTransferRuntimeActorManager {
|
|
|
32
32
|
}): Promise<ZLinkActor>;
|
|
33
33
|
publishRelocationActor(actorId: string): void;
|
|
34
34
|
rollbackTransferredActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
|
|
35
|
-
completeCoreRelocationSource(actorId: string): Promise<void>;
|
|
36
35
|
}
|
|
37
36
|
export interface ZLinkActorTransferRuntimeOptions {
|
|
38
37
|
readonly routeTransport: ZLinkActorRoutedJoinTransport;
|
|
@@ -41,36 +40,30 @@ export interface ZLinkActorTransferRuntimeOptions {
|
|
|
41
40
|
readonly actorManager: () => ZLinkActorTransferRuntimeActorManager | undefined;
|
|
42
41
|
readonly primaryMeshNode: () => ZLinkBackendMeshNode;
|
|
43
42
|
readonly notifyEntrySpotActorLeft: (actor: ZLinkActor, signal?: AbortSignal) => Promise<void>;
|
|
44
|
-
readonly restoreEntrySpotActorJoined: (actor: ZLinkActor, signal?: AbortSignal) => Promise<void>;
|
|
45
43
|
readonly locationLifecycle: () => ZLinkLocationLifecycle | undefined;
|
|
46
44
|
/** Resolves the authoritative Ready route for a target User/Instance Spot. */
|
|
47
45
|
readonly spotRouteResolver?: () => ZLinkSpotRouteResolver | undefined;
|
|
48
46
|
readonly actorHandoff: ZLinkActorHandoffCoordinator;
|
|
49
|
-
readonly actorTransferRegistry: ZLinkActorTransferRegistry;
|
|
50
47
|
readonly authorityStore: () => (ZLinkAuthorityStore & ZLinkObjectCreationStore & ZLinkOwnerLeaseStore) | undefined;
|
|
51
48
|
readonly currentOwner: () => ZLinkLocationOwnerToken | undefined;
|
|
52
|
-
/** Live admitted peers of a mesh; used to stop retries against a gone session owner. */
|
|
53
|
-
readonly liveDescriptors?: (meshName: string, signal?: AbortSignal) => Promise<readonly import('../../contracts').ZLinkMeshNodeDescriptor[]>;
|
|
54
49
|
/** Service-wire command 42/43/44 bridge, installed after the host runtime is assembled. */
|
|
55
50
|
readonly sessionRelocationWire?: () => ZLinkSessionRelocationWirePort | undefined;
|
|
56
51
|
readonly clearRemoteActorPacketTarget: (actorId: string) => void;
|
|
57
52
|
/** Acquires that permit before the Actor FIFO claims the runnable child. */
|
|
58
53
|
readonly prepareApplicationJob?: ZLinkActorHandoffReplayPreparation;
|
|
59
54
|
readonly reportPostCommitError?: (error: unknown) => void;
|
|
60
|
-
readonly onSourceDepartureCompleted?: (actorId: string) => void;
|
|
61
55
|
readonly shutdownSignal?: () => AbortSignal | undefined;
|
|
62
|
-
readonly metrics?: import('../diagnostics').ZLinkRuntimeMetrics;
|
|
63
56
|
}
|
|
64
57
|
export declare class ZLinkActorTransferRuntime {
|
|
65
58
|
private readonly options;
|
|
66
|
-
private readonly coreSourceLeaves;
|
|
67
59
|
private readonly activeDeferredJoinTerminals;
|
|
68
60
|
private readonly deferredJoinTerminals;
|
|
69
61
|
constructor(options: ZLinkActorTransferRuntimeOptions);
|
|
70
62
|
beginDeferredActorHandoff(actor: ZLinkActor, state: ZLinkActorRuntimeState): void;
|
|
71
|
-
|
|
63
|
+
/** Relocation activation owns admission; handler terminals are observed independently. */
|
|
64
|
+
admitRelocationPrefix(actor: ZLinkActor, objectGeneration: bigint, packets: readonly ZLinkActorHandoffPacket[], start: Promise<void>, onResult: (packet: ZLinkActorHandoffPacket, result: ZLinkActorHandoffResult) => Promise<void>): void;
|
|
72
65
|
completeDeferredActorHandoff(actor: ZLinkActor, target: ZLinkSpotRouteTarget, _targetActorRef: ActorRef): Promise<void>;
|
|
73
|
-
cancelDeferredActorHandoff(actor: ZLinkActor,
|
|
66
|
+
cancelDeferredActorHandoff(actor: ZLinkActor, _state: ZLinkActorRuntimeState): Promise<void>;
|
|
74
67
|
prepareDeferredJoinAccepted(actorId: string, operationId: ZLinkActorJoinOperationId, actorRef: ActorRef, rawReply: Uint8Array, replyContentType?: string): ZLinkDeferredJoinCompletion;
|
|
75
68
|
/**
|
|
76
69
|
* Runs the completion callback once in the target Actor mailbox.
|
|
@@ -80,43 +73,26 @@ export declare class ZLinkActorTransferRuntime {
|
|
|
80
73
|
deliverDeferredJoinCompletion(completion: ZLinkDeferredJoinCompletion, actor: ZLinkActor, actorRef: ActorRef, submitMailbox: <T>(operation: () => Promise<T>) => Promise<T>, signal?: AbortSignal): Promise<void>;
|
|
81
74
|
private deliverDeferredJoinCompletionCore;
|
|
82
75
|
private prepareSourceActorLeave;
|
|
83
|
-
private restoreSourceActor;
|
|
84
76
|
private beginSourceActorMove;
|
|
85
77
|
private cancelSourceActorMove;
|
|
86
78
|
private admitCanceledSourcePrefix;
|
|
87
79
|
private admitDeferredSourcePrefix;
|
|
88
80
|
private observeHandoffReplay;
|
|
89
|
-
|
|
90
|
-
prepareSource(actor: ZLinkActor, state: ZLinkActorRuntimeState, signal?: AbortSignal, lifecycleAuthority?: 'framework' | 'core', deferredJoin?: boolean, relocation?: ServiceWireOperationId): Promise<{
|
|
91
|
-
handoffBacklog: readonly ZLinkActorHandoffPacket[];
|
|
92
|
-
sourceLeaveCompletion: Promise<void> | undefined;
|
|
93
|
-
sourceLeaveSubmitted: Promise<void> | undefined;
|
|
94
|
-
onSourceLeaveSubmitted: (notify: () => Promise<void>) => void;
|
|
95
|
-
observeTargetAuthority: (target: ZLinkSpotRouteTarget, targetActorRef: ActorRef, observeSignal?: AbortSignal) => Promise<void>;
|
|
96
|
-
commit: (target: Parameters<ZLinkActorHandoffCoordinator["complete"]>[1], targetActorRef: ActorRef, results: Parameters<ZLinkActorHandoffCoordinator["complete"]>[3], releaseLocation?: boolean) => void;
|
|
97
|
-
rollback: () => Promise<void>;
|
|
98
|
-
adapterKey?: string;
|
|
99
|
-
state: ZLinkMessage;
|
|
100
|
-
}>;
|
|
101
|
-
prepareMaintenanceSession(actor: ZLinkActor, state: ZLinkActorRuntimeState, signal?: AbortSignal, manageMembership?: boolean, relocation?: ServiceWireOperationId): Promise<{
|
|
81
|
+
prepareMaintenanceSession(actor: ZLinkActor, state: ZLinkActorRuntimeState, signal?: AbortSignal, manageMembership?: boolean, relocation?: ServiceWireOperationId, relocationTarget?: Pick<ZLinkMeshNodeDescriptor, 'rid' | 'lifecycleGeneration'>): Promise<{
|
|
102
82
|
readonly target?: ZLinkRemoteBoundSessionTarget;
|
|
103
83
|
readonly handoffBacklog: readonly import('../actors').ZLinkActorHandoffPacket[];
|
|
104
84
|
takeRelocationRelay(): readonly import('../actors').ZLinkActorHandoffPacket[];
|
|
105
85
|
setReplayResults(results: readonly import('../actors').ZLinkActorHandoffResult[]): void;
|
|
106
|
-
commit(target: ZLinkSpotRouteTarget, targetActorRef: ActorRef, targetOwnerFence: ZLinkActorMessageFollowOwnerFence): Promise<void>;
|
|
86
|
+
commit(target: ZLinkSpotRouteTarget, targetActorRef: ActorRef, targetOwnerFence: ZLinkActorMessageFollowOwnerFence | null): Promise<void>;
|
|
107
87
|
rollback(): Promise<void>;
|
|
108
88
|
discard(reason: unknown): void;
|
|
109
89
|
}>;
|
|
110
|
-
notifyCoreSourceLeave(actor: ZLinkActor, callback: () => Promise<void>): Promise<void>;
|
|
111
90
|
completeRelocationSourceLeave(actor: ZLinkActor, sourceSpotId: RoutingId | undefined, signal?: AbortSignal): Promise<void>;
|
|
112
91
|
relayMaintenanceTerminal(actorId: string, packet: ZLinkActorHandoffPacket, result: ZLinkActorHandoffResult, sourceNodeRid: RoutingId, targetAuthorityOwnerGeneration?: bigint): ZLinkActorHandoffTerminalAck;
|
|
113
92
|
relayCanonicalMaintenanceTerminal(operationId: string, replyRouteId: string, result: ZLinkActorHandoffResult, sourceNodeRid: RoutingId, targetAuthorityOwnerGeneration?: bigint): ZLinkActorHandoffTerminalAcceptance;
|
|
114
93
|
private sealBoundSessionRoute;
|
|
115
94
|
private abortBoundSessionRouteSeal;
|
|
116
95
|
private observeBoundSessionSealAbort;
|
|
117
|
-
private beginCoreSourceLeave;
|
|
118
|
-
private scheduleSourceDeparture;
|
|
119
|
-
private finishSourceDeparture;
|
|
120
96
|
getOrCreateRoutedActor(actorId: string, actorType: string, actorRef?: ActorRef, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, actorCreateRequest?: Message, signal?: AbortSignal): Promise<{
|
|
121
97
|
readonly actor: ZLinkActor;
|
|
122
98
|
readonly actorRef: ZLinkBackendActorRef;
|