@zlink-systems/framework 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.js +16 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +28 -0
- package/dist/runtime/activation-admission.js +57 -0
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +19 -17
- package/dist/runtime/actors/actor-handoff.d.ts +13 -7
- package/dist/runtime/actors/actor-handoff.js +36 -25
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +85 -123
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
- package/dist/runtime/actors/actor-remote-joiner.js +11 -17
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
- package/dist/runtime/actors/deferred-join-completion.js +21 -0
- package/dist/runtime/actors/index.d.ts +10 -8
- package/dist/runtime/actors/index.js +101 -73
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +7 -1
- package/dist/runtime/admission.js +11 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +8 -33
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
- package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -9
- package/dist/runtime/channels/channel-clients.js +68 -60
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -18
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
- package/dist/runtime/channels/channel-runtime-manager.js +4 -12
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
- package/dist/runtime/channels/channel-socket-registry.js +296 -235
- package/dist/runtime/channels/channel-transports.d.ts +11 -20
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +133 -81
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +22 -9
- package/dist/runtime/execution/index.js +107 -37
- package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
- package/dist/runtime/execution/serial-execution-queue.js +99 -26
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/listener-records.d.ts +11 -0
- package/dist/runtime/foundation/listener-records.js +20 -0
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
- package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
- package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
- package/dist/runtime/foundation/service-topology-registry.js +22 -61
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
- package/dist/runtime/host/actor-transfer-runtime.js +210 -256
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +19 -14
- package/dist/runtime/host/index.js +234 -175
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +11 -23
- package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
- package/dist/runtime/host/route-mesh-runtime.js +178 -257
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
- package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
- package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
- package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
- package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +5 -10
- package/dist/runtime/locations/lifecycle.js +4 -33
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +44 -30
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
- package/dist/runtime/locations/spot-location-claims.js +40 -23
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
- package/dist/runtime/spots/index.d.ts +29 -29
- package/dist/runtime/spots/index.js +441 -313
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
- package/dist/runtime/spots/spot-activation-registry.js +27 -60
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
- package/dist/runtime/spots/spot-activation-state.js +4 -17
- package/dist/runtime/spots/spot-activation.d.ts +10 -9
- package/dist/runtime/spots/spot-activation.js +103 -81
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
- package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
- package/dist/runtime/spots/spot-actor-membership.js +44 -53
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-entry-activation.js +9 -21
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +6 -5
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
- package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +10 -37
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
- package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
- package/dist/runtime/spots/spot-serial-executor.js +9 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
- package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
- package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -19
- package/dist/runtime/streams/index.d.ts +15 -14
- package/dist/runtime/streams/index.js +38 -39
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/session-serial-executor.js +2 -2
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +15 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +72 -0
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +45 -39
- package/src/runtime/actors/actor-handoff.ts +55 -45
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +174 -215
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +15 -36
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/actor-source-transfer.ts +5 -18
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +44 -0
- package/src/runtime/actors/index.ts +122 -88
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +13 -2
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +15 -42
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
- package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
- package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
- package/src/runtime/backend/raw-binding-port.ts +14 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -31
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +8 -15
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +369 -262
- package/src/runtime/channels/channel-transports.ts +161 -115
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +175 -106
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +116 -38
- package/src/runtime/execution/serial-execution-queue.ts +179 -34
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/listener-records.ts +21 -0
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
- package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
- package/src/runtime/foundation/service-topology-registry.ts +30 -79
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +266 -418
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +408 -312
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +12 -44
- package/src/runtime/host/route-mesh-runtime.ts +236 -275
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
- package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
- package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +16 -45
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +90 -58
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +54 -26
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
- package/src/runtime/spots/index.ts +687 -437
- package/src/runtime/spots/spot-activation-registry.ts +42 -71
- package/src/runtime/spots/spot-activation-state.ts +4 -16
- package/src/runtime/spots/spot-activation.ts +167 -115
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
- package/src/runtime/spots/spot-actor-membership.ts +107 -75
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -33
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +29 -21
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
- package/src/runtime/spots/spot-outbound.ts +47 -68
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +10 -43
- package/src/runtime/spots/spot-serial-executor.ts +10 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +23 -37
- package/src/runtime/streams/index.ts +102 -88
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/session-serial-executor.ts +2 -2
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
- package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,26 +1,31 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type { ZLinkActorJoinRuntimeResult } from './actor-runtime-contracts';
|
|
1
|
+
import { type RoutingId, type ZLinkActor, type ZLinkActorJoinOperationId, type ZLinkMessageSerializer, type ZLinkSpot, type ZLinkSpotActorJoinResult } from '../../contracts';
|
|
3
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
4
3
|
import type { ZLinkBackendActorRef, ZLinkBackendMeshNode } from '../backend/contracts';
|
|
5
4
|
import { type ZLinkMeshCompletionTable } from '../backend/mesh-completion-table';
|
|
5
|
+
import type { ZLinkLocationLifecycle } from '../locations';
|
|
6
6
|
import type { ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
|
|
7
|
+
import type { ZLinkActorJoinRelocation } from './actor-join-relocation';
|
|
8
|
+
import type { ZLinkActorJoinRuntimeResult } from './actor-runtime-contracts';
|
|
7
9
|
import { ZLinkActorRuntimeState } from './actor-runtime-state';
|
|
8
10
|
import type { ZLinkPostCommitActorBinder } from './post-commit-actor-binder';
|
|
9
|
-
import type { ZLinkPostCommitActorLocation } from './post-commit-actor-location';
|
|
10
|
-
import type { ZLinkActorJoinRelocation } from './actor-join-relocation';
|
|
11
11
|
export interface ZLinkLocalNativeActorJoinOptions {
|
|
12
|
-
readonly
|
|
12
|
+
readonly locationLifecycle?: ZLinkLocationLifecycle;
|
|
13
|
+
readonly localSpotJoin?: (spotId: RoutingId, actor: ZLinkActor, request: Message, commit: (spot: ZLinkSpot) => Promise<void>, signal?: AbortSignal, leaveSource?: () => Promise<void>, contentType?: string) => Promise<ZLinkSpotActorJoinResult>;
|
|
14
|
+
readonly localEntryJoin?: (actor: ZLinkActor, signal?: AbortSignal) => Promise<void>;
|
|
15
|
+
readonly localSourceLeave?: (actor: ZLinkActor, spotId: RoutingId | undefined, signal?: AbortSignal) => Promise<void>;
|
|
16
|
+
readonly reportSourceLeaveError: (error: unknown) => void;
|
|
13
17
|
readonly postCommitBinder?: ZLinkPostCommitActorBinder;
|
|
14
18
|
readonly completionTableProvider: () => ZLinkMeshCompletionTable | undefined;
|
|
15
19
|
readonly actorJoinRelocation?: ZLinkActorJoinRelocation;
|
|
16
20
|
readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
|
|
17
21
|
}
|
|
18
|
-
/**
|
|
22
|
+
/** Selects local membership commits or remote Actor relocation. */
|
|
19
23
|
export declare class ZLinkLocalNativeActorJoin {
|
|
20
24
|
private readonly options;
|
|
21
25
|
constructor(options: ZLinkLocalNativeActorJoinOptions);
|
|
22
26
|
joinSpot(node: ZLinkBackendMeshNode, actor: ZLinkActor, state: ZLinkActorRuntimeState, actorRef: ZLinkBackendActorRef, spotId: RoutingId, spotRouteTarget: ZLinkSpotRouteTarget | undefined, request: Message, timeoutMs: number | undefined, signal: AbortSignal | undefined, completionOperationId?: ZLinkActorJoinOperationId): Promise<ZLinkActorJoinRuntimeResult<Message>>;
|
|
23
27
|
joinEntrySpot(node: ZLinkBackendMeshNode, actor: ZLinkActor, state: ZLinkActorRuntimeState, actorRef: ZLinkBackendActorRef, nodeRid: RoutingId, spotRouteTarget: ZLinkSpotRouteTarget | undefined, request: Message, timeoutMs: number | undefined, signal: AbortSignal | undefined, completionOperationId?: ZLinkActorJoinOperationId): Promise<ZLinkActorJoinRuntimeResult<Message>>;
|
|
28
|
+
private joinLocal;
|
|
24
29
|
private waitForJoinCompletion;
|
|
25
30
|
private relocateRemoteActorJoin;
|
|
26
31
|
private requireCompletions;
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkLocalNativeActorJoin = void 0;
|
|
4
|
-
const
|
|
4
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
5
5
|
const node_crypto_1 = require("node:crypto");
|
|
6
|
-
const runtime_values_1 = require("../backend/runtime-values");
|
|
7
6
|
const contracts_1 = require("../../contracts");
|
|
8
|
-
const mesh_completion_table_1 = require("../backend/mesh-completion-table");
|
|
9
7
|
const abort_1 = require("../abort");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const routing_id_2 = require("../routing-id");
|
|
8
|
+
const mesh_completion_table_1 = require("../backend/mesh-completion-table");
|
|
9
|
+
const runtime_values_1 = require("../backend/runtime-values");
|
|
13
10
|
const operation_identity_1 = require("../foundation/operation-identity");
|
|
11
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
14
12
|
const payload_codec_1 = require("../messaging/payload-codec");
|
|
13
|
+
const routing_id_1 = require("../routing-id");
|
|
14
|
+
const actor_remote_wire_1 = require("./actor-remote-wire");
|
|
15
|
+
const actor_runtime_state_1 = require("./actor-runtime-state");
|
|
16
|
+
const LOCAL_JOIN_RESOLUTION_TIMEOUT_MS = 5_000;
|
|
17
|
+
const LOCAL_JOIN_POLL_INTERVAL_MS = 10;
|
|
15
18
|
const ZLINK_FRAMEWORK_ACTOR_JOIN_PACKET_NAME = 'ZLinkFrameworkActorJoinRequest';
|
|
16
|
-
/**
|
|
19
|
+
/** Selects local membership commits or remote Actor relocation. */
|
|
17
20
|
class ZLinkLocalNativeActorJoin {
|
|
18
21
|
options;
|
|
19
22
|
constructor(options) {
|
|
@@ -22,119 +25,93 @@ class ZLinkLocalNativeActorJoin {
|
|
|
22
25
|
async joinSpot(node, actor, state, actorRef, spotId, spotRouteTarget, request, timeoutMs, signal, completionOperationId) {
|
|
23
26
|
if (signal?.aborted === true)
|
|
24
27
|
throw (0, abort_1.createAbortError)();
|
|
25
|
-
const completions = this.requireCompletions();
|
|
26
28
|
const target = requireUserSpotRoute(spotRouteTarget, spotId);
|
|
27
|
-
const
|
|
28
|
-
const remote = !(0, routing_id_2.routingIdsEqual)((0, actor_runtime_state_1.toFrameworkRoutingId)(node.status().routingId), target.targetNodeRid);
|
|
29
|
+
const remote = !(0, routing_id_1.routingIdsEqual)((0, actor_runtime_state_1.toFrameworkRoutingId)(node.status().routingId), target.targetNodeRid);
|
|
29
30
|
if (remote) {
|
|
30
31
|
return await this.relocateRemoteActorJoin(node, actor, state, actorRef, target, request, timeoutMs, signal, completionOperationId, false);
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
-
const control = completion.kindData;
|
|
34
|
-
if (control?.kind !== 'actorJoinCompletion' || control.actor === null) {
|
|
35
|
-
(0, mesh_completion_table_1.closeMeshCompletion)(completion);
|
|
36
|
-
const message = `Actor join failed for '${actor.context.actorId}' with result '${completion.terminalResult}' and errno '${completion.failureErrno}'.`;
|
|
37
|
-
// Classify the (terminal, fine) pair instead of collapsing every non-OK
|
|
38
|
-
// or malformed join completion to NotFound (spec 32-framework-error-model:
|
|
39
|
-
// 83-118). An OK terminal that carries no join control is a protocol
|
|
40
|
-
// violation, not a missing route.
|
|
41
|
-
throw completion.terminalResult !== 0 || completion.failureErrno !== 0
|
|
42
|
-
? (0, framework_errors_internal_1.wireReplyFailureException)(completion.terminalResult, completion.failureErrno, message)
|
|
43
|
-
: (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, message);
|
|
44
|
-
}
|
|
45
|
-
if (control.joinResult !== 0) {
|
|
46
|
-
try {
|
|
47
|
-
return {
|
|
48
|
-
accepted: false,
|
|
49
|
-
actor: (0, actor_runtime_state_1.toFrameworkActorRef)(control.actor, actorMeshName),
|
|
50
|
-
reply: completion.parts[0]
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
finally {
|
|
54
|
-
disposeParts(completion.parts.slice(1));
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (completion.terminalResult !== 0 || completion.failureErrno !== 0) {
|
|
58
|
-
(0, mesh_completion_table_1.closeMeshCompletion)(completion);
|
|
59
|
-
throw (0, framework_errors_internal_1.wireReplyFailureException)(completion.terminalResult, completion.failureErrno, `Actor join failed for '${actor.context.actorId}' with result '${completion.terminalResult}' and errno '${completion.failureErrno}'.`);
|
|
60
|
-
}
|
|
61
|
-
state.setNativeActorRef(control.actor);
|
|
62
|
-
state.setJoinedSpot((0, actor_runtime_state_1.toFrameworkRoutingId)(control.location.spotId ?? target.spotId), undefined, control.location.membershipEpoch, control.location.spotGeneration);
|
|
63
|
-
// The Session owner relays from the verified Ready authority snapshot;
|
|
64
|
-
// membership coordinates alone cannot recreate a User/Instance fence.
|
|
65
|
-
state.setRemoteActorPacketTarget(target.spotKind === contracts_1.ZLinkSpotKind.Entry ? undefined : target);
|
|
66
|
-
if (state.actorType !== undefined) {
|
|
67
|
-
this.options.postCommitLocation?.joinedEventually(state.actorType, actor.context.actorId, spotRouteTarget?.routerChannelId ?? '', (0, actor_runtime_state_1.toFrameworkRoutingId)(control.location.spotId ?? target.spotId), control.location.spotGeneration, control.location.membershipEpoch, node.status().lifecycleGeneration);
|
|
68
|
-
}
|
|
69
|
-
await this.options.postCommitBinder?.bind((0, actor_runtime_state_1.toFrameworkActorRef)(control.actor, actorMeshName));
|
|
70
|
-
try {
|
|
71
|
-
return {
|
|
72
|
-
accepted: true,
|
|
73
|
-
actor: (0, actor_runtime_state_1.toFrameworkActorRef)(control.actor, actorMeshName),
|
|
74
|
-
reply: completion.parts[0]
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
finally {
|
|
78
|
-
disposeParts(completion.parts.slice(1));
|
|
79
|
-
}
|
|
33
|
+
return await this.joinLocal(node, actor, state, actorRef, target, target.spotId, request, signal);
|
|
80
34
|
}
|
|
81
35
|
async joinEntrySpot(node, actor, state, actorRef, nodeRid, spotRouteTarget, request, timeoutMs, signal, completionOperationId) {
|
|
82
36
|
if (signal?.aborted === true)
|
|
83
37
|
throw (0, abort_1.createAbortError)();
|
|
84
|
-
const completions = this.requireCompletions();
|
|
85
|
-
const actorMeshName = runtimeActorMeshName(actor, state, '');
|
|
86
38
|
const targetNodeRid = spotRouteTarget?.targetNodeRid ?? nodeRid;
|
|
87
39
|
const remote = spotRouteTarget !== undefined &&
|
|
88
|
-
(!(0,
|
|
89
|
-
!(0,
|
|
40
|
+
(!(0, routing_id_1.routingIdsEqual)((0, actor_runtime_state_1.toFrameworkRoutingId)(node.status().routingId), spotRouteTarget.targetNodeRid) ||
|
|
41
|
+
!(0, routing_id_1.routingIdsEqual)((0, actor_runtime_state_1.toFrameworkRoutingId)(actorRef.nodeRid), spotRouteTarget.targetNodeRid));
|
|
90
42
|
if (remote) {
|
|
91
43
|
return await this.relocateRemoteActorJoin(node, actor, state, actorRef, spotRouteTarget, request, timeoutMs, signal, completionOperationId, true);
|
|
92
44
|
}
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
(0,
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
45
|
+
const target = {
|
|
46
|
+
routerChannelId: spotRouteTarget?.routerChannelId ?? runtimeActorMeshName(actor, state, ''),
|
|
47
|
+
targetNodeRid,
|
|
48
|
+
spotId: (0, actor_runtime_state_1.toFrameworkRoutingId)(node.entrySpot().routingId),
|
|
49
|
+
spotKind: contracts_1.ZLinkSpotKind.Entry,
|
|
50
|
+
targetSpotGeneration: node.entrySpot().status().lifecycleGeneration
|
|
51
|
+
};
|
|
52
|
+
return await this.joinLocal(node, actor, state, actorRef, target, spotRouteTarget?.spotId ?? target.spotId, request, signal);
|
|
53
|
+
}
|
|
54
|
+
async joinLocal(node, actor, state, actorRef, target, storeSpotId, request, signal) {
|
|
55
|
+
const location = node.actorLookup(actor.context.actorId);
|
|
56
|
+
const meshName = runtimeActorMeshName(actor, state, target.routerChannelId);
|
|
57
|
+
if ((0, routing_id_1.routingIdsEqual)((0, actor_runtime_state_1.toFrameworkRoutingId)(location.spotId), target.spotId)) {
|
|
58
|
+
return { accepted: true, actor: (0, actor_runtime_state_1.toFrameworkActorRef)(actorRef, meshName) };
|
|
104
59
|
}
|
|
105
|
-
if (
|
|
60
|
+
if (state.actorType === undefined)
|
|
61
|
+
throw new Error('Local Actor Join requires a registered Actor type.');
|
|
62
|
+
const actorType = state.actorType;
|
|
63
|
+
const previousSpotId = state.spotId;
|
|
64
|
+
const spotGeneration = target.targetSpotGeneration;
|
|
65
|
+
if (spotGeneration === undefined ||
|
|
66
|
+
spotGeneration <= 0n ||
|
|
67
|
+
node.restoreActorAuthority === undefined) {
|
|
68
|
+
throw new Error('Local Actor Join requires a valid target generation and stateful membership runtime.');
|
|
69
|
+
}
|
|
70
|
+
const membershipEpoch = location.membershipEpoch + 1n;
|
|
71
|
+
const commit = async (spot) => {
|
|
72
|
+
(0, abort_1.throwIfAborted)(signal);
|
|
73
|
+
if (target.spotKind === contracts_1.ZLinkSpotKind.Entry) {
|
|
74
|
+
await this.options.locationLifecycle?.notifyActorLeftSpot(actorType, actor.context.actorId, storeSpotId, spotGeneration, membershipEpoch, node.status().lifecycleGeneration);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
await this.options.locationLifecycle?.notifyActorJoinedSpot(actorType, actor.context.actorId, meshName, storeSpotId, spotGeneration, membershipEpoch, node.status().lifecycleGeneration);
|
|
78
|
+
}
|
|
79
|
+
const committedActor = node.restoreActorAuthority(actor.context.actorId, actorType, actorRef.generation, state.locationGeneration ?? actorRef.generation, target.spotKind === contracts_1.ZLinkSpotKind.Entry ? undefined : String(target.spotId), spotGeneration, membershipEpoch);
|
|
80
|
+
state.setNativeActorRef(committedActor);
|
|
81
|
+
if (target.spotKind === contracts_1.ZLinkSpotKind.Entry)
|
|
82
|
+
state.clearJoinedSpot();
|
|
83
|
+
else
|
|
84
|
+
state.setJoinedSpot(target.spotId, spot, membershipEpoch, spotGeneration);
|
|
85
|
+
state.setRemoteActorPacketTarget(target.spotKind === contracts_1.ZLinkSpotKind.Entry ? undefined : target);
|
|
86
|
+
};
|
|
87
|
+
const leaveSource = async () => {
|
|
88
|
+
void this.options.localSourceLeave?.(actor, previousSpotId, signal).catch((error) => {
|
|
89
|
+
this.options.reportSourceLeaveError(error);
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
let response;
|
|
93
|
+
if (target.spotKind === contracts_1.ZLinkSpotKind.Entry) {
|
|
94
|
+
if (this.options.localEntryJoin === undefined)
|
|
95
|
+
throw new Error('Local Entry Actor Join runtime is not configured.');
|
|
96
|
+
await commit();
|
|
106
97
|
try {
|
|
107
|
-
|
|
108
|
-
accepted: false,
|
|
109
|
-
actor: (0, actor_runtime_state_1.toFrameworkActorRef)(control.actor, actorMeshName),
|
|
110
|
-
reply: completion.parts[0]
|
|
111
|
-
};
|
|
98
|
+
await this.options.localEntryJoin(actor, signal);
|
|
112
99
|
}
|
|
113
100
|
finally {
|
|
114
|
-
|
|
101
|
+
await leaveSource();
|
|
115
102
|
}
|
|
103
|
+
response = { accepted: true };
|
|
116
104
|
}
|
|
117
|
-
|
|
118
|
-
(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
state.setNativeActorRef(control.actor);
|
|
122
|
-
state.clearJoinedSpot();
|
|
123
|
-
state.setRemoteActorPacketTarget(undefined);
|
|
124
|
-
if (state.actorType !== undefined) {
|
|
125
|
-
this.options.postCommitLocation?.leftEventually(state.actorType, actor.context.actorId, (0, actor_runtime_state_1.toFrameworkRoutingId)(control.location.spotId ?? spotRouteTarget?.spotId ?? nodeRid), control.location.spotGeneration, control.location.membershipEpoch, node.status().lifecycleGeneration);
|
|
126
|
-
}
|
|
127
|
-
await this.options.postCommitBinder?.bind((0, actor_runtime_state_1.toFrameworkActorRef)(control.actor, actorMeshName));
|
|
128
|
-
try {
|
|
129
|
-
return {
|
|
130
|
-
accepted: true,
|
|
131
|
-
actor: (0, actor_runtime_state_1.toFrameworkActorRef)(control.actor, actorMeshName),
|
|
132
|
-
reply: completion.parts[0]
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
finally {
|
|
136
|
-
disposeParts(completion.parts.slice(1));
|
|
105
|
+
else {
|
|
106
|
+
if (this.options.localSpotJoin === undefined)
|
|
107
|
+
throw new Error('Local Spot Actor Join runtime is not configured.');
|
|
108
|
+
response = await this.options.localSpotJoin(target.spotId, actor, request, commit, signal, leaveSource, (0, payload_codec_1.frameworkPayloadContentType)(request));
|
|
137
109
|
}
|
|
110
|
+
return {
|
|
111
|
+
accepted: response.accepted,
|
|
112
|
+
actor: (0, actor_runtime_state_1.toFrameworkActorRef)(state.nativeActorRef ?? actorRef, meshName),
|
|
113
|
+
reply: response.reply
|
|
114
|
+
};
|
|
138
115
|
}
|
|
139
116
|
async waitForJoinCompletion(submit, completions, timeoutMs, signal) {
|
|
140
117
|
// The operation ID identifies one Core request. Once it is submitted, a
|
|
@@ -193,7 +170,7 @@ class ZLinkLocalNativeActorJoin {
|
|
|
193
170
|
// (spec 32-framework-error-model:83-118); an OK terminal with no join
|
|
194
171
|
// control is a protocol violation.
|
|
195
172
|
throw admission.terminalResult !== 0 || admission.failureErrno !== 0
|
|
196
|
-
?
|
|
173
|
+
? (0, framework_errors_internal_1.wireReplyFailureException)(admission.terminalResult, admission.failureErrno, message)
|
|
197
174
|
: (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, message);
|
|
198
175
|
}
|
|
199
176
|
if (control.joinResult !== 0) {
|
|
@@ -210,7 +187,7 @@ class ZLinkLocalNativeActorJoin {
|
|
|
210
187
|
}
|
|
211
188
|
if (admission.terminalResult !== 0 || admission.failureErrno !== 0) {
|
|
212
189
|
(0, mesh_completion_table_1.closeMeshCompletion)(admission);
|
|
213
|
-
throw
|
|
190
|
+
throw (0, framework_errors_internal_1.wireReplyFailureException)(admission.terminalResult, admission.failureErrno, `Actor admission failed for '${actor.context.actorId}' with result '${admission.terminalResult}' and errno '${admission.failureErrno}'.`);
|
|
214
191
|
}
|
|
215
192
|
disposeParts(admission.parts.slice(1));
|
|
216
193
|
if (control.canonicalHandoffId !== undefined) {
|
|
@@ -253,7 +230,7 @@ class ZLinkLocalNativeActorJoin {
|
|
|
253
230
|
...(completionOperationId === undefined
|
|
254
231
|
? {}
|
|
255
232
|
: {
|
|
256
|
-
replyContentType: control.replyContentType ??
|
|
233
|
+
replyContentType: control.replyContentType ?? stream_wire_1.ZlinkStreamContentType.Raw
|
|
257
234
|
}),
|
|
258
235
|
reply: completionOperationId === undefined
|
|
259
236
|
? Buffer.alloc(0)
|
|
@@ -328,7 +305,7 @@ function legacyRemoteActorJoinPayload(actor, state, actorRef, target, request, t
|
|
|
328
305
|
// canonical admission; it never substitutes target-Spot values as an Actor
|
|
329
306
|
// authority fence.
|
|
330
307
|
const payload = Buffer.from(JSON.stringify({
|
|
331
|
-
packetName:
|
|
308
|
+
packetName: actor_remote_wire_1.ZLINK_REMOTE_ACTOR_JOIN_PACKET,
|
|
332
309
|
phase: 'admission',
|
|
333
310
|
transferId,
|
|
334
311
|
spotId: String(target.spotId),
|
|
@@ -343,7 +320,7 @@ function legacyRemoteActorJoinPayload(actor, state, actorRef, target, request, t
|
|
|
343
320
|
}));
|
|
344
321
|
return {
|
|
345
322
|
packetName: ZLINK_FRAMEWORK_ACTOR_JOIN_PACKET_NAME,
|
|
346
|
-
contentType:
|
|
323
|
+
contentType: stream_wire_1.ZlinkStreamContentType.Json,
|
|
347
324
|
payload,
|
|
348
325
|
// Older in-process MeshNode adapters consume the fallback as a Message.
|
|
349
326
|
// Keep that structural view without changing the typed service payload.
|
|
@@ -359,29 +336,14 @@ function canonicalHandoffRelocationId(handoffId) {
|
|
|
359
336
|
return (`${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}` +
|
|
360
337
|
`-${hex.slice(16, 20)}-${hex.slice(20)}`);
|
|
361
338
|
}
|
|
362
|
-
function remoteActorJoinFailureException(node, target, terminalResult, failureErrno, message) {
|
|
363
|
-
const failure = (0, framework_errors_internal_1.wireReplyFailureException)(terminalResult, failureErrno, message);
|
|
364
|
-
const targetGeneration = target.targetNodeGeneration;
|
|
365
|
-
if (failure.kind === contracts_1.ZLinkFrameworkErrorKind.DeadlineExceeded &&
|
|
366
|
-
targetGeneration !== undefined &&
|
|
367
|
-
targetGeneration !== 0n &&
|
|
368
|
-
!node
|
|
369
|
-
.peers()
|
|
370
|
-
.some((peer) => peer.state === 3 &&
|
|
371
|
-
peer.routingId !== null &&
|
|
372
|
-
(0, routing_id_2.routingIdsEqual)(peer.routingId, target.targetNodeRid) &&
|
|
373
|
-
peer.lifecycleGeneration === targetGeneration)) {
|
|
374
|
-
return (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, 'wire Actor join target RouteMesh peer became unavailable');
|
|
375
|
-
}
|
|
376
|
-
return failure;
|
|
377
|
-
}
|
|
378
339
|
function runtimeActorMeshName(actor, state, fallback) {
|
|
379
340
|
const context = actor.context;
|
|
380
341
|
const stateMeshName = state?.meshName;
|
|
381
342
|
return context?.meshName ?? stateMeshName ?? fallback;
|
|
382
343
|
}
|
|
383
344
|
async function submitJoinWhenConnected(submit, timeoutMs, signal) {
|
|
384
|
-
const deadline = performance.now() +
|
|
345
|
+
const deadline = performance.now() +
|
|
346
|
+
Math.min(timeoutMs ?? LOCAL_JOIN_RESOLUTION_TIMEOUT_MS, LOCAL_JOIN_RESOLUTION_TIMEOUT_MS);
|
|
385
347
|
for (;;) {
|
|
386
348
|
(0, abort_1.throwIfAborted)(signal);
|
|
387
349
|
try {
|
|
@@ -391,7 +353,7 @@ async function submitJoinWhenConnected(submit, timeoutMs, signal) {
|
|
|
391
353
|
if (!(0, runtime_values_1.isBackendNotConnectedError)(error) || performance.now() >= deadline) {
|
|
392
354
|
throw error;
|
|
393
355
|
}
|
|
394
|
-
await new Promise((resolve) => setTimeout(resolve,
|
|
356
|
+
await new Promise((resolve) => setTimeout(resolve, LOCAL_JOIN_POLL_INTERVAL_MS));
|
|
395
357
|
}
|
|
396
358
|
}
|
|
397
359
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.lookupNativeActorRef = lookupNativeActorRef;
|
|
4
|
+
const zlink_1 = require("@zlink-systems/zlink");
|
|
4
5
|
function lookupNativeActorRef(node, actorId) {
|
|
5
6
|
try {
|
|
6
7
|
const location = node.actorLookup(actorId);
|
|
@@ -15,16 +16,9 @@ function lookupNativeActorRef(node, actorId) {
|
|
|
15
16
|
};
|
|
16
17
|
}
|
|
17
18
|
catch (error) {
|
|
18
|
-
if (
|
|
19
|
+
if (error instanceof zlink_1.ConfigError && error.result === zlink_1.ConfigResult.NotFound) {
|
|
19
20
|
return undefined;
|
|
20
21
|
}
|
|
21
22
|
throw error;
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
|
-
function nativeErrno(error) {
|
|
25
|
-
if (typeof error !== 'object' || error === null || !('nativeErrno' in error)) {
|
|
26
|
-
return undefined;
|
|
27
|
-
}
|
|
28
|
-
const value = error.nativeErrno;
|
|
29
|
-
return typeof value === 'number' ? value : undefined;
|
|
30
|
-
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { ZLinkSpotKind } from '../../contracts';
|
|
3
|
-
import type { ZLinkRemoteActorPacketTarget } from './actor-runtime-state';
|
|
1
|
+
import { type ActorRef, type RoutingId, ZLinkSpotKind } from '../../contracts';
|
|
4
2
|
import { type ZLinkActorMessageFollowContext } from './actor-message-follow-context';
|
|
3
|
+
import type { ZLinkRemoteActorPacketTarget } from './actor-runtime-state';
|
|
5
4
|
export declare const ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET = "__zlink.actor.packet.relay";
|
|
6
5
|
export declare const ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET = "zlink.framework.actor.session_disconnected";
|
|
7
6
|
export declare const ZLINK_REMOTE_ACTOR_SESSION_BIND_PACKET = "framework.internal.actor-session-bind";
|
|
@@ -21,6 +20,7 @@ export declare function encodeRemoteActorPacketRelayPayload(input: {
|
|
|
21
20
|
readonly header: Uint8Array;
|
|
22
21
|
readonly payload: Uint8Array;
|
|
23
22
|
readonly bindingActorRef?: ActorRef;
|
|
23
|
+
readonly bindingGeneration?: bigint;
|
|
24
24
|
/** The actor reference used to preserve relocation context at the target Spot. */
|
|
25
25
|
readonly actorRef?: ActorRef;
|
|
26
26
|
readonly returnResponse?: boolean;
|
|
@@ -9,6 +9,7 @@ exports.encodeRemoteActorPacketTarget = encodeRemoteActorPacketTarget;
|
|
|
9
9
|
exports.decodeRemoteActorPacketTarget = decodeRemoteActorPacketTarget;
|
|
10
10
|
exports.decodeRemoteActorPacketRelayPayload = decodeRemoteActorPacketRelayPayload;
|
|
11
11
|
const contracts_1 = require("../../contracts");
|
|
12
|
+
const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
|
|
12
13
|
const routing_id_1 = require("../routing-id");
|
|
13
14
|
const actor_message_follow_context_1 = require("./actor-message-follow-context");
|
|
14
15
|
exports.ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET = '__zlink.actor.packet.relay';
|
|
@@ -47,7 +48,8 @@ function encodeRemoteActorPacketRelayPayload(input) {
|
|
|
47
48
|
? undefined
|
|
48
49
|
: (0, routing_id_1.routingIdWireHex)(input.bindingActorRef.nodeRid),
|
|
49
50
|
bindingActorGeneration: input.bindingActorRef?.objectGeneration.toString(),
|
|
50
|
-
bindingGeneration: input.
|
|
51
|
+
bindingGeneration: input.bindingGeneration?.toString() ??
|
|
52
|
+
input.bindingActorRef?.bindingGeneration?.toString(),
|
|
51
53
|
returnResponse: input.returnResponse,
|
|
52
54
|
messageFollowContext: input.messageFollowContext,
|
|
53
55
|
header: Buffer.from(input.header).toString('base64'),
|
|
@@ -100,8 +102,8 @@ function decodeRemoteActorPacketTarget(value) {
|
|
|
100
102
|
}
|
|
101
103
|
function requireSpotId(value) {
|
|
102
104
|
const bytes = Buffer.byteLength(value, 'utf8');
|
|
103
|
-
if (bytes < 1 || bytes >
|
|
104
|
-
throw new Error(
|
|
105
|
+
if (bytes < 1 || bytes > CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES) {
|
|
106
|
+
throw new Error(`Actor packet target SpotId must contain 1..${CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes.`);
|
|
105
107
|
}
|
|
106
108
|
return value;
|
|
107
109
|
}
|
|
@@ -7,7 +7,7 @@ import type { ZLinkActorJoinCoordinator, ZLinkActorJoinRuntimeResult } from './a
|
|
|
7
7
|
import type { ZLinkActorSourceTransfer } from './actor-source-transfer';
|
|
8
8
|
import { ZLinkActorRuntimeState } from './actor-runtime-state';
|
|
9
9
|
import type { ZLinkActorJoinRelocation } from './actor-join-relocation';
|
|
10
|
-
export interface ZLinkActorNativeJoinCoordinatorOptions {
|
|
10
|
+
export interface ZLinkActorNativeJoinCoordinatorOptions extends Pick<import('./actor-local-native-join').ZLinkLocalNativeActorJoinOptions, 'localSpotJoin' | 'localEntryJoin' | 'localSourceLeave' | 'reportSourceLeaveError'> {
|
|
11
11
|
readonly messageFlow?: () => import('../diagnostics/message-flow').ZLinkMessageFlowTracer | undefined;
|
|
12
12
|
readonly node: ZLinkBackendMeshNode | (() => ZLinkBackendMeshNode);
|
|
13
13
|
readonly completionTableProvider: () => ZLinkMeshCompletionTable | undefined;
|
|
@@ -28,8 +28,8 @@ export declare class ZLinkActorNativeJoinCoordinator implements ZLinkActorJoinCo
|
|
|
28
28
|
private readonly localJoin;
|
|
29
29
|
messageFlow(): import('../diagnostics/message-flow').ZLinkMessageFlowTracer | undefined;
|
|
30
30
|
constructor(options: ZLinkActorNativeJoinCoordinatorOptions);
|
|
31
|
-
beginDeferredJoin(actor: ZLinkActor, state: ZLinkActorRuntimeState
|
|
32
|
-
abortDeferredJoin(actor: ZLinkActor, state: ZLinkActorRuntimeState
|
|
31
|
+
beginDeferredJoin(actor: ZLinkActor, state: ZLinkActorRuntimeState): void;
|
|
32
|
+
abortDeferredJoin(actor: ZLinkActor, state: ZLinkActorRuntimeState): Promise<void>;
|
|
33
33
|
joinSpot(actor: ZLinkActor, state: ZLinkActorRuntimeState, spotId: RoutingId, request: Message, timeoutMs: number | undefined, signal: AbortSignal | undefined, completionOperationId?: import('../../contracts').ZLinkActorJoinOperationId): Promise<ZLinkActorJoinRuntimeResult<Message>>;
|
|
34
34
|
joinEntrySpot(actor: ZLinkActor, state: ZLinkActorRuntimeState, nodeRid: RoutingId | undefined, request: Message, timeoutMs: number | undefined, signal: AbortSignal | undefined, completionOperationId?: import('../../contracts').ZLinkActorJoinOperationId): Promise<ZLinkActorJoinRuntimeResult<Message>>;
|
|
35
35
|
private withDeferredJoinFinalizer;
|
|
@@ -4,10 +4,8 @@ exports.ZLinkActorNativeJoinCoordinator = void 0;
|
|
|
4
4
|
const abort_1 = require("../abort");
|
|
5
5
|
const actor_runtime_state_1 = require("./actor-runtime-state");
|
|
6
6
|
const actor_native_lookup_1 = require("./actor-native-lookup");
|
|
7
|
-
const post_commit_actor_location_1 = require("./post-commit-actor-location");
|
|
8
7
|
const actor_local_native_join_1 = require("./actor-local-native-join");
|
|
9
8
|
const post_commit_actor_binder_1 = require("./post-commit-actor-binder");
|
|
10
|
-
const operation_identity_1 = require("../foundation/operation-identity");
|
|
11
9
|
/** Selects local native join or remote two-phase transfer for each destination. */
|
|
12
10
|
class ZLinkActorNativeJoinCoordinator {
|
|
13
11
|
options;
|
|
@@ -17,15 +15,12 @@ class ZLinkActorNativeJoinCoordinator {
|
|
|
17
15
|
}
|
|
18
16
|
constructor(options) {
|
|
19
17
|
this.options = options;
|
|
20
|
-
const postCommitLocation = options.locationLifecycle === undefined
|
|
21
|
-
? undefined
|
|
22
|
-
: new post_commit_actor_location_1.ZLinkPostCommitActorLocation({
|
|
23
|
-
lifecycle: options.locationLifecycle,
|
|
24
|
-
reportError: options.postCommitErrorReporter,
|
|
25
|
-
signal: options.shutdownSignal
|
|
26
|
-
});
|
|
27
18
|
this.localJoin = new actor_local_native_join_1.ZLinkLocalNativeActorJoin({
|
|
28
|
-
|
|
19
|
+
locationLifecycle: options.locationLifecycle,
|
|
20
|
+
localSpotJoin: options.localSpotJoin,
|
|
21
|
+
localEntryJoin: options.localEntryJoin,
|
|
22
|
+
localSourceLeave: options.localSourceLeave,
|
|
23
|
+
reportSourceLeaveError: options.reportSourceLeaveError,
|
|
29
24
|
postCommitBinder: options.remoteActorBinder === undefined
|
|
30
25
|
? undefined
|
|
31
26
|
: new post_commit_actor_binder_1.ZLinkPostCommitActorBinder({
|
|
@@ -38,11 +33,11 @@ class ZLinkActorNativeJoinCoordinator {
|
|
|
38
33
|
messageSerializers: options.messageSerializers
|
|
39
34
|
});
|
|
40
35
|
}
|
|
41
|
-
beginDeferredJoin(actor, state
|
|
42
|
-
this.options.sourceTransfer?.beginDeferredActorHandoff?.(actor, state
|
|
36
|
+
beginDeferredJoin(actor, state) {
|
|
37
|
+
this.options.sourceTransfer?.beginDeferredActorHandoff?.(actor, state);
|
|
43
38
|
}
|
|
44
|
-
async abortDeferredJoin(actor, state
|
|
45
|
-
await this.options.sourceTransfer?.cancelDeferredActorHandoff?.(actor, state
|
|
39
|
+
async abortDeferredJoin(actor, state) {
|
|
40
|
+
await this.options.sourceTransfer?.cancelDeferredActorHandoff?.(actor, state);
|
|
46
41
|
}
|
|
47
42
|
async joinSpot(actor, state, spotId, request, timeoutMs, signal, completionOperationId) {
|
|
48
43
|
(0, abort_1.throwIfAborted)(signal);
|
|
@@ -85,15 +80,14 @@ class ZLinkActorNativeJoinCoordinator {
|
|
|
85
80
|
withDeferredJoinFinalizer(actor, state, target, result, operationId) {
|
|
86
81
|
if (operationId === undefined || this.options.sourceTransfer === undefined)
|
|
87
82
|
return result;
|
|
88
|
-
const key = (0, operation_identity_1.operationIdentityKey)(operationId);
|
|
89
83
|
return {
|
|
90
84
|
...result,
|
|
91
85
|
finalizeDeferredJoin: async () => {
|
|
92
86
|
if (result.accepted && result.actor !== undefined && target !== undefined) {
|
|
93
|
-
await this.options.sourceTransfer.completeDeferredActorHandoff?.(actor, target, result.actor
|
|
87
|
+
await this.options.sourceTransfer.completeDeferredActorHandoff?.(actor, target, result.actor);
|
|
94
88
|
}
|
|
95
89
|
else {
|
|
96
|
-
await this.options.sourceTransfer.cancelDeferredActorHandoff?.(actor, state
|
|
90
|
+
await this.options.sourceTransfer.cancelDeferredActorHandoff?.(actor, state);
|
|
97
91
|
}
|
|
98
92
|
}
|
|
99
93
|
};
|
|
@@ -4,6 +4,8 @@ exports.REMOTE_ACTOR_JOIN_ABORT = exports.REMOTE_ACTOR_JOIN_COMMIT = exports.REM
|
|
|
4
4
|
exports.decodeRemoteActorSourceLeaveTerminal = decodeRemoteActorSourceLeaveTerminal;
|
|
5
5
|
exports.decodeRemoteActorJoinPayload = decodeRemoteActorJoinPayload;
|
|
6
6
|
exports.decodeWireRoutingId = decodeWireRoutingId;
|
|
7
|
+
const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
|
|
8
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
7
9
|
const routing_id_1 = require("../routing-id");
|
|
8
10
|
exports.ZLINK_REMOTE_ACTOR_JOIN_PACKET = '__zlink.actor.join_spot.request';
|
|
9
11
|
exports.ZLINK_REMOTE_ACTOR_SOURCE_LEAVE_TERMINAL = '__zlink.actor.source_leave.terminal';
|
|
@@ -56,7 +58,7 @@ function decodeRemoteActorJoinPayload(payload) {
|
|
|
56
58
|
boundSessionTargetNodeRid: optionalRoutingId(payload, 'boundSessionTargetNodeRid', 'boundSessionTargetNodeRidHex'),
|
|
57
59
|
boundSessionSpotId: optionalSpotId(payload, 'boundSessionSpotId'),
|
|
58
60
|
request: payload.request,
|
|
59
|
-
requestContentType: optionalString(payload, 'requestContentType') ??
|
|
61
|
+
requestContentType: optionalString(payload, 'requestContentType') ?? stream_wire_1.ZlinkStreamContentType.Json
|
|
60
62
|
};
|
|
61
63
|
}
|
|
62
64
|
function decodeWireRoutingId(text, hex) {
|
|
@@ -76,8 +78,8 @@ function optionalSpotId(value, key) {
|
|
|
76
78
|
}
|
|
77
79
|
function requireSpotId(value) {
|
|
78
80
|
const bytes = Buffer.byteLength(value, 'utf8');
|
|
79
|
-
if (bytes < 1 || bytes >
|
|
80
|
-
throw new Error(
|
|
81
|
+
if (bytes < 1 || bytes > CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES) {
|
|
82
|
+
throw new Error(`Remote actor SpotId must contain 1..${CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes.`);
|
|
81
83
|
}
|
|
82
84
|
return value;
|
|
83
85
|
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function remainingActorRequestTimeout(actorId: string, deadlineMs: number | undefined): number | undefined;
|
|
2
|
+
/** Only actual Store, delivery-gate, and handoff waits acquire a deadline handle. */
|
|
3
|
+
export declare function waitActorReply<T>(reply: Promise<T>, actorId: string, deadlineMs: number | undefined, signal?: AbortSignal): Promise<T>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.remainingActorRequestTimeout = remainingActorRequestTimeout;
|
|
4
|
+
exports.waitActorReply = waitActorReply;
|
|
5
|
+
const abort_1 = require("../abort");
|
|
6
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
7
|
+
function remainingActorRequestTimeout(actorId, deadlineMs) {
|
|
8
|
+
if (deadlineMs === undefined)
|
|
9
|
+
return undefined;
|
|
10
|
+
const remaining = deadlineMs - performance.now();
|
|
11
|
+
if (remaining <= 0) {
|
|
12
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Actor request '${actorId}' exceeded its deadline.`);
|
|
13
|
+
}
|
|
14
|
+
return Math.max(1, Math.ceil(remaining));
|
|
15
|
+
}
|
|
16
|
+
/** Only actual Store, delivery-gate, and handoff waits acquire a deadline handle. */
|
|
17
|
+
async function waitActorReply(reply, actorId, deadlineMs, signal) {
|
|
18
|
+
if (deadlineMs === undefined)
|
|
19
|
+
return await (0, abort_1.awaitWithAbort)(reply, signal);
|
|
20
|
+
let timer;
|
|
21
|
+
const timeout = new Promise((_resolve, reject) => {
|
|
22
|
+
const remaining = remainingActorRequestTimeout(actorId, deadlineMs);
|
|
23
|
+
timer = setTimeout(() => reject((0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Actor request '${actorId}' exceeded its deadline.`)), remaining);
|
|
24
|
+
});
|
|
25
|
+
try {
|
|
26
|
+
return await (0, abort_1.awaitWithAbort)(Promise.race([reply, timeout]), signal);
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
clearTimeout(timer);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ZLinkActorRetryDelay = void 0;
|
|
4
4
|
const INITIAL_RETRY_DELAY_MS = 25;
|
|
5
5
|
const MAX_RETRY_DELAY_MS = 1_000;
|
|
6
|
+
const RETRY_BACKOFF_MULTIPLIER = 2;
|
|
6
7
|
class ZLinkActorRetryDelay {
|
|
7
8
|
delayMs = INITIAL_RETRY_DELAY_MS;
|
|
8
9
|
reset() {
|
|
@@ -11,7 +12,7 @@ class ZLinkActorRetryDelay {
|
|
|
11
12
|
async wait(signal) {
|
|
12
13
|
const completed = await delayUnlessAborted(this.delayMs, signal);
|
|
13
14
|
if (completed) {
|
|
14
|
-
this.delayMs = Math.min(this.delayMs *
|
|
15
|
+
this.delayMs = Math.min(this.delayMs * RETRY_BACKOFF_MULTIPLIER, MAX_RETRY_DELAY_MS);
|
|
15
16
|
}
|
|
16
17
|
return completed;
|
|
17
18
|
}
|
|
@@ -6,6 +6,7 @@ import type { ZLinkLocationLifecycle } from '../locations';
|
|
|
6
6
|
import type { ZLinkActorRuntimeState } from './actor-runtime-state';
|
|
7
7
|
import type { ZLinkActorTransferRegistry } from './actor-transfer-registry';
|
|
8
8
|
import type { ZLinkRuntimeAdmissionGate } from '../admission';
|
|
9
|
+
import type { ZLinkActivationAdmission } from '../activation-admission';
|
|
9
10
|
export interface ZLinkActorJoinRuntimeResult<TReply> {
|
|
10
11
|
readonly accepted: boolean;
|
|
11
12
|
readonly actor?: import('../../contracts').ActorRef;
|
|
@@ -34,6 +35,7 @@ export interface ZLinkActorManagerOptions {
|
|
|
34
35
|
readonly shutdownSignal?: AbortSignal;
|
|
35
36
|
readonly metrics?: import('../diagnostics').ZLinkRuntimeMetrics;
|
|
36
37
|
readonly admission?: ZLinkRuntimeAdmissionGate;
|
|
38
|
+
readonly activationAdmission?: ZLinkActivationAdmission;
|
|
37
39
|
readonly placementCreate?: (actorId: string, actorType: string, createOnly: boolean, options: {
|
|
38
40
|
readonly meshName?: string;
|
|
39
41
|
readonly request?: unknown;
|
|
@@ -56,8 +58,8 @@ export interface ZLinkActorJoinCoordinator {
|
|
|
56
58
|
* lookup. This is an internal ordering fence; it is not part of the public
|
|
57
59
|
* actor context contract.
|
|
58
60
|
*/
|
|
59
|
-
beginDeferredJoin?(actor: ZLinkActor, state: ZLinkActorRuntimeState
|
|
60
|
-
abortDeferredJoin?(actor: ZLinkActor, state: ZLinkActorRuntimeState
|
|
61
|
+
beginDeferredJoin?(actor: ZLinkActor, state: ZLinkActorRuntimeState): void;
|
|
62
|
+
abortDeferredJoin?(actor: ZLinkActor, state: ZLinkActorRuntimeState): Promise<void>;
|
|
61
63
|
joinSpot(actor: ZLinkActor, state: ZLinkActorRuntimeState, spotId: RoutingId, request: Message, timeoutMs: number | undefined, signal: AbortSignal | undefined, completionOperationId?: import('../../contracts').ZLinkActorJoinOperationId): Promise<ZLinkActorJoinRuntimeResult<Message>>;
|
|
62
64
|
joinEntrySpot(actor: ZLinkActor, state: ZLinkActorRuntimeState, nodeRid: RoutingId | undefined, request: Message, timeoutMs: number | undefined, signal: AbortSignal | undefined, completionOperationId?: import('../../contracts').ZLinkActorJoinOperationId): Promise<ZLinkActorJoinRuntimeResult<Message>>;
|
|
63
65
|
}
|