@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
|
@@ -7,6 +7,7 @@ exports.decodeRelocatingActorAuthorityIdentity = decodeRelocatingActorAuthorityI
|
|
|
7
7
|
exports.rewriteActorAuthorityRoute = rewriteActorAuthorityRoute;
|
|
8
8
|
exports.rewriteActorAuthorityOwner = rewriteActorAuthorityOwner;
|
|
9
9
|
exports.isActorAuthorityPayload = isActorAuthorityPayload;
|
|
10
|
+
const routing_id_1 = require("../routing-id");
|
|
10
11
|
const node_crypto_1 = require("node:crypto");
|
|
11
12
|
const creation_operation_id_1 = require("../locations/creation-operation-id");
|
|
12
13
|
const actor_authority_payload_codec_1 = require("./actor-authority-payload-codec");
|
|
@@ -197,7 +198,7 @@ function requireActorAuthority(snapshot, expected) {
|
|
|
197
198
|
snapshot.allocation.objectKind !== 'actor' ||
|
|
198
199
|
snapshot.allocation.stableType !== expected.actorType ||
|
|
199
200
|
snapshot.allocation.descriptor.meshName !== expected.meshName ||
|
|
200
|
-
|
|
201
|
+
!(0, routing_id_1.routingIdsEqual)(snapshot.allocation.descriptor.rid, expected.actor.nodeRid) ||
|
|
201
202
|
snapshot.allocation.descriptorLifecycleGeneration !== expected.ownerNodeGeneration ||
|
|
202
203
|
snapshot.ownerId !== expected.owner.ownerId ||
|
|
203
204
|
snapshot.ownerLeaseGeneration !== expected.owner.leaseGeneration ||
|
|
@@ -205,7 +206,7 @@ function requireActorAuthority(snapshot, expected) {
|
|
|
205
206
|
actual.actorType !== expected.actorType ||
|
|
206
207
|
actual.actor.actorId !== expected.actor.actorId ||
|
|
207
208
|
actual.actor.objectGeneration !== expected.actor.objectGeneration ||
|
|
208
|
-
|
|
209
|
+
!(0, routing_id_1.routingIdsEqual)(actual.actor.nodeRid, expected.actor.nodeRid)) {
|
|
209
210
|
throw new Error(`Actor '${expected.actor.actorId}' authority fence does not match its ActorRef.`);
|
|
210
211
|
}
|
|
211
212
|
}
|
|
@@ -11,7 +11,7 @@ export interface ZLinkActorClientOptions {
|
|
|
11
11
|
readonly defaultRequestTimeoutMs?: number;
|
|
12
12
|
readonly staleActorRefReporter?: (meshName: string, actorId: string) => void;
|
|
13
13
|
readonly staleActorRefPredicate?: (meshName: string, actor: ActorRef) => boolean;
|
|
14
|
-
readonly handoffCapture?: (meshName: string, actorId: string, parts: readonly Message[], returnResponse: boolean, actor: ActorRef, deadlineUnixMs?: number) => Promise<unknown> | undefined;
|
|
14
|
+
readonly handoffCapture?: (meshName: string, actorId: string, parts: readonly Message[], returnResponse: boolean, actor: ActorRef, deadlineUnixMs?: number, onAdmitted?: () => void) => Promise<unknown> | undefined;
|
|
15
15
|
readonly sendErrorReporter?: (error: unknown) => void;
|
|
16
16
|
readonly routeTransport?: ZLinkActorRoutedJoinTransport;
|
|
17
17
|
readonly transportDeliveryGate?: () => {
|
|
@@ -33,4 +33,3 @@ export declare class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
33
33
|
private submitActorRequest;
|
|
34
34
|
private requireNode;
|
|
35
35
|
}
|
|
36
|
-
export declare function forwardEncodedActorPacket(node: ZLinkBackendMeshNode, completions: ZLinkMeshCompletionTable, actor: ActorRef, header: Buffer, payload: Buffer, returnResponse: boolean, timeoutMs: number | undefined, serializers?: ReadonlyMap<string, ZLinkMessageSerializer>): Promise<unknown>;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DefaultZLinkActorClient = void 0;
|
|
4
|
-
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const channel_envelope_1 = require("../channels/channel-envelope");
|
|
6
|
+
const routing_id_1 = require("../routing-id");
|
|
5
7
|
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
8
|
+
const request_result_1 = require("../messaging/request-result");
|
|
6
9
|
const contracts_1 = require("../../contracts");
|
|
7
10
|
const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
|
|
8
11
|
const abort_1 = require("../abort");
|
|
@@ -32,7 +35,7 @@ class DefaultZLinkActorClient {
|
|
|
32
35
|
}
|
|
33
36
|
requestToActor(actorId, request) {
|
|
34
37
|
requireActorId(actorId);
|
|
35
|
-
return new DefaultZLinkActorRequestCall((packetName, timeoutMs, metadata, signal) => this.request(actorId, packetName, request, timeoutMs, metadata, signal, 'async'), (packetName, timeoutMs, metadata, signal) => this.request(actorId, packetName, request, timeoutMs, metadata, signal, 'yield'), actorId, request, this.options.defaultRequestTimeoutMs);
|
|
38
|
+
return new DefaultZLinkActorRequestCall((packetName, timeoutMs, metadata, signal, onAdmitted) => this.request(actorId, packetName, request, timeoutMs, metadata, signal, 'async', onAdmitted), (packetName, timeoutMs, metadata, signal) => this.request(actorId, packetName, request, timeoutMs, metadata, signal, 'yield'), actorId, request, this.options.defaultRequestTimeoutMs);
|
|
36
39
|
}
|
|
37
40
|
async send(actorId, explicitPacketName, message, metadata) {
|
|
38
41
|
const route = await this.resolveActorRoute(actorId);
|
|
@@ -56,7 +59,7 @@ class DefaultZLinkActorClient {
|
|
|
56
59
|
}
|
|
57
60
|
const node = this.requireNode(meshName);
|
|
58
61
|
if (this.options.routeTransport !== undefined &&
|
|
59
|
-
|
|
62
|
+
!(0, routing_id_1.routingIdsEqual)(node.status().routingId, actor.nodeRid)) {
|
|
60
63
|
await this.options.routeTransport.sendToSpot(remoteActorRouteTarget(route), (0, actor_packet_relay_wire_1.encodeRemoteActorPacketRelayPayload)({
|
|
61
64
|
actorId,
|
|
62
65
|
header: parts[0].data(),
|
|
@@ -68,7 +71,7 @@ class DefaultZLinkActorClient {
|
|
|
68
71
|
}), { packetName: actor_packet_relay_wire_1.ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET });
|
|
69
72
|
return { status: submission_result_1.ZLinkSubmitStatus.Submitted };
|
|
70
73
|
}
|
|
71
|
-
return await this.submitActorSend(meshName, toBackendActorRef(actor), parts);
|
|
74
|
+
return await this.submitActorSend(meshName, toBackendActorRef(actor), parts, route);
|
|
72
75
|
}
|
|
73
76
|
catch (error) {
|
|
74
77
|
if (isStaleActorError(error)) {
|
|
@@ -82,7 +85,7 @@ class DefaultZLinkActorClient {
|
|
|
82
85
|
closeMessages(parts);
|
|
83
86
|
}
|
|
84
87
|
}
|
|
85
|
-
async request(actorId, explicitPacketName, request, timeoutMs, metadata, signal, waitPolicy = 'async') {
|
|
88
|
+
async request(actorId, explicitPacketName, request, timeoutMs, metadata, signal, waitPolicy = 'async', onAdmitted) {
|
|
86
89
|
(0, abort_1.throwIfAborted)(signal);
|
|
87
90
|
const sourceSpotId = (0, actor_execution_context_1.currentZLinkActorExecution)()?.spotId ?? (0, execution_1.currentZLinkSpotSerialSourceId)();
|
|
88
91
|
const effectiveTimeoutMs = timeoutMs ?? this.options.defaultRequestTimeoutMs;
|
|
@@ -109,18 +112,18 @@ class DefaultZLinkActorClient {
|
|
|
109
112
|
const submissionCopies = delivery === undefined
|
|
110
113
|
? 1
|
|
111
114
|
: ((await (0, actor_request_deadline_1.waitActorReply)(delivery, actorId, deadlineMs, signal)) ?? 1);
|
|
112
|
-
const handoff = this.options.handoffCapture?.(meshName, actor.actorId, parts, true, routedActor, deadlineUnixMs);
|
|
115
|
+
const handoff = this.options.handoffCapture?.(meshName, actor.actorId, parts, true, routedActor, deadlineUnixMs, onAdmitted);
|
|
113
116
|
if (handoff !== undefined) {
|
|
114
117
|
const submissions = [handoff];
|
|
115
118
|
for (let copy = 1; copy < submissionCopies; copy++) {
|
|
116
|
-
const duplicate = this.options.handoffCapture?.(meshName, actor.actorId, parts, true, routedActor, deadlineUnixMs);
|
|
119
|
+
const duplicate = this.options.handoffCapture?.(meshName, actor.actorId, parts, true, routedActor, deadlineUnixMs, onAdmitted);
|
|
117
120
|
if (duplicate !== undefined)
|
|
118
121
|
submissions.push(duplicate);
|
|
119
122
|
}
|
|
120
123
|
const replies = await (0, actor_request_deadline_1.waitActorReply)(Promise.all(submissions), actorId, deadlineMs, signal);
|
|
121
124
|
return replies[0];
|
|
122
125
|
}
|
|
123
|
-
return await this.submitActorRequest(meshName, toBackendActorRef(actor), parts, (0, actor_request_deadline_1.remainingActorRequestTimeout)(actorId, deadlineMs), signal, route, messageFollow);
|
|
126
|
+
return await this.submitActorRequest(meshName, toBackendActorRef(actor), parts, (0, actor_request_deadline_1.remainingActorRequestTimeout)(actorId, deadlineMs), signal, route, messageFollow, onAdmitted);
|
|
124
127
|
}
|
|
125
128
|
catch (error) {
|
|
126
129
|
if (isStaleActorError(error)) {
|
|
@@ -190,11 +193,12 @@ class DefaultZLinkActorClient {
|
|
|
190
193
|
throw error;
|
|
191
194
|
}
|
|
192
195
|
}
|
|
193
|
-
async submitActorSend(meshName, actor, parts) {
|
|
196
|
+
async submitActorSend(meshName, actor, parts, route) {
|
|
194
197
|
const node = this.requireNode(meshName);
|
|
195
198
|
try {
|
|
196
199
|
return (0, submission_result_1.classifySubmitResult)(await node.sendToActor(actor, toMessageLikeParts(parts), {
|
|
197
|
-
flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE
|
|
200
|
+
flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE,
|
|
201
|
+
routeFence: nativeActorRouteFence(route, actor)
|
|
198
202
|
}), 'Actor send');
|
|
199
203
|
}
|
|
200
204
|
catch (error) {
|
|
@@ -204,11 +208,10 @@ class DefaultZLinkActorClient {
|
|
|
204
208
|
throw mapSubmitError(error, 'Actor send');
|
|
205
209
|
}
|
|
206
210
|
}
|
|
207
|
-
async submitActorRequest(meshName, actor, parts, timeoutMs, signal, route, messageFollowContext) {
|
|
211
|
+
async submitActorRequest(meshName, actor, parts, timeoutMs, signal, route, messageFollowContext, onAdmitted) {
|
|
208
212
|
const node = this.requireNode(meshName);
|
|
209
213
|
if (this.options.routeTransport !== undefined &&
|
|
210
|
-
|
|
211
|
-
route !== undefined) {
|
|
214
|
+
!(0, routing_id_1.routingIdsEqual)(node.status().routingId, actor.nodeRid)) {
|
|
212
215
|
const relay = (0, actor_packet_relay_wire_1.encodeRemoteActorPacketRelayPayload)({
|
|
213
216
|
actorId: actor.actorId,
|
|
214
217
|
header: parts[0].data(),
|
|
@@ -228,7 +231,7 @@ class DefaultZLinkActorClient {
|
|
|
228
231
|
returnResponse: true,
|
|
229
232
|
messageFollowContext
|
|
230
233
|
});
|
|
231
|
-
const reply = await (0, actor_routed_json_request_1.requestRoutedJsonReply)(this.options.routeTransport, remoteActorRouteTarget(route), relay, { timeoutMs, signal }, `Remote Actor request is not available for '${actor.actorId}'.`, (replyParts) => JSON.parse(replyParts[0]?.getString('utf8') ?? '{}'));
|
|
234
|
+
const reply = await (0, actor_routed_json_request_1.requestRoutedJsonReply)(this.options.routeTransport, remoteActorRouteTarget(route), relay, { timeoutMs, signal, onAdmitted }, `Remote Actor request is not available for '${actor.actorId}'.`, (replyParts) => JSON.parse(replyParts[0]?.getString('utf8') ?? '{}'));
|
|
232
235
|
if (reply.ok !== true) {
|
|
233
236
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(remoteRelayErrorKind(reply.errorKind), typeof reply.error === 'string'
|
|
234
237
|
? reply.error
|
|
@@ -242,7 +245,9 @@ class DefaultZLinkActorClient {
|
|
|
242
245
|
}
|
|
243
246
|
const completion = await completions.submit(() => node.requestToActor(actor, toMessageLikeParts(parts), {
|
|
244
247
|
flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE,
|
|
245
|
-
|
|
248
|
+
routeFence: nativeActorRouteFence(route, actor),
|
|
249
|
+
timeoutMs,
|
|
250
|
+
onAdmitted
|
|
246
251
|
}), signal);
|
|
247
252
|
if (completion.terminalResult !== runtime_values_1.RequestResult.Ok) {
|
|
248
253
|
(0, backend_1.closeMeshCompletion)(completion);
|
|
@@ -259,6 +264,14 @@ class DefaultZLinkActorClient {
|
|
|
259
264
|
}
|
|
260
265
|
}
|
|
261
266
|
exports.DefaultZLinkActorClient = DefaultZLinkActorClient;
|
|
267
|
+
function nativeActorRouteFence(route, actor) {
|
|
268
|
+
return {
|
|
269
|
+
actor,
|
|
270
|
+
targetNodeGeneration: route.ownerNodeGeneration,
|
|
271
|
+
authorityOwnerGeneration: route.authorityOwnerGeneration,
|
|
272
|
+
ownerLeaseGeneration: route.ownerLeaseGeneration
|
|
273
|
+
};
|
|
274
|
+
}
|
|
262
275
|
function remoteActorRouteTarget(route) {
|
|
263
276
|
if (route.enclosingSpotRoute !== undefined) {
|
|
264
277
|
return route.enclosingSpotRoute;
|
|
@@ -302,27 +315,6 @@ function requireActorId(actorId) {
|
|
|
302
315
|
throw new configuration_1.ZLinkConfigurationException(`Actor ID must contain 1..${CoreTypes_1.ZLINK_MAX_ACTOR_ID_BYTES} UTF-8 bytes.`);
|
|
303
316
|
}
|
|
304
317
|
}
|
|
305
|
-
async function forwardEncodedActorPacket(node, completions, actor, header, payload, returnResponse, timeoutMs, serializers) {
|
|
306
|
-
const target = toBackendActorRef(actor);
|
|
307
|
-
const parts = [header, payload];
|
|
308
|
-
const packetName = (0, protocol_1.decodeStreamHeader)(header).name;
|
|
309
|
-
if (!returnResponse) {
|
|
310
|
-
if ((await node.sendToActor(target, parts, { flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE })) !==
|
|
311
|
-
runtime_values_1.SubmitResult.Ok) {
|
|
312
|
-
throw routeNotConnected('Actor handoff send submit was not accepted.');
|
|
313
|
-
}
|
|
314
|
-
return undefined;
|
|
315
|
-
}
|
|
316
|
-
const completion = await completions.submit(() => node.requestToActor(target, parts, {
|
|
317
|
-
flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE,
|
|
318
|
-
timeoutMs
|
|
319
|
-
}));
|
|
320
|
-
if (completion.terminalResult !== runtime_values_1.RequestResult.Ok) {
|
|
321
|
-
(0, backend_1.closeMeshCompletion)(completion);
|
|
322
|
-
throw mapRequestResult(completion.terminalResult, completion.failureErrno, 'Actor handoff request');
|
|
323
|
-
}
|
|
324
|
-
return decodeActorReply(completion.parts, serializers, packetName);
|
|
325
|
-
}
|
|
326
318
|
function toBackendActorRef(actor) {
|
|
327
319
|
return {
|
|
328
320
|
nodeRid: actor.nodeRid,
|
|
@@ -405,21 +397,21 @@ class DefaultZLinkActorRequestCall {
|
|
|
405
397
|
return this;
|
|
406
398
|
}
|
|
407
399
|
submit(signal) {
|
|
408
|
-
|
|
400
|
+
this.rejectSelfActorRequest();
|
|
401
|
+
return (0, request_result_1.createZLinkRequest)((onAdmitted) => this.execute('async', signal, onAdmitted));
|
|
409
402
|
}
|
|
410
403
|
yield(signal) {
|
|
411
404
|
this.rejectSelfActorRequest();
|
|
412
405
|
const turn = (0, execution_1.requireZLinkYieldTurn)(this.turn);
|
|
413
406
|
const pending = this.execute('yield', signal);
|
|
414
|
-
return turn.
|
|
407
|
+
return turn.yieldFrameworkPromise(pending);
|
|
415
408
|
}
|
|
416
|
-
execute(waitPolicy, signal) {
|
|
409
|
+
execute(waitPolicy, signal, onAdmitted) {
|
|
417
410
|
ensureSingleSubmit(this.executed);
|
|
418
|
-
this.rejectSelfActorRequest();
|
|
419
411
|
this.executed = true;
|
|
420
412
|
(0, abort_1.throwIfAborted)(signal);
|
|
421
413
|
const submitter = waitPolicy === 'async' ? this.asyncSubmitter : this.yieldSubmitter;
|
|
422
|
-
return submitter(this.packet ?? (0, packet_name_1.resolveFrameworkPacketName)(this.request, undefined, 'Actor'), this.timeoutMs ?? this.defaultRequestTimeoutMs, this.selectedMetadata, signal);
|
|
414
|
+
return submitter(this.packet ?? (0, packet_name_1.resolveFrameworkPacketName)(this.request, undefined, 'Actor'), this.timeoutMs ?? this.defaultRequestTimeoutMs, this.selectedMetadata, signal, onAdmitted);
|
|
423
415
|
}
|
|
424
416
|
rejectSelfActorRequest() {
|
|
425
417
|
const current = (0, actor_execution_context_1.currentZLinkActorExecution)();
|
|
@@ -440,18 +432,14 @@ function decodeActorReply(reply, serializers, packetName) {
|
|
|
440
432
|
const header = (0, protocol_1.decodeStreamHeader)(frame.header);
|
|
441
433
|
const payload = runtime_message_1.ZLinkBufferMessage.from(frame.payload);
|
|
442
434
|
try {
|
|
443
|
-
return decodeActorReplyPayload(header.kind, payload, serializers, packetName);
|
|
435
|
+
return decodeActorReplyPayload(header.kind, header.codec, payload, serializers, packetName);
|
|
444
436
|
}
|
|
445
437
|
finally {
|
|
446
438
|
payload.close();
|
|
447
439
|
}
|
|
448
440
|
}
|
|
449
441
|
}
|
|
450
|
-
|
|
451
|
-
const header = (0, protocol_1.decodeStreamHeader)(reply[0].data());
|
|
452
|
-
return decodeActorReplyPayload(header.kind, reply[1], serializers, packetName);
|
|
453
|
-
}
|
|
454
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, 'Actor request reply is empty.');
|
|
442
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, 'Actor request reply must contain one valid STREAM frame.');
|
|
455
443
|
}
|
|
456
444
|
finally {
|
|
457
445
|
closeMessages(reply);
|
|
@@ -461,17 +449,24 @@ function closeMessages(parts) {
|
|
|
461
449
|
for (const part of parts)
|
|
462
450
|
part.close();
|
|
463
451
|
}
|
|
464
|
-
function decodeActorReplyPayload(kind, payload, serializers, packetName) {
|
|
452
|
+
function decodeActorReplyPayload(kind, codec, payload, serializers, packetName) {
|
|
465
453
|
if (kind === protocol_1.ZLinkStreamMessageKind.Error) {
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
454
|
+
if (codec !== protocol_1.ZLinkStreamCodec.Json || !(0, node_buffer_1.isUtf8)(payload.data())) {
|
|
455
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, 'Actor Error reply requires UTF-8 JSON.');
|
|
456
|
+
}
|
|
457
|
+
const error = (0, payload_codec_1.decodeFrameworkPayloadMessage)(payload);
|
|
458
|
+
if (typeof error !== 'object' ||
|
|
459
|
+
error === null ||
|
|
460
|
+
typeof error.code !== 'string' ||
|
|
461
|
+
typeof error.message !== 'string') {
|
|
462
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, 'Actor Error reply requires code and message strings.');
|
|
463
|
+
}
|
|
464
|
+
const wire = error;
|
|
465
|
+
const kind = (0, channel_envelope_1.channelErrorKindFromCode)(wire.code);
|
|
466
|
+
if (kind === undefined) {
|
|
467
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, `Actor Error reply uses an unknown error code '${wire.code}'.`);
|
|
468
|
+
}
|
|
469
|
+
throw new contracts_1.ZLinkFrameworkException(kind, wire.message);
|
|
475
470
|
}
|
|
476
471
|
return (0, payload_codec_1.decodeFrameworkPayloadMessage)(payload, serializers, undefined, stream_wire_1.ZlinkStreamContentType.Json, packetName, 'reply');
|
|
477
472
|
}
|
|
@@ -13,6 +13,8 @@ export declare class DefaultZLinkActorContext implements ZLinkActorContext {
|
|
|
13
13
|
constructor(state: ZLinkActorRuntimeState, joinCoordinator: ZLinkActorJoinCoordinator | undefined, boundSessionFactory: ZLinkActorBoundSessionFactory | undefined, messageSerializers: ReadonlyMap<string, ZLinkMessageSerializer> | undefined, meshNameProvider: ZLinkActorManagerOptions['actorMeshNameProvider']);
|
|
14
14
|
get meshName(): string;
|
|
15
15
|
get actorId(): string;
|
|
16
|
+
/** Actor-turn view of the single current Session binding (§7). */
|
|
17
|
+
get currentSessionBinding(): import("./actor-runtime-state").ZLinkRemoteBoundSessionTarget | undefined;
|
|
16
18
|
get objectGeneration(): bigint;
|
|
17
19
|
get spotId(): SpotId | undefined;
|
|
18
20
|
[ZLINK_ACTOR_LIFECYCLE_SNAPSHOT](): ZLinkActorLifecycleSnapshotSource;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DefaultZLinkActorContext = exports.ZLINK_ACTOR_JOIN_ENTRY_SPOT_RUNTIME = void 0;
|
|
4
|
+
const routing_id_1 = require("../routing-id");
|
|
4
5
|
const contracts_1 = require("../../contracts");
|
|
5
6
|
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
6
7
|
const runtime_message_1 = require("../backend/runtime-message");
|
|
@@ -53,6 +54,10 @@ class DefaultZLinkActorContext {
|
|
|
53
54
|
get actorId() {
|
|
54
55
|
return this.state.actorId;
|
|
55
56
|
}
|
|
57
|
+
/** Actor-turn view of the single current Session binding (§7). */
|
|
58
|
+
get currentSessionBinding() {
|
|
59
|
+
return this.state.boundSession;
|
|
60
|
+
}
|
|
56
61
|
get objectGeneration() {
|
|
57
62
|
return this.state.nativeActorRef?.generation ?? 1n;
|
|
58
63
|
}
|
|
@@ -200,10 +205,25 @@ class DefaultZLinkActorJoinSpotCall {
|
|
|
200
205
|
deadline.close();
|
|
201
206
|
requestMessage.close();
|
|
202
207
|
}
|
|
208
|
+
if (result.sourceCleanup !== undefined) {
|
|
209
|
+
// Infrastructure cleanup has its own terminal, outside the public Failed conversion.
|
|
210
|
+
try {
|
|
211
|
+
const cleanup = result.sourceCleanup();
|
|
212
|
+
await (this.turn === undefined ? cleanup : this.turn.yieldFrameworkPromise(cleanup));
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
traceJoinError(this.actor, error, this.coordinator, ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop);
|
|
216
|
+
throw error;
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
this.state.endDeferredJoin();
|
|
220
|
+
}
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
203
223
|
if (!result.accepted ||
|
|
204
224
|
sourceNodeRid === undefined ||
|
|
205
225
|
result.actor === undefined ||
|
|
206
|
-
|
|
226
|
+
(0, routing_id_1.routingIdsEqual)(sourceNodeRid, result.actor.nodeRid)) {
|
|
207
227
|
await notifyJoinCompletion(this.actor, operationId, result, this.messageSerializers);
|
|
208
228
|
}
|
|
209
229
|
else {
|
|
@@ -322,10 +342,25 @@ class DefaultZLinkActorJoinEntrySpotCall {
|
|
|
322
342
|
deadline.close();
|
|
323
343
|
requestMessage.close();
|
|
324
344
|
}
|
|
345
|
+
if (result.sourceCleanup !== undefined) {
|
|
346
|
+
// Infrastructure cleanup has its own terminal, outside the public Failed conversion.
|
|
347
|
+
try {
|
|
348
|
+
const cleanup = result.sourceCleanup();
|
|
349
|
+
await (this.turn === undefined ? cleanup : this.turn.yieldFrameworkPromise(cleanup));
|
|
350
|
+
}
|
|
351
|
+
catch (error) {
|
|
352
|
+
traceJoinError(this.actor, error, this.coordinator, ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop);
|
|
353
|
+
throw error;
|
|
354
|
+
}
|
|
355
|
+
finally {
|
|
356
|
+
this.state.endDeferredJoin();
|
|
357
|
+
}
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
325
360
|
if (!result.accepted ||
|
|
326
361
|
sourceNodeRid === undefined ||
|
|
327
362
|
result.actor === undefined ||
|
|
328
|
-
|
|
363
|
+
(0, routing_id_1.routingIdsEqual)(sourceNodeRid, result.actor.nodeRid)) {
|
|
329
364
|
await notifyJoinCompletion(this.actor, operationId, result, this.messageSerializers);
|
|
330
365
|
}
|
|
331
366
|
else {
|
|
@@ -430,10 +465,17 @@ async function notifyJoinCompletion(actor, operationId, result, _messageSerializ
|
|
|
430
465
|
await actor.onJoinCompleted?.(completion);
|
|
431
466
|
}
|
|
432
467
|
async function notifyJoinFailure(actor, operationId, error, coordinator) {
|
|
433
|
-
console.error(`actor join failure actor=${actor.context.actorId}`, error);
|
|
434
468
|
const frameworkError = error instanceof contracts_1.ZLinkFrameworkException
|
|
435
469
|
? error
|
|
436
470
|
: (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, 'Deferred actor join failed.', false, error);
|
|
471
|
+
traceJoinError(actor, error, coordinator, ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.ReplyError);
|
|
472
|
+
await actor.onJoinCompleted?.({
|
|
473
|
+
status: 'failed',
|
|
474
|
+
operationId,
|
|
475
|
+
kind: frameworkError.kind
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
function traceJoinError(actor, error, coordinator, errorAction) {
|
|
437
479
|
// The completion carries only an error kind, so trace the cause on the
|
|
438
480
|
// message flow under the same flow id as the Join that produced it.
|
|
439
481
|
const tracePoint = coordinator?.messageFlow?.()?.begin(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Error);
|
|
@@ -445,13 +487,8 @@ async function notifyJoinFailure(actor, operationId, error, coordinator) {
|
|
|
445
487
|
packetName: 'JoinSpot',
|
|
446
488
|
actorId: actor.context.actorId,
|
|
447
489
|
errorReason: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException,
|
|
448
|
-
errorAction
|
|
490
|
+
errorAction,
|
|
449
491
|
errorType: errorDetails?.errorType,
|
|
450
492
|
errorMessage: errorDetails?.errorMessage
|
|
451
493
|
});
|
|
452
|
-
await actor.onJoinCompleted?.({
|
|
453
|
-
status: 'failed',
|
|
454
|
-
operationId,
|
|
455
|
-
kind: frameworkError.kind
|
|
456
|
-
});
|
|
457
494
|
}
|
|
@@ -8,6 +8,7 @@ import { type ZLinkActorMessageFollowContext, type ZLinkActorMessageFollowOwnerF
|
|
|
8
8
|
import type { ZLinkActorRoutedJoinTransport } from './actor-routed-join-transport';
|
|
9
9
|
import type { ZLinkRemoteBoundSessionTarget } from './actor-runtime-state';
|
|
10
10
|
export declare const DEFAULT_MESSAGE_FOLLOW_DURATION_MS: number;
|
|
11
|
+
export declare const RELOCATED_REQUEST_OWNED_BY_REQUESTER: unique symbol;
|
|
11
12
|
export interface ZLinkActorHandoffPacket {
|
|
12
13
|
readonly index: number;
|
|
13
14
|
readonly header: string;
|
|
@@ -36,6 +37,7 @@ export interface ZLinkActorHandoffRequestSource {
|
|
|
36
37
|
readonly ownerId: string;
|
|
37
38
|
readonly ownerLeaseGeneration: string;
|
|
38
39
|
readonly nodeRid: string;
|
|
40
|
+
readonly nodeRidHex?: string;
|
|
39
41
|
readonly nodeGeneration: string;
|
|
40
42
|
readonly replyRouteId: string;
|
|
41
43
|
}
|
|
@@ -63,6 +65,7 @@ export interface ZLinkActorHandoffPrefixAdmission {
|
|
|
63
65
|
readonly terminal: Promise<void>;
|
|
64
66
|
}
|
|
65
67
|
export interface ZLinkActorHandoffPrefixRecord {
|
|
68
|
+
readonly onWithdrawable?: (withdraw: () => boolean) => void;
|
|
66
69
|
readonly drain: (dispatch: ZLinkActorHandoffDispatch) => Promise<void>;
|
|
67
70
|
readonly preparation?: {
|
|
68
71
|
prepare(signal: AbortSignal): Promise<void>;
|
|
@@ -118,13 +121,15 @@ export declare class ZLinkActorHandoffCoordinator {
|
|
|
118
121
|
begin(actorId: string, oldGeneration: bigint): void;
|
|
119
122
|
beginProvisional(actorId: string, oldGeneration: bigint): void;
|
|
120
123
|
private startHandoff;
|
|
124
|
+
/** True while a hold owns this Actor's ingress, before its release to the Actor FIFO. */
|
|
121
125
|
isActive(actorId: string): boolean;
|
|
122
126
|
isProvisional(actorId: string): boolean;
|
|
123
|
-
promoteProvisional(actorId: string): void;
|
|
124
127
|
sealConnectionBoundIngress(actorId: string): void;
|
|
125
128
|
activeSourceOwner(actorId: string): ZLinkActorMessageFollowOwnerFence | undefined;
|
|
126
129
|
releaseDeferred(actorId: string, dispatch?: ZLinkActorHandoffDispatch, admission?: ZLinkActorHandoffReplayAdmission): Promise<void>;
|
|
127
130
|
releaseCanceled(actorId: string, dispatch: ZLinkActorHandoffDispatch, admission?: ZLinkActorHandoffReplayAdmission): Promise<void>;
|
|
131
|
+
/** Installs a restored target's payload in the same owner used by local handoffs. */
|
|
132
|
+
admitTransferredPrefix(actorId: string, objectGeneration: bigint, packets: readonly ZLinkActorHandoffPacket[], queue: ZLinkActorHandoffPrefixQueue, preparation: ZLinkActorHandoffReplayPreparation | undefined, start: Promise<void>, onResult: (packet: ZLinkActorHandoffPacket, result: ZLinkActorHandoffResult) => void): ZLinkActorHandoffPrefixAdmission;
|
|
128
133
|
private admitHandoffPrefix;
|
|
129
134
|
private admitPendingPrefix;
|
|
130
135
|
private createPrefixRecord;
|
|
@@ -142,9 +147,8 @@ export declare class ZLinkActorHandoffCoordinator {
|
|
|
142
147
|
*/
|
|
143
148
|
failPending(actorId: string, reason: unknown): void;
|
|
144
149
|
cancel(actorId: string): void;
|
|
145
|
-
capture(origin: ApplicationJobOrigin, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, deadlineUnixMs?: number, messageFollowOrigin?: ZLinkMessageFollowOrigin, provisionalReplay?: ZLinkActorHandoffDispatch): Promise<unknown> | undefined;
|
|
150
|
+
capture(origin: ApplicationJobOrigin, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, deadlineUnixMs?: number, messageFollowOrigin?: ZLinkMessageFollowOrigin, provisionalReplay?: ZLinkActorHandoffDispatch, onAdmitted?: () => void): Promise<unknown> | undefined;
|
|
146
151
|
snapshot(actorId: string): readonly ZLinkActorHandoffPacket[];
|
|
147
|
-
snapshotCoreBacklog(actorId: string): readonly ZLinkActorHandoffPacket[];
|
|
148
152
|
/**
|
|
149
153
|
* Freezes the post-capture ingress segment immediately before the caller
|
|
150
154
|
* appends the one-way cutover on the same relocation lane. Records returned
|
|
@@ -152,7 +156,7 @@ export declare class ZLinkActorHandoffCoordinator {
|
|
|
152
156
|
* from the later Message Follow tail.
|
|
153
157
|
*/
|
|
154
158
|
takeRelocationRelay(actorId: string): readonly ZLinkActorHandoffPacket[];
|
|
155
|
-
complete(actorId: string, target: ZLinkSpotRouteTarget, targetActorRef: ActorRef, results: readonly ZLinkActorHandoffResult[], targetOwnerFence: ZLinkActorMessageFollowOwnerFence): void;
|
|
159
|
+
complete(actorId: string, target: ZLinkSpotRouteTarget, targetActorRef: ActorRef, results: readonly ZLinkActorHandoffResult[], targetOwnerFence: ZLinkActorMessageFollowOwnerFence | null): void;
|
|
156
160
|
messageFollowCount(actorId?: string): number;
|
|
157
161
|
pendingCount(actorId: string): number;
|
|
158
162
|
isKnownStale(actor: ActorRef): boolean;
|