@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,3 +1,4 @@
|
|
|
1
|
+
import { inspectRuntime } from '../internal-observation';
|
|
1
2
|
import type { ApplicationJobOrigin } from '../application-jobs/contracts';
|
|
2
3
|
import type { ActorRef, RoutingId, Type, ZLinkMessageSerializer, ZLinkInstanceSpot, ZLinkActor, ZLinkChannelClient, ZLinkFanoutClient, ZLinkSpot, ZLinkSpotActorJoinResult, ZLinkSpotInfo, ZLinkSpotPublisherClient } from '../../contracts';
|
|
3
4
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
@@ -9,7 +10,7 @@ export { ZLinkSpotActorAdmissionCoordinator } from './spot-actor-admission-coord
|
|
|
9
10
|
import type { ZLinkSpotRouteResolver, ZLinkSpotRouteTarget } from './spot-routing-internal';
|
|
10
11
|
import type { Message } from '../../contracts/Common/Message';
|
|
11
12
|
import type { ZLinkMessageFollowOrigin } from '../foundation/service-runtime-contracts';
|
|
12
|
-
import { ZLinkMessage, ZLinkFrameworkRuntimeState } from '../../contracts';
|
|
13
|
+
import { ZLinkMessage, ZLinkFrameworkRuntimeState, ZLinkSpotCloseReason } from '../../contracts';
|
|
13
14
|
import { type ZLinkRuntimeEventPublisher } from '../diagnostics';
|
|
14
15
|
import { type ReadyRecord, type ReceiveRecord } from '../foundation/service-runtime-contracts';
|
|
15
16
|
import type { ZLinkBackendSpot, ZLinkBackendSpotNode } from '../backend/contracts';
|
|
@@ -26,9 +27,11 @@ export { DefaultZLinkSpotOutbound, type ZLinkSpotAddressCallOptions, type ZLinkS
|
|
|
26
27
|
import { type ZLinkSpotRoutedTransport } from './spot-outbound';
|
|
27
28
|
export { DefaultZLinkSpotHandlerRegistry, type ZLinkSpotHandlerRegistration } from './spot-handler-registry';
|
|
28
29
|
export { ZLinkRuntimeSpotPublisherTransport } from './spot-publisher-transport';
|
|
30
|
+
import { ZLinkSpotActivationRegistry } from './spot-activation-registry';
|
|
29
31
|
import type { ZLinkSpotActivation } from './spot-activation-state';
|
|
30
32
|
import type { ZLinkSpotPreparationCompletion } from './spot-serial-executor';
|
|
31
33
|
import { type ZLinkNativeSpotAuthority } from './spot-activation';
|
|
34
|
+
import { ZLinkFormalRemoteActorAdmissionRegistry } from './formal-remote-actor-admission-registry';
|
|
32
35
|
import type { ZLinkSpotActorHandoffRuntime, ZLinkSpotActorTransferRuntime, ZLinkSpotBoundSessionRuntime } from './spot-runtime-ports';
|
|
33
36
|
import type { ZLinkRuntimeAdmissionGate, ZLinkMeshDispatchAdmission } from '../admission';
|
|
34
37
|
import type { ZLinkActivationAdmission } from '../activation-admission';
|
|
@@ -40,6 +43,7 @@ export { ZLinkEntrySpotActivation } from './spot-entry-activation';
|
|
|
40
43
|
export { createFrameworkEntrySpotId, registrationAcceptsNewActor, ZLinkSpotNodeRuntimeManager, type ZLinkSpotNodeRuntimeManagerOptions } from './spot-node-runtime-manager';
|
|
41
44
|
export { ZLinkPublicSpotManager, type ZLinkPublicSpotManagerOptions } from './spot-manager-public';
|
|
42
45
|
export interface ZLinkSpotManagerOptions {
|
|
46
|
+
readonly defaultRequestTimeoutMs?: number;
|
|
43
47
|
readonly spotFactories: readonly Type<ZLinkSpot>[];
|
|
44
48
|
readonly instanceSpotFactories?: ReadonlyMap<string, ReadonlyMap<string, Type<ZLinkInstanceSpot>>>;
|
|
45
49
|
readonly instanceSpotIdleTimeoutMs?: ReadonlyMap<string, number>;
|
|
@@ -124,20 +128,33 @@ export interface ZLinkSpotManagerOptions {
|
|
|
124
128
|
};
|
|
125
129
|
readonly activationAdmission?: ZLinkActivationAdmission;
|
|
126
130
|
}
|
|
131
|
+
interface ZLinkTargetSpotCloseOperation {
|
|
132
|
+
readonly activation: ZLinkSpotActivation;
|
|
133
|
+
readonly reason: ZLinkSpotCloseReason;
|
|
134
|
+
readonly beginAuthority: (onCommitted: () => void) => Promise<import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined>;
|
|
135
|
+
authority?: import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority;
|
|
136
|
+
authorityDecision?: Promise<void>;
|
|
137
|
+
ready?: Promise<boolean>;
|
|
138
|
+
canExecuteApplication?(record: import('../execution/serial-execution-queue').ZLinkSerialWorkRecord<unknown>): boolean;
|
|
139
|
+
}
|
|
127
140
|
export declare class DefaultZLinkSpotManager {
|
|
128
141
|
private readonly options;
|
|
142
|
+
[inspectRuntime](): Readonly<{
|
|
143
|
+
activeActivationCount: number;
|
|
144
|
+
hasCloseableActivation: (meshName: string, spotId: RoutingId) => boolean;
|
|
145
|
+
}>;
|
|
129
146
|
private readonly factories;
|
|
130
|
-
|
|
147
|
+
readonly activations: ZLinkSpotActivationRegistry;
|
|
131
148
|
private readonly workerRuntime;
|
|
132
149
|
private readonly locationClaim;
|
|
133
150
|
private readonly routedSpotPackets;
|
|
134
151
|
private readonly actorMembership;
|
|
135
152
|
private readonly activationLifecycle;
|
|
136
153
|
private readonly formalRemoteTransfers;
|
|
137
|
-
|
|
154
|
+
readonly formalRemoteActorAdmissions: ZLinkFormalRemoteActorAdmissionRegistry;
|
|
138
155
|
private readonly pendingInstanceMaterializations;
|
|
139
156
|
private readonly pendingInstanceMaterializationsByPrefix;
|
|
140
|
-
|
|
157
|
+
readonly closeOperations: Map<string, ZLinkTargetSpotCloseOperation>;
|
|
141
158
|
private readonly pendingInstanceTerminals;
|
|
142
159
|
private readonly pendingInstanceTerminalGenerations;
|
|
143
160
|
private readonly deferredInstanceAuthorityReleases;
|
|
@@ -187,7 +204,7 @@ export declare class DefaultZLinkSpotManager {
|
|
|
187
204
|
list(meshName: string): Promise<readonly ZLinkSpotInfo[]>;
|
|
188
205
|
drainForShutdown(meshName: string, signal?: AbortSignal, deadline?: Date): Promise<void>;
|
|
189
206
|
close(meshName: string, spotId: RoutingId, signal?: AbortSignal): Promise<boolean>;
|
|
190
|
-
closeUserWithAuthority(meshName: string, spotId: RoutingId, beginAuthority: (onCommitted: () => void) => Promise<import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority>, signal?: AbortSignal): Promise<boolean>;
|
|
207
|
+
closeUserWithAuthority(meshName: string, spotId: RoutingId, beginAuthority: (onCommitted: () => void) => Promise<import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority>, signal?: AbortSignal, deadline?: Date): Promise<boolean>;
|
|
191
208
|
private closeFromContext;
|
|
192
209
|
private closeWithReason;
|
|
193
210
|
private runCloseOperation;
|
|
@@ -207,9 +224,11 @@ export declare class DefaultZLinkSpotManager {
|
|
|
207
224
|
beginActorTransfer(spotId: RoutingId, actorId: string): Promise<void>;
|
|
208
225
|
cancelActorTransfer(spotId: RoutingId, actorId: string): Promise<void>;
|
|
209
226
|
notifyJoinedSpotActorDisconnected(spotId: RoutingId, actor: ZLinkActor, signal?: AbortSignal): Promise<boolean>;
|
|
210
|
-
dispatchRoutedActorPacket(origin: ApplicationJobOrigin, spotId: RoutingId, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef): Promise<unknown>;
|
|
227
|
+
dispatchRoutedActorPacket(origin: ApplicationJobOrigin, spotId: RoutingId, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, requestTerminal?: (response: unknown) => Promise<void> | void, messageFollowOrigin?: ZLinkMessageFollowOrigin): Promise<unknown>;
|
|
211
228
|
/** Resolves the current Actor FIFO owner for both Entry and User membership. */
|
|
212
229
|
admitSourceActorPacketPrefix(actorId: string, records: readonly ZLinkActorHandoffPrefixRecord[]): ZLinkActorHandoffPrefixAdmission;
|
|
230
|
+
/** Runs an owner-side lifecycle decision in the Actor's existing execution gate. */
|
|
231
|
+
executeActorTurn<T>(meshName: string, spotId: RoutingId | undefined, actorId: string, operation: () => Promise<T>): Promise<T>;
|
|
213
232
|
dispatchRoutedSpotSend(spotId: RoutingId, packetName: string | undefined, message: unknown, context: {
|
|
214
233
|
readonly channelName: string;
|
|
215
234
|
readonly contentType?: string;
|
|
@@ -232,7 +251,9 @@ export declare class DefaultZLinkSpotManager {
|
|
|
232
251
|
private traceInstanceMessage;
|
|
233
252
|
dispatchMeshActor(origin: ApplicationJobOrigin, meshName: string, owner: ReadyRecord, record: ReceiveRecord, admit?: ZLinkMeshDispatchAdmission): Promise<void>;
|
|
234
253
|
dispatchMeshActorJoin(meshName: string, owner: ReadyRecord, record: ReceiveRecord): Promise<void>;
|
|
235
|
-
|
|
254
|
+
dispatchMeshActorJoinCore(meshName: string, owner: ReadyRecord, record: ReceiveRecord, replyState: {
|
|
255
|
+
targetCommitPublished: boolean;
|
|
256
|
+
}): Promise<void>;
|
|
236
257
|
dispatchMeshSpotControl(meshName: string, owner: ReadyRecord, record: ReceiveRecord): Promise<void>;
|
|
237
258
|
private dispatchMeshSpotControlCore;
|
|
238
259
|
completeFormalSourceLeaveTerminal(actorId: string, transferId: string, succeeded: boolean): Promise<boolean>;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DefaultZLinkSpotManager = exports.ZLinkPublicSpotManager = exports.ZLinkSpotNodeRuntimeManager = exports.registrationAcceptsNewActor = exports.createFrameworkEntrySpotId = exports.ZLinkEntrySpotActivation = exports.ZLinkRuntimeSpotPublisherTransport = exports.DefaultZLinkSpotHandlerRegistry = exports.DefaultZLinkSpotOutbound = exports.ZLinkSpotTimerRegistry = exports.ZLinkManagedTimer = exports.ZLinkSpotSerialExecutor = exports.ZLinkSpotSerialTurnExecutor = exports.ZLinkSpotActorAdmissionCoordinator = exports.ZLinkSpotRoutedBoundSessionDispatch = exports.sendToSpotHandle = exports.requestToSpotHandle = exports.resolveSpotHandle = exports.createSpotHandle = void 0;
|
|
4
|
+
const internal_observation_1 = require("../internal-observation");
|
|
5
|
+
const Registration_1 = require("../../contracts/Configuration/Registration");
|
|
4
6
|
const actor_reply_1 = require("../actors/actor-reply");
|
|
5
7
|
const bound_session_response_target_1 = require("../streams/bound-session-response-target");
|
|
6
8
|
const actor_handoff_1 = require("../actors/actor-handoff");
|
|
@@ -67,6 +69,12 @@ var spot_manager_public_1 = require("./spot-manager-public");
|
|
|
67
69
|
Object.defineProperty(exports, "ZLinkPublicSpotManager", { enumerable: true, get: function () { return spot_manager_public_1.ZLinkPublicSpotManager; } });
|
|
68
70
|
class DefaultZLinkSpotManager {
|
|
69
71
|
options;
|
|
72
|
+
[internal_observation_1.inspectRuntime]() {
|
|
73
|
+
return Object.freeze({
|
|
74
|
+
activeActivationCount: this.activations.activeActivations().length,
|
|
75
|
+
hasCloseableActivation: (meshName, spotId) => this.activations.activationForClose(meshName, spotId) !== undefined
|
|
76
|
+
});
|
|
77
|
+
}
|
|
70
78
|
factories;
|
|
71
79
|
activations;
|
|
72
80
|
workerRuntime;
|
|
@@ -629,8 +637,8 @@ class DefaultZLinkSpotManager {
|
|
|
629
637
|
async close(meshName, spotId, signal) {
|
|
630
638
|
return await this.closeWithReason(meshName, spotId, signal, contracts_1.ZLinkSpotCloseReason.ExplicitClose);
|
|
631
639
|
}
|
|
632
|
-
async closeUserWithAuthority(meshName, spotId, beginAuthority, signal) {
|
|
633
|
-
return await this.closeWithReason(meshName, spotId, signal, contracts_1.ZLinkSpotCloseReason.ExplicitClose,
|
|
640
|
+
async closeUserWithAuthority(meshName, spotId, beginAuthority, signal, deadline) {
|
|
641
|
+
return await this.closeWithReason(meshName, spotId, signal, contracts_1.ZLinkSpotCloseReason.ExplicitClose, deadline, beginAuthority);
|
|
634
642
|
}
|
|
635
643
|
closeFromContext(activation, objectGeneration, signal) {
|
|
636
644
|
const { meshName, spotId } = activation;
|
|
@@ -650,6 +658,9 @@ class DefaultZLinkSpotManager {
|
|
|
650
658
|
return this.closeWithReason(meshName, spotId, signal, contracts_1.ZLinkSpotCloseReason.ExplicitClose, undefined, beginUserAuthority, activation);
|
|
651
659
|
}
|
|
652
660
|
async closeWithReason(meshName, spotId, signal, reason = contracts_1.ZLinkSpotCloseReason.ExplicitClose, deadline, beginUserAuthority, contextActivation) {
|
|
661
|
+
if (reason === contracts_1.ZLinkSpotCloseReason.ExplicitClose) {
|
|
662
|
+
deadline ??= new Date(Date.now() + (this.options.defaultRequestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS));
|
|
663
|
+
}
|
|
653
664
|
requireMeshName(meshName);
|
|
654
665
|
const key = `${meshName}\0${String(spotId)}`;
|
|
655
666
|
let operation = this.closeOperations.get(key);
|
|
@@ -902,12 +913,12 @@ class DefaultZLinkSpotManager {
|
|
|
902
913
|
async notifyJoinedSpotActorDisconnected(spotId, actor, signal) {
|
|
903
914
|
return await this.actorMembership.notifyJoinedActorDisconnected(spotId, actor, signal);
|
|
904
915
|
}
|
|
905
|
-
dispatchRoutedActorPacket(origin, spotId, actorId, parts, returnResponse = false, remoteBoundSessionTarget, fallbackActorRef) {
|
|
916
|
+
dispatchRoutedActorPacket(origin, spotId, actorId, parts, returnResponse = false, remoteBoundSessionTarget, fallbackActorRef, requestTerminal, messageFollowOrigin) {
|
|
906
917
|
const activation = this.activations.resolveUnique(spotId);
|
|
907
918
|
if (activation === undefined) {
|
|
908
919
|
throw new configuration_1.ZLinkConfigurationException(`Spot '${spotId}' is not active.`);
|
|
909
920
|
}
|
|
910
|
-
return this.dispatchActorPacket(origin, activation, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef);
|
|
921
|
+
return this.dispatchActorPacket(origin, activation, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal, messageFollowOrigin);
|
|
911
922
|
}
|
|
912
923
|
/** @internal Replays a record already owned by the Actor handoff queue. */
|
|
913
924
|
dispatchRoutedActorPacketDirect(origin, spotId, actorId, parts, returnResponse = false, remoteBoundSessionTarget, fallbackActorRef) {
|
|
@@ -939,6 +950,20 @@ class DefaultZLinkSpotManager {
|
|
|
939
950
|
}
|
|
940
951
|
return this.admitRoutedActorPacketPrefix(owner.spotId, actorId, records);
|
|
941
952
|
}
|
|
953
|
+
/** Runs an owner-side lifecycle decision in the Actor's existing execution gate. */
|
|
954
|
+
executeActorTurn(meshName, spotId, actorId, operation) {
|
|
955
|
+
if (spotId === undefined) {
|
|
956
|
+
if (this.options.executeEntryActor === undefined) {
|
|
957
|
+
throw new configuration_1.ZLinkConfigurationException(`Entry Spot Actor '${actorId}' has no execution gate for MeshNode '${meshName}'.`);
|
|
958
|
+
}
|
|
959
|
+
return this.options.executeEntryActor(meshName, actorId, operation);
|
|
960
|
+
}
|
|
961
|
+
const activation = this.resolveApplicationActivation(spotId, meshName);
|
|
962
|
+
if (activation === undefined) {
|
|
963
|
+
throw new configuration_1.ZLinkConfigurationException(`Actor '${actorId}' has no active Spot execution gate for '${String(spotId)}'.`);
|
|
964
|
+
}
|
|
965
|
+
return activation.executeActor(actorId, operation);
|
|
966
|
+
}
|
|
942
967
|
async dispatchRoutedSpotSend(spotId, packetName, message, context) {
|
|
943
968
|
await this.routedSpotPackets.send(spotId, packetName, message, context);
|
|
944
969
|
}
|
|
@@ -967,7 +992,7 @@ class DefaultZLinkSpotManager {
|
|
|
967
992
|
const codecs = this.options.messageSerializers === undefined
|
|
968
993
|
? undefined
|
|
969
994
|
: { serializers: this.options.messageSerializers };
|
|
970
|
-
const decodePayload = () => (0, channel_envelope_1.decodeChannelPayload)(envelope, codecs);
|
|
995
|
+
const decodePayload = (messageType) => (0, channel_envelope_1.decodeChannelPayload)(envelope, codecs, messageType);
|
|
971
996
|
const context = {
|
|
972
997
|
channelName: envelope.header.channelName,
|
|
973
998
|
contentType: envelope.header.contentType,
|
|
@@ -1040,7 +1065,7 @@ class DefaultZLinkSpotManager {
|
|
|
1040
1065
|
const codecs = this.options.messageSerializers === undefined
|
|
1041
1066
|
? undefined
|
|
1042
1067
|
: { serializers: this.options.messageSerializers };
|
|
1043
|
-
const decodePayload = () => (0, channel_envelope_1.decodeChannelPayload)(envelope, codecs);
|
|
1068
|
+
const decodePayload = (messageType) => (0, channel_envelope_1.decodeChannelPayload)(envelope, codecs, messageType);
|
|
1044
1069
|
const context = {
|
|
1045
1070
|
channelName: envelope.header.channelName,
|
|
1046
1071
|
contentType: envelope.header.contentType,
|
|
@@ -13,6 +13,7 @@ export interface ZLinkSpotCloseOperation {
|
|
|
13
13
|
readonly started: boolean;
|
|
14
14
|
}
|
|
15
15
|
export declare class ZLinkSpotActivationRegistry {
|
|
16
|
+
private readonly metrics?;
|
|
16
17
|
private nextId;
|
|
17
18
|
private readonly activations;
|
|
18
19
|
private readonly staged;
|
|
@@ -20,9 +21,9 @@ export declare class ZLinkSpotActivationRegistry {
|
|
|
20
21
|
private readonly closing;
|
|
21
22
|
private readonly failedClose;
|
|
22
23
|
private readonly emptyWaiters;
|
|
23
|
-
private readonly lifecycleMetrics;
|
|
24
24
|
private activeScan;
|
|
25
|
-
constructor(metrics?: import(
|
|
25
|
+
constructor(metrics?: import("../diagnostics").ZLinkRuntimeMetrics | undefined);
|
|
26
|
+
private recordPopulation;
|
|
26
27
|
allocateSpotId(meshName: string): RoutingId;
|
|
27
28
|
resolve(meshName: string, spotId: RoutingId): ZLinkSpotActivation | undefined;
|
|
28
29
|
resolveUnique(spotId: RoutingId): ZLinkSpotActivation | undefined;
|
|
@@ -4,11 +4,11 @@ exports.ZLinkSpotActivationRegistry = exports.ZLinkSpotActivation = void 0;
|
|
|
4
4
|
const contracts_1 = require("../../contracts");
|
|
5
5
|
const abort_1 = require("../abort");
|
|
6
6
|
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
7
|
-
const spot_lifecycle_metrics_1 = require("./spot-lifecycle-metrics");
|
|
8
7
|
const DEFAULT_ACTIVE_ACTIVATION_BATCH_SIZE = 64;
|
|
9
8
|
var spot_activation_state_1 = require("./spot-activation-state");
|
|
10
9
|
Object.defineProperty(exports, "ZLinkSpotActivation", { enumerable: true, get: function () { return spot_activation_state_1.ZLinkSpotActivation; } });
|
|
11
10
|
class ZLinkSpotActivationRegistry {
|
|
11
|
+
metrics;
|
|
12
12
|
nextId = 1;
|
|
13
13
|
activations = new Map();
|
|
14
14
|
staged = new Set();
|
|
@@ -16,10 +16,12 @@ class ZLinkSpotActivationRegistry {
|
|
|
16
16
|
closing = new Map();
|
|
17
17
|
failedClose = new Set();
|
|
18
18
|
emptyWaiters = new Set();
|
|
19
|
-
lifecycleMetrics;
|
|
20
19
|
activeScan;
|
|
21
20
|
constructor(metrics) {
|
|
22
|
-
this.
|
|
21
|
+
this.metrics = metrics;
|
|
22
|
+
}
|
|
23
|
+
recordPopulation(activation, delta) {
|
|
24
|
+
this.metrics?.recordSpotCount(activation.meshName, activation.domain.kind, delta);
|
|
23
25
|
}
|
|
24
26
|
allocateSpotId(meshName) {
|
|
25
27
|
let spotId;
|
|
@@ -60,8 +62,11 @@ class ZLinkSpotActivationRegistry {
|
|
|
60
62
|
}
|
|
61
63
|
finishClose(meshName, spotId) {
|
|
62
64
|
const key = spotActivationKey(meshName, spotId);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
const activation = this.activations.get(key);
|
|
66
|
+
if (activation !== undefined) {
|
|
67
|
+
this.activations.delete(key);
|
|
68
|
+
this.recordPopulation(activation, -1);
|
|
69
|
+
}
|
|
65
70
|
this.staged.delete(key);
|
|
66
71
|
this.failedClose.delete(key);
|
|
67
72
|
this.resolveEmptyWaiters();
|
|
@@ -124,7 +129,7 @@ class ZLinkSpotActivationRegistry {
|
|
|
124
129
|
}
|
|
125
130
|
if (existing === undefined) {
|
|
126
131
|
this.activations.set(key, activation);
|
|
127
|
-
this.
|
|
132
|
+
this.recordPopulation(activation, 1);
|
|
128
133
|
}
|
|
129
134
|
return this.staged.has(key) ? undefined : activation;
|
|
130
135
|
}
|
|
@@ -147,7 +152,7 @@ class ZLinkSpotActivationRegistry {
|
|
|
147
152
|
this.activations.delete(key);
|
|
148
153
|
this.staged.delete(key);
|
|
149
154
|
this.failedClose.delete(key);
|
|
150
|
-
this.
|
|
155
|
+
this.recordPopulation(activation, -1);
|
|
151
156
|
this.resolveEmptyWaiters();
|
|
152
157
|
return activation;
|
|
153
158
|
}
|
|
@@ -182,7 +187,7 @@ class ZLinkSpotActivationRegistry {
|
|
|
182
187
|
if (completed || resourcesReleased(activation)) {
|
|
183
188
|
this.activations.delete(key);
|
|
184
189
|
this.staged.delete(key);
|
|
185
|
-
this.
|
|
190
|
+
this.recordPopulation(activation, -1);
|
|
186
191
|
this.failedClose.delete(key);
|
|
187
192
|
}
|
|
188
193
|
else {
|
|
@@ -8,6 +8,7 @@ import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
|
8
8
|
import { ZLinkSpotSerialExecutor } from './spot-serial-executor';
|
|
9
9
|
import type { ZLinkSpotTimerRegistry } from './spot-timer';
|
|
10
10
|
import type { ZLinkSpotActorJoinDispatch } from './spot-actor-join-dispatch';
|
|
11
|
+
import type { ZLinkSpotActorPacketDispatch } from './spot-actor-packet-dispatch';
|
|
11
12
|
import { ZLinkExecutionBarrier, type ZLinkExecutionBarrierSeal } from '../execution';
|
|
12
13
|
import type { ZLinkTimerRelocationState } from './spot-timer';
|
|
13
14
|
export type ZLinkSpotActivationDomain = {
|
|
@@ -54,6 +55,7 @@ export declare class ZLinkSpotActivation {
|
|
|
54
55
|
readonly nativeSpot?: ZLinkBackendSpot;
|
|
55
56
|
readonly executionBarrier: ZLinkExecutionBarrier;
|
|
56
57
|
actorDispatch?: ZLinkSpotActorJoinDispatch;
|
|
58
|
+
actorPacketDispatch?: ZLinkSpotActorPacketDispatch;
|
|
57
59
|
private readonly joinedActors;
|
|
58
60
|
private readonly departedActorIds;
|
|
59
61
|
private readonly externalActorCount;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { ApplicationJobOrigin } from '../application-jobs/contracts';
|
|
2
|
-
import type { ActorRef } from '../../contracts';
|
|
2
|
+
import type { ActorRef, ZLinkActor } from '../../contracts';
|
|
3
3
|
import type { Message } from '../../contracts/Common/Message';
|
|
4
4
|
import type { ZLinkMessageFollowOrigin } from '../foundation/service-runtime-contracts';
|
|
5
5
|
import type { ZLinkBackendSpot } from '../backend/contracts';
|
|
6
|
-
import { type ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
6
|
+
import { type ZLinkActorHandoffPacket, type ZLinkActorHandoffResult, type ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
7
7
|
import type { ZLinkSpotActivationLifecycleOptions } from './spot-activation';
|
|
8
8
|
import { ZLinkSpotActivation } from './spot-activation-state';
|
|
9
9
|
import { ZLinkSpotActorJoinDispatch } from './spot-actor-join-dispatch';
|
|
10
|
+
import type { ZLinkActorPacketExecution } from './spot-actor-packet-dispatch';
|
|
10
11
|
type AdmissionOptions = Pick<ZLinkSpotActivationLifecycleOptions, 'actorHandoffRuntime' | 'admission' | 'actorResolver' | 'actorTransferRuntime' | 'boundSessionRuntime' | 'detachedTaskRunner' | 'dispatchErrors' | 'locationClaim' | 'messageSerializers' | 'nativeSpotNodeProvider' | 'createTopicMessage' | 'providerResolver' | 'runtimeEventPublisher' | 'routeToActorJoinPrewarm'>;
|
|
11
12
|
export declare class ZLinkSpotActorAdmissionCoordinator {
|
|
12
13
|
private readonly options;
|
|
@@ -14,8 +15,12 @@ export declare class ZLinkSpotActorAdmissionCoordinator {
|
|
|
14
15
|
dispatchActorPacket(origin: ApplicationJobOrigin, activation: ZLinkSpotActivation, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, requestTerminal?: (response: unknown) => Promise<void> | void, messageFollowOrigin?: ZLinkMessageFollowOrigin): Promise<unknown>;
|
|
15
16
|
attachNativeActorJoinDispatch(activation: ZLinkSpotActivation, nativeSpot: ZLinkBackendSpot | undefined): ZLinkSpotActorJoinDispatch | undefined;
|
|
16
17
|
private dispatchActorPacketInActorTurn;
|
|
17
|
-
private
|
|
18
|
-
|
|
18
|
+
private actorPacketDispatch;
|
|
19
|
+
/** Resolves native lifecycle records; messages use resolveActorIngress. */
|
|
20
|
+
private resolveLifecycleActor;
|
|
21
|
+
commitTransferredActorTransaction(activation: ZLinkSpotActivation, actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[], sealedSession: ZLinkRemoteBoundSessionTarget | undefined): Promise<readonly ZLinkActorHandoffResult[]>;
|
|
19
22
|
private replayActorBacklog;
|
|
20
23
|
}
|
|
24
|
+
/** Releases the Actor FIFO before awaiting a transferred admission terminal. */
|
|
25
|
+
export declare function dispatchActorPacketInMailbox<TSerial>(enqueue: (operation: (serial: TSerial) => Promise<ZLinkActorPacketExecution>) => Promise<ZLinkActorPacketExecution>, dispatch: (serial: TSerial) => Promise<ZLinkActorPacketExecution>): Promise<unknown>;
|
|
21
26
|
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkSpotActorAdmissionCoordinator = void 0;
|
|
4
|
+
exports.dispatchActorPacketInMailbox = dispatchActorPacketInMailbox;
|
|
4
5
|
const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
|
|
5
6
|
const actor_handoff_1 = require("../actors/actor-handoff");
|
|
6
7
|
const routing_id_1 = require("../routing-id");
|
|
@@ -12,10 +13,16 @@ class ZLinkSpotActorAdmissionCoordinator {
|
|
|
12
13
|
this.options = options;
|
|
13
14
|
}
|
|
14
15
|
async dispatchActorPacket(origin, activation, actorId, parts, returnResponse = false, remoteBoundSessionTarget, fallbackActorRef, requestTerminal, messageFollowOrigin) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
return dispatchActorPacketInMailbox((operation) => activation.executeActor(actorId, operation), (serial) => this.actorPacketDispatch(activation).admitDelivery(serial, {
|
|
17
|
+
origin,
|
|
18
|
+
actorId,
|
|
19
|
+
parts,
|
|
20
|
+
returnResponse,
|
|
21
|
+
remoteBoundSessionTarget,
|
|
22
|
+
fallbackActorRef,
|
|
23
|
+
requestTerminal,
|
|
24
|
+
messageFollowOrigin
|
|
25
|
+
}, this.options.actorHandoffRuntime));
|
|
19
26
|
}
|
|
20
27
|
attachNativeActorJoinDispatch(activation, nativeSpot) {
|
|
21
28
|
if (nativeSpot === undefined)
|
|
@@ -25,7 +32,7 @@ class ZLinkSpotActorAdmissionCoordinator {
|
|
|
25
32
|
createTopicMessage: requireBackendValueFactory(this.options.createTopicMessage, 'TopicMessage'),
|
|
26
33
|
serial: activation.serial,
|
|
27
34
|
actors: {
|
|
28
|
-
resolveActor: (actorId) => this.
|
|
35
|
+
resolveActor: (actorId) => this.resolveLifecycleActor(activation, actorId),
|
|
29
36
|
getTarget: () => activation.spot,
|
|
30
37
|
defaultAccept: false,
|
|
31
38
|
transfer: this.options.actorTransferRuntime === undefined
|
|
@@ -38,7 +45,7 @@ class ZLinkSpotActorAdmissionCoordinator {
|
|
|
38
45
|
commitTransferredActor: (actor, backlog, sealedSession) => this.commitTransferredActorTransaction(activation, actor, backlog, sealedSession)
|
|
39
46
|
},
|
|
40
47
|
packets: {
|
|
41
|
-
handle: (delivery) => this.dispatchActorPacket('remote', activation, delivery.actorId, delivery.parts, delivery.returnResponse, delivery.remoteBoundSessionTarget, delivery.fallbackActorRef),
|
|
48
|
+
handle: (delivery) => this.dispatchActorPacket('remote', activation, delivery.actorId, delivery.parts, delivery.returnResponse, delivery.remoteBoundSessionTarget, delivery.fallbackActorRef, delivery.requestTerminal, delivery.messageFollowOrigin),
|
|
42
49
|
bindRemoteSession: (actor, sourceNodeRid, sourceSessionRid) => {
|
|
43
50
|
const node = this.options.nativeSpotNodeProvider?.(activation.meshName);
|
|
44
51
|
if (node === undefined || (0, routing_id_1.routingIdsEqual)(sourceNodeRid, node.routingId))
|
|
@@ -76,13 +83,20 @@ class ZLinkSpotActorAdmissionCoordinator {
|
|
|
76
83
|
return activation.admitActorPacketPrefix(actorId, records, (actorSerial, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef) => this.dispatchActorPacketInActorTurn((0, application_job_queue_scope_1.currentApplicationJobOrigin)(), activation, actorSerial, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef));
|
|
77
84
|
}
|
|
78
85
|
dispatchActorPacketInActorTurn(origin, activation, actorSerial, actorId, parts, returnResponse = false, remoteBoundSessionTarget, fallbackActorRef, requestTerminal) {
|
|
79
|
-
return
|
|
86
|
+
return this.actorPacketDispatch(activation).dispatch(actorSerial, origin, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal);
|
|
87
|
+
}
|
|
88
|
+
actorPacketDispatch(activation) {
|
|
89
|
+
if (activation.actorPacketDispatch !== undefined)
|
|
90
|
+
return activation.actorPacketDispatch;
|
|
91
|
+
activation.actorPacketDispatch = new spot_actor_packet_dispatch_1.ZLinkSpotActorPacketDispatch({
|
|
92
|
+
admission: this.options.admission,
|
|
80
93
|
spot: activation.spot,
|
|
81
94
|
spotId: () => String(activation.spotId),
|
|
82
95
|
registry: activation.actorHandlers,
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
96
|
+
resolveActor: (targetActorId) => this.options.actorResolver === undefined
|
|
97
|
+
? activation.resolveJoinedActor(targetActorId)
|
|
98
|
+
: this.options.actorResolver(targetActorId),
|
|
99
|
+
hasDepartedActor: (targetActorId) => activation.hasDepartedActor(targetActorId),
|
|
86
100
|
onDisconnectActor: (actor) => activation.serial.execute(() => activation.spot.onDisconnectActor?.(actor)),
|
|
87
101
|
actorResponseSender: this.options.boundSessionRuntime?.sendActorResponse.bind(this.options.boundSessionRuntime),
|
|
88
102
|
actorErrorSender: this.options.boundSessionRuntime?.sendActorError.bind(this.options.boundSessionRuntime),
|
|
@@ -90,9 +104,11 @@ class ZLinkSpotActorAdmissionCoordinator {
|
|
|
90
104
|
messageSerializers: this.options.messageSerializers,
|
|
91
105
|
dispatchErrors: this.options.dispatchErrors,
|
|
92
106
|
routeToActorJoinPrewarm: this.options.routeToActorJoinPrewarm
|
|
93
|
-
})
|
|
107
|
+
});
|
|
108
|
+
return activation.actorPacketDispatch;
|
|
94
109
|
}
|
|
95
|
-
|
|
110
|
+
/** Resolves native lifecycle records; messages use resolveActorIngress. */
|
|
111
|
+
resolveLifecycleActor(activation, actorId) {
|
|
96
112
|
if (activation.hasDepartedActor(actorId))
|
|
97
113
|
return undefined;
|
|
98
114
|
// The manager owns relocation visibility. Membership alone cannot publish
|
|
@@ -150,3 +166,8 @@ function requireBackendValueFactory(factory, valueName) {
|
|
|
150
166
|
return factory();
|
|
151
167
|
};
|
|
152
168
|
}
|
|
169
|
+
/** Releases the Actor FIFO before awaiting a transferred admission terminal. */
|
|
170
|
+
async function dispatchActorPacketInMailbox(enqueue, dispatch) {
|
|
171
|
+
const result = await enqueue(dispatch);
|
|
172
|
+
return 'terminal' in result ? await result.terminal : result.response;
|
|
173
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ActorRef, ZLinkActor } from '../../contracts';
|
|
2
|
+
import type { ZLinkActorPacketDelivery, ZLinkActorRequestTerminal } from './spot-actor-packet-dispatch';
|
|
3
|
+
import type { ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
4
|
+
import type { ApplicationJobOrigin } from '../application-jobs/contracts';
|
|
5
|
+
import type { ZLinkSpotActorHandoffRuntime } from './spot-runtime-ports';
|
|
6
|
+
import { createInternalFrameworkException } from '../framework-errors-internal';
|
|
7
|
+
/** Parks an exact Actor incarnation while its accepted Join prepares the target. */
|
|
8
|
+
export type ZLinkRouteToActorJoinPrewarm = (actorId: string, objectGeneration: bigint, arrival: {
|
|
9
|
+
readonly origin: ApplicationJobOrigin;
|
|
10
|
+
readonly header: Buffer;
|
|
11
|
+
readonly payload: Buffer;
|
|
12
|
+
readonly returnResponse: boolean;
|
|
13
|
+
readonly remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget;
|
|
14
|
+
readonly fallbackActorRef?: ActorRef;
|
|
15
|
+
readonly requestTerminal?: ZLinkActorRequestTerminal;
|
|
16
|
+
readonly resolve: (value: unknown) => void;
|
|
17
|
+
readonly reject: (reason: unknown) => void;
|
|
18
|
+
}) => 'parked' | 'not-found';
|
|
19
|
+
export type ZLinkActorIngressRoute = (delivery: ZLinkActorPacketDelivery) => {
|
|
20
|
+
readonly handled: boolean;
|
|
21
|
+
readonly response?: unknown;
|
|
22
|
+
} | undefined;
|
|
23
|
+
export type ZLinkActorIngressAdmission = {
|
|
24
|
+
readonly kind: 'local';
|
|
25
|
+
readonly actor: ZLinkActor;
|
|
26
|
+
} | {
|
|
27
|
+
readonly kind: 'follow' | 'prewarm';
|
|
28
|
+
readonly terminal: Promise<unknown>;
|
|
29
|
+
} | {
|
|
30
|
+
readonly kind: 'stale';
|
|
31
|
+
readonly error: ReturnType<typeof createInternalFrameworkException>;
|
|
32
|
+
};
|
|
33
|
+
/** Fixes one packet owner synchronously at the Actor FIFO head. */
|
|
34
|
+
export declare function resolveActorIngress(delivery: ZLinkActorPacketDelivery, request: boolean, options: {
|
|
35
|
+
readonly handoffRuntime?: ZLinkSpotActorHandoffRuntime;
|
|
36
|
+
readonly routeBeforeLocal?: ZLinkActorIngressRoute;
|
|
37
|
+
readonly resolveActor: (actorId: string) => ZLinkActor | undefined;
|
|
38
|
+
readonly hasDepartedActor?: (actorId: string) => boolean;
|
|
39
|
+
readonly routeToActorJoinPrewarm?: ZLinkRouteToActorJoinPrewarm;
|
|
40
|
+
}): ZLinkActorIngressAdmission;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveActorIngress = resolveActorIngress;
|
|
4
|
+
const actor_message_follow_context_1 = require("../actors/actor-message-follow-context");
|
|
5
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
6
|
+
/** Fixes one packet owner synchronously at the Actor FIFO head. */
|
|
7
|
+
function resolveActorIngress(delivery, request, options) {
|
|
8
|
+
const handoff = options.handoffRuntime?.capture(delivery.origin, delivery.actorId, delivery.parts, delivery.returnResponse, delivery.remoteBoundSessionTarget, delivery.fallbackActorRef, undefined, delivery.messageFollowOrigin);
|
|
9
|
+
if (handoff !== undefined)
|
|
10
|
+
return { kind: 'follow', terminal: handoff };
|
|
11
|
+
const route = options.routeBeforeLocal?.(delivery);
|
|
12
|
+
if (route?.handled === true)
|
|
13
|
+
return { kind: 'follow', terminal: Promise.resolve(route.response) };
|
|
14
|
+
const actor = options.hasDepartedActor?.(delivery.actorId) === true
|
|
15
|
+
? undefined
|
|
16
|
+
: options.resolveActor(delivery.actorId);
|
|
17
|
+
if (actor !== undefined)
|
|
18
|
+
return { kind: 'local', actor };
|
|
19
|
+
if (options.routeToActorJoinPrewarm !== undefined &&
|
|
20
|
+
delivery.fallbackActorRef !== undefined &&
|
|
21
|
+
(!request || delivery.returnResponse || delivery.requestTerminal !== undefined)) {
|
|
22
|
+
const parked = parkForActorJoinPrewarm(delivery.origin, options.routeToActorJoinPrewarm, delivery.actorId, delivery.parts, request, delivery.returnResponse, delivery.remoteBoundSessionTarget, delivery.fallbackActorRef, delivery.requestTerminal);
|
|
23
|
+
if (parked !== undefined)
|
|
24
|
+
return { kind: 'prewarm', terminal: parked };
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
kind: 'stale',
|
|
28
|
+
error: (0, framework_errors_internal_1.createInternalFrameworkException)((0, actor_message_follow_context_1.actorMessageFollowContext)(delivery.fallbackActorRef) === undefined
|
|
29
|
+
? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorRouteNotFound
|
|
30
|
+
: framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `SPOT actor is not registered locally: ${delivery.actorId}`)
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function parkForActorJoinPrewarm(origin, routeToActorJoinPrewarm, actorId, parts, isRequest, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal) {
|
|
34
|
+
let resolve = () => undefined;
|
|
35
|
+
let reject = () => undefined;
|
|
36
|
+
const result = new Promise((res, rej) => {
|
|
37
|
+
resolve = res;
|
|
38
|
+
reject = rej;
|
|
39
|
+
});
|
|
40
|
+
// A Request's real reply must still travel through the exact mailbox
|
|
41
|
+
// correlation the original caller captured in `requestTerminal` — not
|
|
42
|
+
// through this method's own return value, which the caller only uses
|
|
43
|
+
// to decide whether it still owes a reply itself. Wrapping keeps that
|
|
44
|
+
// reply route intact across the (possibly much later) redelivery at
|
|
45
|
+
// migration time while also releasing the original caller once the
|
|
46
|
+
// real reply has gone out, so it never sends a premature empty one.
|
|
47
|
+
const wrappedRequestTerminal = requestTerminal === undefined
|
|
48
|
+
? undefined
|
|
49
|
+
: Object.assign(async (response, preparedReply) => {
|
|
50
|
+
try {
|
|
51
|
+
await requestTerminal(response, preparedReply);
|
|
52
|
+
resolve(undefined);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
reject(error);
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
}, { prepare: requestTerminal.prepare });
|
|
59
|
+
const route = routeToActorJoinPrewarm(actorId, fallbackActorRef.objectGeneration, {
|
|
60
|
+
origin,
|
|
61
|
+
header: Buffer.from(parts[0].data()),
|
|
62
|
+
payload: Buffer.from(parts[1].data()),
|
|
63
|
+
returnResponse,
|
|
64
|
+
remoteBoundSessionTarget,
|
|
65
|
+
fallbackActorRef,
|
|
66
|
+
requestTerminal: wrappedRequestTerminal,
|
|
67
|
+
resolve,
|
|
68
|
+
reject
|
|
69
|
+
});
|
|
70
|
+
if (route !== 'parked')
|
|
71
|
+
return undefined;
|
|
72
|
+
// A Send has no reply to wait for: the migrated redelivery still runs
|
|
73
|
+
// in order later, but this caller's own await is done once parking is
|
|
74
|
+
// confirmed.
|
|
75
|
+
if (!isRequest)
|
|
76
|
+
resolve(undefined);
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
@@ -58,7 +58,7 @@ class ZLinkSpotActorMembership {
|
|
|
58
58
|
async leaveActor(spotId, actor, signal, meshName) {
|
|
59
59
|
(0, abort_1.throwIfAborted)(signal);
|
|
60
60
|
const activation = this.requireActivation(spotId, meshName);
|
|
61
|
-
await this.runLifecycleOperation(activation, () => this.leaveActorCore(activation, actor,
|
|
61
|
+
await this.runLifecycleOperation(activation, () => this.leaveActorCore(activation, actor, undefined, meshName), signal);
|
|
62
62
|
}
|
|
63
63
|
async leaveActorCore(activation, actor, signal, meshName) {
|
|
64
64
|
const localEntryNodeRid = (meshName === undefined ? undefined : this.options.nodeRidProvider?.(meshName)) ??
|
|
@@ -141,8 +141,8 @@ class ZLinkSpotActorMembership {
|
|
|
141
141
|
}
|
|
142
142
|
return activation;
|
|
143
143
|
}
|
|
144
|
-
async runLifecycleOperation(activation, operation) {
|
|
145
|
-
const pending = activation.serial.executeLifecycleOperation(operation);
|
|
144
|
+
async runLifecycleOperation(activation, operation, signal) {
|
|
145
|
+
const pending = (0, abort_1.awaitWithAbort)(activation.serial.executeLifecycleOperation(operation), signal);
|
|
146
146
|
return activation.serial.isCurrentTurn
|
|
147
147
|
? await activation.serial.currentTurn.yieldFrameworkPromise(pending)
|
|
148
148
|
: await pending;
|