@zlink-systems/framework 0.26.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/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/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -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 +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- 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 +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- 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 +83 -105
- 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 +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- 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-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- 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 +2 -0
- package/dist/runtime/admission.js +7 -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 +6 -23
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- 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-support.d.ts +1 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -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 -8
- package/dist/runtime/channels/channel-clients.js +68 -52
- 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 -10
- 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.js +5 -2
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +248 -174
- package/dist/runtime/channels/channel-transports.d.ts +11 -17
- 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 +130 -72
- 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 +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- 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/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 +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
- 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.js +22 -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 +0 -6
- 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-object-owner.js +3 -2
- 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 -12
- 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 +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- 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 +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- 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 +14 -13
- package/dist/runtime/host/index.js +190 -157
- 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 +7 -20
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- 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 +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- 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 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- 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 +72 -22
- 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 +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- 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 +37 -28
- 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 +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- 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 +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- 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 +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- 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 +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- 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 +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +9 -8
- 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 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- 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 +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- 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 +11 -1
- package/dist/runtime/streams/index.d.ts +14 -15
- package/dist/runtime/streams/index.js +20 -21
- 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/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/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/Spots/Contracts.ts +1 -1
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- 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 +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- 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 +9 -11
- 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-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- 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 +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +13 -29
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -85
- 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 -23
- 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 +6 -2
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +301 -192
- package/src/runtime/channels/channel-transports.ts +161 -112
- 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 +172 -91
- 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 +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- 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/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -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 +0 -10
- 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-object-owner.ts +5 -2
- 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 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- 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 +180 -260
- 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 +327 -296
- 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 +8 -41
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- 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 +699 -561
- 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 +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- 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 +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- 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 +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- 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 +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- 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 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +45 -23
- 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 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +21 -1
- package/src/runtime/streams/index.ts +76 -64
- 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/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/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/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ZLINK_DEFAULT_PUBLIC_WEIGHT } from '../../contracts/Configuration/RegistrationBuilderPolicy';
|
|
1
2
|
import type { ZLinkLocationOptionOverrides } from '../../contracts/Locations/Options';
|
|
2
3
|
import type { ZLinkPeerLocationFilter } from '../../contracts/Locations/Keys';
|
|
3
4
|
import type { ZLinkPeerLocationResolver } from '../../contracts/Locations/Resolvers';
|
|
@@ -10,6 +11,7 @@ import type { ZLinkBackendMeshNode } from '../backend/contracts';
|
|
|
10
11
|
import { AsyncResource } from 'node:async_hooks';
|
|
11
12
|
import { ZLinkStateLane } from '../execution/state-lane';
|
|
12
13
|
import { toBackendRoutingId as toBackendRoutingId } from '../routing-id';
|
|
14
|
+
import { MeshPeerRuntimeState } from '../foundation/service-runtime-contracts';
|
|
13
15
|
import {
|
|
14
16
|
ZLinkLocationRuntime,
|
|
15
17
|
ZLinkOwnerLeaseTracker,
|
|
@@ -113,7 +115,7 @@ function meshDescriptorPeerResolver(runtime: ZLinkLocationRuntime): ZLinkPeerLoc
|
|
|
113
115
|
nodeRid: descriptor.rid,
|
|
114
116
|
role: ZLinkLocationRole.Router,
|
|
115
117
|
endpoint: descriptor.endpoint,
|
|
116
|
-
weight:
|
|
118
|
+
weight: ZLINK_DEFAULT_PUBLIC_WEIGHT,
|
|
117
119
|
draining: descriptor.state !== ZLinkFrameworkRuntimeState.Serving,
|
|
118
120
|
value: descriptor.descriptorRevision,
|
|
119
121
|
ownerId: descriptor.ownerId,
|
|
@@ -205,7 +207,7 @@ class ZLinkSpotNodeAutoConnectExecutor implements IZLinkAutoConnectExecutor {
|
|
|
205
207
|
peer.endpoint === target.endpoint &&
|
|
206
208
|
(target.nodeRid === undefined || String(peer.routingId) === String(target.nodeRid)) &&
|
|
207
209
|
peer.lifecycleGeneration === target.lifecycleGeneration &&
|
|
208
|
-
peer.state ===
|
|
210
|
+
peer.state === MeshPeerRuntimeState.Serving
|
|
209
211
|
);
|
|
210
212
|
}
|
|
211
213
|
|
|
@@ -241,7 +243,9 @@ class ZLinkSpotNodeAutoConnectExecutor implements IZLinkAutoConnectExecutor {
|
|
|
241
243
|
}
|
|
242
244
|
|
|
243
245
|
private prepareConnectCore(key: string): ZLinkSpotNodeConnectionIntent | undefined {
|
|
244
|
-
|
|
246
|
+
const current = this.connectionIntents.get(key);
|
|
247
|
+
if (current !== undefined)
|
|
248
|
+
return current.connectionIntentId === undefined ? current : undefined;
|
|
245
249
|
const intent: ZLinkSpotNodeConnectionIntent = {};
|
|
246
250
|
this.connectionIntents.set(key, intent);
|
|
247
251
|
return intent;
|
|
@@ -252,29 +256,19 @@ class ZLinkSpotNodeAutoConnectExecutor implements IZLinkAutoConnectExecutor {
|
|
|
252
256
|
key: string,
|
|
253
257
|
intent: ZLinkSpotNodeConnectionIntent
|
|
254
258
|
): Promise<boolean> {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
return accepted;
|
|
269
|
-
} catch {
|
|
270
|
-
// A discovered endpoint can become unavailable between the store read and
|
|
271
|
-
// the socket connect. Leave the target inactive so the next reconciliation
|
|
272
|
-
// can retry without terminating the host's background runtime.
|
|
273
|
-
await this.lane.run(() => {
|
|
274
|
-
if (this.connectionIntents.get(key) === intent) this.connectionIntents.delete(key);
|
|
275
|
-
});
|
|
276
|
-
return false;
|
|
277
|
-
}
|
|
259
|
+
const connectionIntentId = await this.node.connectPeer({
|
|
260
|
+
endpoint: target.endpoint,
|
|
261
|
+
expectedRid: target.nodeRid === undefined ? undefined : toBackendRoutingId(target.nodeRid),
|
|
262
|
+
expectedSecurityIdentity: toAdmissionSecurityIdentity(target.metadata?.securityIdentity),
|
|
263
|
+
expectedLifecycleGeneration: target.lifecycleGeneration
|
|
264
|
+
});
|
|
265
|
+
const accepted = await this.lane.run(() => {
|
|
266
|
+
if (this.connectionIntents.get(key) !== intent) return false;
|
|
267
|
+
intent.connectionIntentId = connectionIntentId;
|
|
268
|
+
return true;
|
|
269
|
+
});
|
|
270
|
+
if (!accepted) this.node.removePeerConnection(connectionIntentId);
|
|
271
|
+
return accepted;
|
|
278
272
|
}
|
|
279
273
|
|
|
280
274
|
private disconnectPeer(target: ZLinkAutoConnectTarget): void {
|
|
@@ -1,61 +1,53 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
ZLinkFrameworkInternalErrorKind,
|
|
4
|
-
createInternalFrameworkException
|
|
5
|
-
} from '../framework-errors-internal';
|
|
1
|
+
import { RuntimeDisposal } from '../disposal';
|
|
6
2
|
import { randomUUID } from 'node:crypto';
|
|
7
|
-
import type { ZLinkLocationOptionOverrides } from '../../contracts/Locations/Options';
|
|
8
|
-
import type {
|
|
9
|
-
ActorRef,
|
|
10
|
-
RoutingId,
|
|
11
|
-
ZLinkActor,
|
|
12
|
-
ZLinkChannelClient,
|
|
13
|
-
ZLinkFanoutClient,
|
|
14
|
-
ZLinkMessage,
|
|
15
|
-
ZLinkMeshNodeDescriptor,
|
|
16
|
-
ZLinkMessageSerializer,
|
|
17
|
-
ZLinkSpotPublisherClient
|
|
18
|
-
} from '../../contracts';
|
|
19
|
-
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
20
|
-
import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
|
|
21
|
-
import { ZLinkLocationWriteIntent, ZLinkLocationWriteStatus } from '../../contracts/Locations';
|
|
22
3
|
import {
|
|
23
|
-
|
|
4
|
+
type ActorRef,
|
|
5
|
+
type RoutingId,
|
|
6
|
+
type ZLinkActor,
|
|
7
|
+
type ZLinkChannelClient,
|
|
8
|
+
type ZLinkFanoutClient,
|
|
9
|
+
type ZLinkMeshNodeDescriptor,
|
|
10
|
+
type ZLinkMessage,
|
|
11
|
+
type ZLinkMessageSerializer,
|
|
12
|
+
type ZLinkSpotPublisherClient,
|
|
24
13
|
ZLinkFrameworkException,
|
|
14
|
+
ZLinkFrameworkRuntimeState,
|
|
25
15
|
ZLinkObjectRole
|
|
26
16
|
} from '../../contracts';
|
|
27
|
-
|
|
17
|
+
|
|
18
|
+
import type { Message } from '../../contracts/Common/Message';
|
|
19
|
+
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
20
|
+
import { DEFAULT_ACTIVATION_CONCURRENCY_LIMIT } from '../../contracts/Configuration/InternalDefaults';
|
|
21
|
+
import {
|
|
22
|
+
ZLINK_DEFAULT_PUBLIC_WEIGHT,
|
|
23
|
+
ZLINK_MAX_CAPACITY,
|
|
24
|
+
ZLINK_MAX_PUBLIC_WEIGHT,
|
|
25
|
+
isValidPublicWeight
|
|
26
|
+
} from '../../contracts/Configuration/RegistrationBuilderPolicy';
|
|
28
27
|
import {
|
|
29
28
|
ZLinkRuntimeDispatchErrorAction as ZLinkDispatchErrorAction,
|
|
30
29
|
ZLinkRuntimeDispatchErrorReason as ZLinkDispatchErrorReason,
|
|
31
30
|
ZLinkDispatchErrorSurface,
|
|
32
31
|
ZLinkDispatchMessageKind
|
|
33
32
|
} from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
} from '../
|
|
40
|
-
import type {
|
|
41
|
-
import type { ZLinkMessageFollowOrigin } from '../foundation/service-runtime-contracts';
|
|
42
|
-
import {
|
|
43
|
-
ZLinkConfigurationException,
|
|
44
|
-
type ZLinkFrameworkRegistration,
|
|
45
|
-
type ZLinkSpotNodeOptions
|
|
46
|
-
} from '../configuration';
|
|
33
|
+
import { ZLinkLocationWriteIntent, ZLinkLocationWriteStatus } from '../../contracts/Locations';
|
|
34
|
+
import type { ZLinkLocationOptionOverrides } from '../../contracts/Locations/Options';
|
|
35
|
+
import type { ZLinkLocationOwnerToken } from '../../contracts/Locations/Writes';
|
|
36
|
+
import { createAbortError } from '../abort';
|
|
37
|
+
import type { ZLinkActivationConcurrency } from '../activation-admission';
|
|
38
|
+
import type { ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
39
|
+
import type { ZLinkActorHandoffPacket } from '../actors/actor-handoff';
|
|
47
40
|
import type {
|
|
48
41
|
ZLinkBackendAdapterFactory,
|
|
49
42
|
ZLinkBackendContext,
|
|
50
43
|
ZLinkBackendMeshNode,
|
|
51
44
|
ZLinkBackendSpotNode
|
|
52
45
|
} from '../backend/contracts';
|
|
53
|
-
import type { ZLinkLocationOwnerToken } from '../../contracts/Locations/Writes';
|
|
54
|
-
import { ZLinkMeshDispatchPump } from '../backend/mesh-dispatch-pump';
|
|
55
|
-
import { requireZLinkInfrastructureExecutionArea } from '../execution';
|
|
56
|
-
import { runWithOutboundFlow } from '../diagnostics/flow-context';
|
|
57
46
|
import { ZLinkMeshCompletionTable } from '../backend/mesh-completion-table';
|
|
47
|
+
import { ZLinkMeshDispatchPump } from '../backend/mesh-dispatch-pump';
|
|
48
|
+
import { SubmitResult, isZLinkBackendResultError } from '../backend/runtime-values';
|
|
58
49
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
50
|
+
import { requireUniqueRouteMeshChannel, resolveChannelRoute } from '../channels/channel-clients';
|
|
59
51
|
import {
|
|
60
52
|
decodeChannelEnvelope,
|
|
61
53
|
decodeChannelPayload,
|
|
@@ -63,6 +55,31 @@ import {
|
|
|
63
55
|
encodeChannelPublishEnvelopeParts,
|
|
64
56
|
encodeChannelReplyParts
|
|
65
57
|
} from '../channels/channel-envelope';
|
|
58
|
+
import {
|
|
59
|
+
ZLinkConfigurationException,
|
|
60
|
+
type ZLinkFrameworkRegistration,
|
|
61
|
+
type ZLinkSpotNodeOptions
|
|
62
|
+
} from '../configuration';
|
|
63
|
+
import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
|
|
64
|
+
import { runWithOutboundFlow } from '../diagnostics/flow-context';
|
|
65
|
+
import { requireZLinkInfrastructureExecutionArea } from '../execution';
|
|
66
|
+
import type { ZLinkListenerRecords } from '../foundation/listener-records';
|
|
67
|
+
import {
|
|
68
|
+
type ZLinkMessageFollowOrigin,
|
|
69
|
+
ReceiveKind,
|
|
70
|
+
type ReadyRecord,
|
|
71
|
+
type ReceiveRecord
|
|
72
|
+
} from '../foundation/service-runtime-contracts';
|
|
73
|
+
|
|
74
|
+
import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
|
|
75
|
+
import {
|
|
76
|
+
ZLinkFrameworkInternalErrorKind,
|
|
77
|
+
createInternalFrameworkException
|
|
78
|
+
} from '../framework-errors-internal';
|
|
79
|
+
import {
|
|
80
|
+
ApplicationJobQueue,
|
|
81
|
+
resolveApplicationJobQueueConfiguration
|
|
82
|
+
} from '../host/application-job-queue';
|
|
66
83
|
import {
|
|
67
84
|
ZLinkAutoConnectLoop,
|
|
68
85
|
ZLinkAutoConnectReconciler,
|
|
@@ -70,8 +87,12 @@ import {
|
|
|
70
87
|
type ZLinkLocationEventSink,
|
|
71
88
|
type ZLinkLocationRuntimeStores
|
|
72
89
|
} from '../locations';
|
|
73
|
-
import
|
|
74
|
-
|
|
90
|
+
import {
|
|
91
|
+
classifySubmitResult,
|
|
92
|
+
ZLinkSubmitStatus,
|
|
93
|
+
type ZLinkSubmitResult
|
|
94
|
+
} from '../messaging/submission-result';
|
|
95
|
+
import { routingIdsEqual, toBackendRoutingId } from '../routing-id';
|
|
75
96
|
import type { ZLinkDetachedTaskRunner } from './spot-actor-join-dispatch';
|
|
76
97
|
import { ZLinkEntrySpotActivation } from './spot-entry-activation';
|
|
77
98
|
import {
|
|
@@ -81,20 +102,13 @@ import {
|
|
|
81
102
|
} from './spot-node-autoconnect';
|
|
82
103
|
import type { ZLinkSpotRoutedTransport } from './spot-outbound';
|
|
83
104
|
import type { ZLinkSpotRouteResolver } from './spot-routing-internal';
|
|
84
|
-
import { routingIdsEqual, toBackendRoutingId } from '../routing-id';
|
|
85
105
|
import type {
|
|
86
106
|
ZLinkEntryActorRuntime,
|
|
87
|
-
ZLinkSpotActorTransferRuntime,
|
|
88
107
|
ZLinkSpotActorHandoffRuntime,
|
|
108
|
+
ZLinkSpotActorTransferRuntime,
|
|
89
109
|
ZLinkSpotBoundSessionRuntime
|
|
90
110
|
} from './spot-runtime-ports';
|
|
91
|
-
|
|
92
|
-
import type { ZLinkActivationConcurrency } from '../activation-admission';
|
|
93
|
-
import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
|
|
94
|
-
import {
|
|
95
|
-
ApplicationJobQueue,
|
|
96
|
-
resolveApplicationJobQueueConfiguration
|
|
97
|
-
} from '../host/application-job-queue';
|
|
111
|
+
const DEFAULT_SPOT_NODE_SHUTDOWN_TIMEOUT_MS = 1000;
|
|
98
112
|
|
|
99
113
|
const ZLINK_SEND_DONT_WAIT = 1;
|
|
100
114
|
|
|
@@ -103,6 +117,7 @@ const ZLINK_SEND_DONT_WAIT = 1;
|
|
|
103
117
|
const EMPTY_SPOT_METADATA: ReadonlyMap<string, string> = new Map();
|
|
104
118
|
|
|
105
119
|
export interface ZLinkSpotNodeRuntimeManagerOptions {
|
|
120
|
+
readonly errorSink: import('../diagnostics/dispatch-error-port').ZLinkDispatchErrorSink;
|
|
106
121
|
readonly listenerRecords?: ZLinkListenerRecords;
|
|
107
122
|
readonly registration: ZLinkFrameworkRegistration;
|
|
108
123
|
readonly primaryMeshName?: string;
|
|
@@ -123,7 +138,7 @@ export interface ZLinkSpotNodeRuntimeManagerOptions {
|
|
|
123
138
|
readonly actorTransferRuntime?: ZLinkSpotActorTransferRuntime;
|
|
124
139
|
readonly boundSessionRuntime?: ZLinkSpotBoundSessionRuntime;
|
|
125
140
|
readonly actorHandoffRuntime?: ZLinkSpotActorHandoffRuntime;
|
|
126
|
-
readonly detachedTaskRunner
|
|
141
|
+
readonly detachedTaskRunner: ZLinkDetachedTaskRunner;
|
|
127
142
|
readonly applicationJobQueue?: ApplicationJobQueue;
|
|
128
143
|
readonly applicationJobReceiveFlowFailureSink?: (error: unknown) => void;
|
|
129
144
|
readonly peerAdmissionSealed?: (meshName: string) => boolean;
|
|
@@ -147,7 +162,7 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
147
162
|
string,
|
|
148
163
|
ReturnType<ZLinkBackendMeshNode['createPublisher']>
|
|
149
164
|
>();
|
|
150
|
-
private
|
|
165
|
+
private readonly disposal = new RuntimeDisposal();
|
|
151
166
|
private readonly autoConnectLoops: ZLinkAutoConnectLoop[] = [];
|
|
152
167
|
private readonly publishedMeshNodeDescriptors = new Map<string, ZLinkMeshNodeDescriptor>();
|
|
153
168
|
// Keep the revision source separate from the cached Store row. A new owner
|
|
@@ -164,6 +179,9 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
164
179
|
private readonly applicationJobQueue: ApplicationJobQueue;
|
|
165
180
|
|
|
166
181
|
constructor(private readonly options: ZLinkSpotNodeRuntimeManagerOptions) {
|
|
182
|
+
if ((options.detachedTaskRunner as unknown) === undefined) {
|
|
183
|
+
throw new ZLinkConfigurationException('Spot node runtime requires a detached task runner.');
|
|
184
|
+
}
|
|
167
185
|
this.applicationJobQueue =
|
|
168
186
|
options.applicationJobQueue ??
|
|
169
187
|
new ApplicationJobQueue(resolveApplicationJobQueueConfiguration());
|
|
@@ -207,7 +225,8 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
207
225
|
peerResolver: location.resolver,
|
|
208
226
|
executor: capability.executor,
|
|
209
227
|
events: location.events,
|
|
210
|
-
options: location.options
|
|
228
|
+
options: location.options,
|
|
229
|
+
errorSink: this.options.errorSink
|
|
211
230
|
});
|
|
212
231
|
const loop = new ZLinkAutoConnectLoop({
|
|
213
232
|
reconciler,
|
|
@@ -323,12 +342,13 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
323
342
|
: Object.keys(spotNode.actorFactories ?? {}).length) > 0;
|
|
324
343
|
node.configureObjectPlacement({
|
|
325
344
|
role: spotNode.objectRole ?? (hasLegacyObjectFactories ? 'server' : 'none'),
|
|
326
|
-
placementWeight: spotNode.placementWeight ??
|
|
345
|
+
placementWeight: spotNode.placementWeight ?? ZLINK_DEFAULT_PUBLIC_WEIGHT,
|
|
327
346
|
activeCapacityLimit: aggregatePlacementCapacity(
|
|
328
347
|
spotNode.actorLimit ?? 0,
|
|
329
348
|
spotNode.spotLimit ?? 0
|
|
330
349
|
),
|
|
331
|
-
pendingCapacityLimit:
|
|
350
|
+
pendingCapacityLimit:
|
|
351
|
+
spotNode.activationConcurrencyLimit ?? DEFAULT_ACTIVATION_CONCURRENCY_LIMIT,
|
|
332
352
|
objectCapabilities: [
|
|
333
353
|
...stableTypes.map((type) => `object-type:${type}`),
|
|
334
354
|
...instanceSpotTypes.map((type) => `instance-spot-type:${type}`)
|
|
@@ -491,14 +511,18 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
491
511
|
},
|
|
492
512
|
activationConcurrency: this.options.activationConcurrency?.(meshName) ?? {
|
|
493
513
|
active: 0,
|
|
494
|
-
limit: registration.activationConcurrencyLimit ??
|
|
514
|
+
limit: registration.activationConcurrencyLimit ?? DEFAULT_ACTIVATION_CONCURRENCY_LIMIT
|
|
495
515
|
},
|
|
496
516
|
channelWeights: Object.fromEntries(
|
|
497
517
|
this.serverChannels(meshName).map(([channelName, channel]) => [
|
|
498
518
|
channelName,
|
|
499
519
|
state === ZLinkFrameworkRuntimeState.Draining
|
|
500
520
|
? 0
|
|
501
|
-
: this.effectiveChannelWeight(
|
|
521
|
+
: this.effectiveChannelWeight(
|
|
522
|
+
meshName,
|
|
523
|
+
channelName,
|
|
524
|
+
channel.weight ?? ZLINK_DEFAULT_PUBLIC_WEIGHT
|
|
525
|
+
)
|
|
502
526
|
])
|
|
503
527
|
),
|
|
504
528
|
applicationVersion: this.options.registration.applicationVersion,
|
|
@@ -613,7 +637,11 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
613
637
|
if (registration === undefined) {
|
|
614
638
|
throw new ZLinkConfigurationException(`Mesh '${meshName}' is not registered.`);
|
|
615
639
|
}
|
|
616
|
-
return
|
|
640
|
+
return (
|
|
641
|
+
this.runtimePlacementWeights.get(meshName) ??
|
|
642
|
+
registration.placementWeight ??
|
|
643
|
+
ZLINK_DEFAULT_PUBLIC_WEIGHT
|
|
644
|
+
);
|
|
617
645
|
}
|
|
618
646
|
|
|
619
647
|
channelWeight(channelName: string): number {
|
|
@@ -686,21 +714,21 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
686
714
|
readonly meshName: string;
|
|
687
715
|
readonly configuredWeight: number;
|
|
688
716
|
} {
|
|
689
|
-
const
|
|
690
|
-
|
|
691
|
-
return channel === undefined ? [] : [{ meshName, configuredWeight: channel.weight ?? 100 }];
|
|
692
|
-
});
|
|
693
|
-
if (matches.length === 0) {
|
|
717
|
+
const route = resolveChannelRoute(this.options.registration, channelName);
|
|
718
|
+
if (route?.kind !== 'route-mesh') {
|
|
694
719
|
throw new ZLinkConfigurationException(
|
|
695
720
|
`RouteMesh channel '${channelName}' is not registered.`
|
|
696
721
|
);
|
|
697
722
|
}
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
723
|
+
const match = requireUniqueRouteMeshChannel(
|
|
724
|
+
route.matches,
|
|
725
|
+
`RouteMesh channel '${channelName}' is registered in more than one Mesh.`
|
|
726
|
+
);
|
|
727
|
+
return {
|
|
728
|
+
meshName: match.meshName,
|
|
729
|
+
configuredWeight:
|
|
730
|
+
match.mesh.meshChannels?.[channelName]?.weight ?? ZLINK_DEFAULT_PUBLIC_WEIGHT
|
|
731
|
+
};
|
|
704
732
|
}
|
|
705
733
|
|
|
706
734
|
private scheduleRuntimeWeightPublication(
|
|
@@ -717,14 +745,10 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
717
745
|
await this.publishMeshNodeState(state, undefined, meshName);
|
|
718
746
|
});
|
|
719
747
|
this.runtimeWeightPublication = publish;
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
);
|
|
725
|
-
} else {
|
|
726
|
-
void publish.catch(() => undefined);
|
|
727
|
-
}
|
|
748
|
+
this.options.detachedTaskRunner.runDetached(
|
|
749
|
+
`RouteMesh '${meshName}' runtime weight publication`,
|
|
750
|
+
async () => await publish
|
|
751
|
+
);
|
|
728
752
|
}
|
|
729
753
|
|
|
730
754
|
get primaryMeshCompletions(): ZLinkMeshCompletionTable | undefined {
|
|
@@ -791,18 +815,17 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
791
815
|
).filter(([, channel]) => channel.server === true);
|
|
792
816
|
}
|
|
793
817
|
|
|
794
|
-
|
|
795
|
-
this.
|
|
818
|
+
dispose(signal?: AbortSignal, deadline?: Date): Promise<void> {
|
|
819
|
+
return this.disposal.run(() => this.disposeCore(signal, deadline));
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
private async disposeCore(signal?: AbortSignal, deadline?: Date): Promise<void> {
|
|
796
823
|
const autoConnectLoops = [...this.autoConnectLoops];
|
|
797
824
|
const entryActivations = [...this.entryActivations.values()];
|
|
798
825
|
const meshPumps = [...this.meshPumps.values()];
|
|
799
826
|
const meshNodes = [...this.meshNodes.values()];
|
|
800
827
|
const meshCompletions = [...this.meshCompletions.values()];
|
|
801
|
-
this.entryActivations.clear();
|
|
802
|
-
this.autoConnectLoops.length = 0;
|
|
803
|
-
this.meshPumps.clear();
|
|
804
828
|
const publishers = [...this.publishers.values()];
|
|
805
|
-
this.publishers.clear();
|
|
806
829
|
const errors: unknown[] = [];
|
|
807
830
|
const settle = async (operations: readonly Promise<unknown>[]) => {
|
|
808
831
|
const results = await Promise.allSettled(operations);
|
|
@@ -818,18 +841,22 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
818
841
|
await settle(meshPumps.reverse().map((pump) => pump.dispose()));
|
|
819
842
|
await settle(
|
|
820
843
|
meshNodes.reverse().map(async (node) => {
|
|
821
|
-
node.shutdown(
|
|
844
|
+
node.shutdown(DEFAULT_SPOT_NODE_SHUTDOWN_TIMEOUT_MS);
|
|
822
845
|
node.close();
|
|
823
846
|
})
|
|
824
847
|
);
|
|
825
848
|
for (const completions of meshCompletions) {
|
|
826
849
|
completions.dispose();
|
|
827
850
|
}
|
|
828
|
-
this.meshNodes.clear();
|
|
829
|
-
this.meshCompletions.clear();
|
|
830
851
|
await settle(autoConnectLoops.map((loop) => loop.finishTransportShutdown(signal)));
|
|
831
852
|
if (errors.length === 1) throw errors[0];
|
|
832
853
|
if (errors.length > 1) throw new AggregateError(errors, 'SPOT node runtime cleanup failed.');
|
|
854
|
+
this.entryActivations.clear();
|
|
855
|
+
this.autoConnectLoops.length = 0;
|
|
856
|
+
this.meshPumps.clear();
|
|
857
|
+
this.publishers.clear();
|
|
858
|
+
this.meshNodes.clear();
|
|
859
|
+
this.meshCompletions.clear();
|
|
833
860
|
}
|
|
834
861
|
|
|
835
862
|
private async dispatchMeshRecord(
|
|
@@ -979,8 +1006,6 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
979
1006
|
spotPublisherClient: this.options.spotPublisherClient,
|
|
980
1007
|
routedTransport: this.options.routedTransport,
|
|
981
1008
|
spotRouterChannelIdForMesh: this.options.spotRouterChannelIdForMesh,
|
|
982
|
-
channelMeshNameForChannel: (channelName) =>
|
|
983
|
-
resolveChannelMeshName(this.options.registration, channelName),
|
|
984
1009
|
timerHandlers: spotNode.entrySpotTimerHandlers,
|
|
985
1010
|
packetHandlers: spotNode.entrySpotPacketHandlers,
|
|
986
1011
|
subscriptionHandlers: spotNode.entrySpotSubscriptionHandlers,
|
|
@@ -1083,6 +1108,16 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
1083
1108
|
await activation.commitServiceActorJoin(actor, handoffBacklog);
|
|
1084
1109
|
}
|
|
1085
1110
|
|
|
1111
|
+
executeEntryActor<T>(meshName: string, actorId: string, operation: () => Promise<T>): Promise<T> {
|
|
1112
|
+
const activation = this.entryActivations.get(meshName);
|
|
1113
|
+
if (activation === undefined) {
|
|
1114
|
+
throw new ZLinkConfigurationException(
|
|
1115
|
+
`Entry Spot Actor '${actorId}' has no activation for MeshNode '${meshName}'.`
|
|
1116
|
+
);
|
|
1117
|
+
}
|
|
1118
|
+
return activation.executeActor(actorId, operation);
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1086
1121
|
publish(
|
|
1087
1122
|
meshName: string,
|
|
1088
1123
|
channelName: string,
|
|
@@ -1092,7 +1127,7 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
1092
1127
|
signal?: AbortSignal,
|
|
1093
1128
|
metadata: ReadonlyMap<string, string> = EMPTY_SPOT_METADATA
|
|
1094
1129
|
): Promise<ZLinkSubmitResult> {
|
|
1095
|
-
if (this.
|
|
1130
|
+
if (this.disposal.started) {
|
|
1096
1131
|
return Promise.reject(runtimeShutdownError());
|
|
1097
1132
|
}
|
|
1098
1133
|
if (signal?.aborted === true) {
|
|
@@ -1159,7 +1194,7 @@ export class ZLinkSpotNodeRuntimeManager {
|
|
|
1159
1194
|
flags: number,
|
|
1160
1195
|
metadata: ReadonlyMap<string, string>
|
|
1161
1196
|
): ZLinkSubmitResult {
|
|
1162
|
-
if (this.
|
|
1197
|
+
if (this.disposal.started) {
|
|
1163
1198
|
throw runtimeShutdownError();
|
|
1164
1199
|
}
|
|
1165
1200
|
const publisher = this.publishers.get(meshName);
|
|
@@ -1208,39 +1243,13 @@ export function createFrameworkEntrySpotId(prefix: string): string {
|
|
|
1208
1243
|
return `${prefix}-entry-${randomUUID()}`;
|
|
1209
1244
|
}
|
|
1210
1245
|
|
|
1211
|
-
function resolveChannelMeshName(
|
|
1212
|
-
registration: ZLinkFrameworkRegistration,
|
|
1213
|
-
channelName: string
|
|
1214
|
-
): string | undefined {
|
|
1215
|
-
const matches = [...registration.spotNodes.entries()]
|
|
1216
|
-
.filter(([, node]) =>
|
|
1217
|
-
Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, channelName)
|
|
1218
|
-
)
|
|
1219
|
-
.map(([meshName]) => meshName);
|
|
1220
|
-
return matches.length === 1 ? matches[0] : undefined;
|
|
1221
|
-
}
|
|
1222
|
-
|
|
1223
1246
|
function mapPublishSubmitStatus(result: number): ZLinkSubmitStatus {
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
case SubmitResult.NotFound:
|
|
1231
|
-
// A publish with no matching subscriber is a successful zero-recipient
|
|
1232
|
-
// operation, not an operation-specific not-found failure.
|
|
1233
|
-
return ZLinkSubmitStatus.Submitted;
|
|
1234
|
-
case SubmitResult.NotConnected:
|
|
1235
|
-
return ZLinkSubmitStatus.RouteNotConnected;
|
|
1236
|
-
case SubmitResult.Terminated:
|
|
1237
|
-
case SubmitResult.InvalidHandle:
|
|
1238
|
-
return ZLinkSubmitStatus.Shutdown;
|
|
1239
|
-
default:
|
|
1240
|
-
throw new ZLinkConfigurationException(
|
|
1241
|
-
`Logical Multicast failed with submit result '${result}'.`
|
|
1242
|
-
);
|
|
1243
|
-
}
|
|
1247
|
+
// Source publication preserves its local admission status before commit.
|
|
1248
|
+
if (result === SubmitResult.NotAdmitted || result === SubmitResult.Backpressured)
|
|
1249
|
+
return ZLinkSubmitStatus.Backpressured;
|
|
1250
|
+
// A publish with no matching subscriber succeeds with zero recipients.
|
|
1251
|
+
if (result === SubmitResult.NotFound) return ZLinkSubmitStatus.Submitted;
|
|
1252
|
+
return classifySubmitResult(result, 'Logical Multicast').status;
|
|
1244
1253
|
}
|
|
1245
1254
|
|
|
1246
1255
|
function requireEntrySpotReply(result: number): void {
|
|
@@ -1252,8 +1261,10 @@ function requireEntrySpotReply(result: number): void {
|
|
|
1252
1261
|
}
|
|
1253
1262
|
|
|
1254
1263
|
function requirePublicRuntimeWeight(value: number, label: string): number {
|
|
1255
|
-
if (!
|
|
1256
|
-
throw new ZLinkConfigurationException(
|
|
1264
|
+
if (!isValidPublicWeight(value)) {
|
|
1265
|
+
throw new ZLinkConfigurationException(
|
|
1266
|
+
`${label} must be an integer in 0..${ZLINK_MAX_PUBLIC_WEIGHT}.`
|
|
1267
|
+
);
|
|
1257
1268
|
}
|
|
1258
1269
|
return value;
|
|
1259
1270
|
}
|
|
@@ -1345,7 +1356,7 @@ function objectCapability(
|
|
|
1345
1356
|
}
|
|
1346
1357
|
|
|
1347
1358
|
function aggregatePlacementCapacity(actorLimit: number, spotLimit: number): number {
|
|
1348
|
-
const unlimited =
|
|
1359
|
+
const unlimited = ZLINK_MAX_CAPACITY;
|
|
1349
1360
|
const actors = actorLimit === 0 ? unlimited : actorLimit;
|
|
1350
1361
|
const spots = spotLimit === 0 ? unlimited : spotLimit;
|
|
1351
1362
|
return Math.min(unlimited, actors + spots);
|
|
@@ -1,35 +1,40 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type RoutingId,
|
|
3
|
+
type ZLinkChannelClient,
|
|
4
|
+
type ZLinkChannelRequestCall,
|
|
5
|
+
type ZLinkMessageMetadata,
|
|
6
|
+
type ZLinkPublishCall,
|
|
7
|
+
type ZLinkRequestCall,
|
|
8
|
+
type ZLinkSendCall,
|
|
9
|
+
type ZLinkSpotOutbound,
|
|
10
|
+
type ZLinkSpotPublisherClient,
|
|
11
|
+
type ZLinkSpotRequestCall,
|
|
12
|
+
type ZLinkSpotSendCall,
|
|
13
|
+
ZLinkSpotKind
|
|
14
|
+
} from '../../contracts';
|
|
15
|
+
|
|
16
|
+
import {
|
|
17
|
+
ZLINK_MAX_MESH_NAME_BYTES,
|
|
18
|
+
ZLINK_MAX_STABLE_TYPE_BYTES
|
|
19
|
+
} from '../../contracts/Common/CoreTypes';
|
|
20
|
+
import type { ZLinkBackendSpot } from '../backend/contracts';
|
|
21
|
+
import { ZLinkConfigurationException } from '../configuration';
|
|
22
|
+
import { requireZLinkYieldTurn } from '../execution';
|
|
1
23
|
import {
|
|
2
24
|
ZLinkFrameworkInternalErrorKind,
|
|
3
25
|
createInternalFrameworkException
|
|
4
26
|
} from '../framework-errors-internal';
|
|
5
|
-
import {
|
|
6
|
-
import type {
|
|
7
|
-
RoutingId,
|
|
8
|
-
ZLinkChannelClient,
|
|
9
|
-
ZLinkChannelRequestCall,
|
|
10
|
-
ZLinkPublishCall,
|
|
11
|
-
ZLinkRequestCall,
|
|
12
|
-
ZLinkSendCall,
|
|
13
|
-
ZLinkMessageMetadata,
|
|
14
|
-
ZLinkSpotOutbound,
|
|
15
|
-
ZLinkSpotRequestCall,
|
|
16
|
-
ZLinkSpotSendCall,
|
|
17
|
-
ZLinkSpotPublisherClient
|
|
18
|
-
} from '../../contracts';
|
|
27
|
+
import { resolveFrameworkPacketName } from '../messaging/packet-name';
|
|
19
28
|
import {
|
|
20
29
|
requireOneWayCompletion,
|
|
21
30
|
throwAlreadySubmitted,
|
|
22
31
|
type ZLinkSubmitResult
|
|
23
32
|
} from '../messaging/submission-result';
|
|
24
33
|
import { normalizeOpaqueRoutingId } from '../routing-id';
|
|
25
|
-
import { ZLinkConfigurationException } from '../configuration';
|
|
26
|
-
import type { ZLinkBackendSpot } from '../backend/contracts';
|
|
27
34
|
import { deliverOnSerial } from '../workers';
|
|
28
|
-
import {
|
|
29
|
-
import { resolveFrameworkPacketName } from '../messaging/packet-name';
|
|
35
|
+
import { resolveSpotHandle, type ResolvedSpotHandle, type SpotHandle } from './spot-handle';
|
|
30
36
|
import type { ZLinkSpotRouteTarget } from './spot-routing-internal';
|
|
31
37
|
import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
32
|
-
import { resolveSpotHandle, type SpotHandle, type ResolvedSpotHandle } from './spot-handle';
|
|
33
38
|
|
|
34
39
|
export interface DefaultZLinkSpotOutboundOptions {
|
|
35
40
|
readonly serial: ZLinkSpotSerialTurnExecutor;
|
|
@@ -221,6 +226,7 @@ export interface ZLinkSpotRoutedTransport {
|
|
|
221
226
|
}
|
|
222
227
|
|
|
223
228
|
export interface ZLinkSpotRoutedSendOptions {
|
|
229
|
+
readonly instanceSpot?: boolean;
|
|
224
230
|
readonly packetName?: string;
|
|
225
231
|
/** Internal end-to-end budget remaining for route admission. */
|
|
226
232
|
readonly timeoutMs?: number;
|
|
@@ -260,13 +266,21 @@ function createAddressedSpotSendCall(
|
|
|
260
266
|
selectOnce(options, 'instanceSpot');
|
|
261
267
|
options.instanceSpot = true;
|
|
262
268
|
if (instanceSpotType !== undefined) {
|
|
263
|
-
options.instanceSpotType = requireAddressValue(
|
|
269
|
+
options.instanceSpotType = requireAddressValue(
|
|
270
|
+
instanceSpotType,
|
|
271
|
+
'Instance Spot type',
|
|
272
|
+
ZLINK_MAX_STABLE_TYPE_BYTES
|
|
273
|
+
);
|
|
264
274
|
}
|
|
265
275
|
return this;
|
|
266
276
|
},
|
|
267
277
|
inMesh(meshName: string) {
|
|
268
278
|
selectOnce(options, 'inMesh');
|
|
269
|
-
options.initialMeshName = requireAddressValue(
|
|
279
|
+
options.initialMeshName = requireAddressValue(
|
|
280
|
+
meshName,
|
|
281
|
+
'Mesh name',
|
|
282
|
+
ZLINK_MAX_MESH_NAME_BYTES
|
|
283
|
+
);
|
|
270
284
|
return this;
|
|
271
285
|
},
|
|
272
286
|
async submit(signal?: AbortSignal): Promise<void> {
|
|
@@ -316,13 +330,21 @@ function createAddressedSpotRequestCall(
|
|
|
316
330
|
selectOnce(options, 'instanceSpot');
|
|
317
331
|
options.instanceSpot = true;
|
|
318
332
|
if (instanceSpotType !== undefined) {
|
|
319
|
-
options.instanceSpotType = requireAddressValue(
|
|
333
|
+
options.instanceSpotType = requireAddressValue(
|
|
334
|
+
instanceSpotType,
|
|
335
|
+
'Instance Spot type',
|
|
336
|
+
ZLINK_MAX_STABLE_TYPE_BYTES
|
|
337
|
+
);
|
|
320
338
|
}
|
|
321
339
|
return this;
|
|
322
340
|
},
|
|
323
341
|
inMesh(meshName: string) {
|
|
324
342
|
selectOnce(options, 'inMesh');
|
|
325
|
-
options.initialMeshName = requireAddressValue(
|
|
343
|
+
options.initialMeshName = requireAddressValue(
|
|
344
|
+
meshName,
|
|
345
|
+
'Mesh name',
|
|
346
|
+
ZLINK_MAX_MESH_NAME_BYTES
|
|
347
|
+
);
|
|
326
348
|
return this;
|
|
327
349
|
},
|
|
328
350
|
timeout(timeoutMs: number) {
|