@zlink-systems/framework 0.30.0 → 0.30.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +150 -68
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
- package/dist/contracts/Channels/Calls.d.ts +2 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
- package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
- package/dist/contracts/Common/encoded-payload-storage.js +5 -2
- package/dist/contracts/Configuration/Builders.d.ts +1 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
- package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
- package/dist/contracts/Handlers/Attributes.d.ts +5 -13
- package/dist/contracts/Handlers/Attributes.js +7 -11
- package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
- package/dist/contracts/Handlers/JsonContract.js +4 -153
- package/dist/contracts/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +6 -1
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- package/dist/nest-integration.d.ts +1 -1
- package/dist/nest-integration.js +2 -1
- package/dist/runtime/abort.d.ts +5 -0
- package/dist/runtime/abort.js +10 -0
- package/dist/runtime/actors/actor-authority-publication.js +3 -2
- package/dist/runtime/actors/actor-client.d.ts +1 -2
- package/dist/runtime/actors/actor-client.js +52 -57
- package/dist/runtime/actors/actor-context.d.ts +2 -0
- package/dist/runtime/actors/actor-context.js +46 -9
- package/dist/runtime/actors/actor-handoff.d.ts +8 -4
- package/dist/runtime/actors/actor-handoff.js +219 -92
- package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
- package/dist/runtime/actors/actor-local-native-join.js +13 -12
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-remote-wire.js +15 -0
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -0
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
- package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-state.js +2 -20
- package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
- package/dist/runtime/actors/index.d.ts +8 -3
- package/dist/runtime/actors/index.js +55 -27
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +56 -23
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
- package/dist/runtime/application-jobs/contracts.d.ts +12 -1
- package/dist/runtime/backend/contracts/index.d.ts +37 -12
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
- package/dist/runtime/backend/mesh-completion-table.js +154 -49
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
- package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
- package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
- package/dist/runtime/backend/runtime-message.d.ts +1 -0
- package/dist/runtime/backend/runtime-message.js +5 -0
- package/dist/runtime/backend/runtime-values.d.ts +1 -0
- package/dist/runtime/backend/runtime-values.js +2 -1
- package/dist/runtime/channels/channel-clients.d.ts +2 -0
- package/dist/runtime/channels/channel-clients.js +75 -23
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
- package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
- package/dist/runtime/channels/channel-dispatch-services.js +45 -0
- package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
- package/dist/runtime/channels/channel-dispatchers.js +62 -54
- package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
- package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
- package/dist/runtime/channels/channel-envelope.d.ts +2 -0
- package/dist/runtime/channels/channel-envelope.js +146 -28
- package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
- package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
- package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
- package/dist/runtime/channels/channel-runtime-manager.js +16 -16
- package/dist/runtime/channels/channel-transports.d.ts +18 -16
- package/dist/runtime/channels/channel-transports.js +77 -58
- package/dist/runtime/channels/client-server-location-runtime.js +5 -4
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/fanout-location-runtime.js +3 -3
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +2 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
- package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
- package/dist/runtime/channels/source-spot-router.d.ts +2 -2
- package/dist/runtime/channels/source-spot-router.js +4 -4
- package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-node-route-transport.js +4 -4
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
- package/dist/runtime/diagnostics/flow-context.js +19 -7
- package/dist/runtime/diagnostics/index.js +4 -9
- package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
- package/dist/runtime/diagnostics/message-flow.js +35 -5
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
- package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
- package/dist/runtime/execution/index.d.ts +4 -2
- package/dist/runtime/execution/index.js +33 -10
- package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
- package/dist/runtime/execution/serial-execution-queue.js +22 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
- package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
- package/dist/runtime/foundation/durable-service-request.js +98 -0
- package/dist/runtime/foundation/operation-identity.d.ts +1 -0
- package/dist/runtime/foundation/operation-identity.js +5 -1
- package/dist/runtime/foundation/operation-registry.d.ts +25 -1
- package/dist/runtime/foundation/operation-registry.js +86 -18
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
- package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
- package/dist/runtime/foundation/service-liveness-registry.js +38 -0
- package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
- package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
- package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
- package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
- package/dist/runtime/foundation/service-stateful-registry.js +24 -26
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
- package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
- package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
- package/dist/runtime/foundation/service-topology-registry.js +61 -27
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
- package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
- package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
- package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
- package/dist/runtime/handlers/handler-instance-scope.js +54 -11
- package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
- package/dist/runtime/host/actor-packet-relay.js +59 -72
- package/dist/runtime/host/actor-placement-coordinator.js +25 -8
- package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
- package/dist/runtime/host/actor-transfer-runtime.js +85 -331
- package/dist/runtime/host/application-job-queue.d.ts +40 -7
- package/dist/runtime/host/application-job-queue.js +137 -42
- package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
- package/dist/runtime/host/entry-actor-runtime.js +3 -0
- package/dist/runtime/host/index.d.ts +12 -2
- package/dist/runtime/host/index.js +300 -202
- package/dist/runtime/host/location-runtime-owner.js +2 -6
- package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
- package/dist/runtime/host/mesh-router-resolver.js +14 -6
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
- package/dist/runtime/host/remote-bound-session-relay.js +73 -208
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +6 -4
- package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
- package/dist/runtime/host/runtime-shutdown.js +3 -2
- package/dist/runtime/host/service-relocation-control.d.ts +1 -0
- package/dist/runtime/host/service-relocation-control.js +10 -4
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
- package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
- package/dist/runtime/host/spot-address-transport.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
- package/dist/runtime/locations/actor-location-claims.js +34 -19
- package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
- package/dist/runtime/locations/auto-connect-loop.js +22 -14
- package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
- package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
- package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
- package/dist/runtime/locations/descriptor-publication.js +11 -0
- package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
- package/dist/runtime/locations/in-memory-authority-store.js +56 -19
- package/dist/runtime/locations/in-memory-location-store.js +1 -10
- package/dist/runtime/locations/index.d.ts +1 -0
- package/dist/runtime/locations/index.js +1 -0
- package/dist/runtime/locations/lease-tracker.js +1 -6
- package/dist/runtime/locations/lifecycle.d.ts +1 -2
- package/dist/runtime/locations/lifecycle.js +2 -5
- package/dist/runtime/locations/location-store-repository.d.ts +51 -1
- package/dist/runtime/locations/location-store-repository.js +363 -139
- package/dist/runtime/locations/relocation-blob.d.ts +18 -1
- package/dist/runtime/locations/relocation-blob.js +52 -1
- package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
- package/dist/runtime/locations/request-source-resolver.js +80 -0
- package/dist/runtime/locations/resolvers.js +1 -1
- package/dist/runtime/locations/runtime.d.ts +7 -3
- package/dist/runtime/locations/runtime.js +61 -53
- package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
- package/dist/runtime/messaging/framework-json-v1.js +38 -294
- package/dist/runtime/messaging/packet-name.d.ts +1 -1
- package/dist/runtime/messaging/packet-name.js +8 -24
- package/dist/runtime/messaging/payload-codec.d.ts +7 -1
- package/dist/runtime/messaging/payload-codec.js +7 -6
- package/dist/runtime/messaging/request-result.d.ts +2 -0
- package/dist/runtime/messaging/request-result.js +57 -0
- package/dist/runtime/messaging/submission-result.d.ts +1 -0
- package/dist/runtime/messaging/submission-result.js +5 -2
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
- package/dist/runtime/spots/index.d.ts +21 -11
- package/dist/runtime/spots/index.js +243 -178
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
- package/dist/runtime/spots/spot-activation-registry.js +21 -11
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +7 -7
- package/dist/runtime/spots/spot-activation.d.ts +7 -3
- package/dist/runtime/spots/spot-activation.js +140 -52
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
- package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-membership.js +0 -8
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
- package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
- package/dist/runtime/spots/spot-entry-activation.js +20 -11
- package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
- package/dist/runtime/spots/spot-handler-registry.js +24 -10
- package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
- package/dist/runtime/spots/spot-manager-public.js +2 -2
- package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
- package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
- package/dist/runtime/spots/spot-outbound.d.ts +3 -0
- package/dist/runtime/spots/spot-outbound.js +27 -18
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
- package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
- package/dist/runtime/spots/spot-serial-executor.js +61 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
- package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +288 -103
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
- package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
- package/dist/runtime/streams/bound-session-service.d.ts +1 -1
- package/dist/runtime/streams/bound-session-service.js +6 -11
- package/dist/runtime/streams/index.d.ts +3 -2
- package/dist/runtime/streams/index.js +6 -4
- package/dist/runtime/streams/managed-stream.js +3 -2
- package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
- package/dist/runtime/streams/session-actor-coordinator.js +15 -32
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
- package/dist/runtime/streams/stream-session-runtime.js +14 -31
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
- package/src/contracts/Channels/Calls.ts +2 -1
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
- package/src/contracts/Common/encoded-payload-storage.ts +6 -3
- package/src/contracts/Configuration/Builders.ts +4 -1
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
- package/src/contracts/Handlers/Attributes.ts +14 -21
- package/src/contracts/Handlers/JsonContract.ts +8 -216
- package/src/contracts/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +10 -1
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/nest-integration.ts +1 -0
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +100 -85
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +291 -110
- package/src/runtime/actors/actor-join-relocation.ts +3 -0
- package/src/runtime/actors/actor-local-native-join.ts +21 -26
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-remote-wire.ts +17 -0
- package/src/runtime/actors/actor-reply.ts +42 -0
- package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
- package/src/runtime/actors/actor-routed-json-request.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
- package/src/runtime/actors/actor-runtime-state.ts +2 -20
- package/src/runtime/actors/actor-source-transfer.ts +1 -34
- package/src/runtime/actors/index.ts +60 -32
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
- package/src/runtime/admission.ts +69 -21
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
- package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
- package/src/runtime/application-jobs/contracts.ts +16 -1
- package/src/runtime/backend/contracts/index.ts +92 -18
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +160 -57
- package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
- package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
- package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
- package/src/runtime/backend/raw-binding-port.ts +7 -2
- package/src/runtime/backend/runtime-message.ts +6 -0
- package/src/runtime/backend/runtime-values.ts +1 -0
- package/src/runtime/channels/channel-clients.ts +132 -58
- package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
- package/src/runtime/channels/channel-dispatch-services.ts +69 -1
- package/src/runtime/channels/channel-dispatchers.ts +136 -90
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
- package/src/runtime/channels/channel-envelope.ts +225 -31
- package/src/runtime/channels/channel-outbound-operations.ts +22 -8
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +41 -17
- package/src/runtime/channels/channel-transports.ts +171 -112
- package/src/runtime/channels/client-server-location-runtime.ts +11 -10
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
- package/src/runtime/channels/fanout-location-runtime.ts +17 -9
- package/src/runtime/channels/local-spot-route-transport.ts +3 -1
- package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
- package/src/runtime/channels/source-spot-router.ts +8 -4
- package/src/runtime/channels/spot-node-route-transport.ts +8 -4
- package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
- package/src/runtime/diagnostics/flow-context.ts +20 -7
- package/src/runtime/diagnostics/index.ts +1 -7
- package/src/runtime/diagnostics/message-flow.ts +47 -9
- package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
- package/src/runtime/execution/index.ts +40 -14
- package/src/runtime/execution/serial-execution-queue.ts +33 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
- package/src/runtime/foundation/durable-service-request.ts +137 -0
- package/src/runtime/foundation/operation-identity.ts +5 -1
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
- package/src/runtime/foundation/service-liveness-registry.ts +39 -0
- package/src/runtime/foundation/service-mailbox.ts +8 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
- package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
- package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
- package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
- package/src/runtime/foundation/service-stateful-registry.ts +38 -35
- package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
- package/src/runtime/foundation/service-topology-registry.ts +91 -36
- package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
- package/src/runtime/handlers/handler-instance-scope.ts +67 -16
- package/src/runtime/host/actor-packet-relay.ts +113 -94
- package/src/runtime/host/actor-placement-coordinator.ts +31 -8
- package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
- package/src/runtime/host/actor-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +160 -41
- package/src/runtime/host/entry-actor-runtime.ts +4 -0
- package/src/runtime/host/index.ts +473 -271
- package/src/runtime/host/location-runtime-owner.ts +2 -6
- package/src/runtime/host/mesh-router-resolver.ts +13 -5
- package/src/runtime/host/remote-bound-session-relay.ts +88 -271
- package/src/runtime/host/route-mesh-runtime.ts +12 -6
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-control.ts +11 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
- package/src/runtime/host/spot-address-transport.ts +4 -2
- package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- package/src/runtime/locations/actor-location-claims.ts +52 -30
- package/src/runtime/locations/auto-connect-loop.ts +22 -14
- package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
- package/src/runtime/locations/auto-connect-types.ts +0 -1
- package/src/runtime/locations/descriptor-publication.ts +7 -0
- package/src/runtime/locations/domain-store-contract.ts +5 -0
- package/src/runtime/locations/in-memory-authority-store.ts +85 -23
- package/src/runtime/locations/in-memory-location-store.ts +1 -12
- package/src/runtime/locations/index.ts +1 -0
- package/src/runtime/locations/lease-tracker.ts +2 -9
- package/src/runtime/locations/lifecycle.ts +8 -26
- package/src/runtime/locations/location-store-repository.ts +628 -152
- package/src/runtime/locations/relocation-blob.ts +75 -1
- package/src/runtime/locations/request-source-resolver.ts +138 -0
- package/src/runtime/locations/resolvers.ts +2 -2
- package/src/runtime/locations/runtime.ts +98 -64
- package/src/runtime/messaging/framework-json-v1.ts +5 -325
- package/src/runtime/messaging/packet-name.ts +5 -25
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +62 -0
- package/src/runtime/messaging/submission-result.ts +5 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
- package/src/runtime/spots/index.ts +389 -283
- package/src/runtime/spots/spot-activation-registry.ts +25 -13
- package/src/runtime/spots/spot-activation-state.ts +12 -19
- package/src/runtime/spots/spot-activation.ts +198 -96
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
- package/src/runtime/spots/spot-actor-membership.ts +0 -15
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
- package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
- package/src/runtime/spots/spot-entry-activation.ts +33 -21
- package/src/runtime/spots/spot-handler-registry.ts +56 -12
- package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
- package/src/runtime/spots/spot-manager-public.ts +2 -2
- package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +39 -19
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
- package/src/runtime/spots/spot-runtime-ports.ts +1 -1
- package/src/runtime/spots/spot-serial-executor.ts +97 -25
- package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
- package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
- package/src/runtime/spots/spot-timer.ts +418 -158
- package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
- package/src/runtime/streams/bound-session-service.ts +7 -10
- package/src/runtime/streams/index.ts +12 -6
- package/src/runtime/streams/managed-stream.ts +4 -2
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
- package/src/runtime/streams/session-actor-coordinator.ts +39 -88
- package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
- package/src/runtime/streams/stream-session-runtime.ts +13 -34
- package/src/runtime/workers/index.ts +1 -1
|
@@ -48,7 +48,10 @@ import {
|
|
|
48
48
|
registerActorSessionBindingRuntimeOwner
|
|
49
49
|
} from './actor-session-binding-runtime-owner';
|
|
50
50
|
import { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
|
|
51
|
-
import {
|
|
51
|
+
import {
|
|
52
|
+
ZLinkBoundActorRelaySender,
|
|
53
|
+
type ZLinkBoundActorRelaySenderOptions
|
|
54
|
+
} from './bound-actor-relay-sender';
|
|
52
55
|
import {
|
|
53
56
|
DefaultZLinkBoundSessionResponseTarget,
|
|
54
57
|
type ZLinkBoundSessionResponseTarget
|
|
@@ -140,7 +143,7 @@ export interface ZLinkStreamBindingRuntimeOptions {
|
|
|
140
143
|
header: ZLinkStreamFrameHeader,
|
|
141
144
|
payload: Message
|
|
142
145
|
) => Promise<boolean>;
|
|
143
|
-
readonly notifyDisconnected?:
|
|
146
|
+
readonly notifyDisconnected?: ZLinkBoundActorRelaySenderOptions['notifyDisconnected'];
|
|
144
147
|
readonly flowCreationEnabled?: () => boolean;
|
|
145
148
|
readonly metrics?: import('../diagnostics').ZLinkRuntimeMetrics;
|
|
146
149
|
}
|
|
@@ -459,14 +462,16 @@ export class ZLinkStreamBindingRuntime {
|
|
|
459
462
|
actorSessionLifecycle
|
|
460
463
|
);
|
|
461
464
|
registerActorSessionBindingRuntimeOwner(this, {
|
|
465
|
+
prepareSessionRelocationSeal: (...args) => this.routes.prepareSessionRelocationSeal(...args),
|
|
466
|
+
acceptSessionRelocationRoute: (value, apply) =>
|
|
467
|
+
this.routes.acceptSessionRelocationRoute(value, apply),
|
|
468
|
+
clearSessionRelocationResults: () => this.routes.clearSessionRelocationResults(),
|
|
462
469
|
actorSlot: async (actorId, sessionRid) =>
|
|
463
470
|
(await this.routes.routeForSessionBinding(actorId, sessionRid))?.actorSlot,
|
|
464
|
-
sealRelocation: (claim, expected, signal) =>
|
|
465
|
-
this.routes.sealRelocation(claim, expected, signal),
|
|
466
471
|
relocationSnapshot: (actorId, sealId) => this.routes.relocationSnapshot(actorId, sealId),
|
|
467
472
|
applyRelocation: (...args) => this.routes.applyRelocation(...args),
|
|
468
473
|
observeRelocationTerminal: (...args) => this.routes.observeRelocationTerminal(...args),
|
|
469
|
-
clearRelocation: (
|
|
474
|
+
clearRelocation: (...args) => this.routes.clearRelocation(...args),
|
|
470
475
|
committedRoute: async (actorId) => {
|
|
471
476
|
const route = await this.routes.route(actorId);
|
|
472
477
|
return route === undefined
|
|
@@ -739,9 +744,10 @@ export class ZLinkStreamBindingRuntime {
|
|
|
739
744
|
async disconnectNativeBoundSession(
|
|
740
745
|
node: ZLinkBackendActorSessionNode,
|
|
741
746
|
actorRef: ActorRef,
|
|
747
|
+
timeoutMs: number,
|
|
742
748
|
signal?: AbortSignal
|
|
743
749
|
): Promise<void> {
|
|
744
|
-
await this.boundSessions.disconnectNativeBoundSession(node, actorRef, signal);
|
|
750
|
+
await this.boundSessions.disconnectNativeBoundSession(node, actorRef, timeoutMs, signal);
|
|
745
751
|
}
|
|
746
752
|
|
|
747
753
|
async disconnectBoundSession(actorId: string, signal?: AbortSignal): Promise<void> {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { routingIdsEqual } from '../routing-id';
|
|
1
2
|
import {
|
|
2
3
|
ZLinkFrameworkInternalErrorKind,
|
|
3
4
|
createInternalFrameworkException,
|
|
@@ -225,7 +226,8 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
225
226
|
: (_actorId, retiredSession, replacedActor) => {
|
|
226
227
|
onBindingReplaced(replacedActor, retiredSession);
|
|
227
228
|
},
|
|
228
|
-
toStreamSessionActorAuthorityFence(authorityFence)
|
|
229
|
+
toStreamSessionActorAuthorityFence(authorityFence),
|
|
230
|
+
() => this.close()
|
|
229
231
|
),
|
|
230
232
|
signal
|
|
231
233
|
),
|
|
@@ -307,7 +309,7 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
307
309
|
resolved === undefined ||
|
|
308
310
|
resolved.actorId !== actor.actorId ||
|
|
309
311
|
resolved.generation !== actor.objectGeneration ||
|
|
310
|
-
|
|
312
|
+
!routingIdsEqual(resolved.nodeRid, actor.nodeRid)
|
|
311
313
|
) {
|
|
312
314
|
throw createInternalFrameworkException(
|
|
313
315
|
ZLinkFrameworkInternalErrorKind.ActorRouteNotFound,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DEFAULT_REQUEST_TIMEOUT_MS } from '../../contracts/Configuration/Registration';
|
|
1
2
|
import {
|
|
2
3
|
createInternalFrameworkException,
|
|
3
4
|
ZLinkFrameworkInternalErrorKind
|
|
@@ -11,26 +12,13 @@ import {
|
|
|
11
12
|
type ZLinkSubmitResult
|
|
12
13
|
} from '../messaging/submission-result';
|
|
13
14
|
import {
|
|
14
|
-
ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
|
|
15
|
-
ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET,
|
|
16
15
|
ZLINK_REMOTE_BOUND_SESSION_SEND_PACKET,
|
|
17
16
|
type ZLinkActorRoutedJoinTransport,
|
|
18
17
|
type ZLinkRemoteActorPacketTarget,
|
|
19
18
|
type ZLinkRemoteBoundSessionTarget
|
|
20
19
|
} from '../actors';
|
|
21
|
-
import {
|
|
22
|
-
encodeRemoteActorPacketRelayPayload,
|
|
23
|
-
encodeRemoteActorPacketTarget
|
|
24
|
-
} from '../actors/actor-packet-relay-wire';
|
|
20
|
+
import { encodeRemoteActorPacketTarget } from '../actors/actor-packet-relay-wire';
|
|
25
21
|
import { encodeRemoteBoundSessionSendPayload } from '../actors/bound-session-wire';
|
|
26
|
-
import { tryRequestRoutedJson } from '../actors/actor-routed-json-request';
|
|
27
|
-
import {
|
|
28
|
-
ZLinkStreamCodec,
|
|
29
|
-
ZLinkStreamHeaderFlags,
|
|
30
|
-
ZLinkStreamMessageKind,
|
|
31
|
-
encodeStreamHeader,
|
|
32
|
-
type ZLinkStreamFrameHeader
|
|
33
|
-
} from './protocol';
|
|
34
22
|
import type { ZLinkNativeFallbackBoundSessionPort } from './stream-binding-runtime-ports';
|
|
35
23
|
import type { ZLinkBackendActorSessionNode } from '../backend';
|
|
36
24
|
import { resolveFrameworkPacketName } from '../messaging/packet-name';
|
|
@@ -59,37 +47,6 @@ export class ZLinkNativeFallbackBoundSession implements ZLinkBoundSession {
|
|
|
59
47
|
}
|
|
60
48
|
|
|
61
49
|
async disconnect(signal?: AbortSignal): Promise<void> {
|
|
62
|
-
const remoteTarget = this.options.remoteBoundSessionTargetProvider();
|
|
63
|
-
if (remoteTarget !== undefined) {
|
|
64
|
-
const spotKind: ZLinkSpotKind | undefined =
|
|
65
|
-
'spotKind' in remoteTarget
|
|
66
|
-
? (remoteTarget.spotKind as ZLinkSpotKind | undefined)
|
|
67
|
-
: undefined;
|
|
68
|
-
const payload = encodeRemoteActorPacketRelayPayload({
|
|
69
|
-
actorId: this.options.actorId,
|
|
70
|
-
routerChannelId: remoteTarget.routerChannelId,
|
|
71
|
-
header: encodeStreamHeader(disconnectedFrameHeader()),
|
|
72
|
-
payload: Buffer.alloc(0)
|
|
73
|
-
});
|
|
74
|
-
const target = {
|
|
75
|
-
routerChannelId: remoteTarget.routerChannelId,
|
|
76
|
-
targetNodeRid: remoteTarget.targetNodeRid,
|
|
77
|
-
spotId: remoteTarget.spotId,
|
|
78
|
-
spotKind: spotKind ?? ZLinkSpotKind.Entry
|
|
79
|
-
};
|
|
80
|
-
if (
|
|
81
|
-
await tryRequestRoutedJson(this.options.routedTransport, target, payload, {
|
|
82
|
-
timeoutMs: this.options.requestTimeoutMs,
|
|
83
|
-
signal
|
|
84
|
-
})
|
|
85
|
-
) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
await this.options.routedTransport.sendToSpot(target, payload, {
|
|
89
|
-
packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET
|
|
90
|
-
});
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
50
|
const actorRef = this.options.actorRefProvider();
|
|
94
51
|
const node = this.options.nativeActorNodeProvider();
|
|
95
52
|
if (
|
|
@@ -97,7 +54,12 @@ export class ZLinkNativeFallbackBoundSession implements ZLinkBoundSession {
|
|
|
97
54
|
node !== undefined &&
|
|
98
55
|
currentBindingGeneration(actorRef) !== undefined
|
|
99
56
|
) {
|
|
100
|
-
await this.options.runtime.disconnectNativeBoundSession(
|
|
57
|
+
await this.options.runtime.disconnectNativeBoundSession(
|
|
58
|
+
node,
|
|
59
|
+
actorRef,
|
|
60
|
+
this.options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
|
|
61
|
+
signal
|
|
62
|
+
);
|
|
101
63
|
return;
|
|
102
64
|
}
|
|
103
65
|
await this.options.runtime.disconnectBoundSession(this.options.actorId, signal);
|
|
@@ -154,42 +116,16 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
|
|
|
154
116
|
private async executeScoped(packetName: string): Promise<ZLinkSubmitResult> {
|
|
155
117
|
const localActor = this.options.localActorProvider?.() === true;
|
|
156
118
|
const remoteTarget = this.options.remoteBoundSessionTargetProvider();
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
const result = await this.options.runtime.submitLocalBoundSession(
|
|
119
|
+
if (localActor || remoteTarget === undefined) {
|
|
120
|
+
const localResult = await this.options.runtime.submitLocalBoundSession(
|
|
160
121
|
this.options.actorId,
|
|
161
122
|
this.message,
|
|
162
123
|
packetName,
|
|
163
124
|
this.selectedMetadata
|
|
164
125
|
);
|
|
165
|
-
if (
|
|
166
|
-
this.traceSubmitted(
|
|
167
|
-
return
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
// A local Actor with a concrete native owner has a direct binding path.
|
|
171
|
-
// Use that path before a routed transfer target. The transfer target is
|
|
172
|
-
// retained for actors whose current owner is remote or whose native
|
|
173
|
-
// binding is no longer available.
|
|
174
|
-
const actorRef = this.options.actorRefProvider();
|
|
175
|
-
const node = this.options.nativeActorNodeProvider();
|
|
176
|
-
const bindingGeneration = currentBindingGeneration(actorRef);
|
|
177
|
-
if (actorRef !== undefined && node !== undefined && bindingGeneration !== undefined) {
|
|
178
|
-
nativeAttempted = true;
|
|
179
|
-
const result = await this.options.runtime.sendNativeBoundSession(
|
|
180
|
-
node,
|
|
181
|
-
actorRef,
|
|
182
|
-
this.message,
|
|
183
|
-
packetName,
|
|
184
|
-
this.selectedMetadata
|
|
185
|
-
);
|
|
186
|
-
if (result.status !== ZLinkSubmitStatus.TargetNotFound) {
|
|
187
|
-
this.traceSubmitted(result, packetName);
|
|
188
|
-
return result;
|
|
189
|
-
}
|
|
190
|
-
if (remoteTarget === undefined) {
|
|
191
|
-
return result;
|
|
192
|
-
}
|
|
126
|
+
if (localResult.status !== ZLinkSubmitStatus.TargetNotFound) {
|
|
127
|
+
this.traceSubmitted(localResult, packetName);
|
|
128
|
+
return localResult;
|
|
193
129
|
}
|
|
194
130
|
}
|
|
195
131
|
if (remoteTarget !== undefined) {
|
|
@@ -238,25 +174,10 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
|
|
|
238
174
|
this.traceSubmitted(result, packetName);
|
|
239
175
|
return result;
|
|
240
176
|
}
|
|
241
|
-
const localResult = await this.options.runtime.submitLocalBoundSession(
|
|
242
|
-
this.options.actorId,
|
|
243
|
-
this.message,
|
|
244
|
-
packetName,
|
|
245
|
-
this.selectedMetadata
|
|
246
|
-
);
|
|
247
|
-
if (localResult.status !== ZLinkSubmitStatus.TargetNotFound) {
|
|
248
|
-
this.traceSubmitted(localResult, packetName);
|
|
249
|
-
return localResult;
|
|
250
|
-
}
|
|
251
177
|
const actorRef = this.options.actorRefProvider();
|
|
252
178
|
const node = this.options.nativeActorNodeProvider();
|
|
253
179
|
const bindingGeneration = currentBindingGeneration(actorRef);
|
|
254
|
-
if (
|
|
255
|
-
!nativeAttempted &&
|
|
256
|
-
actorRef !== undefined &&
|
|
257
|
-
node !== undefined &&
|
|
258
|
-
bindingGeneration !== undefined
|
|
259
|
-
) {
|
|
180
|
+
if (actorRef !== undefined && node !== undefined && bindingGeneration !== undefined) {
|
|
260
181
|
const result = await this.options.runtime.sendNativeBoundSession(
|
|
261
182
|
node,
|
|
262
183
|
actorRef,
|
|
@@ -300,13 +221,3 @@ function currentBindingGeneration(actorRef: ActorRef | undefined): bigint | unde
|
|
|
300
221
|
function positiveBindingGeneration(generation: bigint | undefined): bigint | undefined {
|
|
301
222
|
return generation !== undefined && generation > 0n ? generation : undefined;
|
|
302
223
|
}
|
|
303
|
-
|
|
304
|
-
function disconnectedFrameHeader(): ZLinkStreamFrameHeader {
|
|
305
|
-
return {
|
|
306
|
-
kind: ZLinkStreamMessageKind.Send,
|
|
307
|
-
codec: ZLinkStreamCodec.Raw,
|
|
308
|
-
flags: ZLinkStreamHeaderFlags.None,
|
|
309
|
-
name: ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET,
|
|
310
|
-
metadata: new Map()
|
|
311
|
-
};
|
|
312
|
-
}
|
|
@@ -14,7 +14,10 @@ import {
|
|
|
14
14
|
import { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
|
|
15
15
|
import { ZLinkManagedStream } from './managed-stream';
|
|
16
16
|
import { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './session-context';
|
|
17
|
-
import type {
|
|
17
|
+
import type {
|
|
18
|
+
ZLinkActorRouteCommitOptions,
|
|
19
|
+
ZLinkSessionBindingConfirmationOptions
|
|
20
|
+
} from './stream-binding-runtime-ports';
|
|
18
21
|
|
|
19
22
|
export interface ZLinkSessionActorCoordinatorOptions {
|
|
20
23
|
readonly actorBindTimeoutMs?: number;
|
|
@@ -70,25 +73,7 @@ export class ZLinkSessionActorCoordinator {
|
|
|
70
73
|
private async replaceBinding(
|
|
71
74
|
context: DefaultZLinkSessionContext,
|
|
72
75
|
actorRef: ActorRef,
|
|
73
|
-
signal?: AbortSignal
|
|
74
|
-
confirmRemoteSessionBinding: boolean | 'send' = true,
|
|
75
|
-
releaseSeal?: { readonly sealId: string }
|
|
76
|
-
): Promise<DefaultZLinkSessionActor> {
|
|
77
|
-
return await this.replaceBindingCore(
|
|
78
|
-
context,
|
|
79
|
-
actorRef,
|
|
80
|
-
signal,
|
|
81
|
-
confirmRemoteSessionBinding,
|
|
82
|
-
releaseSeal
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
private async replaceBindingCore(
|
|
87
|
-
context: DefaultZLinkSessionContext,
|
|
88
|
-
actorRef: ActorRef,
|
|
89
|
-
signal?: AbortSignal,
|
|
90
|
-
confirmRemoteSessionBinding: boolean | 'send' = true,
|
|
91
|
-
releaseSeal?: { readonly sealId: string }
|
|
76
|
+
signal?: AbortSignal
|
|
92
77
|
): Promise<DefaultZLinkSessionActor> {
|
|
93
78
|
throwIfAborted(signal);
|
|
94
79
|
if (actorRef.actorId.trim().length === 0) {
|
|
@@ -134,15 +119,8 @@ export class ZLinkSessionActorCoordinator {
|
|
|
134
119
|
const sessionActor =
|
|
135
120
|
reuseActor ??
|
|
136
121
|
new DefaultZLinkSessionActor(this.sessionActorRuntime, boundActorRef, bindingToken);
|
|
137
|
-
const sessionIdentity =
|
|
122
|
+
const sessionIdentity = this.actorBindingRoutingId(context);
|
|
138
123
|
if (previous === undefined) {
|
|
139
|
-
if (releaseSeal !== undefined) {
|
|
140
|
-
throw createInternalFrameworkException(
|
|
141
|
-
ZLinkFrameworkInternalErrorKind.ActorSessionNotBound,
|
|
142
|
-
`Actor '${actorRef.actorId}' route switch has no Session binding to release.`,
|
|
143
|
-
true
|
|
144
|
-
);
|
|
145
|
-
}
|
|
146
124
|
await this.routes.bind(
|
|
147
125
|
context,
|
|
148
126
|
sessionActor,
|
|
@@ -151,17 +129,6 @@ export class ZLinkSessionActorCoordinator {
|
|
|
151
129
|
sessionIdentity,
|
|
152
130
|
() => sessionActor.updateRef(boundActorRef)
|
|
153
131
|
);
|
|
154
|
-
} else if (releaseSeal !== undefined) {
|
|
155
|
-
await this.routes.replaceAndReleaseSeal(
|
|
156
|
-
previous,
|
|
157
|
-
context,
|
|
158
|
-
sessionActor,
|
|
159
|
-
bindingToken,
|
|
160
|
-
releaseSeal.sealId,
|
|
161
|
-
authorityFence,
|
|
162
|
-
sessionIdentity,
|
|
163
|
-
() => sessionActor.updateRef(boundActorRef)
|
|
164
|
-
);
|
|
165
132
|
} else {
|
|
166
133
|
await this.routes.replace(
|
|
167
134
|
previous,
|
|
@@ -173,12 +140,8 @@ export class ZLinkSessionActorCoordinator {
|
|
|
173
140
|
() => sessionActor.updateRef(boundActorRef)
|
|
174
141
|
);
|
|
175
142
|
}
|
|
176
|
-
if (
|
|
177
|
-
|
|
178
|
-
this.options.confirmRemoteActorSessionBinding !== undefined
|
|
179
|
-
) {
|
|
180
|
-
const waitForAcknowledgement =
|
|
181
|
-
previous === undefined && confirmRemoteSessionBinding !== 'send';
|
|
143
|
+
if (this.options.confirmRemoteActorSessionBinding !== undefined) {
|
|
144
|
+
const waitForAcknowledgement = previous === undefined;
|
|
182
145
|
const confirmation = this.options.confirmRemoteActorSessionBinding(
|
|
183
146
|
boundActorRef,
|
|
184
147
|
this.actorBindingRoutingId(context),
|
|
@@ -334,12 +297,7 @@ export class ZLinkSessionActorCoordinator {
|
|
|
334
297
|
async commitActorRoute(
|
|
335
298
|
actorRef: ActorRef,
|
|
336
299
|
signal?: AbortSignal,
|
|
337
|
-
options: {
|
|
338
|
-
readonly confirmRemoteSessionBinding?: boolean | 'send';
|
|
339
|
-
readonly releaseSeal?: {
|
|
340
|
-
readonly sealId: string;
|
|
341
|
-
};
|
|
342
|
-
} = {}
|
|
300
|
+
options: ZLinkActorRouteCommitOptions = {}
|
|
343
301
|
): Promise<void> {
|
|
344
302
|
const normalizedActorRef = normalizeActorRef(
|
|
345
303
|
actorRef as ActorRef & { readonly generation?: bigint | number },
|
|
@@ -350,45 +308,38 @@ export class ZLinkSessionActorCoordinator {
|
|
|
350
308
|
const route = await this.routes.route(normalizedActorRef.actorId);
|
|
351
309
|
if (route === undefined) return;
|
|
352
310
|
requireSameIncarnation(route.actor.ref, normalizedActorRef);
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
) {
|
|
359
|
-
throw createInternalFrameworkException(
|
|
360
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
361
|
-
`Actor '${normalizedActorRef.actorId}' route switch did not match its relocation seal.`,
|
|
362
|
-
true
|
|
363
|
-
);
|
|
364
|
-
}
|
|
365
|
-
// A location refresh never changes the route's Session binding
|
|
366
|
-
// generation; the native bind owns it.
|
|
367
|
-
route.actor.updateRef(
|
|
368
|
-
withBindingGeneration(normalizedActorRef, bindingGenerationOf(route.actor.ref), undefined)
|
|
369
|
-
);
|
|
370
|
-
if (authorityFence !== undefined) {
|
|
371
|
-
await this.routes.updateAuthorityFence(normalizedActorRef.actorId, authorityFence);
|
|
372
|
-
}
|
|
373
|
-
if (
|
|
374
|
-
options.releaseSeal !== undefined &&
|
|
375
|
-
!(await this.routes.abortSeal(normalizedActorRef.actorId, options.releaseSeal.sealId))
|
|
376
|
-
) {
|
|
377
|
-
throw createInternalFrameworkException(
|
|
378
|
-
ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
379
|
-
`Actor '${normalizedActorRef.actorId}' route switch lost its relocation seal.`,
|
|
380
|
-
true
|
|
381
|
-
);
|
|
382
|
-
}
|
|
383
|
-
return;
|
|
384
|
-
}
|
|
385
|
-
await this.replaceBinding(
|
|
386
|
-
route.context,
|
|
311
|
+
const authorityFence = await this.resolveAuthorityFence(normalizedActorRef, signal);
|
|
312
|
+
// Relocation changes only the Actor route of this physical binding.
|
|
313
|
+
// Publish the ref and authority together in the binding registry's turn;
|
|
314
|
+
// a native bind would issue a different binding generation.
|
|
315
|
+
const boundActorRef = withBindingGeneration(
|
|
387
316
|
normalizedActorRef,
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
options.releaseSeal
|
|
317
|
+
bindingGenerationOf(route.actor.ref),
|
|
318
|
+
undefined
|
|
391
319
|
);
|
|
320
|
+
const commitActor = () => route.actor.updateRef(boundActorRef);
|
|
321
|
+
if (options.releaseSeal !== undefined) {
|
|
322
|
+
await this.routes.replaceAndReleaseSeal(
|
|
323
|
+
route,
|
|
324
|
+
route.context,
|
|
325
|
+
route.actor,
|
|
326
|
+
route.bindingToken,
|
|
327
|
+
options.releaseSeal.sealId,
|
|
328
|
+
authorityFence,
|
|
329
|
+
route.sessionIdentity,
|
|
330
|
+
commitActor
|
|
331
|
+
);
|
|
332
|
+
} else {
|
|
333
|
+
await this.routes.replace(
|
|
334
|
+
route,
|
|
335
|
+
route.context,
|
|
336
|
+
route.actor,
|
|
337
|
+
route.bindingToken,
|
|
338
|
+
authorityFence,
|
|
339
|
+
route.sessionIdentity,
|
|
340
|
+
commitActor
|
|
341
|
+
);
|
|
342
|
+
}
|
|
392
343
|
});
|
|
393
344
|
}
|
|
394
345
|
|
|
@@ -39,15 +39,8 @@ export interface ZLinkStreamActorLifecyclePort {
|
|
|
39
39
|
|
|
40
40
|
export interface ZLinkActorRouteCommitOptions {
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* request/ACK would create a nested route request while the Session
|
|
45
|
-
* ownership command is being dispatched.
|
|
46
|
-
*/
|
|
47
|
-
readonly confirmRemoteSessionBinding?: boolean | 'send';
|
|
48
|
-
/**
|
|
49
|
-
* Command 44 keeps ingress sealed while the native route is prepared, then
|
|
50
|
-
* publishes the new route and releases this exact seal in one owner turn.
|
|
42
|
+
* Command 44 publishes the Actor route of the existing binding and releases
|
|
43
|
+
* this exact seal in one owner turn.
|
|
51
44
|
*/
|
|
52
45
|
readonly releaseSeal?: {
|
|
53
46
|
readonly sealId: string;
|
|
@@ -143,6 +136,7 @@ export interface ZLinkNativeFallbackBoundSessionPort {
|
|
|
143
136
|
disconnectNativeBoundSession(
|
|
144
137
|
node: ZLinkBackendActorSessionNode,
|
|
145
138
|
actorRef: ActorRef,
|
|
139
|
+
timeoutMs: number,
|
|
146
140
|
signal?: AbortSignal
|
|
147
141
|
): Promise<void>;
|
|
148
142
|
disconnectBoundSession(actorId: string, signal?: AbortSignal): Promise<void>;
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
ZLinkDispatchMessageKind,
|
|
10
10
|
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome
|
|
11
11
|
} from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
12
|
-
import { throwIfAborted } from '../abort';
|
|
12
|
+
import { isPromiseLike, throwIfAborted } from '../abort';
|
|
13
13
|
import { type ZLinkApplicationWorkClaim, shouldCompactBackingArray } from '../admission';
|
|
14
14
|
|
|
15
15
|
import {
|
|
@@ -95,29 +95,6 @@ const systemLivenessClock: ZLinkStreamLivenessClock = {
|
|
|
95
95
|
clearTimer: (timer) => clearTimeout(timer as ReturnType<typeof setTimeout>)
|
|
96
96
|
};
|
|
97
97
|
|
|
98
|
-
class ZLinkStreamReceiveWake {
|
|
99
|
-
private pending?: Promise<void>;
|
|
100
|
-
private resolvePending?: () => void;
|
|
101
|
-
private readonly finish = (): void => {
|
|
102
|
-
const resolve = this.resolvePending;
|
|
103
|
-
this.pending = undefined;
|
|
104
|
-
this.resolvePending = undefined;
|
|
105
|
-
resolve?.();
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
wait(): Promise<void> {
|
|
109
|
-
if (this.pending !== undefined) return this.pending;
|
|
110
|
-
this.pending = new Promise<void>((resolve) => {
|
|
111
|
-
this.resolvePending = resolve;
|
|
112
|
-
});
|
|
113
|
-
return this.pending;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
wake(): void {
|
|
117
|
-
this.finish();
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
98
|
export interface ZLinkStreamSessionContextFactory {
|
|
122
99
|
createSessionContext(
|
|
123
100
|
stream: ZLinkManagedStream,
|
|
@@ -928,7 +905,7 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
928
905
|
private readonly receiveAbortController = new AbortController();
|
|
929
906
|
private receiveLoop: Promise<void> | undefined;
|
|
930
907
|
private monitorLoop: Promise<void> | undefined;
|
|
931
|
-
private
|
|
908
|
+
private receiveWake: AbortController | undefined;
|
|
932
909
|
private receiveWorkSinceYield = 0;
|
|
933
910
|
constructor(
|
|
934
911
|
private readonly options: ZLinkStreamSessionNodeRuntimeOptions & ZLinkStreamLivenessOptions
|
|
@@ -1455,14 +1432,20 @@ export class ZLinkStreamSessionNodeRuntime {
|
|
|
1455
1432
|
}
|
|
1456
1433
|
|
|
1457
1434
|
private async waitReceiveLoopWake(signal: AbortSignal): Promise<void> {
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1435
|
+
const wake = new AbortController();
|
|
1436
|
+
this.receiveWake = wake;
|
|
1437
|
+
try {
|
|
1438
|
+
// Readiness, internal wake and shutdown share one cancellable wait;
|
|
1439
|
+
// no losing Promise retains reactions across receive cycles.
|
|
1440
|
+
await this.options.readablePoller.waitForReadable(AbortSignal.any([signal, wake.signal]));
|
|
1441
|
+
} finally {
|
|
1442
|
+
wake.abort();
|
|
1443
|
+
this.receiveWake = undefined;
|
|
1444
|
+
}
|
|
1462
1445
|
}
|
|
1463
1446
|
|
|
1464
1447
|
private wakeReceiveLoop(): void {
|
|
1465
|
-
this.receiveWake
|
|
1448
|
+
this.receiveWake?.abort();
|
|
1466
1449
|
}
|
|
1467
1450
|
|
|
1468
1451
|
private getOrCreateSession(routingId: unknown): ZLinkStreamSessionRuntime | undefined {
|
|
@@ -1511,10 +1494,6 @@ function streamMonitorHasEndpoint(event: ZLinkBackendSocketMonitorEvent): boolea
|
|
|
1511
1494
|
return endpoint.localAddr !== undefined || endpoint.remoteAddr !== undefined;
|
|
1512
1495
|
}
|
|
1513
1496
|
|
|
1514
|
-
function isPromiseLike<T>(value: T | Promise<T>): value is Promise<T> {
|
|
1515
|
-
return typeof (value as { then?: unknown }).then === 'function';
|
|
1516
|
-
}
|
|
1517
|
-
|
|
1518
1497
|
function normalizeStreamCloseReason(reason: string): string {
|
|
1519
1498
|
switch (reason) {
|
|
1520
1499
|
case 'client_close':
|
|
@@ -503,7 +503,7 @@ export class DefaultZLinkWorkerCall<T> implements ZLinkWorkerCall<T> {
|
|
|
503
503
|
yield(signal?: AbortSignal): Promise<T> {
|
|
504
504
|
const turn = requireZLinkYieldTurn(this.turn);
|
|
505
505
|
const pending = this.begin(signal);
|
|
506
|
-
return turn.
|
|
506
|
+
return turn.yieldFrameworkPromise(pending);
|
|
507
507
|
}
|
|
508
508
|
|
|
509
509
|
private begin(signal?: AbortSignal): Promise<T> {
|