@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
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
import { isUtf8 } from 'node:buffer';
|
|
2
|
+
import { channelErrorKindFromCode } from '../channels/channel-envelope';
|
|
3
|
+
import { routingIdsEqual } from '../routing-id';
|
|
1
4
|
import { ZlinkStreamContentType } from '@zlink-systems/stream-wire';
|
|
5
|
+
import { createZLinkRequest } from '../messaging/request-result';
|
|
6
|
+
import type { ZLinkRequest } from '../../contracts/Handlers/Attributes';
|
|
2
7
|
import {
|
|
3
8
|
type ActorRef,
|
|
4
9
|
type RoutingId,
|
|
@@ -6,7 +11,6 @@ import {
|
|
|
6
11
|
type ZLinkActorRequestCall,
|
|
7
12
|
type ZLinkActorSendCall,
|
|
8
13
|
type ZLinkMessageSerializer,
|
|
9
|
-
ZLinkFrameworkErrorKind,
|
|
10
14
|
ZLinkFrameworkException,
|
|
11
15
|
ZLinkSpotKind
|
|
12
16
|
} from '../../contracts';
|
|
@@ -25,7 +29,6 @@ import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message
|
|
|
25
29
|
import {
|
|
26
30
|
isZLinkBackendResultError,
|
|
27
31
|
RequestResult,
|
|
28
|
-
SubmitResult,
|
|
29
32
|
ZLINK_BACKEND_SEND_NONE
|
|
30
33
|
} from '../backend/runtime-values';
|
|
31
34
|
import { ZLinkConfigurationException } from '../configuration';
|
|
@@ -58,6 +61,7 @@ import {
|
|
|
58
61
|
encodeStreamHeader,
|
|
59
62
|
streamCodecForContentType,
|
|
60
63
|
tryDecodeStreamFrame,
|
|
64
|
+
ZLinkStreamCodec,
|
|
61
65
|
ZLinkStreamHeaderFlags,
|
|
62
66
|
ZLinkStreamMessageKind
|
|
63
67
|
} from '../streams/protocol';
|
|
@@ -89,7 +93,8 @@ export interface ZLinkActorClientOptions {
|
|
|
89
93
|
parts: readonly Message[],
|
|
90
94
|
returnResponse: boolean,
|
|
91
95
|
actor: ActorRef,
|
|
92
|
-
deadlineUnixMs?: number
|
|
96
|
+
deadlineUnixMs?: number,
|
|
97
|
+
onAdmitted?: () => void
|
|
93
98
|
) => Promise<unknown> | undefined;
|
|
94
99
|
readonly sendErrorReporter?: (error: unknown) => void;
|
|
95
100
|
readonly routeTransport?: ZLinkActorRoutedJoinTransport;
|
|
@@ -118,8 +123,17 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
118
123
|
requestToActor(actorId: string, request: unknown): ZLinkActorRequestCall {
|
|
119
124
|
requireActorId(actorId);
|
|
120
125
|
return new DefaultZLinkActorRequestCall(
|
|
121
|
-
(packetName, timeoutMs, metadata, signal) =>
|
|
122
|
-
this.request(
|
|
126
|
+
(packetName, timeoutMs, metadata, signal, onAdmitted) =>
|
|
127
|
+
this.request(
|
|
128
|
+
actorId,
|
|
129
|
+
packetName,
|
|
130
|
+
request,
|
|
131
|
+
timeoutMs,
|
|
132
|
+
metadata,
|
|
133
|
+
signal,
|
|
134
|
+
'async',
|
|
135
|
+
onAdmitted
|
|
136
|
+
),
|
|
123
137
|
(packetName, timeoutMs, metadata, signal) =>
|
|
124
138
|
this.request(actorId, packetName, request, timeoutMs, metadata, signal, 'yield'),
|
|
125
139
|
actorId,
|
|
@@ -174,7 +188,7 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
174
188
|
const node = this.requireNode(meshName);
|
|
175
189
|
if (
|
|
176
190
|
this.options.routeTransport !== undefined &&
|
|
177
|
-
|
|
191
|
+
!routingIdsEqual(node.status().routingId, actor.nodeRid)
|
|
178
192
|
) {
|
|
179
193
|
await this.options.routeTransport.sendToSpot(
|
|
180
194
|
remoteActorRouteTarget(route),
|
|
@@ -191,7 +205,7 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
191
205
|
);
|
|
192
206
|
return { status: ZLinkSubmitStatus.Submitted };
|
|
193
207
|
}
|
|
194
|
-
return await this.submitActorSend(meshName, toBackendActorRef(actor), parts);
|
|
208
|
+
return await this.submitActorSend(meshName, toBackendActorRef(actor), parts, route);
|
|
195
209
|
} catch (error) {
|
|
196
210
|
if (isStaleActorError(error)) {
|
|
197
211
|
this.invalidateActorRoute(actorId);
|
|
@@ -211,7 +225,8 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
211
225
|
timeoutMs: number | undefined,
|
|
212
226
|
metadata: ReadonlyMap<string, string>,
|
|
213
227
|
signal?: AbortSignal,
|
|
214
|
-
waitPolicy: 'async' | 'yield' = 'async'
|
|
228
|
+
waitPolicy: 'async' | 'yield' = 'async',
|
|
229
|
+
onAdmitted?: () => void
|
|
215
230
|
): Promise<TReply> {
|
|
216
231
|
throwIfAborted(signal);
|
|
217
232
|
const sourceSpotId = currentZLinkActorExecution()?.spotId ?? currentZLinkSpotSerialSourceId();
|
|
@@ -267,7 +282,8 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
267
282
|
parts,
|
|
268
283
|
true,
|
|
269
284
|
routedActor,
|
|
270
|
-
deadlineUnixMs
|
|
285
|
+
deadlineUnixMs,
|
|
286
|
+
onAdmitted
|
|
271
287
|
);
|
|
272
288
|
if (handoff !== undefined) {
|
|
273
289
|
const submissions = [handoff];
|
|
@@ -278,7 +294,8 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
278
294
|
parts,
|
|
279
295
|
true,
|
|
280
296
|
routedActor,
|
|
281
|
-
deadlineUnixMs
|
|
297
|
+
deadlineUnixMs,
|
|
298
|
+
onAdmitted
|
|
282
299
|
);
|
|
283
300
|
if (duplicate !== undefined) submissions.push(duplicate);
|
|
284
301
|
}
|
|
@@ -297,7 +314,8 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
297
314
|
remainingActorRequestTimeout(actorId, deadlineMs),
|
|
298
315
|
signal,
|
|
299
316
|
route,
|
|
300
|
-
messageFollow
|
|
317
|
+
messageFollow,
|
|
318
|
+
onAdmitted
|
|
301
319
|
);
|
|
302
320
|
} catch (error) {
|
|
303
321
|
if (isStaleActorError(error)) {
|
|
@@ -398,13 +416,15 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
398
416
|
private async submitActorSend(
|
|
399
417
|
meshName: string,
|
|
400
418
|
actor: ZLinkBackendActorRef,
|
|
401
|
-
parts: readonly Message[]
|
|
419
|
+
parts: readonly Message[],
|
|
420
|
+
route: ZLinkResolvedActorRoute
|
|
402
421
|
): Promise<ZLinkSubmitResult> {
|
|
403
422
|
const node = this.requireNode(meshName);
|
|
404
423
|
try {
|
|
405
424
|
return classifySubmitResult(
|
|
406
425
|
await node.sendToActor(actor, toMessageLikeParts(parts), {
|
|
407
|
-
flags: ZLINK_BACKEND_SEND_NONE
|
|
426
|
+
flags: ZLINK_BACKEND_SEND_NONE,
|
|
427
|
+
routeFence: nativeActorRouteFence(route, actor)
|
|
408
428
|
}),
|
|
409
429
|
'Actor send'
|
|
410
430
|
);
|
|
@@ -421,15 +441,15 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
421
441
|
actor: ZLinkBackendActorRef,
|
|
422
442
|
parts: readonly Message[],
|
|
423
443
|
timeoutMs: number | undefined,
|
|
424
|
-
signal
|
|
425
|
-
route
|
|
426
|
-
messageFollowContext
|
|
444
|
+
signal: AbortSignal | undefined,
|
|
445
|
+
route: ZLinkResolvedActorRoute,
|
|
446
|
+
messageFollowContext: ZLinkActorMessageFollowContext,
|
|
447
|
+
onAdmitted?: () => void
|
|
427
448
|
): Promise<TReply> {
|
|
428
449
|
const node = this.requireNode(meshName);
|
|
429
450
|
if (
|
|
430
451
|
this.options.routeTransport !== undefined &&
|
|
431
|
-
|
|
432
|
-
route !== undefined
|
|
452
|
+
!routingIdsEqual(node.status().routingId, actor.nodeRid)
|
|
433
453
|
) {
|
|
434
454
|
const relay = encodeRemoteActorPacketRelayPayload({
|
|
435
455
|
actorId: actor.actorId,
|
|
@@ -459,7 +479,7 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
459
479
|
this.options.routeTransport,
|
|
460
480
|
remoteActorRouteTarget(route),
|
|
461
481
|
relay,
|
|
462
|
-
{ timeoutMs, signal },
|
|
482
|
+
{ timeoutMs, signal, onAdmitted },
|
|
463
483
|
`Remote Actor request is not available for '${actor.actorId}'.`,
|
|
464
484
|
(replyParts) => JSON.parse(replyParts[0]?.getString('utf8') ?? '{}')
|
|
465
485
|
);
|
|
@@ -481,7 +501,9 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
481
501
|
() =>
|
|
482
502
|
node.requestToActor(actor, toMessageLikeParts(parts), {
|
|
483
503
|
flags: ZLINK_BACKEND_SEND_NONE,
|
|
484
|
-
|
|
504
|
+
routeFence: nativeActorRouteFence(route, actor),
|
|
505
|
+
timeoutMs,
|
|
506
|
+
onAdmitted
|
|
485
507
|
}),
|
|
486
508
|
signal
|
|
487
509
|
);
|
|
@@ -509,6 +531,15 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
509
531
|
}
|
|
510
532
|
}
|
|
511
533
|
|
|
534
|
+
function nativeActorRouteFence(route: ZLinkResolvedActorRoute, actor: ZLinkBackendActorRef) {
|
|
535
|
+
return {
|
|
536
|
+
actor,
|
|
537
|
+
targetNodeGeneration: route.ownerNodeGeneration,
|
|
538
|
+
authorityOwnerGeneration: route.authorityOwnerGeneration,
|
|
539
|
+
ownerLeaseGeneration: route.ownerLeaseGeneration
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
|
|
512
543
|
function remoteActorRouteTarget(route: ZLinkResolvedActorRoute) {
|
|
513
544
|
if (route.enclosingSpotRoute !== undefined) {
|
|
514
545
|
return route.enclosingSpotRoute;
|
|
@@ -579,45 +610,6 @@ function requireActorId(actorId: string): void {
|
|
|
579
610
|
}
|
|
580
611
|
}
|
|
581
612
|
|
|
582
|
-
export async function forwardEncodedActorPacket(
|
|
583
|
-
node: ZLinkBackendMeshNode,
|
|
584
|
-
completions: ZLinkMeshCompletionTable,
|
|
585
|
-
actor: ActorRef,
|
|
586
|
-
header: Buffer,
|
|
587
|
-
payload: Buffer,
|
|
588
|
-
returnResponse: boolean,
|
|
589
|
-
timeoutMs: number | undefined,
|
|
590
|
-
serializers?: ReadonlyMap<string, ZLinkMessageSerializer>
|
|
591
|
-
): Promise<unknown> {
|
|
592
|
-
const target = toBackendActorRef(actor);
|
|
593
|
-
const parts = [header, payload];
|
|
594
|
-
const packetName = decodeStreamHeader(header).name;
|
|
595
|
-
if (!returnResponse) {
|
|
596
|
-
if (
|
|
597
|
-
(await node.sendToActor(target, parts, { flags: ZLINK_BACKEND_SEND_NONE })) !==
|
|
598
|
-
SubmitResult.Ok
|
|
599
|
-
) {
|
|
600
|
-
throw routeNotConnected('Actor handoff send submit was not accepted.');
|
|
601
|
-
}
|
|
602
|
-
return undefined;
|
|
603
|
-
}
|
|
604
|
-
const completion = await completions.submit(() =>
|
|
605
|
-
node.requestToActor(target, parts, {
|
|
606
|
-
flags: ZLINK_BACKEND_SEND_NONE,
|
|
607
|
-
timeoutMs
|
|
608
|
-
})
|
|
609
|
-
);
|
|
610
|
-
if (completion.terminalResult !== RequestResult.Ok) {
|
|
611
|
-
closeMeshCompletion(completion);
|
|
612
|
-
throw mapRequestResult(
|
|
613
|
-
completion.terminalResult,
|
|
614
|
-
completion.failureErrno,
|
|
615
|
-
'Actor handoff request'
|
|
616
|
-
);
|
|
617
|
-
}
|
|
618
|
-
return decodeActorReply(completion.parts, serializers, packetName);
|
|
619
|
-
}
|
|
620
|
-
|
|
621
613
|
function toBackendActorRef(actor: ActorRef): ZLinkBackendActorRef {
|
|
622
614
|
return {
|
|
623
615
|
nodeRid: actor.nodeRid,
|
|
@@ -700,7 +692,8 @@ class DefaultZLinkActorRequestCall implements ZLinkActorRequestCall {
|
|
|
700
692
|
packetName: string | undefined,
|
|
701
693
|
timeoutMs: number | undefined,
|
|
702
694
|
metadata: ReadonlyMap<string, string>,
|
|
703
|
-
signal?: AbortSignal
|
|
695
|
+
signal?: AbortSignal,
|
|
696
|
+
onAdmitted?: () => void
|
|
704
697
|
) => Promise<TReply>,
|
|
705
698
|
private readonly yieldSubmitter: <TReply>(
|
|
706
699
|
packetName: string | undefined,
|
|
@@ -728,20 +721,24 @@ class DefaultZLinkActorRequestCall implements ZLinkActorRequestCall {
|
|
|
728
721
|
return this;
|
|
729
722
|
}
|
|
730
723
|
|
|
731
|
-
submit<TReply>(signal?: AbortSignal):
|
|
732
|
-
|
|
724
|
+
submit<TReply>(signal?: AbortSignal): ZLinkRequest<TReply> {
|
|
725
|
+
this.rejectSelfActorRequest();
|
|
726
|
+
return createZLinkRequest((onAdmitted) => this.execute<TReply>('async', signal, onAdmitted));
|
|
733
727
|
}
|
|
734
728
|
|
|
735
729
|
yield<TReply>(signal?: AbortSignal): Promise<TReply> {
|
|
736
730
|
this.rejectSelfActorRequest();
|
|
737
731
|
const turn = requireZLinkYieldTurn(this.turn);
|
|
738
732
|
const pending = this.execute<TReply>('yield', signal);
|
|
739
|
-
return turn.
|
|
733
|
+
return turn.yieldFrameworkPromise(pending);
|
|
740
734
|
}
|
|
741
735
|
|
|
742
|
-
private execute<TReply>(
|
|
736
|
+
private execute<TReply>(
|
|
737
|
+
waitPolicy: 'async' | 'yield',
|
|
738
|
+
signal?: AbortSignal,
|
|
739
|
+
onAdmitted?: () => void
|
|
740
|
+
): Promise<TReply> {
|
|
743
741
|
ensureSingleSubmit(this.executed);
|
|
744
|
-
this.rejectSelfActorRequest();
|
|
745
742
|
this.executed = true;
|
|
746
743
|
throwIfAborted(signal);
|
|
747
744
|
const submitter = waitPolicy === 'async' ? this.asyncSubmitter : this.yieldSubmitter;
|
|
@@ -749,7 +746,8 @@ class DefaultZLinkActorRequestCall implements ZLinkActorRequestCall {
|
|
|
749
746
|
this.packet ?? resolveFrameworkPacketName(this.request, undefined, 'Actor'),
|
|
750
747
|
this.timeoutMs ?? this.defaultRequestTimeoutMs,
|
|
751
748
|
this.selectedMetadata,
|
|
752
|
-
signal
|
|
749
|
+
signal,
|
|
750
|
+
onAdmitted
|
|
753
751
|
);
|
|
754
752
|
}
|
|
755
753
|
|
|
@@ -780,19 +778,21 @@ function decodeActorReply<TReply>(
|
|
|
780
778
|
const header = decodeStreamHeader(frame.header);
|
|
781
779
|
const payload = RuntimeMessage.from(frame.payload) as Message;
|
|
782
780
|
try {
|
|
783
|
-
return decodeActorReplyPayload<TReply>(
|
|
781
|
+
return decodeActorReplyPayload<TReply>(
|
|
782
|
+
header.kind,
|
|
783
|
+
header.codec,
|
|
784
|
+
payload,
|
|
785
|
+
serializers,
|
|
786
|
+
packetName
|
|
787
|
+
);
|
|
784
788
|
} finally {
|
|
785
789
|
payload.close();
|
|
786
790
|
}
|
|
787
791
|
}
|
|
788
792
|
}
|
|
789
|
-
if (reply.length >= 2) {
|
|
790
|
-
const header = decodeStreamHeader(reply[0].data());
|
|
791
|
-
return decodeActorReplyPayload<TReply>(header.kind, reply[1], serializers, packetName);
|
|
792
|
-
}
|
|
793
793
|
throw createInternalFrameworkException(
|
|
794
794
|
ZLinkFrameworkInternalErrorKind.RequestProtocolError,
|
|
795
|
-
'Actor request reply
|
|
795
|
+
'Actor request reply must contain one valid STREAM frame.'
|
|
796
796
|
);
|
|
797
797
|
} finally {
|
|
798
798
|
closeMessages(reply);
|
|
@@ -805,24 +805,39 @@ function closeMessages(parts: readonly Message[]): void {
|
|
|
805
805
|
|
|
806
806
|
function decodeActorReplyPayload<TReply>(
|
|
807
807
|
kind: ZLinkStreamMessageKind,
|
|
808
|
+
codec: ZLinkStreamCodec,
|
|
808
809
|
payload: Message,
|
|
809
810
|
serializers?: ReadonlyMap<string, ZLinkMessageSerializer>,
|
|
810
811
|
packetName?: string
|
|
811
812
|
): TReply {
|
|
812
813
|
if (kind === ZLinkStreamMessageKind.Error) {
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
814
|
+
if (codec !== ZLinkStreamCodec.Json || !isUtf8(payload.data())) {
|
|
815
|
+
throw createInternalFrameworkException(
|
|
816
|
+
ZLinkFrameworkInternalErrorKind.RequestProtocolError,
|
|
817
|
+
'Actor Error reply requires UTF-8 JSON.'
|
|
818
|
+
);
|
|
819
|
+
}
|
|
820
|
+
const error = decodeFrameworkPayloadMessage<unknown>(payload);
|
|
821
|
+
if (
|
|
822
|
+
typeof error !== 'object' ||
|
|
823
|
+
error === null ||
|
|
824
|
+
typeof (error as { code?: unknown }).code !== 'string' ||
|
|
825
|
+
typeof (error as { message?: unknown }).message !== 'string'
|
|
826
|
+
) {
|
|
827
|
+
throw createInternalFrameworkException(
|
|
828
|
+
ZLinkFrameworkInternalErrorKind.RequestProtocolError,
|
|
829
|
+
'Actor Error reply requires code and message strings.'
|
|
830
|
+
);
|
|
831
|
+
}
|
|
832
|
+
const wire = error as { code: string; message: string };
|
|
833
|
+
const kind = channelErrorKindFromCode(wire.code);
|
|
834
|
+
if (kind === undefined) {
|
|
835
|
+
throw createInternalFrameworkException(
|
|
836
|
+
ZLinkFrameworkInternalErrorKind.RequestProtocolError,
|
|
837
|
+
`Actor Error reply uses an unknown error code '${wire.code}'.`
|
|
838
|
+
);
|
|
839
|
+
}
|
|
840
|
+
throw new ZLinkFrameworkException(kind, wire.message);
|
|
826
841
|
}
|
|
827
842
|
return decodeFrameworkPayloadMessage<TReply>(
|
|
828
843
|
payload,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { routingIdsEqual } from '../routing-id';
|
|
1
2
|
import {
|
|
2
3
|
type RoutingId,
|
|
3
4
|
type SpotId,
|
|
@@ -90,6 +91,11 @@ export class DefaultZLinkActorContext implements ZLinkActorContext {
|
|
|
90
91
|
return this.state.actorId;
|
|
91
92
|
}
|
|
92
93
|
|
|
94
|
+
/** Actor-turn view of the single current Session binding (§7). */
|
|
95
|
+
get currentSessionBinding() {
|
|
96
|
+
return this.state.boundSession;
|
|
97
|
+
}
|
|
98
|
+
|
|
93
99
|
get objectGeneration(): bigint {
|
|
94
100
|
return this.state.nativeActorRef?.generation ?? 1n;
|
|
95
101
|
}
|
|
@@ -282,11 +288,24 @@ class DefaultZLinkActorJoinSpotCall implements ZLinkActorJoinSpotCall {
|
|
|
282
288
|
deadline.close();
|
|
283
289
|
requestMessage.close();
|
|
284
290
|
}
|
|
291
|
+
if (result.sourceCleanup !== undefined) {
|
|
292
|
+
// Infrastructure cleanup has its own terminal, outside the public Failed conversion.
|
|
293
|
+
try {
|
|
294
|
+
const cleanup = result.sourceCleanup();
|
|
295
|
+
await (this.turn === undefined ? cleanup : this.turn.yieldFrameworkPromise(cleanup));
|
|
296
|
+
} catch (error) {
|
|
297
|
+
traceJoinError(this.actor, error, this.coordinator, ZLinkDispatchErrorAction.Drop);
|
|
298
|
+
throw error;
|
|
299
|
+
} finally {
|
|
300
|
+
this.state.endDeferredJoin();
|
|
301
|
+
}
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
285
304
|
if (
|
|
286
305
|
!result.accepted ||
|
|
287
306
|
sourceNodeRid === undefined ||
|
|
288
307
|
result.actor === undefined ||
|
|
289
|
-
|
|
308
|
+
routingIdsEqual(sourceNodeRid, result.actor.nodeRid)
|
|
290
309
|
) {
|
|
291
310
|
await notifyJoinCompletion(this.actor, operationId, result, this.messageSerializers);
|
|
292
311
|
} else {
|
|
@@ -417,11 +436,24 @@ class DefaultZLinkActorJoinEntrySpotCall implements ZLinkActorJoinEntrySpotCall
|
|
|
417
436
|
deadline.close();
|
|
418
437
|
requestMessage.close();
|
|
419
438
|
}
|
|
439
|
+
if (result.sourceCleanup !== undefined) {
|
|
440
|
+
// Infrastructure cleanup has its own terminal, outside the public Failed conversion.
|
|
441
|
+
try {
|
|
442
|
+
const cleanup = result.sourceCleanup();
|
|
443
|
+
await (this.turn === undefined ? cleanup : this.turn.yieldFrameworkPromise(cleanup));
|
|
444
|
+
} catch (error) {
|
|
445
|
+
traceJoinError(this.actor, error, this.coordinator, ZLinkDispatchErrorAction.Drop);
|
|
446
|
+
throw error;
|
|
447
|
+
} finally {
|
|
448
|
+
this.state.endDeferredJoin();
|
|
449
|
+
}
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
420
452
|
if (
|
|
421
453
|
!result.accepted ||
|
|
422
454
|
sourceNodeRid === undefined ||
|
|
423
455
|
result.actor === undefined ||
|
|
424
|
-
|
|
456
|
+
routingIdsEqual(sourceNodeRid, result.actor.nodeRid)
|
|
425
457
|
) {
|
|
426
458
|
await notifyJoinCompletion(this.actor, operationId, result, this.messageSerializers);
|
|
427
459
|
} else {
|
|
@@ -580,7 +612,6 @@ async function notifyJoinFailure(
|
|
|
580
612
|
error: unknown,
|
|
581
613
|
coordinator?: ZLinkActorJoinCoordinator
|
|
582
614
|
): Promise<void> {
|
|
583
|
-
console.error(`actor join failure actor=${actor.context.actorId}`, error);
|
|
584
615
|
const frameworkError =
|
|
585
616
|
error instanceof ZLinkFrameworkException
|
|
586
617
|
? error
|
|
@@ -590,6 +621,20 @@ async function notifyJoinFailure(
|
|
|
590
621
|
false,
|
|
591
622
|
error
|
|
592
623
|
);
|
|
624
|
+
traceJoinError(actor, error, coordinator, ZLinkDispatchErrorAction.ReplyError);
|
|
625
|
+
await actor.onJoinCompleted?.({
|
|
626
|
+
status: 'failed',
|
|
627
|
+
operationId,
|
|
628
|
+
kind: frameworkError.kind
|
|
629
|
+
});
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
function traceJoinError(
|
|
633
|
+
actor: ZLinkActor,
|
|
634
|
+
error: unknown,
|
|
635
|
+
coordinator: ZLinkActorJoinCoordinator | undefined,
|
|
636
|
+
errorAction: ZLinkDispatchErrorAction
|
|
637
|
+
): void {
|
|
593
638
|
// The completion carries only an error kind, so trace the cause on the
|
|
594
639
|
// message flow under the same flow id as the Join that produced it.
|
|
595
640
|
const tracePoint = coordinator?.messageFlow?.()?.begin(ZLinkMessageFlowOutcome.Error);
|
|
@@ -601,13 +646,8 @@ async function notifyJoinFailure(
|
|
|
601
646
|
packetName: 'JoinSpot',
|
|
602
647
|
actorId: actor.context.actorId,
|
|
603
648
|
errorReason: ZLinkDispatchErrorReason.HandlerException,
|
|
604
|
-
errorAction
|
|
649
|
+
errorAction,
|
|
605
650
|
errorType: errorDetails?.errorType,
|
|
606
651
|
errorMessage: errorDetails?.errorMessage
|
|
607
652
|
});
|
|
608
|
-
await actor.onJoinCompleted?.({
|
|
609
|
-
status: 'failed',
|
|
610
|
-
operationId,
|
|
611
|
-
kind: frameworkError.kind
|
|
612
|
-
});
|
|
613
653
|
}
|