@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,5 @@
|
|
|
1
|
+
import type { ZLinkActorSessionAuthorityFence } from '../streams/actor-session-binding-registry';
|
|
2
|
+
import { mapZLinkRequestReply } from '../messaging/request-result';
|
|
1
3
|
import {
|
|
2
4
|
ZLinkFrameworkInternalErrorKind,
|
|
3
5
|
createInternalFrameworkException,
|
|
@@ -41,7 +43,7 @@ import { streamMetadataMap } from '../actors/bound-session-wire';
|
|
|
41
43
|
import { decodeRoutingId, normalizeRoutingId, routingIdsEqual } from '../routing-id';
|
|
42
44
|
import { encodeSessionDisconnected } from '../actors/session-disconnected-wire';
|
|
43
45
|
import { ZLinkSubmitStatus } from '../messaging/submission-result';
|
|
44
|
-
import type {
|
|
46
|
+
import type { ZLinkSpotNodeRuntimeManager } from '../spots';
|
|
45
47
|
import type { ZLinkDetachedTaskRunner } from '../spots/spot-actor-join-dispatch';
|
|
46
48
|
import type { ZLinkBoundSessionResponseTarget } from '../streams';
|
|
47
49
|
import type {
|
|
@@ -70,7 +72,6 @@ export interface ZLinkActorPacketRelayOptions {
|
|
|
70
72
|
readonly streamBindingRuntime: () => ZLinkBoundSessionResponsePort & ZLinkStreamActorLookupPort;
|
|
71
73
|
readonly meshRouters: MeshRouterResolver;
|
|
72
74
|
readonly actorManager: () => DefaultZLinkActorManager | undefined;
|
|
73
|
-
readonly spotManager: () => DefaultZLinkSpotManager | undefined;
|
|
74
75
|
readonly spotNodeRuntime: () => ZLinkSpotNodeRuntimeManager | undefined;
|
|
75
76
|
readonly detachedTaskRunner: ZLinkDetachedTaskRunner;
|
|
76
77
|
readonly errorSink: () => { reportRuntimeTaskException(taskName: string, error: unknown): void };
|
|
@@ -112,7 +113,8 @@ export class ZLinkActorPacketRelay {
|
|
|
112
113
|
async notifyBoundActorDisconnected(
|
|
113
114
|
actor: ZLinkSessionActor,
|
|
114
115
|
signal?: AbortSignal,
|
|
115
|
-
binding?: ServiceStreamSessionBinding
|
|
116
|
+
binding?: ServiceStreamSessionBinding,
|
|
117
|
+
authorityFence?: ZLinkActorSessionAuthorityFence
|
|
116
118
|
): Promise<void> {
|
|
117
119
|
// The Session binding owns this route, including after relocation and detach (§5, §7).
|
|
118
120
|
const actorRefTarget = this.targets.targetForActorRef(actor.ref);
|
|
@@ -122,11 +124,18 @@ export class ZLinkActorPacketRelay {
|
|
|
122
124
|
actorRefTarget,
|
|
123
125
|
signal,
|
|
124
126
|
actor.ref,
|
|
125
|
-
binding
|
|
127
|
+
binding,
|
|
128
|
+
authorityFence
|
|
126
129
|
);
|
|
127
130
|
return;
|
|
128
131
|
}
|
|
129
|
-
await this.notifyLocalActorDisconnectedById(
|
|
132
|
+
await this.notifyLocalActorDisconnectedById(
|
|
133
|
+
actor.actorId,
|
|
134
|
+
signal,
|
|
135
|
+
binding,
|
|
136
|
+
actor.ref,
|
|
137
|
+
authorityFence
|
|
138
|
+
);
|
|
130
139
|
}
|
|
131
140
|
|
|
132
141
|
clearRemoteActorPacketTarget(actorId: string): void {
|
|
@@ -145,33 +154,32 @@ export class ZLinkActorPacketRelay {
|
|
|
145
154
|
actorId: string,
|
|
146
155
|
signal?: AbortSignal,
|
|
147
156
|
binding?: ServiceStreamSessionBinding,
|
|
148
|
-
bindingActorRef?: ActorRef
|
|
157
|
+
bindingActorRef?: ActorRef,
|
|
158
|
+
authorityFence?: ZLinkActorSessionAuthorityFence
|
|
149
159
|
): Promise<void> {
|
|
150
160
|
throwIfAborted(signal);
|
|
151
|
-
const state = this.options.actorManager()?.getState(actorId);
|
|
152
161
|
const frame = this.disconnectedFrame(actorId, binding);
|
|
153
162
|
const header = RuntimeMessage.fromOwned(Buffer.from(frame.header));
|
|
154
163
|
const body = RuntimeMessage.fromOwned(frame.payload);
|
|
155
164
|
try {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
);
|
|
165
|
+
const context = sessionActorFollowContext(
|
|
166
|
+
bindingActorRef,
|
|
167
|
+
authorityFence,
|
|
168
|
+
[header, body],
|
|
169
|
+
false
|
|
170
|
+
);
|
|
171
|
+
const ref =
|
|
172
|
+
context === undefined || bindingActorRef === undefined
|
|
173
|
+
? bindingActorRef
|
|
174
|
+
: attachActorMessageFollowContext(bindingActorRef, context);
|
|
175
|
+
await this.requireSpotNodeRuntime().dispatchEntryActorPacket(
|
|
176
|
+
'local',
|
|
177
|
+
actorId,
|
|
178
|
+
[header, body],
|
|
179
|
+
false,
|
|
180
|
+
undefined,
|
|
181
|
+
ref
|
|
182
|
+
);
|
|
175
183
|
} finally {
|
|
176
184
|
header.close();
|
|
177
185
|
body.close();
|
|
@@ -275,30 +283,18 @@ export class ZLinkActorPacketRelay {
|
|
|
275
283
|
) {
|
|
276
284
|
this.requireCurrentRemoteBinding(relay, _routeContext);
|
|
277
285
|
}
|
|
278
|
-
const state = this.options.actorManager()?.getState(relay.actorId);
|
|
279
286
|
if (
|
|
280
287
|
frameHeader.kind === ZLinkStreamMessageKind.Send ||
|
|
281
288
|
frameHeader.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET
|
|
282
289
|
) {
|
|
283
|
-
const dispatch =
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
fallbackActorRef
|
|
292
|
-
)
|
|
293
|
-
: this.requireSpotManager().dispatchRoutedActorPacket(
|
|
294
|
-
'remote',
|
|
295
|
-
state.spotId,
|
|
296
|
-
relay.actorId,
|
|
297
|
-
[header, body],
|
|
298
|
-
false,
|
|
299
|
-
remoteBoundSessionTarget,
|
|
300
|
-
fallbackActorRef
|
|
301
|
-
);
|
|
290
|
+
const dispatch = this.requireSpotNodeRuntime().dispatchEntryActorPacket(
|
|
291
|
+
'remote',
|
|
292
|
+
relay.actorId,
|
|
293
|
+
[header, body],
|
|
294
|
+
false,
|
|
295
|
+
remoteBoundSessionTarget,
|
|
296
|
+
fallbackActorRef
|
|
297
|
+
);
|
|
302
298
|
if (frameHeader.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
|
|
303
299
|
await dispatch;
|
|
304
300
|
return {
|
|
@@ -344,25 +340,14 @@ export class ZLinkActorPacketRelay {
|
|
|
344
340
|
frameHeader.requestSeq !== undefined &&
|
|
345
341
|
relay.returnResponse !== true
|
|
346
342
|
) {
|
|
347
|
-
const dispatch =
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
fallbackActorRef
|
|
356
|
-
)
|
|
357
|
-
: this.requireSpotManager().dispatchRoutedActorPacket(
|
|
358
|
-
'remote',
|
|
359
|
-
state.spotId,
|
|
360
|
-
relay.actorId,
|
|
361
|
-
[header, body],
|
|
362
|
-
false,
|
|
363
|
-
remoteBoundSessionTarget,
|
|
364
|
-
fallbackActorRef
|
|
365
|
-
);
|
|
343
|
+
const dispatch = this.requireSpotNodeRuntime().dispatchEntryActorPacket(
|
|
344
|
+
'remote',
|
|
345
|
+
relay.actorId,
|
|
346
|
+
[header, body],
|
|
347
|
+
false,
|
|
348
|
+
remoteBoundSessionTarget,
|
|
349
|
+
fallbackActorRef
|
|
350
|
+
);
|
|
366
351
|
closeFrameMessages = false;
|
|
367
352
|
const deferredPacketName = frameHeader.name;
|
|
368
353
|
const deferredRequestSeq = frameHeader.requestSeq;
|
|
@@ -413,25 +398,14 @@ export class ZLinkActorPacketRelay {
|
|
|
413
398
|
)
|
|
414
399
|
};
|
|
415
400
|
}
|
|
416
|
-
const response =
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
fallbackActorRef
|
|
425
|
-
)
|
|
426
|
-
: await this.requireSpotManager().dispatchRoutedActorPacket(
|
|
427
|
-
'remote',
|
|
428
|
-
state.spotId,
|
|
429
|
-
relay.actorId,
|
|
430
|
-
[header, body],
|
|
431
|
-
relay.returnResponse === true,
|
|
432
|
-
remoteBoundSessionTarget,
|
|
433
|
-
fallbackActorRef
|
|
434
|
-
);
|
|
401
|
+
const response = await this.requireSpotNodeRuntime().dispatchEntryActorPacket(
|
|
402
|
+
'remote',
|
|
403
|
+
relay.actorId,
|
|
404
|
+
[header, body],
|
|
405
|
+
relay.returnResponse === true,
|
|
406
|
+
remoteBoundSessionTarget,
|
|
407
|
+
fallbackActorRef
|
|
408
|
+
);
|
|
435
409
|
return {
|
|
436
410
|
ok: true,
|
|
437
411
|
response,
|
|
@@ -611,28 +585,15 @@ export class ZLinkActorPacketRelay {
|
|
|
611
585
|
);
|
|
612
586
|
let request: Record<string, unknown>;
|
|
613
587
|
try {
|
|
614
|
-
const
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
ownerNodeGeneration: authority.ownerNodeGeneration,
|
|
624
|
-
ownerId: authority.ownerId,
|
|
625
|
-
ownerLeaseGeneration: authority.ownerLeaseGeneration,
|
|
626
|
-
authorityOwnerGeneration: authority.authorityOwnerGeneration,
|
|
627
|
-
authorityStoreVersion: authority.authorityStoreVersion ?? ''
|
|
628
|
-
},
|
|
629
|
-
[header, payload],
|
|
630
|
-
returnResponse,
|
|
631
|
-
undefined,
|
|
632
|
-
isValidMessageFollowId(frameHeader.correlationId)
|
|
633
|
-
? frameHeader.correlationId
|
|
634
|
-
: createMessageFollowId()
|
|
635
|
-
);
|
|
588
|
+
const messageFollowContext = sessionActorFollowContext(
|
|
589
|
+
storedActorRef,
|
|
590
|
+
aggregateRoute?.authorityFence,
|
|
591
|
+
[header, payload],
|
|
592
|
+
returnResponse,
|
|
593
|
+
isValidMessageFollowId(frameHeader.correlationId)
|
|
594
|
+
? frameHeader.correlationId
|
|
595
|
+
: createMessageFollowId()
|
|
596
|
+
);
|
|
636
597
|
request = encodeRemoteActorPacketRelayPayload({
|
|
637
598
|
actorId: actor.actorId,
|
|
638
599
|
routerChannelId: remoteTarget.routerChannelId,
|
|
@@ -751,7 +712,8 @@ export class ZLinkActorPacketRelay {
|
|
|
751
712
|
remoteTarget: ZLinkRemoteBoundSessionTarget | ZLinkRemoteActorPacketTarget,
|
|
752
713
|
signal?: AbortSignal,
|
|
753
714
|
bindingActorRef?: ActorRef,
|
|
754
|
-
binding?: ServiceStreamSessionBinding
|
|
715
|
+
binding?: ServiceStreamSessionBinding,
|
|
716
|
+
authorityFence?: ZLinkActorSessionAuthorityFence
|
|
755
717
|
): Promise<void> {
|
|
756
718
|
const spotKind: ZLinkSpotKind | undefined =
|
|
757
719
|
'spotKind' in remoteTarget ? (remoteTarget.spotKind as ZLinkSpotKind | undefined) : undefined;
|
|
@@ -760,36 +722,55 @@ export class ZLinkActorPacketRelay {
|
|
|
760
722
|
binding,
|
|
761
723
|
'sessionNodeRid' in remoteTarget ? remoteTarget : undefined
|
|
762
724
|
);
|
|
763
|
-
const
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
725
|
+
const parts = [
|
|
726
|
+
RuntimeMessage.fromOwned(Buffer.from(frame.header)),
|
|
727
|
+
RuntimeMessage.fromOwned(frame.payload)
|
|
728
|
+
];
|
|
729
|
+
let payload: Record<string, unknown>;
|
|
730
|
+
try {
|
|
731
|
+
payload = encodeRemoteActorPacketRelayPayload({
|
|
732
|
+
actorId,
|
|
733
|
+
routerChannelId: remoteTarget.routerChannelId,
|
|
734
|
+
bindingActorRef,
|
|
735
|
+
messageFollowContext: sessionActorFollowContext(
|
|
736
|
+
bindingActorRef,
|
|
737
|
+
authorityFence,
|
|
738
|
+
parts,
|
|
739
|
+
false
|
|
740
|
+
),
|
|
741
|
+
...frame
|
|
742
|
+
});
|
|
743
|
+
} finally {
|
|
744
|
+
for (const part of parts) part.close();
|
|
745
|
+
}
|
|
769
746
|
if ((spotKind ?? ZLinkSpotKind.Entry) === ZLinkSpotKind.Entry) {
|
|
770
|
-
await
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
747
|
+
await mapZLinkRequestReply(
|
|
748
|
+
this.options.routeTransport.request(
|
|
749
|
+
remoteTarget.routerChannelId,
|
|
750
|
+
String(remoteTarget.targetNodeRid),
|
|
751
|
+
ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
|
|
752
|
+
payload,
|
|
753
|
+
this.options.requestTimeoutMs,
|
|
754
|
+
signal
|
|
755
|
+
)
|
|
777
756
|
);
|
|
778
757
|
return;
|
|
779
758
|
}
|
|
780
|
-
await
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
759
|
+
await mapZLinkRequestReply(
|
|
760
|
+
this.options.routeTransport.requestToSpot(
|
|
761
|
+
{
|
|
762
|
+
routerChannelId: remoteTarget.routerChannelId,
|
|
763
|
+
targetNodeRid: remoteTarget.targetNodeRid,
|
|
764
|
+
spotId: remoteTarget.spotId,
|
|
765
|
+
spotKind: spotKind ?? ZLinkSpotKind.Entry
|
|
766
|
+
},
|
|
767
|
+
payload,
|
|
768
|
+
{
|
|
769
|
+
packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
|
|
770
|
+
timeoutMs: this.options.requestTimeoutMs,
|
|
771
|
+
signal
|
|
772
|
+
}
|
|
773
|
+
)
|
|
793
774
|
);
|
|
794
775
|
}
|
|
795
776
|
|
|
@@ -856,13 +837,15 @@ export class ZLinkActorPacketRelay {
|
|
|
856
837
|
): Promise<TReply> {
|
|
857
838
|
if (target.spotKind === ZLinkSpotKind.Entry) {
|
|
858
839
|
try {
|
|
859
|
-
return await
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
840
|
+
return await mapZLinkRequestReply(
|
|
841
|
+
this.options.routeTransport.request<TReply>(
|
|
842
|
+
target.routerChannelId,
|
|
843
|
+
String(target.targetNodeRid),
|
|
844
|
+
ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
|
|
845
|
+
request,
|
|
846
|
+
this.options.requestTimeoutMs,
|
|
847
|
+
signal
|
|
848
|
+
)
|
|
866
849
|
);
|
|
867
850
|
} catch (error) {
|
|
868
851
|
if (!(error instanceof ZLinkConfigurationException)) {
|
|
@@ -886,13 +869,10 @@ export class ZLinkActorPacketRelay {
|
|
|
886
869
|
payload: Message
|
|
887
870
|
): Promise<boolean> {
|
|
888
871
|
const state = this.options.actorManager()?.getState(actor.actorId);
|
|
889
|
-
|
|
890
|
-
const hasActiveSpot =
|
|
891
|
-
spotId !== undefined && this.options.spotManager()?.hasActiveSpot(spotId) === true;
|
|
892
|
-
if (!hasActiveSpot) {
|
|
872
|
+
if (state === undefined) {
|
|
893
873
|
return false;
|
|
894
874
|
}
|
|
895
|
-
const actorRef = state
|
|
875
|
+
const actorRef = state.nativeActorRef as ActorRef | undefined;
|
|
896
876
|
const localNode = this.options.spotNodeRuntime()?.primaryMeshNode;
|
|
897
877
|
const localNodeRid = localNode === undefined ? undefined : String(localNode.status().routingId);
|
|
898
878
|
if (
|
|
@@ -916,12 +896,13 @@ export class ZLinkActorPacketRelay {
|
|
|
916
896
|
try {
|
|
917
897
|
this.options.detachedTaskRunner.runDetached('local actor packet relay', async () => {
|
|
918
898
|
try {
|
|
919
|
-
const response = await this.
|
|
899
|
+
const response = await this.requireSpotNodeRuntime().dispatchEntryActorPacket(
|
|
920
900
|
'local',
|
|
921
|
-
spotId,
|
|
922
901
|
actor.actorId,
|
|
923
902
|
[header, body],
|
|
924
|
-
returnResponse
|
|
903
|
+
returnResponse,
|
|
904
|
+
undefined,
|
|
905
|
+
actor.ref
|
|
925
906
|
);
|
|
926
907
|
if (!returnResponse) {
|
|
927
908
|
return;
|
|
@@ -1004,14 +985,6 @@ export class ZLinkActorPacketRelay {
|
|
|
1004
985
|
}
|
|
1005
986
|
return runtime;
|
|
1006
987
|
}
|
|
1007
|
-
|
|
1008
|
-
private requireSpotManager(): DefaultZLinkSpotManager {
|
|
1009
|
-
const manager = this.options.spotManager();
|
|
1010
|
-
if (manager === undefined) {
|
|
1011
|
-
throw new Error('SPOT manager runtime is not started.');
|
|
1012
|
-
}
|
|
1013
|
-
return manager;
|
|
1014
|
-
}
|
|
1015
988
|
}
|
|
1016
989
|
|
|
1017
990
|
function isValidMessageFollowId(value: string | undefined): value is string {
|
|
@@ -1026,3 +999,34 @@ function withDefaultSpotKind(
|
|
|
1026
999
|
? { ...target, spotKind: ZLinkSpotKind.Entry }
|
|
1027
1000
|
: (target as ZLinkRemoteActorPacketTarget & { readonly spotKind: ZLinkSpotKind });
|
|
1028
1001
|
}
|
|
1002
|
+
|
|
1003
|
+
function sessionActorFollowContext(
|
|
1004
|
+
actorRef: ActorRef | undefined,
|
|
1005
|
+
authority: ZLinkActorSessionAuthorityFence | undefined,
|
|
1006
|
+
parts: readonly Message[],
|
|
1007
|
+
request: boolean,
|
|
1008
|
+
operationId?: string
|
|
1009
|
+
) {
|
|
1010
|
+
if (
|
|
1011
|
+
actorRef === undefined ||
|
|
1012
|
+
authority?.ownerId === undefined ||
|
|
1013
|
+
authority.ownerNodeGeneration === undefined
|
|
1014
|
+
)
|
|
1015
|
+
return undefined;
|
|
1016
|
+
return createInitialActorMessageFollowContext(
|
|
1017
|
+
{
|
|
1018
|
+
meshName: actorRef.meshName,
|
|
1019
|
+
actorRef,
|
|
1020
|
+
actorType: authority.actorType ?? '',
|
|
1021
|
+
ownerNodeGeneration: authority.ownerNodeGeneration,
|
|
1022
|
+
ownerId: authority.ownerId,
|
|
1023
|
+
ownerLeaseGeneration: authority.ownerLeaseGeneration,
|
|
1024
|
+
authorityOwnerGeneration: authority.authorityOwnerGeneration,
|
|
1025
|
+
authorityStoreVersion: authority.authorityStoreVersion ?? ''
|
|
1026
|
+
},
|
|
1027
|
+
parts,
|
|
1028
|
+
request,
|
|
1029
|
+
undefined,
|
|
1030
|
+
operationId
|
|
1031
|
+
);
|
|
1032
|
+
}
|
|
@@ -82,7 +82,7 @@ export interface ZLinkActorPlacementCoordinatorOptions {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
export class ZLinkActorPlacementCoordinator {
|
|
85
|
-
constructor(
|
|
85
|
+
constructor(readonly options: ZLinkActorPlacementCoordinatorOptions) {}
|
|
86
86
|
|
|
87
87
|
async create(
|
|
88
88
|
actorId: string,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RequestRuntime } from '../foundation/request-runtime';
|
|
1
2
|
import type { ActorRef, RoutingId, ZLinkActor, ZLinkMessage } from '../../contracts';
|
|
2
3
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
3
4
|
import type { Type } from '../../contracts/Common/CoreTypes';
|
|
@@ -34,6 +35,7 @@ import type { ZLinkRemoteActorPacketTarget } from '../actors';
|
|
|
34
35
|
import type { ZLinkActorJoinRelocation } from '../actors/actor-join-relocation';
|
|
35
36
|
|
|
36
37
|
export interface ZLinkActorRuntimeOptionsFactoryOptions {
|
|
38
|
+
readonly requests?: RequestRuntime;
|
|
37
39
|
readonly terminateActorActivation: (
|
|
38
40
|
actor: ZLinkActor,
|
|
39
41
|
terminal: () => Promise<void>
|
|
@@ -261,6 +263,7 @@ export class ZLinkActorRuntimeOptionsFactory {
|
|
|
261
263
|
createActorClientOptions(): ConstructorParameters<typeof DefaultZLinkActorClient>[0] {
|
|
262
264
|
const locationResolver = this.options.createActorLocationResolver();
|
|
263
265
|
return {
|
|
266
|
+
requests: this.options.requests,
|
|
264
267
|
nodeProvider: this.options.meshNode,
|
|
265
268
|
completionTableProvider: this.options.meshCompletions,
|
|
266
269
|
locationResolver: () => locationResolver,
|
|
@@ -283,7 +286,8 @@ export class ZLinkActorRuntimeOptionsFactory {
|
|
|
283
286
|
returnResponse,
|
|
284
287
|
actor,
|
|
285
288
|
deadlineUnixMs,
|
|
286
|
-
onAdmitted
|
|
289
|
+
onAdmitted,
|
|
290
|
+
requestOperation
|
|
287
291
|
) =>
|
|
288
292
|
this.actorBelongsToMesh(meshName, actorId) &&
|
|
289
293
|
!this.options.actorHandoff.isProvisional(actorId)
|
|
@@ -297,7 +301,8 @@ export class ZLinkActorRuntimeOptionsFactory {
|
|
|
297
301
|
deadlineUnixMs,
|
|
298
302
|
undefined,
|
|
299
303
|
undefined,
|
|
300
|
-
onAdmitted
|
|
304
|
+
onAdmitted,
|
|
305
|
+
requestOperation
|
|
301
306
|
)
|
|
302
307
|
: undefined,
|
|
303
308
|
sendErrorReporter: this.options.reportPostCommitError
|
|
@@ -703,7 +703,7 @@ export class ZLinkActorTransferRuntime {
|
|
|
703
703
|
);
|
|
704
704
|
}
|
|
705
705
|
|
|
706
|
-
|
|
706
|
+
async sealBoundSessionRoute(
|
|
707
707
|
actor: ZLinkActor,
|
|
708
708
|
state: ZLinkActorRuntimeState,
|
|
709
709
|
signal?: AbortSignal,
|
|
@@ -814,7 +814,7 @@ export class ZLinkActorTransferRuntime {
|
|
|
814
814
|
};
|
|
815
815
|
}
|
|
816
816
|
|
|
817
|
-
|
|
817
|
+
async abortBoundSessionRouteSeal(
|
|
818
818
|
actor: ZLinkActor,
|
|
819
819
|
state: ZLinkActorRuntimeState,
|
|
820
820
|
target: ZLinkRemoteBoundSessionTarget
|
|
@@ -1336,7 +1336,7 @@ export class ZLinkActorTransferRuntime {
|
|
|
1336
1336
|
return actorManager;
|
|
1337
1337
|
}
|
|
1338
1338
|
|
|
1339
|
-
|
|
1339
|
+
async publishBoundSessionOwnership(
|
|
1340
1340
|
actorId: string,
|
|
1341
1341
|
actorRef: ZLinkBackendActorRef,
|
|
1342
1342
|
ownershipGeneration: bigint,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SeverityNumber } from '@opentelemetry/api-logs';
|
|
2
|
-
import {
|
|
1
|
+
import { logs, SeverityNumber } from '@opentelemetry/api-logs';
|
|
2
|
+
import { TELEMETRY_INSTRUMENTATION_NAME } from '../diagnostics/message-flow-record';
|
|
3
3
|
import { MILLISECONDS_PER_SECOND } from '../diagnostics/runtime-metrics';
|
|
4
4
|
import { ZLinkApplicationJobQueueProfile } from '../../contracts/Dispatch';
|
|
5
5
|
import {
|
|
@@ -23,6 +23,8 @@ import {
|
|
|
23
23
|
type ApplicationJobReceiveFlowTarget
|
|
24
24
|
} from '../application-jobs/receive-flow-controller';
|
|
25
25
|
|
|
26
|
+
const telemetryLogger = logs.getLogger(TELEMETRY_INSTRUMENTATION_NAME);
|
|
27
|
+
|
|
26
28
|
export type ApplicationJobQueueProfileValue = 'compact' | 'low_latency' | 'balanced' | 'throughput';
|
|
27
29
|
|
|
28
30
|
export interface ApplicationJobQueueOptions {
|
|
@@ -182,6 +184,10 @@ export class ApplicationJobQueuePermit implements ApplicationJobPermitPort {
|
|
|
182
184
|
this.owner.releasePermit(this);
|
|
183
185
|
}
|
|
184
186
|
|
|
187
|
+
releaseUnqueued(): void {
|
|
188
|
+
if (this.state === 'reserved') this.owner.releasePermit(this);
|
|
189
|
+
}
|
|
190
|
+
|
|
185
191
|
takeReleaseState(): 'reserved' | 'queued' | undefined {
|
|
186
192
|
if (this.state === 'released' || this.state === 'idle') return undefined;
|
|
187
193
|
const state = this.state;
|
|
@@ -209,10 +215,21 @@ class ApplicationJobReceiveRotation implements ApplicationJobReceiveRotationPort
|
|
|
209
215
|
|
|
210
216
|
reserve(): void {
|
|
211
217
|
this.releaseUnused();
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
218
|
+
this.granted = this.owner.tryReserveCount(this.capacity) ?? 0;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
async acquire(signal: AbortSignal): Promise<void> {
|
|
222
|
+
this.releaseUnused();
|
|
223
|
+
this.granted = await new Promise<number>((resolve, reject) => {
|
|
224
|
+
const count = this.owner.acquireCountOrResume(
|
|
225
|
+
resolve,
|
|
226
|
+
reject,
|
|
227
|
+
signal,
|
|
228
|
+
this.origin,
|
|
229
|
+
this.capacity
|
|
230
|
+
);
|
|
231
|
+
if (count !== undefined) resolve(count);
|
|
232
|
+
});
|
|
216
233
|
}
|
|
217
234
|
|
|
218
235
|
take(): ApplicationJobQueuePermit | undefined {
|
|
@@ -237,7 +254,8 @@ class ApplicationJobReceiveRotation implements ApplicationJobReceiveRotationPort
|
|
|
237
254
|
|
|
238
255
|
interface CapacityWaiter {
|
|
239
256
|
readonly origin: ApplicationJobOrigin;
|
|
240
|
-
readonly
|
|
257
|
+
readonly requested: number;
|
|
258
|
+
readonly resolve: (count: number) => void;
|
|
241
259
|
readonly reject: (reason: unknown) => void;
|
|
242
260
|
readonly signal?: AbortSignal;
|
|
243
261
|
readonly abort: () => void;
|
|
@@ -299,19 +317,15 @@ export class ApplicationJobQueue implements ApplicationJobQueuePort {
|
|
|
299
317
|
createReceiveRotation(
|
|
300
318
|
capacity: number,
|
|
301
319
|
origin: ApplicationJobOrigin
|
|
302
|
-
):
|
|
320
|
+
): ApplicationJobReceiveRotation {
|
|
303
321
|
if (!Number.isSafeInteger(capacity) || capacity < 1)
|
|
304
322
|
throw new RangeError('Receive capacity must be positive.');
|
|
305
323
|
return new ApplicationJobReceiveRotation(this, capacity, origin);
|
|
306
324
|
}
|
|
307
325
|
|
|
308
|
-
|
|
309
|
-
if (this.waiters.length !== 0) return
|
|
310
|
-
return
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
reserveReceiveRotation(count: number): void {
|
|
314
|
-
this.reserveSupply(count);
|
|
326
|
+
tryReserveCount(requested: number): number | undefined {
|
|
327
|
+
if (this.waiters.length !== 0 || this.permitsInUse() === this.limitCount) return undefined;
|
|
328
|
+
return this.reserveCount(requested);
|
|
315
329
|
}
|
|
316
330
|
|
|
317
331
|
registerReceiveFlowTarget(
|
|
@@ -372,17 +386,34 @@ export class ApplicationJobQueue implements ApplicationJobQueuePort {
|
|
|
372
386
|
signal: AbortSignal | undefined,
|
|
373
387
|
origin: ApplicationJobOrigin
|
|
374
388
|
): ApplicationJobQueuePermit | undefined {
|
|
389
|
+
const count = this.acquireCountOrResume(
|
|
390
|
+
() => resume(new ApplicationJobQueuePermit(this, origin)),
|
|
391
|
+
reject,
|
|
392
|
+
signal,
|
|
393
|
+
origin,
|
|
394
|
+
1
|
|
395
|
+
);
|
|
396
|
+
return count === undefined ? undefined : new ApplicationJobQueuePermit(this, origin);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
acquireCountOrResume(
|
|
400
|
+
resume: (count: number) => void,
|
|
401
|
+
reject: (reason: unknown) => void,
|
|
402
|
+
signal: AbortSignal | undefined,
|
|
403
|
+
origin: ApplicationJobOrigin,
|
|
404
|
+
requested: number
|
|
405
|
+
): number | undefined {
|
|
375
406
|
if (signal?.aborted === true) {
|
|
376
407
|
reject(abortReason(signal));
|
|
377
408
|
return undefined;
|
|
378
409
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
}
|
|
410
|
+
const count = this.tryReserveCount(requested);
|
|
411
|
+
if (count !== undefined) return count;
|
|
382
412
|
|
|
383
|
-
new Promise<
|
|
413
|
+
new Promise<number>((resolve, reject) => {
|
|
384
414
|
const waiter: CapacityWaiter = {
|
|
385
415
|
origin,
|
|
416
|
+
requested,
|
|
386
417
|
resolve,
|
|
387
418
|
reject,
|
|
388
419
|
signal,
|
|
@@ -511,12 +542,10 @@ export class ApplicationJobQueue implements ApplicationJobQueuePort {
|
|
|
511
542
|
if (evaluatePressure) this.evaluatePressure();
|
|
512
543
|
}
|
|
513
544
|
|
|
514
|
-
private
|
|
515
|
-
|
|
516
|
-
evaluatePressure
|
|
517
|
-
|
|
518
|
-
this.reserveSupply(1, evaluatePressure);
|
|
519
|
-
return new ApplicationJobQueuePermit(this, origin);
|
|
545
|
+
private reserveCount(requested: number, evaluatePressure = true): number {
|
|
546
|
+
const count = Math.min(requested, this.limitCount - this.permitsInUse());
|
|
547
|
+
this.reserveSupply(count, evaluatePressure);
|
|
548
|
+
return count;
|
|
520
549
|
}
|
|
521
550
|
|
|
522
551
|
private drainWaiters(): void {
|
|
@@ -526,7 +555,7 @@ export class ApplicationJobQueue implements ApplicationJobQueuePort {
|
|
|
526
555
|
waiter.active = false;
|
|
527
556
|
waiter.signal?.removeEventListener('abort', waiter.abort);
|
|
528
557
|
this.recordCompletedWait(waiter);
|
|
529
|
-
waiter.resolve(this.
|
|
558
|
+
waiter.resolve(this.reserveCount(waiter.requested, false));
|
|
530
559
|
}
|
|
531
560
|
}
|
|
532
561
|
|
|
@@ -579,7 +608,7 @@ export class ApplicationJobQueue implements ApplicationJobQueuePort {
|
|
|
579
608
|
}
|
|
580
609
|
}
|
|
581
610
|
|
|
582
|
-
|
|
611
|
+
evaluatePressure(): void {
|
|
583
612
|
const next =
|
|
584
613
|
this.pressureStateValue === 'running'
|
|
585
614
|
? this.permitsInUse() >= this.pauseCount
|