@zlink-systems/framework 0.21.0 → 0.23.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/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +28 -22
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
- package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/contracts/index.d.ts +1 -0
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +46 -42
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
- package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
- package/dist/runtime/diagnostics/flow-context.js +2 -2
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +58 -42
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
- package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
- package/dist/runtime/foundation/service-topology-registry.js +105 -96
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +245 -228
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +209 -220
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
- package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
- package/dist/runtime/spots/spot-timer.js +26 -30
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
- package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
- package/dist/runtime/streams/bound-session-response-target.js +8 -1
- package/dist/runtime/streams/bound-session-service.d.ts +1 -0
- package/dist/runtime/streams/bound-session-service.js +14 -12
- package/dist/runtime/streams/index.js +28 -20
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +52 -31
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.d.ts +5 -1
- package/dist/runtime/streams/protocol.js +68 -20
- package/dist/runtime/streams/session-actor-coordinator.js +37 -41
- package/dist/runtime/streams/session-context.d.ts +9 -2
- package/dist/runtime/streams/session-context.js +50 -32
- package/dist/runtime/streams/session-local-actors.d.ts +3 -1
- package/dist/runtime/streams/session-local-actors.js +17 -2
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
- package/dist/runtime/streams/stream-frame-factory.js +14 -7
- package/dist/runtime/streams/stream-session-runtime.js +112 -78
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +3 -3
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +2 -2
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +142 -134
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +77 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +218 -206
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
- package/src/runtime/diagnostics/flow-context.ts +18 -7
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +107 -79
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +170 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +595 -564
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
- package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
- package/src/runtime/spots/spot-timer.ts +103 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
- package/src/runtime/streams/bound-session-response-target.ts +39 -9
- package/src/runtime/streams/bound-session-service.ts +52 -42
- package/src/runtime/streams/index.ts +183 -100
- package/src/runtime/streams/managed-stream.ts +123 -90
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +115 -46
- package/src/runtime/streams/session-actor-coordinator.ts +109 -93
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +96 -51
- package/src/runtime/streams/session-local-actors.ts +19 -3
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +59 -40
- package/src/runtime/streams/stream-session-runtime.ts +317 -214
- package/src/runtime/workers/index.ts +68 -29
|
@@ -191,8 +191,7 @@ class ZLinkEntrySpotActivation {
|
|
|
191
191
|
}
|
|
192
192
|
notifyCreateActor(actor, createRequest, signal) {
|
|
193
193
|
(0, abort_1.throwIfAborted)(signal);
|
|
194
|
-
return this.serial.execute(async () => await this.entrySpot.onCreateActor?.(actor, createRequest)
|
|
195
|
-
?? { accepted: true });
|
|
194
|
+
return this.serial.execute(async () => (await this.entrySpot.onCreateActor?.(actor, createRequest)) ?? { accepted: true });
|
|
196
195
|
}
|
|
197
196
|
notifyJoinActor(actor, signal) {
|
|
198
197
|
(0, abort_1.throwIfAborted)(signal);
|
|
@@ -231,10 +230,12 @@ class ZLinkEntrySpotActivation {
|
|
|
231
230
|
resolveActor: (actorId) => this.options.entryActorRuntime?.resolveActor(actorId),
|
|
232
231
|
getTarget: () => this.entrySpot,
|
|
233
232
|
defaultAccept: true,
|
|
234
|
-
transfer: this.options.actorTransferRuntime === undefined
|
|
235
|
-
kind: '
|
|
236
|
-
|
|
237
|
-
|
|
233
|
+
transfer: this.options.actorTransferRuntime === undefined
|
|
234
|
+
? { kind: 'disabled' }
|
|
235
|
+
: {
|
|
236
|
+
kind: 'enabled',
|
|
237
|
+
runtime: this.options.actorTransferRuntime
|
|
238
|
+
},
|
|
238
239
|
commitNativeActor: (actor) => this.commitEntryActorTransaction(actor),
|
|
239
240
|
commitTransferredActor: async (actor, backlog) => {
|
|
240
241
|
await this.commitEntryActorTransaction(actor);
|
|
@@ -247,8 +248,8 @@ class ZLinkEntrySpotActivation {
|
|
|
247
248
|
if ((0, routing_id_1.routingIdsEqual)(sourceNodeRid, this.options.nativeNode.routingId)) {
|
|
248
249
|
return;
|
|
249
250
|
}
|
|
250
|
-
const target = declaredTarget
|
|
251
|
-
|
|
251
|
+
const target = declaredTarget ??
|
|
252
|
+
this.options.boundSessionRuntime?.resolveRemoteBoundSessionTarget(sourceNodeRid, sourceSessionRid);
|
|
252
253
|
if (target !== undefined) {
|
|
253
254
|
this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(actor.actorId, {
|
|
254
255
|
...target,
|
|
@@ -325,9 +326,7 @@ class ZLinkEntrySpotActivation {
|
|
|
325
326
|
exports.ZLinkEntrySpotActivation = ZLinkEntrySpotActivation;
|
|
326
327
|
function notifyEntryActorJoined(entrySpot, actor) {
|
|
327
328
|
const callback = entrySpot.onJoinedActor;
|
|
328
|
-
return callback === undefined
|
|
329
|
-
? Promise.resolve()
|
|
330
|
-
: callback.call(entrySpot, actor);
|
|
329
|
+
return callback === undefined ? Promise.resolve() : callback.call(entrySpot, actor);
|
|
331
330
|
}
|
|
332
331
|
function toContextGeneration(generation) {
|
|
333
332
|
if (generation < 0n || generation > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
@@ -336,7 +335,7 @@ function toContextGeneration(generation) {
|
|
|
336
335
|
return Number(generation);
|
|
337
336
|
}
|
|
338
337
|
function entrySpotGeneration(spot) {
|
|
339
|
-
return spot.lifecycleGeneration
|
|
340
|
-
|
|
341
|
-
|
|
338
|
+
return (spot.lifecycleGeneration ??
|
|
339
|
+
spot.status?.().lifecycleGeneration ??
|
|
340
|
+
0n);
|
|
342
341
|
}
|
|
@@ -17,14 +17,17 @@ function createSpotHandle(spotId, initialOrRefresh, refresh) {
|
|
|
17
17
|
}
|
|
18
18
|
async function resolveSpotHandle(handle, signal) {
|
|
19
19
|
const state = requireHandleState(handle);
|
|
20
|
-
return state.current ?? await refreshSpotHandle(handle, signal);
|
|
20
|
+
return state.current ?? (await refreshSpotHandle(handle, signal));
|
|
21
21
|
}
|
|
22
22
|
async function refreshSpotHandle(handle, signal) {
|
|
23
23
|
const state = requireHandleState(handle);
|
|
24
|
-
state.refreshing ??= state
|
|
24
|
+
state.refreshing ??= state
|
|
25
|
+
.refresh(signal)
|
|
26
|
+
.then((resolved) => {
|
|
25
27
|
state.current = resolved;
|
|
26
28
|
return resolved;
|
|
27
|
-
})
|
|
29
|
+
})
|
|
30
|
+
.finally(() => {
|
|
28
31
|
state.refreshing = undefined;
|
|
29
32
|
});
|
|
30
33
|
return await state.refreshing;
|
|
@@ -18,9 +18,7 @@ class DefaultZLinkSpotHandlerRegistry {
|
|
|
18
18
|
if (metadata === undefined || resolvedPacketName === undefined) {
|
|
19
19
|
throw new configuration_1.ZLinkConfigurationException(`Actor packet handler '${handlerType.name}' must declare a packet name.`);
|
|
20
20
|
}
|
|
21
|
-
return this.addActorPacketRegistration(metadata.kind === 'spotActorSend'
|
|
22
|
-
? actors_1.ZLinkActorPacketKind.Send
|
|
23
|
-
: actors_1.ZLinkActorPacketKind.Request, handlerType, Object, resolvedPacketName);
|
|
21
|
+
return this.addActorPacketRegistration(metadata.kind === 'spotActorSend' ? actors_1.ZLinkActorPacketKind.Send : actors_1.ZLinkActorPacketKind.Request, handlerType, Object, resolvedPacketName);
|
|
24
22
|
}
|
|
25
23
|
addActorPacket(handlerType, actorType) {
|
|
26
24
|
const metadata = (0, Attributes_1.readZLinkDecoratorMetadata)(handlerType).find((entry) => entry.kind === 'spotActorSend' || entry.kind === 'spotActorRequest');
|
|
@@ -30,9 +28,12 @@ class DefaultZLinkSpotHandlerRegistry {
|
|
|
30
28
|
return this.addActorPacketRegistration(metadata.kind === 'spotActorSend' ? actors_1.ZLinkActorPacketKind.Send : actors_1.ZLinkActorPacketKind.Request, handlerType, actorType, metadata.packetName);
|
|
31
29
|
}
|
|
32
30
|
addPacket(handlerType, packetName) {
|
|
33
|
-
const declared = (0, Attributes_1.readZLinkDecoratorMetadata)(handlerType)
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
const declared = (0, Attributes_1.readZLinkDecoratorMetadata)(handlerType).find((entry) => entry.kind === 'packet')?.packetName;
|
|
32
|
+
this.entries.push({
|
|
33
|
+
kind: 'packet',
|
|
34
|
+
handlerType,
|
|
35
|
+
packetName: packetName ?? declared ?? handlerType.name
|
|
36
|
+
});
|
|
36
37
|
return this;
|
|
37
38
|
}
|
|
38
39
|
packet(packetName, handlerType) {
|
|
@@ -66,10 +67,10 @@ class DefaultZLinkSpotHandlerRegistry {
|
|
|
66
67
|
if (topic.trim().length === 0) {
|
|
67
68
|
throw new configuration_1.ZLinkConfigurationException('SPOT subscribe topic must not be empty.');
|
|
68
69
|
}
|
|
69
|
-
if (this.entries.some((entry) => entry.kind === 'subscribe'
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
if (this.entries.some((entry) => entry.kind === 'subscribe' &&
|
|
71
|
+
entry.handlerType === handlerType &&
|
|
72
|
+
entry.channelName === channelName &&
|
|
73
|
+
entry.topic === topic)) {
|
|
73
74
|
return this;
|
|
74
75
|
}
|
|
75
76
|
this.entries.push({ kind: 'subscribe', handlerType, channelName, topic });
|
|
@@ -150,6 +151,5 @@ function applySpotHandlerRegistrations(registry, spotType, registrations) {
|
|
|
150
151
|
}
|
|
151
152
|
}
|
|
152
153
|
function isSpotImplementation(registeredType, implementation) {
|
|
153
|
-
return registeredType === implementation
|
|
154
|
-
|| implementation.prototype instanceof registeredType;
|
|
154
|
+
return registeredType === implementation || implementation.prototype instanceof registeredType;
|
|
155
155
|
}
|
|
@@ -38,8 +38,8 @@ class ZLinkPublicSpotManager {
|
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
40
|
catch (error) {
|
|
41
|
-
if (error instanceof contracts_1.ZLinkFrameworkException
|
|
42
|
-
|
|
41
|
+
if (error instanceof contracts_1.ZLinkFrameworkException &&
|
|
42
|
+
(0, framework_errors_internal_1.internalFrameworkErrorKind)(error) === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotRouteNotFound) {
|
|
43
43
|
return undefined;
|
|
44
44
|
}
|
|
45
45
|
throw error;
|
|
@@ -74,8 +74,7 @@ class ZLinkPublicSpotManager {
|
|
|
74
74
|
},
|
|
75
75
|
deadlineUnixMs: BigInt(Date.now() + timeoutMs)
|
|
76
76
|
}, timeoutMs);
|
|
77
|
-
if (result.terminalResult !== 0
|
|
78
|
-
|| result.tail?.kind !== 'userSpotClose') {
|
|
77
|
+
if (result.terminalResult !== 0 || result.tail?.kind !== 'userSpotClose') {
|
|
79
78
|
const message = `Remote User Spot close failed. terminalResult=${result.terminalResult}, failureCode=${result.failureCode}.`;
|
|
80
79
|
// Route the close terminal through the shared ownership-aware translator
|
|
81
80
|
// (spec 32-framework-error-model:81-118, 99-108) instead of an ad-hoc
|
|
@@ -170,8 +169,8 @@ class ZLinkPublicSpotManager {
|
|
|
170
169
|
throw error;
|
|
171
170
|
}
|
|
172
171
|
}, async (cleanupSignal) => {
|
|
173
|
-
const meshName = state.meshName ??
|
|
174
|
-
.find(([, byType]) => byType.has(stableType))?.[0];
|
|
172
|
+
const meshName = state.meshName ??
|
|
173
|
+
[...this.options.factories].find(([, byType]) => byType.has(stableType))?.[0];
|
|
175
174
|
if (meshName !== undefined) {
|
|
176
175
|
await this.options.local.close(meshName, spotId, cleanupSignal);
|
|
177
176
|
}
|
|
@@ -29,9 +29,10 @@ class ZLinkSpotNativeActorJoinAdmission {
|
|
|
29
29
|
? { accepted: this.options.defaultAccept }
|
|
30
30
|
: target.onActorJoin(actorId, joinPayload));
|
|
31
31
|
accepted = response.accepted;
|
|
32
|
-
reply =
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
reply =
|
|
33
|
+
response.reply === undefined
|
|
34
|
+
? undefined
|
|
35
|
+
: (0, payload_codec_1.encodeFrameworkPayloadMessage)(response.reply, this.options.messageSerializers);
|
|
35
36
|
if (accepted) {
|
|
36
37
|
acceptedActor = actor;
|
|
37
38
|
}
|
|
@@ -42,8 +42,7 @@ function spotNodeAutoConnectCapability(spotNodeName, spotNode, node) {
|
|
|
42
42
|
nodeRid: String(status.routingId),
|
|
43
43
|
endpoint,
|
|
44
44
|
objectRole: spotNode.objectRole ?? 'none',
|
|
45
|
-
hasRouteMeshServerChannel: Object.values(spotNode.meshChannels ?? {})
|
|
46
|
-
.some((channel) => channel.server === true)
|
|
45
|
+
hasRouteMeshServerChannel: Object.values(spotNode.meshChannels ?? {}).some((channel) => channel.server === true)
|
|
47
46
|
};
|
|
48
47
|
const manualConnections = hasManualRouterConnections(spotNode);
|
|
49
48
|
return {
|
|
@@ -54,11 +53,10 @@ function spotNodeAutoConnectCapability(spotNodeName, spotNode, node) {
|
|
|
54
53
|
function meshDescriptorPeerResolver(runtime) {
|
|
55
54
|
return {
|
|
56
55
|
async listLivePeers(filter, signal) {
|
|
57
|
-
if (filter.meshName === undefined
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
&& filter.role !== contracts_1.ZLinkLocationRole.Router)) {
|
|
56
|
+
if (filter.meshName === undefined ||
|
|
57
|
+
(filter.autoConnectType !== undefined &&
|
|
58
|
+
filter.autoConnectType !== Values_1.ZLinkLocationAutoConnectType.RouteMesh) ||
|
|
59
|
+
(filter.role !== undefined && filter.role !== contracts_1.ZLinkLocationRole.Router)) {
|
|
62
60
|
return [];
|
|
63
61
|
}
|
|
64
62
|
const descriptors = await runtime.listLiveMeshNodes(filter.meshName, signal);
|
|
@@ -82,14 +80,14 @@ function meshDescriptorPeerResolver(runtime) {
|
|
|
82
80
|
securityIdentity: descriptor.securityIdentity
|
|
83
81
|
}
|
|
84
82
|
}))
|
|
85
|
-
.filter(peer => (filter.nodeRid === undefined || String(peer.nodeRid) === String(filter.nodeRid))
|
|
86
|
-
|
|
83
|
+
.filter((peer) => (filter.nodeRid === undefined || String(peer.nodeRid) === String(filter.nodeRid)) &&
|
|
84
|
+
(filter.endpoint === undefined || peer.endpoint === filter.endpoint));
|
|
87
85
|
}
|
|
88
86
|
};
|
|
89
87
|
}
|
|
90
88
|
function hasManualRouterConnections(spotNode) {
|
|
91
|
-
return (spotNode.router?.manualConnections?.length ?? 0) > 0
|
|
92
|
-
|
|
89
|
+
return ((spotNode.router?.manualConnections?.length ?? 0) > 0 ||
|
|
90
|
+
(spotNode.router?.manualPeerConnections?.length ?? 0) > 0);
|
|
93
91
|
}
|
|
94
92
|
const detachedSpotNodeAutoConnectResource = new node_async_hooks_1.AsyncResource('zlink:spot-node-autoconnect');
|
|
95
93
|
class ZLinkSpotNodeAutoConnectExecutor {
|
|
@@ -129,8 +127,7 @@ class ZLinkSpotNodeAutoConnectExecutor {
|
|
|
129
127
|
if (peer.routingId === null)
|
|
130
128
|
continue;
|
|
131
129
|
const target = current.get(String(peer.routingId));
|
|
132
|
-
if (target !== undefined
|
|
133
|
-
&& peer.endpoint === target.endpoint) {
|
|
130
|
+
if (target !== undefined && peer.endpoint === target.endpoint) {
|
|
134
131
|
continue;
|
|
135
132
|
}
|
|
136
133
|
this.node.disconnectPeer(peer.routingId, peer.lifecycleGeneration);
|
|
@@ -142,7 +139,9 @@ class ZLinkSpotNodeAutoConnectExecutor {
|
|
|
142
139
|
// it can treat the automatic route as disconnected.
|
|
143
140
|
if (this.connectionIntents.has(connectionKey(target)))
|
|
144
141
|
return false;
|
|
145
|
-
return !this.node
|
|
142
|
+
return !this.node
|
|
143
|
+
.peers()
|
|
144
|
+
.some((peer) => peer.routingId !== null &&
|
|
146
145
|
peer.endpoint === target.endpoint &&
|
|
147
146
|
(target.nodeRid === undefined || String(peer.routingId) === String(target.nodeRid)) &&
|
|
148
147
|
peer.lifecycleGeneration === target.lifecycleGeneration &&
|
|
@@ -151,7 +150,7 @@ class ZLinkSpotNodeAutoConnectExecutor {
|
|
|
151
150
|
replaceNotRequired(targets) {
|
|
152
151
|
this.node.replaceDiscoveredNotRequiredPeers?.(targets
|
|
153
152
|
.filter((target) => target.nodeRid !== undefined)
|
|
154
|
-
.map(target => ({
|
|
153
|
+
.map((target) => ({
|
|
155
154
|
nodeRoutingId: String(target.nodeRid),
|
|
156
155
|
lifecycleGeneration: target.lifecycleGeneration,
|
|
157
156
|
descriptorRevision: target.descriptorRevision ?? 1n,
|
|
@@ -181,9 +180,7 @@ class ZLinkSpotNodeAutoConnectExecutor {
|
|
|
181
180
|
try {
|
|
182
181
|
const connectionIntentId = await this.node.connectPeer({
|
|
183
182
|
endpoint: target.endpoint,
|
|
184
|
-
expectedRid: target.nodeRid === undefined
|
|
185
|
-
? undefined
|
|
186
|
-
: (0, routing_id_1.toBackendRoutingId)(target.nodeRid),
|
|
183
|
+
expectedRid: target.nodeRid === undefined ? undefined : (0, routing_id_1.toBackendRoutingId)(target.nodeRid),
|
|
187
184
|
expectedSecurityIdentity: toAdmissionSecurityIdentity(target.metadata?.securityIdentity),
|
|
188
185
|
expectedLifecycleGeneration: target.lifecycleGeneration
|
|
189
186
|
});
|
|
@@ -51,8 +51,9 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
51
51
|
applicationJobQueue;
|
|
52
52
|
constructor(options) {
|
|
53
53
|
this.options = options;
|
|
54
|
-
this.applicationJobQueue =
|
|
55
|
-
|
|
54
|
+
this.applicationJobQueue =
|
|
55
|
+
options.applicationJobQueue ??
|
|
56
|
+
new application_job_queue_1.ApplicationJobQueue((0, application_job_queue_1.resolveApplicationJobQueueConfiguration)());
|
|
56
57
|
}
|
|
57
58
|
createReceived() {
|
|
58
59
|
return this.options.backendAdapterFactory.createReceived();
|
|
@@ -126,10 +127,10 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
126
127
|
}
|
|
127
128
|
const meshAdapter = this.options.backendAdapterFactory.createMeshAdapter();
|
|
128
129
|
for (const [spotNodeName, spotNode] of this.options.registration.spotNodes.entries()) {
|
|
129
|
-
const routingId = spotNode.routingId
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
130
|
+
const routingId = spotNode.routingId ??
|
|
131
|
+
spotNode.router?.routingId ??
|
|
132
|
+
spotNode.pubSub?.routingId ??
|
|
133
|
+
`${spotNode.routingIdPrefix ?? spotNodeName}-${(0, node_crypto_1.randomUUID)()}`;
|
|
133
134
|
const bind = spotNode.router?.bind;
|
|
134
135
|
if (bind === undefined) {
|
|
135
136
|
throw new configuration_1.ZLinkConfigurationException(`MeshNode '${spotNodeName}' requires a routing id and ROUTER bind endpoint.`);
|
|
@@ -142,6 +143,9 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
142
143
|
applicationJobReceiveFlowFailureSink: this.options.applicationJobReceiveFlowFailureSink,
|
|
143
144
|
peerAdmissionSealed: () => this.options.peerAdmissionSealed?.(spotNodeName) ?? false
|
|
144
145
|
});
|
|
146
|
+
if (this.options.dispatchErrors !== undefined) {
|
|
147
|
+
node.setDispatchErrorReporter?.(this.options.dispatchErrors, spotNodeName);
|
|
148
|
+
}
|
|
145
149
|
node.setMailboxRecordDroppedHandler?.((record) => this.options.dispatchErrors?.report({
|
|
146
150
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.RouteMeshChannel,
|
|
147
151
|
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
|
|
@@ -161,8 +165,8 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
161
165
|
: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop,
|
|
162
166
|
channelName: spotNodeName,
|
|
163
167
|
sourceRid: record.sourceNodeRid,
|
|
164
|
-
error: new Error(`MeshNode '${spotNodeName}' rejected an invalid service wire record from '${record.sourceNodeRid}'`
|
|
165
|
-
|
|
168
|
+
error: new Error(`MeshNode '${spotNodeName}' rejected an invalid service wire record from '${record.sourceNodeRid}'` +
|
|
169
|
+
(record.command === undefined ? '.' : ` (command ${record.command}).`))
|
|
166
170
|
}));
|
|
167
171
|
let pump;
|
|
168
172
|
const completions = new mesh_completion_table_1.ZLinkMeshCompletionTable();
|
|
@@ -177,20 +181,19 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
177
181
|
...Object.keys(spotNode.actorFactoryRegistrations ?? {})
|
|
178
182
|
];
|
|
179
183
|
const instanceSpotTypes = Object.keys(spotNode.instanceSpotFactoryRegistrations ?? {});
|
|
180
|
-
const hasLegacyObjectFactories = (spotNode.spotFactories?.length ?? 0) > 0
|
|
181
|
-
|
|
182
|
-
|
|
184
|
+
const hasLegacyObjectFactories = (spotNode.spotFactories?.length ?? 0) > 0 ||
|
|
185
|
+
Object.keys(spotNode.instanceSpotFactories ?? {}).length > 0 ||
|
|
186
|
+
(spotNode.actorFactories instanceof Map
|
|
183
187
|
? spotNode.actorFactories.size
|
|
184
188
|
: Object.keys(spotNode.actorFactories ?? {}).length) > 0;
|
|
185
189
|
node.configureObjectPlacement({
|
|
186
|
-
role: spotNode.objectRole
|
|
187
|
-
?? (hasLegacyObjectFactories ? 'server' : 'none'),
|
|
190
|
+
role: spotNode.objectRole ?? (hasLegacyObjectFactories ? 'server' : 'none'),
|
|
188
191
|
placementWeight: spotNode.placementWeight ?? 100,
|
|
189
192
|
activeCapacityLimit: aggregatePlacementCapacity(spotNode.actorLimit ?? 0, spotNode.spotLimit ?? 0),
|
|
190
193
|
pendingCapacityLimit: spotNode.activationConcurrencyLimit ?? 128,
|
|
191
194
|
objectCapabilities: [
|
|
192
|
-
...stableTypes.map(type => `object-type:${type}`),
|
|
193
|
-
...instanceSpotTypes.map(type => `instance-spot-type:${type}`)
|
|
195
|
+
...stableTypes.map((type) => `object-type:${type}`),
|
|
196
|
+
...instanceSpotTypes.map((type) => `instance-spot-type:${type}`)
|
|
194
197
|
],
|
|
195
198
|
...(this.options.registration.maintenanceWave === undefined
|
|
196
199
|
? {}
|
|
@@ -251,7 +254,9 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
251
254
|
async publishMeshNodeState(state, signal, selectedMeshName) {
|
|
252
255
|
const previous = this.statePublication;
|
|
253
256
|
let release;
|
|
254
|
-
this.statePublication = new Promise((resolve) => {
|
|
257
|
+
this.statePublication = new Promise((resolve) => {
|
|
258
|
+
release = resolve;
|
|
259
|
+
});
|
|
255
260
|
await previous;
|
|
256
261
|
try {
|
|
257
262
|
await this.publishMeshNodeStateCore(state, signal, selectedMeshName);
|
|
@@ -265,8 +270,7 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
265
270
|
const owner = location?.runtime.currentOwnerToken;
|
|
266
271
|
if (location === undefined || owner === undefined)
|
|
267
272
|
return;
|
|
268
|
-
const ownerChanged = this.publishedOwnerToken !== undefined
|
|
269
|
-
&& !sameOwnerToken(this.publishedOwnerToken, owner);
|
|
273
|
+
const ownerChanged = this.publishedOwnerToken !== undefined && !sameOwnerToken(this.publishedOwnerToken, owner);
|
|
270
274
|
if (ownerChanged) {
|
|
271
275
|
// A new owner token can refer to an empty or replaced Store. The cached
|
|
272
276
|
// descriptor was written under the previous lease and must not force a
|
|
@@ -289,9 +293,7 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
289
293
|
...actors.map(([stableType, factory]) => objectCapability('actor', stableType, factory))
|
|
290
294
|
].sort((left, right) => {
|
|
291
295
|
const kindOrder = left.objectKind.localeCompare(right.objectKind);
|
|
292
|
-
return kindOrder !== 0
|
|
293
|
-
? kindOrder
|
|
294
|
-
: left.stableType.localeCompare(right.stableType);
|
|
296
|
+
return kindOrder !== 0 ? kindOrder : left.stableType.localeCompare(right.stableType);
|
|
295
297
|
});
|
|
296
298
|
const current = this.publishedMeshNodeDescriptors.get(meshName);
|
|
297
299
|
const previousRevision = this.descriptorRevisionByMesh.get(meshName) ?? 0n;
|
|
@@ -318,10 +320,10 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
318
320
|
limit: registration.spotLimit ?? 0
|
|
319
321
|
},
|
|
320
322
|
spotTypes: capabilities
|
|
321
|
-
.filter(capability => capability.objectKind !== 'actor')
|
|
322
|
-
.map(capability => {
|
|
323
|
-
const previous = current?.populationCapacity.spotTypes.find(candidate => candidate.objectKind === capability.objectKind
|
|
324
|
-
|
|
323
|
+
.filter((capability) => capability.objectKind !== 'actor')
|
|
324
|
+
.map((capability) => {
|
|
325
|
+
const previous = current?.populationCapacity.spotTypes.find((candidate) => candidate.objectKind === capability.objectKind &&
|
|
326
|
+
candidate.stableType === capability.stableType);
|
|
325
327
|
return {
|
|
326
328
|
objectKind: capability.objectKind,
|
|
327
329
|
stableType: capability.stableType,
|
|
@@ -332,15 +334,14 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
332
334
|
})
|
|
333
335
|
},
|
|
334
336
|
activationConcurrency: {
|
|
335
|
-
active: this.options.instanceActivationConcurrencyProvider?.(meshName).active
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
limit: this.options.instanceActivationConcurrencyProvider?.(meshName).limit
|
|
339
|
-
|
|
340
|
-
|
|
337
|
+
active: this.options.instanceActivationConcurrencyProvider?.(meshName).active ??
|
|
338
|
+
current?.activationConcurrency.active ??
|
|
339
|
+
0,
|
|
340
|
+
limit: this.options.instanceActivationConcurrencyProvider?.(meshName).limit ??
|
|
341
|
+
registration.activationConcurrencyLimit ??
|
|
342
|
+
128
|
|
341
343
|
},
|
|
342
|
-
channelWeights: Object.fromEntries(this.serverChannels(meshName)
|
|
343
|
-
.map(([channelName, channel]) => [
|
|
344
|
+
channelWeights: Object.fromEntries(this.serverChannels(meshName).map(([channelName, channel]) => [
|
|
344
345
|
channelName,
|
|
345
346
|
state === contracts_1.ZLinkFrameworkRuntimeState.Draining
|
|
346
347
|
? 0
|
|
@@ -351,14 +352,11 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
351
352
|
spotTypes: [
|
|
352
353
|
...userSpots.map(([stableType]) => stableType),
|
|
353
354
|
...instanceSpots.map(([stableType]) => stableType),
|
|
354
|
-
...(registration.entrySpotType === undefined
|
|
355
|
-
|
|
356
|
-
: [registration.entrySpotType.name])
|
|
357
|
-
]
|
|
358
|
-
.sort(),
|
|
355
|
+
...(registration.entrySpotType === undefined ? [] : [registration.entrySpotType.name])
|
|
356
|
+
].sort(),
|
|
359
357
|
objectCapabilities: capabilities,
|
|
360
358
|
state,
|
|
361
|
-
securityIdentity: 'default'
|
|
359
|
+
securityIdentity: 'default'
|
|
362
360
|
};
|
|
363
361
|
const result = await location.runtime.writeMeshNode(descriptor, ownerChanged
|
|
364
362
|
? Locations_1.ZLinkLocationWriteIntent.Renew
|
|
@@ -387,11 +385,10 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
387
385
|
const owner = location.runtime.currentOwnerToken;
|
|
388
386
|
if (owner === undefined)
|
|
389
387
|
return;
|
|
390
|
-
const current = (await location.runtime.listLiveMeshNodes(meshName, signal))
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
&& descriptor.leaseGeneration === owner.leaseGeneration);
|
|
388
|
+
const current = (await location.runtime.listLiveMeshNodes(meshName, signal)).find((descriptor) => String(descriptor.rid) === String(status.routingId) &&
|
|
389
|
+
descriptor.lifecycleGeneration === status.lifecycleGeneration &&
|
|
390
|
+
descriptor.ownerId === owner.ownerId &&
|
|
391
|
+
descriptor.leaseGeneration === owner.leaseGeneration);
|
|
395
392
|
if (current !== undefined) {
|
|
396
393
|
this.publishedMeshNodeDescriptors.set(meshName, current);
|
|
397
394
|
this.descriptorRevisionByMesh.set(meshName, maxBigInt(this.descriptorRevisionByMesh.get(meshName) ?? 0n, current.descriptorRevision));
|
|
@@ -429,9 +426,7 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
429
426
|
}
|
|
430
427
|
entrySpotIdForMesh(meshName) {
|
|
431
428
|
const registration = this.options.registration.spotNodes.get(meshName);
|
|
432
|
-
return registration === undefined
|
|
433
|
-
? undefined
|
|
434
|
-
: this.entrySpotId(meshName, registration);
|
|
429
|
+
return registration === undefined ? undefined : this.entrySpotId(meshName, registration);
|
|
435
430
|
}
|
|
436
431
|
meshNodeDescriptor(meshName) {
|
|
437
432
|
return this.publishedMeshNodeDescriptors.get(meshName);
|
|
@@ -441,9 +436,7 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
441
436
|
if (registration === undefined) {
|
|
442
437
|
throw new configuration_1.ZLinkConfigurationException(`Mesh '${meshName}' is not registered.`);
|
|
443
438
|
}
|
|
444
|
-
return this.runtimePlacementWeights.get(meshName)
|
|
445
|
-
?? registration.placementWeight
|
|
446
|
-
?? 100;
|
|
439
|
+
return this.runtimePlacementWeights.get(meshName) ?? registration.placementWeight ?? 100;
|
|
447
440
|
}
|
|
448
441
|
channelWeight(channelName) {
|
|
449
442
|
const match = this.resolveChannel(channelName);
|
|
@@ -496,12 +489,9 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
496
489
|
return this.runtimeChannelWeights.get(meshName)?.get(channelName) ?? configuredWeight;
|
|
497
490
|
}
|
|
498
491
|
resolveChannel(channelName) {
|
|
499
|
-
const matches = [...this.options.registration.spotNodes]
|
|
500
|
-
.flatMap(([meshName, registration]) => {
|
|
492
|
+
const matches = [...this.options.registration.spotNodes].flatMap(([meshName, registration]) => {
|
|
501
493
|
const channel = registration.meshChannels?.[channelName];
|
|
502
|
-
return channel === undefined
|
|
503
|
-
? []
|
|
504
|
-
: [{ meshName, configuredWeight: channel.weight ?? 100 }];
|
|
494
|
+
return channel === undefined ? [] : [{ meshName, configuredWeight: channel.weight ?? 100 }];
|
|
505
495
|
});
|
|
506
496
|
if (matches.length === 0) {
|
|
507
497
|
throw new configuration_1.ZLinkConfigurationException(`RouteMesh channel '${channelName}' is not registered.`);
|
|
@@ -512,10 +502,12 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
512
502
|
return matches[0];
|
|
513
503
|
}
|
|
514
504
|
scheduleRuntimeWeightPublication(meshName, applyWeight) {
|
|
515
|
-
const publish = this.runtimeWeightPublication
|
|
505
|
+
const publish = this.runtimeWeightPublication
|
|
506
|
+
.catch(() => undefined)
|
|
507
|
+
.then(async () => {
|
|
516
508
|
await applyWeight();
|
|
517
|
-
const state = this.publishedMeshNodeDescriptors.get(meshName)?.state
|
|
518
|
-
|
|
509
|
+
const state = this.publishedMeshNodeDescriptors.get(meshName)?.state ??
|
|
510
|
+
contracts_1.ZLinkFrameworkRuntimeState.Serving;
|
|
519
511
|
await this.publishMeshNodeState(state, undefined, meshName);
|
|
520
512
|
});
|
|
521
513
|
this.runtimeWeightPublication = publish;
|
|
@@ -551,7 +543,7 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
551
543
|
}
|
|
552
544
|
notifyPrimaryEntrySpotActorLeft(actor, signal, actorRef, membershipEpoch) {
|
|
553
545
|
const activation = this.primaryEntryActivation();
|
|
554
|
-
return activation?.notifyLeaveActor(actor, signal, actorRef, membershipEpoch) ?? Promise.resolve();
|
|
546
|
+
return (activation?.notifyLeaveActor(actor, signal, actorRef, membershipEpoch) ?? Promise.resolve());
|
|
555
547
|
}
|
|
556
548
|
notifyPrimaryEntrySpotActorDisconnected(actor, signal) {
|
|
557
549
|
const activation = this.primaryEntryActivation();
|
|
@@ -562,8 +554,7 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
562
554
|
await this.entryActivations.get(meshName)?.notifyDisconnectActor(actor, signal);
|
|
563
555
|
}
|
|
564
556
|
serverChannels(meshName) {
|
|
565
|
-
return Object.entries(this.options.registration.spotNodes.get(meshName)?.meshChannels ?? {})
|
|
566
|
-
.filter(([, channel]) => channel.server === true);
|
|
557
|
+
return Object.entries(this.options.registration.spotNodes.get(meshName)?.meshChannels ?? {}).filter(([, channel]) => channel.server === true);
|
|
567
558
|
}
|
|
568
559
|
async dispose(signal, deadline) {
|
|
569
560
|
this.disposed = true;
|
|
@@ -614,13 +605,15 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
614
605
|
return;
|
|
615
606
|
}
|
|
616
607
|
const node = this.meshNodes.get(meshName);
|
|
617
|
-
const targetsEntrySpot = owner.spotId === null
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
608
|
+
const targetsEntrySpot = owner.spotId === null ||
|
|
609
|
+
(node !== undefined &&
|
|
610
|
+
(0, routing_id_1.routingIdsEqual)(owner.spotId, String(node.status().routingId)));
|
|
611
|
+
if (targetsEntrySpot &&
|
|
612
|
+
(record.kind === service_runtime_contracts_1.ReceiveKind.ActorSend ||
|
|
613
|
+
record.kind === service_runtime_contracts_1.ReceiveKind.ActorRequest ||
|
|
614
|
+
record.kind === service_runtime_contracts_1.ReceiveKind.SpotSend ||
|
|
615
|
+
record.kind === service_runtime_contracts_1.ReceiveKind.SpotRequest ||
|
|
616
|
+
record.kind === service_runtime_contracts_1.ReceiveKind.SpotMulticast)) {
|
|
624
617
|
await this.ensureEntryActivation(meshName);
|
|
625
618
|
}
|
|
626
619
|
const dispatcher = this.options.meshRecordDispatcher;
|
|
@@ -630,16 +623,14 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
630
623
|
await dispatcher(meshName, owner, record);
|
|
631
624
|
}
|
|
632
625
|
async dispatchEntrySpotRecord(meshName, owner, record) {
|
|
633
|
-
if (record.kind !== service_runtime_contracts_1.ReceiveKind.SpotSend
|
|
634
|
-
|
|
635
|
-
|
|
626
|
+
if (record.kind !== service_runtime_contracts_1.ReceiveKind.SpotSend &&
|
|
627
|
+
record.kind !== service_runtime_contracts_1.ReceiveKind.SpotRequest &&
|
|
628
|
+
record.kind !== service_runtime_contracts_1.ReceiveKind.SpotMulticast) {
|
|
636
629
|
return false;
|
|
637
630
|
}
|
|
638
631
|
await this.ensureEntryActivation(meshName);
|
|
639
632
|
const activation = this.entryActivations.get(meshName);
|
|
640
|
-
if (activation === undefined
|
|
641
|
-
|| owner.spotId === null
|
|
642
|
-
|| activation.spotId !== owner.spotId) {
|
|
633
|
+
if (activation === undefined || owner.spotId === null || activation.spotId !== owner.spotId) {
|
|
643
634
|
return false;
|
|
644
635
|
}
|
|
645
636
|
if (record.kind === service_runtime_contracts_1.ReceiveKind.SpotMulticast) {
|
|
@@ -752,7 +743,12 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
752
743
|
if (activation === undefined) {
|
|
753
744
|
const candidates = this.options.primaryMeshName === undefined
|
|
754
745
|
? this.options.registration.spotNodes
|
|
755
|
-
: new Map([
|
|
746
|
+
: new Map([
|
|
747
|
+
[
|
|
748
|
+
this.options.primaryMeshName,
|
|
749
|
+
this.options.registration.spotNodes.get(this.options.primaryMeshName)
|
|
750
|
+
]
|
|
751
|
+
]);
|
|
756
752
|
for (const [spotNodeName, spotNode] of candidates) {
|
|
757
753
|
if (spotNode === undefined) {
|
|
758
754
|
continue;
|
|
@@ -820,7 +816,8 @@ class ZLinkSpotNodeRuntimeManager {
|
|
|
820
816
|
}
|
|
821
817
|
const parts = (0, flow_context_1.runWithOutboundFlow)(this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true, () => (0, channel_envelope_1.encodeChannelPublishEnvelopeParts)(channelName, topic, packetName, event, undefined, this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true, metadata));
|
|
822
818
|
try {
|
|
823
|
-
publisher.publish(channelName, topic, parts, { flags });
|
|
819
|
+
const processing = publisher.publish(channelName, topic, parts, { flags });
|
|
820
|
+
void Promise.resolve(processing).catch(() => undefined);
|
|
824
821
|
return { status: submission_result_1.ZLinkSubmitStatus.Submitted };
|
|
825
822
|
}
|
|
826
823
|
catch (error) {
|
|
@@ -880,8 +877,7 @@ function requirePublicRuntimeWeight(value, label) {
|
|
|
880
877
|
}
|
|
881
878
|
function effectiveUserSpotRegistrations(registration) {
|
|
882
879
|
const registrations = new Map(Object.entries(registration.spotFactoryRegistrations ?? {}));
|
|
883
|
-
const explicitImplementations = new Set(Object.values(registration.spotFactoryRegistrations ?? {})
|
|
884
|
-
.map(({ implementation }) => implementation));
|
|
880
|
+
const explicitImplementations = new Set(Object.values(registration.spotFactoryRegistrations ?? {}).map(({ implementation }) => implementation));
|
|
885
881
|
for (const implementation of registration.spotFactories ?? []) {
|
|
886
882
|
// `spotFactories` is also retained as the runtime implementation set.
|
|
887
883
|
// When the caller supplied an explicit stable type, the implementation
|
|
@@ -918,9 +914,9 @@ function effectiveObjectRole(registration) {
|
|
|
918
914
|
return contracts_1.ZLinkObjectRole.Server;
|
|
919
915
|
if (registration.objectRole === 'client')
|
|
920
916
|
return contracts_1.ZLinkObjectRole.Client;
|
|
921
|
-
return effectiveUserSpotRegistrations(registration).length > 0
|
|
922
|
-
|
|
923
|
-
|
|
917
|
+
return effectiveUserSpotRegistrations(registration).length > 0 ||
|
|
918
|
+
effectiveInstanceSpotRegistrations(registration).length > 0 ||
|
|
919
|
+
effectiveActorRegistrations(registration).length > 0
|
|
924
920
|
? contracts_1.ZLinkObjectRole.Server
|
|
925
921
|
: contracts_1.ZLinkObjectRole.None;
|
|
926
922
|
}
|
|
@@ -931,9 +927,7 @@ function objectCapability(objectKind, stableType, factory) {
|
|
|
931
927
|
stableType,
|
|
932
928
|
policy,
|
|
933
929
|
hasSnapshotAdapter: policy === 'snapshot',
|
|
934
|
-
limit: objectKind === 'actor'
|
|
935
|
-
? 0
|
|
936
|
-
: factory.options?.stableTypeLimit ?? 0
|
|
930
|
+
limit: objectKind === 'actor' ? 0 : (factory.options?.stableTypeLimit ?? 0)
|
|
937
931
|
};
|
|
938
932
|
}
|
|
939
933
|
function aggregatePlacementCapacity(actorLimit, spotLimit) {
|
|
@@ -946,6 +940,5 @@ function maxBigInt(left, right) {
|
|
|
946
940
|
return left > right ? left : right;
|
|
947
941
|
}
|
|
948
942
|
function sameOwnerToken(left, right) {
|
|
949
|
-
return left.ownerId === right.ownerId
|
|
950
|
-
&& left.leaseGeneration === right.leaseGeneration;
|
|
943
|
+
return left.ownerId === right.ownerId && left.leaseGeneration === right.leaseGeneration;
|
|
951
944
|
}
|