@zlink-systems/framework 0.30.3 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActor.d.ts +2 -0
- package/dist/contracts/Actors/ZLinkSessionBindingIdentity.d.ts +6 -0
- package/dist/contracts/Actors/ZLinkSessionBindingIdentity.js +2 -0
- package/dist/contracts/Actors/index.d.ts +1 -0
- package/dist/contracts/Actors/index.js +1 -0
- package/dist/contracts/Common/CoreTypes.d.ts +1 -0
- package/dist/contracts/Common/HandlerMessageType.d.ts +8 -0
- package/dist/contracts/Common/HandlerMessageType.js +41 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +1 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.js +12 -20
- package/dist/contracts/Common/ZLinkMessage.js +11 -7
- package/dist/contracts/Common/encoded-payload-storage.d.ts +0 -2
- package/dist/contracts/Common/encoded-payload-storage.js +4 -16
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/payload-slab.d.ts +4 -0
- package/dist/contracts/Common/payload-slab.js +30 -0
- package/dist/contracts/Configuration/RegistrationBuilders.js +15 -9
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +19 -0
- package/dist/contracts/Handlers/Contexts.d.ts +1 -0
- package/dist/contracts/Locations/Authority.d.ts +2 -0
- package/dist/internal.d.ts +9 -0
- package/dist/internal.js +23 -1
- package/dist/nest-integration.d.ts +1 -0
- package/dist/nest-integration.js +3 -1
- package/dist/runtime/actors/actor-client.d.ts +6 -2
- package/dist/runtime/actors/actor-client.js +120 -82
- package/dist/runtime/actors/actor-context.js +16 -5
- package/dist/runtime/actors/actor-execution-context.js +2 -2
- package/dist/runtime/actors/actor-handoff.d.ts +12 -1
- package/dist/runtime/actors/actor-handoff.js +79 -34
- package/dist/runtime/actors/actor-join-deferred-scope.js +6 -6
- package/dist/runtime/actors/actor-local-native-join.d.ts +2 -2
- package/dist/runtime/actors/actor-local-native-join.js +19 -17
- package/dist/runtime/actors/actor-mailbox.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.d.ts +2 -2
- package/dist/runtime/actors/actor-remote-joiner.js +4 -4
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +9 -3
- package/dist/runtime/actors/actor-routed-json-request.d.ts +3 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -2
- package/dist/runtime/actors/actor-runtime-state.d.ts +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +9 -5
- package/dist/runtime/actors/spot-actor-dispatch.js +60 -38
- package/dist/runtime/admission.d.ts +6 -4
- package/dist/runtime/admission.js +21 -10
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +1 -0
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +3 -0
- package/dist/runtime/backend/contracts/index.d.ts +26 -10
- package/dist/runtime/backend/mesh-completion-table.d.ts +7 -1
- package/dist/runtime/backend/mesh-completion-table.js +84 -20
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +19 -6
- package/dist/runtime/backend/mesh-dispatch-pump.js +246 -147
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +27 -19
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +5 -2
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +70 -13
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +4 -3
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +5 -1
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +7 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +99 -63
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +34 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +210 -106
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +20 -6
- package/dist/runtime/backend/raw-binding-port.d.ts +6 -3
- package/dist/runtime/channels/channel-clients.js +3 -3
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +11 -7
- package/dist/runtime/channels/channel-dispatch-pipeline.js +40 -22
- package/dist/runtime/channels/channel-dispatch-services.d.ts +3 -1
- package/dist/runtime/channels/channel-dispatch-services.js +7 -6
- package/dist/runtime/channels/channel-dispatchers.d.ts +13 -6
- package/dist/runtime/channels/channel-dispatchers.js +57 -36
- package/dist/runtime/channels/channel-envelope.d.ts +2 -2
- package/dist/runtime/channels/channel-envelope.js +609 -83
- package/dist/runtime/channels/channel-multipart.d.ts +1 -0
- package/dist/runtime/channels/channel-multipart.js +10 -6
- package/dist/runtime/channels/channel-outbound-operations.d.ts +6 -9
- package/dist/runtime/channels/channel-outbound-operations.js +107 -105
- package/dist/runtime/channels/channel-receive-loops.d.ts +9 -7
- package/dist/runtime/channels/channel-receive-loops.js +126 -90
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +23 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.js +47 -38
- package/dist/runtime/channels/channel-runtime-manager.d.ts +13 -6
- package/dist/runtime/channels/channel-runtime-manager.js +32 -14
- package/dist/runtime/channels/channel-socket-registry.d.ts +28 -4
- package/dist/runtime/channels/channel-socket-registry.js +9 -1
- package/dist/runtime/channels/channel-transports.d.ts +23 -16
- package/dist/runtime/channels/channel-transports.js +139 -119
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +4 -4
- package/dist/runtime/channels/dispatch-error-reporter.js +5 -5
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.d.ts +5 -2
- package/dist/runtime/channels/local-spot-route-transport.js +15 -18
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +6 -3
- package/dist/runtime/channels/router-socket-spot-route-transport.js +33 -19
- package/dist/runtime/channels/source-spot-router.d.ts +6 -3
- package/dist/runtime/channels/source-spot-router.js +34 -23
- package/dist/runtime/channels/spot-node-route-transport.d.ts +6 -3
- package/dist/runtime/channels/spot-node-route-transport.js +23 -17
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +6 -3
- package/dist/runtime/channels/spot-route-bridge-transport.js +38 -24
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +8 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +36 -23
- package/dist/runtime/diagnostics/dispatch-error-details.js +9 -3
- package/dist/runtime/diagnostics/message-flow-bootstrap.d.ts +1 -0
- package/dist/runtime/diagnostics/message-flow-bootstrap.js +8 -0
- package/dist/runtime/diagnostics/message-flow-delivery.d.ts +47 -0
- package/dist/runtime/diagnostics/message-flow-delivery.js +149 -0
- package/dist/runtime/diagnostics/message-flow-record.d.ts +50 -0
- package/dist/runtime/diagnostics/message-flow-record.js +228 -0
- package/dist/runtime/diagnostics/message-flow-worker.d.ts +1 -0
- package/dist/runtime/diagnostics/message-flow-worker.js +118 -0
- package/dist/runtime/diagnostics/message-flow.d.ts +7 -19
- package/dist/runtime/diagnostics/message-flow.js +42 -290
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +4 -3
- package/dist/runtime/diagnostics/runtime-metrics.js +8 -4
- package/dist/runtime/execution/index.d.ts +1 -0
- package/dist/runtime/execution/index.js +6 -3
- package/dist/runtime/execution/serial-execution-queue.d.ts +26 -13
- package/dist/runtime/execution/serial-execution-queue.js +75 -71
- package/dist/runtime/foundation/durable-service-request.d.ts +12 -3
- package/dist/runtime/foundation/durable-service-request.js +158 -73
- package/dist/runtime/foundation/operation-registry.d.ts +33 -3
- package/dist/runtime/foundation/operation-registry.js +272 -33
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +62 -23
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +373 -194
- package/dist/runtime/foundation/request-runtime.d.ts +17 -0
- package/dist/runtime/foundation/request-runtime.js +163 -0
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +6 -0
- package/dist/runtime/foundation/service-liveness-registry.d.ts +1 -1
- package/dist/runtime/foundation/service-mailbox.d.ts +4 -2
- package/dist/runtime/foundation/service-mailbox.js +4 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -2
- package/dist/runtime/foundation/service-relocation-object-owner.js +12 -5
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +7 -2
- package/dist/runtime/foundation/service-stateful-registry.d.ts +6 -2
- package/dist/runtime/foundation/service-stateful-registry.js +38 -17
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +91 -26
- package/dist/runtime/foundation/service-stateful-runtime.js +245 -120
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -0
- package/dist/runtime/foundation/service-stateful-wire-codec.js +15 -0
- package/dist/runtime/foundation/service-topology-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-topology-registry.js +13 -3
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +12 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +5 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.js +50 -15
- package/dist/runtime/host/actor-packet-relay.d.ts +5 -6
- package/dist/runtime/host/actor-packet-relay.js +58 -57
- package/dist/runtime/host/actor-placement-coordinator.d.ts +1 -1
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +3 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +3 -3
- package/dist/runtime/host/application-job-queue.d.ts +7 -5
- package/dist/runtime/host/application-job-queue.js +33 -21
- package/dist/runtime/host/bound-session-relay.js +0 -1
- package/dist/runtime/host/channel-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -0
- package/dist/runtime/host/entry-actor-runtime.d.ts +5 -2
- package/dist/runtime/host/entry-actor-runtime.js +2 -2
- package/dist/runtime/host/index.d.ts +106 -37
- package/dist/runtime/host/index.js +303 -151
- package/dist/runtime/host/location-runtime-owner.d.ts +2 -2
- package/dist/runtime/host/location-runtime-owner.js +1 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +195 -45
- package/dist/runtime/host/service-relocation-host-runtime.js +257 -144
- package/dist/runtime/host/spot-address-transport.d.ts +3 -0
- package/dist/runtime/host/spot-address-transport.js +73 -76
- package/dist/runtime/host/spot-runtime-options-factory.js +2 -0
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -1
- package/dist/runtime/host/user-spot-creation-coordinator.js +49 -21
- package/dist/runtime/internal-observation.d.ts +1 -0
- package/dist/runtime/internal-observation.js +5 -0
- package/dist/runtime/locations/actor-location-claims.d.ts +1 -1
- package/dist/runtime/locations/actor-location-claims.js +15 -6
- package/dist/runtime/locations/auto-connect-loop.d.ts +0 -1
- package/dist/runtime/locations/auto-connect-loop.js +25 -19
- package/dist/runtime/locations/auto-connect-planner.js +2 -5
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +1 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +35 -23
- package/dist/runtime/locations/in-memory-authority-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.js +15 -5
- package/dist/runtime/locations/in-memory-location-store.d.ts +0 -2
- package/dist/runtime/locations/in-memory-location-store.js +1 -38
- package/dist/runtime/locations/lifecycle.d.ts +1 -1
- package/dist/runtime/locations/lifecycle.js +2 -2
- package/dist/runtime/locations/location-store-repository.d.ts +0 -1
- package/dist/runtime/locations/location-store-repository.js +163 -246
- package/dist/runtime/locations/resolvers.d.ts +8 -1
- package/dist/runtime/locations/resolvers.js +16 -2
- package/dist/runtime/locations/runtime.d.ts +3 -3
- package/dist/runtime/locations/runtime.js +12 -16
- package/dist/runtime/messaging/creation-payload-codec.js +8 -7
- package/dist/runtime/messaging/framework-json-v1.d.ts +1 -1
- package/dist/runtime/messaging/framework-json-v1.js +6 -2
- package/dist/runtime/messaging/payload-codec.js +21 -35
- package/dist/runtime/messaging/request-deadline.d.ts +4 -2
- package/dist/runtime/messaging/request-deadline.js +40 -25
- package/dist/runtime/messaging/request-result.d.ts +14 -1
- package/dist/runtime/messaging/request-result.js +74 -13
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +4 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -7
- package/dist/runtime/spots/index.d.ts +28 -7
- package/dist/runtime/spots/index.js +31 -6
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -2
- package/dist/runtime/spots/spot-activation-registry.js +13 -8
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -0
- package/dist/runtime/spots/spot-activation-state.js +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +9 -4
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +33 -12
- package/dist/runtime/spots/spot-actor-ingress-admission.d.ts +40 -0
- package/dist/runtime/spots/spot-actor-ingress-admission.js +78 -0
- package/dist/runtime/spots/spot-actor-membership.js +3 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +16 -43
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +56 -113
- package/dist/runtime/spots/spot-actor-packet-drain.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -5
- package/dist/runtime/spots/spot-entry-activation.d.ts +4 -3
- package/dist/runtime/spots/spot-entry-activation.js +7 -12
- package/dist/runtime/spots/spot-handler-registry.d.ts +5 -1
- package/dist/runtime/spots/spot-handler-registry.js +31 -15
- package/dist/runtime/spots/spot-manager-public.js +3 -2
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +11 -6
- package/dist/runtime/spots/spot-node-runtime-manager.js +6 -1
- package/dist/runtime/spots/spot-outbound.d.ts +8 -2
- package/dist/runtime/spots/spot-outbound.js +5 -5
- package/dist/runtime/spots/spot-route-packet-dispatch.js +13 -8
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +9 -5
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -2
- package/dist/runtime/spots/spot-serial-executor.d.ts +2 -1
- package/dist/runtime/spots/spot-serial-turn-executor.js +20 -26
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -2
- package/dist/runtime/spots/spot-timer.d.ts +1 -1
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +11 -3
- package/dist/runtime/streams/actor-session-binding-registry.js +28 -0
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +3 -4
- package/dist/runtime/streams/bound-session-service.js +6 -7
- package/dist/runtime/streams/index.d.ts +3 -3
- package/dist/runtime/streams/index.js +22 -2
- package/dist/runtime/streams/managed-stream.js +2 -1
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +3 -9
- package/dist/runtime/streams/session-context.d.ts +2 -2
- package/dist/runtime/streams/session-context.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -0
- package/dist/runtime/streams/stream-session-runtime.js +64 -33
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActor.ts +6 -0
- package/src/contracts/Actors/ZLinkSessionBindingIdentity.ts +7 -0
- package/src/contracts/Actors/index.ts +1 -0
- package/src/contracts/Common/CoreTypes.ts +1 -0
- package/src/contracts/Common/HandlerMessageType.ts +50 -0
- package/src/contracts/Common/ZLinkEncodedPayload.ts +13 -25
- package/src/contracts/Common/ZLinkMessage.ts +11 -7
- package/src/contracts/Common/encoded-payload-storage.ts +4 -16
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Common/payload-slab.ts +29 -0
- package/src/contracts/Configuration/RegistrationBuilders.ts +29 -15
- package/src/contracts/Configuration/RegistrationTypes.ts +19 -0
- package/src/contracts/Handlers/Contexts.ts +1 -0
- package/src/contracts/Locations/Authority.ts +7 -1
- package/src/internal.ts +17 -0
- package/src/nest-integration.ts +1 -0
- package/src/runtime/actors/actor-client.ts +257 -163
- package/src/runtime/actors/actor-context.ts +26 -14
- package/src/runtime/actors/actor-execution-context.ts +2 -2
- package/src/runtime/actors/actor-handoff.ts +86 -51
- package/src/runtime/actors/actor-join-deferred-scope.ts +6 -6
- package/src/runtime/actors/actor-local-native-join.ts +38 -17
- package/src/runtime/actors/actor-mailbox.ts +1 -1
- package/src/runtime/actors/actor-remote-joiner.ts +8 -4
- package/src/runtime/actors/actor-routed-join-transport.ts +13 -5
- package/src/runtime/actors/actor-routed-json-request.ts +3 -0
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -2
- package/src/runtime/actors/actor-runtime-state.ts +1 -1
- package/src/runtime/actors/spot-actor-dispatch.ts +70 -68
- package/src/runtime/admission.ts +42 -15
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +4 -0
- package/src/runtime/backend/contracts/index.ts +77 -10
- package/src/runtime/backend/mesh-completion-table.ts +106 -15
- package/src/runtime/backend/mesh-dispatch-pump.ts +294 -146
- package/src/runtime/backend/node/node-backend-adapter-support.ts +42 -32
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +91 -34
- package/src/runtime/backend/node/node-event-loop-poller.ts +14 -5
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +5 -1
- package/src/runtime/backend/node/node-raw-binding-port.ts +180 -69
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +386 -157
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +56 -11
- package/src/runtime/backend/raw-binding-port.ts +13 -5
- package/src/runtime/channels/channel-clients.ts +26 -11
- package/src/runtime/channels/channel-dispatch-pipeline.ts +77 -65
- package/src/runtime/channels/channel-dispatch-services.ts +7 -12
- package/src/runtime/channels/channel-dispatchers.ts +93 -39
- package/src/runtime/channels/channel-envelope.ts +680 -144
- package/src/runtime/channels/channel-multipart.ts +17 -13
- package/src/runtime/channels/channel-outbound-operations.ts +204 -178
- package/src/runtime/channels/channel-receive-loops.ts +160 -107
- package/src/runtime/channels/channel-runtime-lifecycle.ts +64 -59
- package/src/runtime/channels/channel-runtime-manager.ts +74 -27
- package/src/runtime/channels/channel-socket-registry.ts +20 -5
- package/src/runtime/channels/channel-transports.ts +414 -287
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -9
- package/src/runtime/channels/local-spot-route-transport.ts +27 -29
- package/src/runtime/channels/router-socket-spot-route-transport.ts +63 -32
- package/src/runtime/channels/source-spot-router.ts +75 -38
- package/src/runtime/channels/spot-node-route-transport.ts +67 -37
- package/src/runtime/channels/spot-route-bridge-transport.ts +62 -30
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +105 -34
- package/src/runtime/diagnostics/dispatch-error-details.ts +10 -2
- package/src/runtime/diagnostics/message-flow-bootstrap.ts +6 -0
- package/src/runtime/diagnostics/message-flow-delivery.ts +171 -0
- package/src/runtime/diagnostics/message-flow-record.ts +295 -0
- package/src/runtime/diagnostics/message-flow-worker.ts +146 -0
- package/src/runtime/diagnostics/message-flow.ts +49 -362
- package/src/runtime/diagnostics/runtime-metrics.ts +10 -4
- package/src/runtime/execution/index.ts +6 -0
- package/src/runtime/execution/serial-execution-queue.ts +94 -96
- package/src/runtime/foundation/durable-service-request.ts +212 -89
- package/src/runtime/foundation/operation-registry.ts +287 -38
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +617 -292
- package/src/runtime/foundation/request-runtime.ts +227 -0
- package/src/runtime/foundation/service-discovery-registry.ts +7 -0
- package/src/runtime/foundation/service-liveness-registry.ts +1 -1
- package/src/runtime/foundation/service-mailbox.ts +7 -2
- package/src/runtime/foundation/service-relocation-object-owner.ts +21 -6
- package/src/runtime/foundation/service-runtime-contracts.ts +12 -2
- package/src/runtime/foundation/service-stateful-registry.ts +52 -19
- package/src/runtime/foundation/service-stateful-runtime.ts +365 -198
- package/src/runtime/foundation/service-stateful-wire-codec.ts +18 -0
- package/src/runtime/foundation/service-topology-registry.ts +21 -3
- package/src/runtime/foundation/service-wire-constants.generated.ts +10 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -17
- package/src/runtime/host/actor-packet-relay.ts +160 -156
- package/src/runtime/host/actor-placement-coordinator.ts +1 -1
- package/src/runtime/host/actor-runtime-options-factory.ts +7 -2
- package/src/runtime/host/actor-transfer-runtime.ts +3 -3
- package/src/runtime/host/application-job-queue.ts +56 -27
- package/src/runtime/host/bound-session-relay.ts +0 -1
- package/src/runtime/host/channel-runtime-options-factory.ts +3 -0
- package/src/runtime/host/entry-actor-runtime.ts +14 -6
- package/src/runtime/host/index.ts +388 -113
- package/src/runtime/host/location-runtime-owner.ts +3 -3
- package/src/runtime/host/service-relocation-host-runtime.ts +380 -252
- package/src/runtime/host/spot-address-transport.ts +110 -95
- package/src/runtime/host/spot-runtime-options-factory.ts +3 -0
- package/src/runtime/host/user-spot-creation-coordinator.ts +69 -22
- package/src/runtime/internal-observation.ts +2 -0
- package/src/runtime/locations/actor-location-claims.ts +42 -16
- package/src/runtime/locations/auto-connect-loop.ts +24 -16
- package/src/runtime/locations/auto-connect-planner.ts +2 -5
- package/src/runtime/locations/auto-connect-reconciler.ts +37 -24
- package/src/runtime/locations/in-memory-authority-store.ts +27 -7
- package/src/runtime/locations/in-memory-location-store.ts +1 -74
- package/src/runtime/locations/lifecycle.ts +4 -2
- package/src/runtime/locations/location-store-repository.ts +228 -308
- package/src/runtime/locations/resolvers.ts +20 -8
- package/src/runtime/locations/runtime.ts +16 -28
- package/src/runtime/messaging/creation-payload-codec.ts +12 -10
- package/src/runtime/messaging/framework-json-v1.ts +10 -1
- package/src/runtime/messaging/payload-codec.ts +50 -75
- package/src/runtime/messaging/request-deadline.ts +47 -39
- package/src/runtime/messaging/request-result.ts +88 -17
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/index.ts +57 -10
- package/src/runtime/spots/spot-activation-registry.ts +12 -8
- package/src/runtime/spots/spot-activation-state.ts +2 -0
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +62 -37
- package/src/runtime/spots/spot-actor-ingress-admission.ts +157 -0
- package/src/runtime/spots/spot-actor-membership.ts +8 -5
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +122 -206
- package/src/runtime/spots/spot-actor-packet-drain.ts +21 -6
- package/src/runtime/spots/spot-entry-activation.ts +25 -35
- package/src/runtime/spots/spot-handler-registry.ts +72 -15
- package/src/runtime/spots/spot-manager-public.ts +4 -2
- package/src/runtime/spots/spot-node-runtime-manager.ts +16 -7
- package/src/runtime/spots/spot-outbound.ts +26 -10
- package/src/runtime/spots/spot-route-packet-dispatch.ts +18 -8
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +14 -8
- package/src/runtime/spots/spot-runtime-ports.ts +5 -2
- package/src/runtime/spots/spot-serial-executor.ts +1 -1
- package/src/runtime/spots/spot-serial-turn-executor.ts +25 -40
- package/src/runtime/spots/spot-subscription-dispatch.ts +9 -2
- package/src/runtime/spots/spot-timer.ts +1 -1
- package/src/runtime/streams/actor-session-binding-registry.ts +46 -3
- package/src/runtime/streams/bound-actor-relay-sender.ts +16 -5
- package/src/runtime/streams/bound-session-service.ts +10 -7
- package/src/runtime/streams/index.ts +30 -4
- package/src/runtime/streams/managed-stream.ts +2 -1
- package/src/runtime/streams/session-calls.ts +9 -14
- package/src/runtime/streams/session-context.ts +6 -11
- package/src/runtime/streams/stream-session-runtime.ts +79 -40
- package/dist/runtime/spots/spot-lifecycle-metrics.d.ts +0 -8
- package/dist/runtime/spots/spot-lifecycle-metrics.js +0 -17
- package/src/runtime/spots/spot-lifecycle-metrics.ts +0 -16
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
import { RequestRuntime } from '../foundation/request-runtime';
|
|
2
|
+
import type { PendingOperation, OperationObserver } from '../foundation/operation-registry';
|
|
1
3
|
import { isUtf8 } from 'node:buffer';
|
|
2
4
|
import { channelErrorKindFromCode } from '../channels/channel-envelope';
|
|
3
5
|
import { routingIdsEqual } from '../routing-id';
|
|
4
6
|
import { ZlinkStreamContentType } from '@zlink-systems/stream-wire';
|
|
5
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
createZLinkRequest,
|
|
9
|
+
mapZLinkRequestReply,
|
|
10
|
+
type ZLinkRequestResult,
|
|
11
|
+
identityRequestReply
|
|
12
|
+
} from '../messaging/request-result';
|
|
6
13
|
import type { ZLinkRequest } from '../../contracts/Handlers/Attributes';
|
|
7
14
|
import {
|
|
8
15
|
type ActorRef,
|
|
@@ -45,7 +52,11 @@ import {
|
|
|
45
52
|
internalFrameworkErrorKindFromWireFailureCode,
|
|
46
53
|
ZLinkFrameworkInternalErrorKind
|
|
47
54
|
} from '../framework-errors-internal';
|
|
48
|
-
import type {
|
|
55
|
+
import type {
|
|
56
|
+
ZLinkActorRouteInvalidationFence,
|
|
57
|
+
ZLinkResolvedActorRoute,
|
|
58
|
+
ZLinkStoreLocationResolvers
|
|
59
|
+
} from '../locations';
|
|
49
60
|
import { resolveFrameworkPacketName } from '../messaging/packet-name';
|
|
50
61
|
import { decodeFrameworkPayloadMessage, encodeFrameworkPayload } from '../messaging/payload-codec';
|
|
51
62
|
import {
|
|
@@ -77,9 +88,9 @@ import {
|
|
|
77
88
|
ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET
|
|
78
89
|
} from './actor-packet-relay-wire';
|
|
79
90
|
import type { ZLinkActorRoutedJoinTransport } from './actor-routed-join-transport';
|
|
80
|
-
import { requestRoutedJsonReply } from './actor-routed-json-request';
|
|
81
91
|
|
|
82
92
|
export interface ZLinkActorClientOptions {
|
|
93
|
+
readonly requests?: RequestRuntime;
|
|
83
94
|
readonly nodeProvider: (meshName: string) => ZLinkBackendMeshNode | undefined;
|
|
84
95
|
readonly completionTableProvider: (meshName: string) => ZLinkMeshCompletionTable | undefined;
|
|
85
96
|
readonly locationResolver: () => ZLinkStoreLocationResolvers | undefined;
|
|
@@ -94,7 +105,8 @@ export interface ZLinkActorClientOptions {
|
|
|
94
105
|
returnResponse: boolean,
|
|
95
106
|
actor: ActorRef,
|
|
96
107
|
deadlineUnixMs?: number,
|
|
97
|
-
onAdmitted?: () => void
|
|
108
|
+
onAdmitted?: () => void,
|
|
109
|
+
requestOperation?: PendingOperation<unknown>
|
|
98
110
|
) => Promise<unknown> | undefined;
|
|
99
111
|
readonly sendErrorReporter?: (error: unknown) => void;
|
|
100
112
|
readonly routeTransport?: ZLinkActorRoutedJoinTransport;
|
|
@@ -110,7 +122,10 @@ export interface ZLinkActorClientOptions {
|
|
|
110
122
|
}
|
|
111
123
|
|
|
112
124
|
export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
113
|
-
|
|
125
|
+
private readonly requests: RequestRuntime;
|
|
126
|
+
constructor(private readonly options: ZLinkActorClientOptions) {
|
|
127
|
+
this.requests = options.requests ?? new RequestRuntime();
|
|
128
|
+
}
|
|
114
129
|
|
|
115
130
|
sendToActor(actorId: string, message: unknown): ZLinkActorSendCall {
|
|
116
131
|
requireActorId(actorId);
|
|
@@ -150,7 +165,7 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
150
165
|
): Promise<ZLinkSubmitResult> {
|
|
151
166
|
const route = await this.resolveActorRoute(actorId);
|
|
152
167
|
const { meshName, actorRef: actor } = route;
|
|
153
|
-
this.throwIfKnownStale(
|
|
168
|
+
this.throwIfKnownStale(route);
|
|
154
169
|
const parts = this.createPacketParts(
|
|
155
170
|
ZLinkStreamMessageKind.Send,
|
|
156
171
|
undefined,
|
|
@@ -158,9 +173,11 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
158
173
|
message,
|
|
159
174
|
metadata
|
|
160
175
|
);
|
|
161
|
-
|
|
162
|
-
const routedActor = attachActorMessageFollowContext(actor, messageFollow);
|
|
176
|
+
let routeFence: ZLinkActorRouteInvalidationFence | undefined;
|
|
163
177
|
try {
|
|
178
|
+
const messageFollow = createActorMessageFollowContext(route, parts, false);
|
|
179
|
+
routeFence = actorRouteInvalidationFence(route);
|
|
180
|
+
const routedActor = attachActorMessageFollowContext(actor, messageFollow);
|
|
164
181
|
const submissionCopies =
|
|
165
182
|
(await this.options.transportDeliveryGate?.()?.waitBeforeSubmit(actorId, 'oneWay')) ?? 1;
|
|
166
183
|
const handoff = this.options.handoffCapture?.(
|
|
@@ -207,18 +224,13 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
207
224
|
}
|
|
208
225
|
return await this.submitActorSend(meshName, toBackendActorRef(actor), parts, route);
|
|
209
226
|
} catch (error) {
|
|
210
|
-
|
|
211
|
-
this.invalidateActorRoute(actorId);
|
|
212
|
-
this.options.staleActorRefReporter?.(meshName, actor.actorId);
|
|
213
|
-
throw actorLocationStale(actor.actorId, error);
|
|
214
|
-
}
|
|
215
|
-
throw error;
|
|
227
|
+
throw this.mapActorFailure(actorId, error, routeFence, meshName);
|
|
216
228
|
} finally {
|
|
217
229
|
closeMessages(parts);
|
|
218
230
|
}
|
|
219
231
|
}
|
|
220
232
|
|
|
221
|
-
private
|
|
233
|
+
private request<TReply>(
|
|
222
234
|
actorId: string,
|
|
223
235
|
explicitPacketName: string | undefined,
|
|
224
236
|
request: unknown,
|
|
@@ -227,112 +239,123 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
227
239
|
signal?: AbortSignal,
|
|
228
240
|
waitPolicy: 'async' | 'yield' = 'async',
|
|
229
241
|
onAdmitted?: () => void
|
|
230
|
-
):
|
|
242
|
+
): ZLinkRequestResult<TReply> {
|
|
231
243
|
throwIfAborted(signal);
|
|
232
244
|
const sourceSpotId = currentZLinkActorExecution()?.spotId ?? currentZLinkSpotSerialSourceId();
|
|
233
245
|
const effectiveTimeoutMs = timeoutMs ?? this.options.defaultRequestTimeoutMs;
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
effectiveTimeoutMs
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
const delivery = this.options
|
|
273
|
-
.transportDeliveryGate?.()
|
|
274
|
-
?.waitBeforeSubmit(actorId, 'request', signal);
|
|
275
|
-
const submissionCopies =
|
|
276
|
-
delivery === undefined
|
|
277
|
-
? 1
|
|
278
|
-
: ((await waitActorReply(delivery, actorId, deadlineMs, signal)) ?? 1);
|
|
279
|
-
const handoff = this.options.handoffCapture?.(
|
|
280
|
-
meshName,
|
|
281
|
-
actor.actorId,
|
|
282
|
-
parts,
|
|
283
|
-
true,
|
|
284
|
-
routedActor,
|
|
285
|
-
deadlineUnixMs,
|
|
286
|
-
onAdmitted
|
|
287
|
-
);
|
|
288
|
-
if (handoff !== undefined) {
|
|
289
|
-
const submissions = [handoff];
|
|
290
|
-
for (let copy = 1; copy < submissionCopies; copy++) {
|
|
291
|
-
const duplicate = this.options.handoffCapture?.(
|
|
292
|
-
meshName,
|
|
293
|
-
actor.actorId,
|
|
294
|
-
parts,
|
|
295
|
-
true,
|
|
296
|
-
routedActor,
|
|
297
|
-
deadlineUnixMs,
|
|
298
|
-
onAdmitted
|
|
246
|
+
let meshName: string | undefined;
|
|
247
|
+
let routeFence: ZLinkActorRouteInvalidationFence | undefined;
|
|
248
|
+
return this.requests.prepare<TReply>(
|
|
249
|
+
effectiveTimeoutMs,
|
|
250
|
+
signal,
|
|
251
|
+
(requestOperation, receiver) => {
|
|
252
|
+
void (async () => {
|
|
253
|
+
const deadlineMs = requestOperation.deadlineMs;
|
|
254
|
+
const deadlineUnixMs =
|
|
255
|
+
effectiveTimeoutMs === undefined ? undefined : Date.now() + effectiveTimeoutMs;
|
|
256
|
+
const route = await this.resolveActorRoute(actorId, signal, deadlineMs, requestOperation);
|
|
257
|
+
if (!requestOperation.isPending()) return;
|
|
258
|
+
if (
|
|
259
|
+
waitPolicy === 'async' &&
|
|
260
|
+
sourceSpotId !== undefined &&
|
|
261
|
+
sameSpotRoute(sourceSpotId, route)
|
|
262
|
+
) {
|
|
263
|
+
throw createInternalFrameworkException(
|
|
264
|
+
ZLinkFrameworkInternalErrorKind.InvalidOperation,
|
|
265
|
+
`An Actor request cannot await Actor '${actorId}' on the current Spot while holding its execution claim.`
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
const { actorRef: actor } = route;
|
|
269
|
+
meshName = route.meshName;
|
|
270
|
+
if (this.options.staleActorRefPredicate?.(meshName, actor) === true) {
|
|
271
|
+
routeFence = actorRouteInvalidationFence(route);
|
|
272
|
+
throw actorLocationStale(actor.actorId, undefined);
|
|
273
|
+
}
|
|
274
|
+
const operationId = createMessageFollowId();
|
|
275
|
+
const correlationId = createMessageFollowId();
|
|
276
|
+
const requestSequence = BigInt(`0x${operationId.slice(16)}`);
|
|
277
|
+
const parts = this.createPacketParts(
|
|
278
|
+
ZLinkStreamMessageKind.Request,
|
|
279
|
+
requestSequence === 0n ? 1n : requestSequence,
|
|
280
|
+
explicitPacketName,
|
|
281
|
+
request,
|
|
282
|
+
mergeActorRequestMetadata(metadata, deadlineUnixMs),
|
|
283
|
+
correlationId
|
|
299
284
|
);
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
285
|
+
try {
|
|
286
|
+
const messageFollow = createActorMessageFollowContext(
|
|
287
|
+
route,
|
|
288
|
+
parts,
|
|
289
|
+
true,
|
|
290
|
+
deadlineUnixMs,
|
|
291
|
+
correlationId,
|
|
292
|
+
operationId
|
|
293
|
+
);
|
|
294
|
+
routeFence = actorRouteInvalidationFence(route);
|
|
295
|
+
const routedActor = attachActorMessageFollowContext(actor, messageFollow);
|
|
296
|
+
const delivery = this.options
|
|
297
|
+
.transportDeliveryGate?.()
|
|
298
|
+
?.waitBeforeSubmit(actorId, 'request', signal);
|
|
299
|
+
const submissionCopies =
|
|
300
|
+
delivery === undefined
|
|
301
|
+
? 1
|
|
302
|
+
: ((await waitActorReply(delivery, actorId, requestOperation)) ?? 1);
|
|
303
|
+
const handoff = this.options.handoffCapture?.(
|
|
304
|
+
meshName,
|
|
305
|
+
actor.actorId,
|
|
306
|
+
parts,
|
|
307
|
+
true,
|
|
308
|
+
routedActor,
|
|
309
|
+
deadlineUnixMs,
|
|
310
|
+
onAdmitted,
|
|
311
|
+
requestOperation
|
|
312
|
+
);
|
|
313
|
+
if (handoff !== undefined) {
|
|
314
|
+
const submissions = [handoff];
|
|
315
|
+
for (let copy = 1; copy < submissionCopies; copy++) {
|
|
316
|
+
const duplicate = this.options.handoffCapture?.(
|
|
317
|
+
meshName,
|
|
318
|
+
actor.actorId,
|
|
319
|
+
parts,
|
|
320
|
+
true,
|
|
321
|
+
routedActor,
|
|
322
|
+
deadlineUnixMs,
|
|
323
|
+
onAdmitted,
|
|
324
|
+
requestOperation
|
|
325
|
+
);
|
|
326
|
+
if (duplicate !== undefined) submissions.push(duplicate);
|
|
327
|
+
}
|
|
328
|
+
const replies = await Promise.all(submissions);
|
|
329
|
+
receiver.operationCompleted(requestOperation.id, replies[0], undefined);
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
this.submitActorRequest<TReply>(
|
|
333
|
+
meshName,
|
|
334
|
+
toBackendActorRef(actor),
|
|
335
|
+
parts,
|
|
336
|
+
remainingActorRequestTimeout(actorId, deadlineMs),
|
|
337
|
+
signal,
|
|
338
|
+
route,
|
|
339
|
+
messageFollow,
|
|
340
|
+
onAdmitted,
|
|
341
|
+
requestOperation,
|
|
342
|
+
receiver
|
|
343
|
+
);
|
|
344
|
+
} finally {
|
|
345
|
+
closeMessages(parts);
|
|
346
|
+
}
|
|
347
|
+
})().catch((error) => receiver.operationFailed(requestOperation.id, error, undefined));
|
|
348
|
+
},
|
|
349
|
+
(value) => value as TReply,
|
|
350
|
+
(error) => this.mapActorFailure(actorId, error, routeFence, meshName)
|
|
351
|
+
);
|
|
330
352
|
}
|
|
331
353
|
|
|
332
354
|
private async resolveActorRoute(
|
|
333
355
|
actorId: string,
|
|
334
356
|
signal?: AbortSignal,
|
|
335
|
-
deadlineMs?: number
|
|
357
|
+
deadlineMs?: number,
|
|
358
|
+
requestOperation?: PendingOperation<unknown>
|
|
336
359
|
): Promise<ZLinkResolvedActorRoute> {
|
|
337
360
|
const resolver = this.options.locationResolver();
|
|
338
361
|
if (resolver === undefined) {
|
|
@@ -341,7 +364,12 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
341
364
|
'Actor direct messaging requires a Location Store.'
|
|
342
365
|
);
|
|
343
366
|
}
|
|
344
|
-
const resolution = await resolver.resolveDirectActorRoute(
|
|
367
|
+
const resolution = await resolver.resolveDirectActorRoute(
|
|
368
|
+
actorId,
|
|
369
|
+
signal,
|
|
370
|
+
deadlineMs,
|
|
371
|
+
requestOperation
|
|
372
|
+
);
|
|
345
373
|
if (resolution.kind === 'missing') {
|
|
346
374
|
throw createInternalFrameworkException(
|
|
347
375
|
ZLinkFrameworkInternalErrorKind.ActorRouteNotFound,
|
|
@@ -357,15 +385,29 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
357
385
|
return resolution.route;
|
|
358
386
|
}
|
|
359
387
|
|
|
360
|
-
private
|
|
361
|
-
|
|
388
|
+
private mapActorFailure(
|
|
389
|
+
actorId: string,
|
|
390
|
+
error: unknown,
|
|
391
|
+
routeFence: ZLinkActorRouteInvalidationFence | undefined,
|
|
392
|
+
meshName: string | undefined
|
|
393
|
+
): unknown {
|
|
394
|
+
if (!isStaleActorError(error)) return error;
|
|
395
|
+
const resolver = this.options.locationResolver();
|
|
396
|
+
if (routeFence !== undefined && resolver !== undefined)
|
|
397
|
+
resolver.invalidateActorRouteIfMatches(routeFence);
|
|
398
|
+
if (meshName !== undefined) this.options.staleActorRefReporter?.(meshName, actorId);
|
|
399
|
+
return actorLocationStale(actorId, error);
|
|
362
400
|
}
|
|
363
401
|
|
|
364
|
-
private throwIfKnownStale(
|
|
402
|
+
private throwIfKnownStale(route: ZLinkResolvedActorRoute): void {
|
|
403
|
+
const { meshName, actorRef: actor } = route;
|
|
365
404
|
if (this.options.staleActorRefPredicate?.(meshName, actor) !== true) return;
|
|
366
|
-
this.
|
|
367
|
-
|
|
368
|
-
|
|
405
|
+
throw this.mapActorFailure(
|
|
406
|
+
actor.actorId,
|
|
407
|
+
actorLocationStale(actor.actorId, undefined),
|
|
408
|
+
actorRouteInvalidationFence(route),
|
|
409
|
+
meshName
|
|
410
|
+
);
|
|
369
411
|
}
|
|
370
412
|
|
|
371
413
|
private createPacketParts(
|
|
@@ -436,7 +478,7 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
436
478
|
}
|
|
437
479
|
}
|
|
438
480
|
|
|
439
|
-
private
|
|
481
|
+
private submitActorRequest<TReply>(
|
|
440
482
|
meshName: string,
|
|
441
483
|
actor: ZLinkBackendActorRef,
|
|
442
484
|
parts: readonly Message[],
|
|
@@ -444,8 +486,10 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
444
486
|
signal: AbortSignal | undefined,
|
|
445
487
|
route: ZLinkResolvedActorRoute,
|
|
446
488
|
messageFollowContext: ZLinkActorMessageFollowContext,
|
|
447
|
-
onAdmitted
|
|
448
|
-
|
|
489
|
+
onAdmitted: (() => void) | undefined,
|
|
490
|
+
requestOperation: PendingOperation<unknown>,
|
|
491
|
+
destination: OperationObserver<unknown, unknown>
|
|
492
|
+
): void {
|
|
449
493
|
const node = this.requireNode(meshName);
|
|
450
494
|
if (
|
|
451
495
|
this.options.routeTransport !== undefined &&
|
|
@@ -470,51 +514,88 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
470
514
|
returnResponse: true,
|
|
471
515
|
messageFollowContext
|
|
472
516
|
});
|
|
473
|
-
|
|
474
|
-
readonly ok?: boolean;
|
|
475
|
-
readonly error?: unknown;
|
|
476
|
-
readonly errorKind?: unknown;
|
|
477
|
-
readonly response?: TReply;
|
|
478
|
-
}>(
|
|
479
|
-
this.options.routeTransport,
|
|
517
|
+
this.options.routeTransport.requestToSpot(
|
|
480
518
|
remoteActorRouteTarget(route),
|
|
481
519
|
relay,
|
|
482
|
-
{
|
|
483
|
-
|
|
484
|
-
|
|
520
|
+
{
|
|
521
|
+
packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
|
|
522
|
+
timeoutMs,
|
|
523
|
+
signal,
|
|
524
|
+
onAdmitted,
|
|
525
|
+
requestOperation
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
operationCompleted: (id, value) => {
|
|
529
|
+
const reply = value as {
|
|
530
|
+
ok?: boolean;
|
|
531
|
+
error?: unknown;
|
|
532
|
+
errorKind?: unknown;
|
|
533
|
+
response?: TReply;
|
|
534
|
+
};
|
|
535
|
+
if (reply.ok !== true) {
|
|
536
|
+
destination.operationFailed(
|
|
537
|
+
id,
|
|
538
|
+
createInternalFrameworkException(
|
|
539
|
+
remoteRelayErrorKind(reply.errorKind),
|
|
540
|
+
typeof reply.error === 'string'
|
|
541
|
+
? reply.error
|
|
542
|
+
: `Remote Actor request failed for '${actor.actorId}'.`
|
|
543
|
+
),
|
|
544
|
+
undefined
|
|
545
|
+
);
|
|
546
|
+
return;
|
|
547
|
+
}
|
|
548
|
+
destination.operationCompleted(id, reply.response, undefined);
|
|
549
|
+
},
|
|
550
|
+
operationFailed: (id, error) => destination.operationFailed(id, error, undefined)
|
|
551
|
+
}
|
|
485
552
|
);
|
|
486
|
-
|
|
487
|
-
throw createInternalFrameworkException(
|
|
488
|
-
remoteRelayErrorKind(reply.errorKind),
|
|
489
|
-
typeof reply.error === 'string'
|
|
490
|
-
? reply.error
|
|
491
|
-
: `Remote Actor request failed for '${actor.actorId}'.`
|
|
492
|
-
);
|
|
493
|
-
}
|
|
494
|
-
return reply.response as TReply;
|
|
553
|
+
return;
|
|
495
554
|
}
|
|
496
555
|
const completions = this.options.completionTableProvider(meshName);
|
|
497
556
|
if (completions === undefined) {
|
|
498
557
|
throw routeNotConnected('Actor request requires a running MeshNode completion table.');
|
|
499
558
|
}
|
|
500
|
-
const
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
559
|
+
const packetName = decodeStreamHeader(parts[0].data()).name;
|
|
560
|
+
this.requests.run(
|
|
561
|
+
requestOperation,
|
|
562
|
+
(receiver) =>
|
|
563
|
+
completions.submit(
|
|
564
|
+
(completion) =>
|
|
565
|
+
node.requestToActor(
|
|
566
|
+
actor,
|
|
567
|
+
toMessageLikeParts(parts),
|
|
568
|
+
{
|
|
569
|
+
flags: ZLINK_BACKEND_SEND_NONE,
|
|
570
|
+
routeFence: nativeActorRouteFence(route, actor),
|
|
571
|
+
timeoutMs,
|
|
572
|
+
onAdmitted,
|
|
573
|
+
requestOperation
|
|
574
|
+
},
|
|
575
|
+
completion
|
|
576
|
+
),
|
|
577
|
+
signal,
|
|
578
|
+
requestOperation,
|
|
579
|
+
receiver
|
|
580
|
+
),
|
|
581
|
+
(raw) => {
|
|
582
|
+
const completion = raw as import('../backend').ZLinkMeshCompletion;
|
|
583
|
+
if (completion.terminalResult !== RequestResult.Ok) {
|
|
584
|
+
closeMeshCompletion(completion);
|
|
585
|
+
throw mapRequestResult(
|
|
586
|
+
completion.terminalResult,
|
|
587
|
+
completion.failureErrno,
|
|
588
|
+
'Actor request'
|
|
589
|
+
);
|
|
590
|
+
}
|
|
591
|
+
return decodeActorReply<TReply>(
|
|
592
|
+
completion.parts,
|
|
593
|
+
this.options.messageSerializers,
|
|
594
|
+
packetName
|
|
595
|
+
);
|
|
596
|
+
},
|
|
597
|
+
identityRequestReply,
|
|
598
|
+
destination
|
|
518
599
|
);
|
|
519
600
|
}
|
|
520
601
|
|
|
@@ -540,6 +621,19 @@ function nativeActorRouteFence(route: ZLinkResolvedActorRoute, actor: ZLinkBacke
|
|
|
540
621
|
};
|
|
541
622
|
}
|
|
542
623
|
|
|
624
|
+
function actorRouteInvalidationFence(
|
|
625
|
+
route: ZLinkResolvedActorRoute
|
|
626
|
+
): ZLinkActorRouteInvalidationFence {
|
|
627
|
+
return {
|
|
628
|
+
actorId: route.actorRef.actorId,
|
|
629
|
+
objectGeneration: route.actorRef.objectGeneration,
|
|
630
|
+
targetNodeRid: route.actorRef.nodeRid,
|
|
631
|
+
targetNodeGeneration: route.ownerNodeGeneration,
|
|
632
|
+
authorityOwnerGeneration: route.authorityOwnerGeneration,
|
|
633
|
+
ownerLeaseGeneration: route.ownerLeaseGeneration
|
|
634
|
+
};
|
|
635
|
+
}
|
|
636
|
+
|
|
543
637
|
function remoteActorRouteTarget(route: ZLinkResolvedActorRoute) {
|
|
544
638
|
if (route.enclosingSpotRoute !== undefined) {
|
|
545
639
|
return route.enclosingSpotRoute;
|
|
@@ -694,13 +788,13 @@ class DefaultZLinkActorRequestCall implements ZLinkActorRequestCall {
|
|
|
694
788
|
metadata: ReadonlyMap<string, string>,
|
|
695
789
|
signal?: AbortSignal,
|
|
696
790
|
onAdmitted?: () => void
|
|
697
|
-
) =>
|
|
791
|
+
) => ZLinkRequestResult<TReply>,
|
|
698
792
|
private readonly yieldSubmitter: <TReply>(
|
|
699
793
|
packetName: string | undefined,
|
|
700
794
|
timeoutMs: number | undefined,
|
|
701
795
|
metadata: ReadonlyMap<string, string>,
|
|
702
796
|
signal?: AbortSignal
|
|
703
|
-
) =>
|
|
797
|
+
) => ZLinkRequestResult<TReply>,
|
|
704
798
|
private readonly targetActorId: string,
|
|
705
799
|
private readonly request: unknown,
|
|
706
800
|
private readonly defaultRequestTimeoutMs?: number
|
|
@@ -729,7 +823,7 @@ class DefaultZLinkActorRequestCall implements ZLinkActorRequestCall {
|
|
|
729
823
|
yield<TReply>(signal?: AbortSignal): Promise<TReply> {
|
|
730
824
|
this.rejectSelfActorRequest();
|
|
731
825
|
const turn = requireZLinkYieldTurn(this.turn);
|
|
732
|
-
const pending = this.execute<TReply>('yield', signal);
|
|
826
|
+
const pending = mapZLinkRequestReply(this.execute<TReply>('yield', signal));
|
|
733
827
|
return turn.yieldFrameworkPromise(pending);
|
|
734
828
|
}
|
|
735
829
|
|
|
@@ -737,7 +831,7 @@ class DefaultZLinkActorRequestCall implements ZLinkActorRequestCall {
|
|
|
737
831
|
waitPolicy: 'async' | 'yield',
|
|
738
832
|
signal?: AbortSignal,
|
|
739
833
|
onAdmitted?: () => void
|
|
740
|
-
):
|
|
834
|
+
): ZLinkRequestResult<TReply> {
|
|
741
835
|
ensureSingleSubmit(this.executed);
|
|
742
836
|
this.executed = true;
|
|
743
837
|
throwIfAborted(signal);
|
|
@@ -147,16 +147,24 @@ export class DefaultZLinkActorContext implements ZLinkActorContext {
|
|
|
147
147
|
): Promise<boolean> {
|
|
148
148
|
const requestMessage = encodeJoinRequest(request, this.messageSerializers);
|
|
149
149
|
try {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
150
|
+
const result = await this.requireJoinCoordinator().joinEntrySpot(
|
|
151
|
+
this.requireActor(),
|
|
152
|
+
this.state,
|
|
153
|
+
nodeRid,
|
|
154
|
+
requestMessage,
|
|
155
|
+
undefined,
|
|
156
|
+
signal
|
|
157
|
+
);
|
|
158
|
+
try {
|
|
159
|
+
if (result.sourceCleanup !== undefined) {
|
|
160
|
+
await result.sourceCleanup();
|
|
161
|
+
return result.accepted;
|
|
162
|
+
}
|
|
163
|
+
} finally {
|
|
164
|
+
result.reply?.close();
|
|
165
|
+
}
|
|
166
|
+
await result.finalizeDeferredJoin?.();
|
|
167
|
+
return result.accepted;
|
|
160
168
|
} finally {
|
|
161
169
|
requestMessage.close();
|
|
162
170
|
}
|
|
@@ -248,7 +256,8 @@ class DefaultZLinkActorJoinSpotCall implements ZLinkActorJoinSpotCall {
|
|
|
248
256
|
requestMessage,
|
|
249
257
|
remainingJoinTimeout(deadline.atMs),
|
|
250
258
|
deadline.signal,
|
|
251
|
-
operationId
|
|
259
|
+
operationId,
|
|
260
|
+
deadline.atMs
|
|
252
261
|
);
|
|
253
262
|
if (this.turn === undefined) {
|
|
254
263
|
await pendingJoin.catch(() => undefined);
|
|
@@ -271,7 +280,8 @@ class DefaultZLinkActorJoinSpotCall implements ZLinkActorJoinSpotCall {
|
|
|
271
280
|
requestMessage,
|
|
272
281
|
remainingJoinTimeout(deadline.atMs),
|
|
273
282
|
deadline.signal,
|
|
274
|
-
operationId
|
|
283
|
+
operationId,
|
|
284
|
+
deadline.atMs
|
|
275
285
|
);
|
|
276
286
|
result =
|
|
277
287
|
this.turn === undefined
|
|
@@ -396,7 +406,8 @@ class DefaultZLinkActorJoinEntrySpotCall implements ZLinkActorJoinEntrySpotCall
|
|
|
396
406
|
requestMessage,
|
|
397
407
|
remainingJoinTimeout(deadline.atMs),
|
|
398
408
|
deadline.signal,
|
|
399
|
-
operationId
|
|
409
|
+
operationId,
|
|
410
|
+
deadline.atMs
|
|
400
411
|
);
|
|
401
412
|
if (this.turn === undefined) {
|
|
402
413
|
await pendingJoin.catch(() => undefined);
|
|
@@ -419,7 +430,8 @@ class DefaultZLinkActorJoinEntrySpotCall implements ZLinkActorJoinEntrySpotCall
|
|
|
419
430
|
requestMessage,
|
|
420
431
|
remainingJoinTimeout(deadline.atMs),
|
|
421
432
|
deadline.signal,
|
|
422
|
-
operationId
|
|
433
|
+
operationId,
|
|
434
|
+
deadline.atMs
|
|
423
435
|
);
|
|
424
436
|
result =
|
|
425
437
|
this.turn === undefined
|
|
@@ -9,13 +9,13 @@ interface ZLinkActorExecutionContext {
|
|
|
9
9
|
const actorExecutionStorage = new AsyncLocalStorage<ZLinkActorExecutionContext>();
|
|
10
10
|
|
|
11
11
|
/** Runs one Actor handler while retaining its Actor FIFO claim across Yield. */
|
|
12
|
-
export
|
|
12
|
+
export function runZLinkActorExecution<T>(
|
|
13
13
|
actorId: string,
|
|
14
14
|
spotId: unknown,
|
|
15
15
|
operation: () => Promise<T> | T
|
|
16
16
|
): Promise<T> {
|
|
17
17
|
const context: ZLinkActorExecutionContext = { actorId, spotId, active: true };
|
|
18
|
-
return
|
|
18
|
+
return actorExecutionStorage.run(context, async () => {
|
|
19
19
|
try {
|
|
20
20
|
return await operation();
|
|
21
21
|
} finally {
|