@zlink-systems/framework 0.20.0 → 0.22.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/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- 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 +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- 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 +158 -124
- 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/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.js +116 -113
- 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 +10 -18
- 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 +43 -33
- 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.js +9 -7
- 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/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- 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 -23
- 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.js +136 -136
- 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-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- 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 +244 -227
- 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/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 +208 -219
- 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.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -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 +74 -85
- 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 +16 -14
- 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 +1 -2
- 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 +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- 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.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- 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 +1 -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 +0 -1
- 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 +138 -130
- 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 +5 -4
- 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 +351 -320
- 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 +73 -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 +335 -383
- 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 +40 -42
- 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 +215 -197
- 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 +11 -8
- 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/flow-context.ts +12 -3
- 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 +95 -76
- 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 -51
- 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 +312 -385
- 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 +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -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 +1 -1
- 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 +593 -563
- 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 +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -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 +230 -221
- 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 +128 -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 +11 -17
- 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 +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- 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 +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -42,9 +42,9 @@ class ZLinkRuntimeRouteTransport {
|
|
|
42
42
|
return this.routeChannelPredicate?.(routerChannelId) ?? false;
|
|
43
43
|
}
|
|
44
44
|
canRoutePacketChannel(routerChannelId) {
|
|
45
|
-
return this.manager()?.canRoutePacketChannel(routerChannelId)
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
return (this.manager()?.canRoutePacketChannel(routerChannelId) ??
|
|
46
|
+
this.routeChannelPredicate?.(routerChannelId) ??
|
|
47
|
+
false);
|
|
48
48
|
}
|
|
49
49
|
async submit(meshName, targetNodeRid, packetName, message, signal, metadata) {
|
|
50
50
|
// Call-scoped flow (spec 27 §4): the envelope flow pair lives only for
|
|
@@ -60,8 +60,8 @@ class ZLinkRuntimeRouteTransport {
|
|
|
60
60
|
return this.requireManager().routeSubmit(meshName, targetNodeRid, packetName, message, signal, metadata);
|
|
61
61
|
}
|
|
62
62
|
(0, abort_1.throwIfAborted)(signal);
|
|
63
|
-
if (!allowObjectClientTarget
|
|
64
|
-
|
|
63
|
+
if (!allowObjectClientTarget &&
|
|
64
|
+
node.isObjectClientNodeDirectTarget?.((0, routing_id_1.toBackendRoutingId)(targetNodeRid)) === true) {
|
|
65
65
|
return { status: submission_result_1.ZLinkSubmitStatus.TargetNotFound };
|
|
66
66
|
}
|
|
67
67
|
const parts = this.encodeMessage(3 /* ZLinkChannelMessageKind.Command */, meshName, packetName, message, undefined, metadata);
|
|
@@ -69,8 +69,8 @@ class ZLinkRuntimeRouteTransport {
|
|
|
69
69
|
if (this.isSelfNode(node, targetNodeRid)) {
|
|
70
70
|
return this.submitLocalNode(meshName, String(node.status().routingId), parts);
|
|
71
71
|
}
|
|
72
|
-
if (!this.isKnownBackendPeer(node, targetNodeRid)
|
|
73
|
-
|
|
72
|
+
if (!this.isKnownBackendPeer(node, targetNodeRid) &&
|
|
73
|
+
this.manualNodeTarget?.(meshName, targetNodeRid) === false) {
|
|
74
74
|
return { status: submission_result_1.ZLinkSubmitStatus.TargetNotFound };
|
|
75
75
|
}
|
|
76
76
|
try {
|
|
@@ -93,7 +93,10 @@ class ZLinkRuntimeRouteTransport {
|
|
|
93
93
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `MeshNode '${meshName}' target '${targetNodeRid}' is an Object Client.`);
|
|
94
94
|
}
|
|
95
95
|
const parts = this.encodeMessage(1 /* ZLinkChannelMessageKind.Request */, meshName, packetName, request, timeoutMs ?? 30_000, metadata);
|
|
96
|
-
const completion = await this.submitRequestOperation(meshName, timeoutMs, signal, `MeshNode '${meshName}' request to node '${targetNodeRid}'`, (remainingTimeoutMs) => node.requestToNode((0, routing_id_1.toBackendRoutingId)(targetNodeRid), parts, {
|
|
96
|
+
const completion = await this.submitRequestOperation(meshName, timeoutMs, signal, `MeshNode '${meshName}' request to node '${targetNodeRid}'`, (remainingTimeoutMs) => node.requestToNode((0, routing_id_1.toBackendRoutingId)(targetNodeRid), parts, {
|
|
97
|
+
flags: 1,
|
|
98
|
+
timeoutMs: remainingTimeoutMs
|
|
99
|
+
}));
|
|
97
100
|
return this.decodeMeshReply(meshName, completion);
|
|
98
101
|
}
|
|
99
102
|
submitToChannel(meshName, channelName, packetName, message, signal, metadata) {
|
|
@@ -170,7 +173,9 @@ class ZLinkRuntimeRouteTransport {
|
|
|
170
173
|
if (spotRouteTarget.spotKind === Spots_1.ZLinkSpotKind.Instance) {
|
|
171
174
|
return mapMeshSubmitResult(await node.sendToInstanceSpot(instanceSpotRouteFence(spotRouteTarget), encoded, undefined, options.metadata));
|
|
172
175
|
}
|
|
173
|
-
return mapMeshSubmitResult(await node
|
|
176
|
+
return mapMeshSubmitResult(await node
|
|
177
|
+
.entrySpot()
|
|
178
|
+
.sendToSpot((0, routing_id_1.toBackendRoutingId)(spotRouteTarget.targetNodeRid), (0, routing_id_1.toBackendRoutingId)(spotRouteTarget.spotId), spotRouteTarget.targetSpotGeneration ?? 0n, encoded, {
|
|
174
179
|
flags: 1,
|
|
175
180
|
routeFence: directSpotRouteFence(spotRouteTarget),
|
|
176
181
|
entrySpot: spotRouteTarget.spotKind === Spots_1.ZLinkSpotKind.Entry
|
|
@@ -202,7 +207,9 @@ class ZLinkRuntimeRouteTransport {
|
|
|
202
207
|
const encoded = this.encodeMessage(1 /* ZLinkChannelMessageKind.Request */, meshName, options.packetName, request, options.timeoutMs, options.metadata);
|
|
203
208
|
completionPromise = this.completionTable(meshName).submit(() => spotRouteTarget.spotKind === Spots_1.ZLinkSpotKind.Instance
|
|
204
209
|
? node.requestInstanceSpot(instanceSpotRouteFence(spotRouteTarget), encoded, options.timeoutMs, undefined, options.metadata)
|
|
205
|
-
: node
|
|
210
|
+
: node
|
|
211
|
+
.entrySpot()
|
|
212
|
+
.requestToSpot((0, routing_id_1.toBackendRoutingId)(spotRouteTarget.targetNodeRid), (0, routing_id_1.toBackendRoutingId)(spotRouteTarget.spotId), spotRouteTarget.targetSpotGeneration ?? 0n, encoded, {
|
|
206
213
|
flags: 1,
|
|
207
214
|
timeoutMs: options.timeoutMs,
|
|
208
215
|
routeFence: directSpotRouteFence(spotRouteTarget),
|
|
@@ -229,13 +236,13 @@ class ZLinkRuntimeRouteTransport {
|
|
|
229
236
|
if (node !== undefined) {
|
|
230
237
|
(0, abort_1.throwIfAborted)(options.signal);
|
|
231
238
|
const payload = JSON.parse(request.getString('utf8'));
|
|
232
|
-
const packetName = typeof payload.packetName === 'string'
|
|
233
|
-
? payload.packetName
|
|
234
|
-
: undefined;
|
|
239
|
+
const packetName = typeof payload.packetName === 'string' ? payload.packetName : undefined;
|
|
235
240
|
const parts = this.encodeMessage(1 /* ZLinkChannelMessageKind.Request */, meshName, packetName, payload, options.timeoutMs);
|
|
236
241
|
let completionPromise;
|
|
237
242
|
try {
|
|
238
|
-
completionPromise = this.completionTable(meshName).submit(() => node
|
|
243
|
+
completionPromise = this.completionTable(meshName).submit(() => node
|
|
244
|
+
.entrySpot()
|
|
245
|
+
.requestToSpot((0, routing_id_1.toBackendRoutingId)(spotRouteTarget.targetNodeRid), (0, routing_id_1.toBackendRoutingId)(spotRouteTarget.spotId), spotRouteTarget.targetSpotGeneration ?? 0n, parts, {
|
|
239
246
|
flags: 1,
|
|
240
247
|
timeoutMs: options.timeoutMs,
|
|
241
248
|
routeFence: directSpotRouteFence(spotRouteTarget),
|
|
@@ -279,7 +286,10 @@ class ZLinkRuntimeRouteTransport {
|
|
|
279
286
|
return (0, routing_id_1.routingIdsEqual)(node.status().routingId, targetNodeRid);
|
|
280
287
|
}
|
|
281
288
|
isKnownBackendPeer(node, targetNodeRid) {
|
|
282
|
-
return node
|
|
289
|
+
return node
|
|
290
|
+
.peers()
|
|
291
|
+
.some((peer) => peer.routingId !== null &&
|
|
292
|
+
(0, routing_id_1.routingIdsEqual)(peer.routingId, targetNodeRid));
|
|
283
293
|
}
|
|
284
294
|
submitLocalNode(meshName, sourceNodeRid, parts) {
|
|
285
295
|
if (this.localNodeSubmit === undefined) {
|
|
@@ -328,12 +338,12 @@ function directSpotRouteFence(target) {
|
|
|
328
338
|
if (target.spotKind === Spots_1.ZLinkSpotKind.Entry) {
|
|
329
339
|
return undefined;
|
|
330
340
|
}
|
|
331
|
-
if (target.targetSpotGeneration === undefined
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
341
|
+
if (target.targetSpotGeneration === undefined ||
|
|
342
|
+
target.targetNodeGeneration === undefined ||
|
|
343
|
+
target.authorityOwnerGeneration === undefined ||
|
|
344
|
+
target.targetOwnerId === undefined ||
|
|
345
|
+
target.ownerLeaseGeneration === undefined ||
|
|
346
|
+
target.authorityStoreVersion === undefined) {
|
|
337
347
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotRouteNotFound, `Spot '${String(target.spotId)}' has no complete Ready authority fence.`);
|
|
338
348
|
}
|
|
339
349
|
return {
|
|
@@ -349,12 +359,12 @@ function directSpotRouteFence(target) {
|
|
|
349
359
|
};
|
|
350
360
|
}
|
|
351
361
|
function instanceSpotRouteFence(target) {
|
|
352
|
-
if (target.targetSpotGeneration === undefined
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
362
|
+
if (target.targetSpotGeneration === undefined ||
|
|
363
|
+
target.targetNodeGeneration === undefined ||
|
|
364
|
+
target.authorityOwnerGeneration === undefined ||
|
|
365
|
+
target.targetOwnerId === undefined ||
|
|
366
|
+
target.ownerLeaseGeneration === undefined ||
|
|
367
|
+
target.authorityStoreVersion === undefined) {
|
|
358
368
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotRouteNotFound, `Instance Spot '${String(target.spotId)}' has no complete Ready authority fence.`);
|
|
359
369
|
}
|
|
360
370
|
return {
|
|
@@ -399,10 +409,10 @@ function mapMeshSubmissionError(error, operation) {
|
|
|
399
409
|
}
|
|
400
410
|
if ((0, runtime_values_1.isZLinkBackendResultError)(error)) {
|
|
401
411
|
const notFound = error.result === runtime_values_1.SubmitResult.NotFound || error.result === 102;
|
|
402
|
-
const retriable = error.result === runtime_values_1.SubmitResult.Backpressured
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
412
|
+
const retriable = error.result === runtime_values_1.SubmitResult.Backpressured ||
|
|
413
|
+
error.result === runtime_values_1.SubmitResult.NotConnected ||
|
|
414
|
+
error.result === 109 ||
|
|
415
|
+
error.result === 113;
|
|
406
416
|
return (0, framework_errors_internal_1.createInternalFrameworkException)(notFound
|
|
407
417
|
? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound
|
|
408
418
|
: framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `${operation} failed with result ${error.result}.`, retriable, error);
|
|
@@ -432,10 +442,10 @@ function meshRequestFailure(meshName, result, nativeErrno) {
|
|
|
432
442
|
: result === runtime_values_1.RequestResult.Terminated
|
|
433
443
|
? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RuntimeShutdown
|
|
434
444
|
: result === runtime_values_1.RequestResult.Conflict || result === runtime_values_1.RequestResult.InternalError
|
|
435
|
-
? wireKind ?? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError
|
|
445
|
+
? (wireKind ?? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError)
|
|
436
446
|
: result === runtime_values_1.RequestResult.NotConnected || result === runtime_values_1.RequestResult.Backpressured
|
|
437
447
|
? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected
|
|
438
|
-
: wireKind ?? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed;
|
|
448
|
+
: (wireKind ?? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed);
|
|
439
449
|
const error = (0, framework_errors_internal_1.createInternalFrameworkException)(kind, `MeshNode '${meshName}' request failed with result ${result} and errno ${nativeErrno}.`, result === runtime_values_1.RequestResult.NotConnected || result === runtime_values_1.RequestResult.Backpressured);
|
|
440
450
|
// An operation id was returned before this completion was observed. The
|
|
441
451
|
// application envelope therefore crossed the native submission boundary,
|
|
@@ -73,7 +73,7 @@ class ZLinkClientServerLocationRuntime {
|
|
|
73
73
|
}
|
|
74
74
|
activeTargets(channelName) {
|
|
75
75
|
return [...this.connections.values()]
|
|
76
|
-
.filter(target => target.state === 'ready')
|
|
76
|
+
.filter((target) => target.state === 'ready')
|
|
77
77
|
.map((target) => target.descriptor)
|
|
78
78
|
.filter((descriptor) => descriptor.channelName === channelName);
|
|
79
79
|
}
|
|
@@ -81,8 +81,7 @@ class ZLinkClientServerLocationRuntime {
|
|
|
81
81
|
const owner = this.requireOwnerToken();
|
|
82
82
|
const descriptors = await this.lane.run(() => [...this.localDescriptors]);
|
|
83
83
|
for (const [channelName, current] of descriptors) {
|
|
84
|
-
if (current.ownerId === owner.ownerId
|
|
85
|
-
&& current.leaseGeneration === owner.leaseGeneration) {
|
|
84
|
+
if (current.ownerId === owner.ownerId && current.leaseGeneration === owner.leaseGeneration) {
|
|
86
85
|
continue;
|
|
87
86
|
}
|
|
88
87
|
const candidate = {
|
|
@@ -152,10 +151,7 @@ class ZLinkClientServerLocationRuntime {
|
|
|
152
151
|
continue;
|
|
153
152
|
}
|
|
154
153
|
const rows = await this.listLiveServers(channelName, signal);
|
|
155
|
-
const desired = new Map(rows.map((descriptor) => [
|
|
156
|
-
clientServerConnectionId(descriptor),
|
|
157
|
-
descriptor
|
|
158
|
-
]));
|
|
154
|
+
const desired = new Map(rows.map((descriptor) => [clientServerConnectionId(descriptor), descriptor]));
|
|
159
155
|
const desiredStableKeys = new Set(rows.map(clientServerStableKey));
|
|
160
156
|
for (const [connectionId, descriptor] of desired) {
|
|
161
157
|
const current = await this.lane.run(() => this.connections.get(connectionId));
|
|
@@ -185,8 +181,8 @@ class ZLinkClientServerLocationRuntime {
|
|
|
185
181
|
for (const [connectionId, current] of connections) {
|
|
186
182
|
if (current.descriptor.channelName !== channelName || desired.has(connectionId))
|
|
187
183
|
continue;
|
|
188
|
-
if (desiredStableKeys.has(clientServerStableKey(current.descriptor))
|
|
189
|
-
|
|
184
|
+
if (desiredStableKeys.has(clientServerStableKey(current.descriptor)) &&
|
|
185
|
+
current.state === 'ready') {
|
|
190
186
|
continue;
|
|
191
187
|
}
|
|
192
188
|
await this.closeConnection(connectionId);
|
|
@@ -203,14 +199,14 @@ class ZLinkClientServerLocationRuntime {
|
|
|
203
199
|
} while (continuationToken !== undefined);
|
|
204
200
|
const live = [];
|
|
205
201
|
for (const descriptor of rows) {
|
|
206
|
-
if (descriptor.state === Locations_1.ZLinkFrameworkRuntimeState.Stopped
|
|
207
|
-
|
|
202
|
+
if (descriptor.state === Locations_1.ZLinkFrameworkRuntimeState.Stopped ||
|
|
203
|
+
descriptor.state === Locations_1.ZLinkFrameworkRuntimeState.Error) {
|
|
208
204
|
continue;
|
|
209
205
|
}
|
|
210
206
|
const lease = await this.stores.ownerLeaseStore.readOwnerLease(descriptor.ownerId, signal);
|
|
211
|
-
if (lease.kind === 'found'
|
|
212
|
-
|
|
213
|
-
|
|
207
|
+
if (lease.kind === 'found' &&
|
|
208
|
+
lease.token.leaseGeneration === descriptor.leaseGeneration &&
|
|
209
|
+
lease.leaseExpiresAt.getTime() > lease.storeNow.getTime()) {
|
|
214
210
|
live.push(descriptor);
|
|
215
211
|
}
|
|
216
212
|
}
|
|
@@ -218,7 +214,7 @@ class ZLinkClientServerLocationRuntime {
|
|
|
218
214
|
}
|
|
219
215
|
async disconnectClients() {
|
|
220
216
|
const connectionIds = await this.lane.run(() => [...this.connections.keys()]);
|
|
221
|
-
await Promise.allSettled(connectionIds.map(connectionId => this.closeConnection(connectionId)));
|
|
217
|
+
await Promise.allSettled(connectionIds.map((connectionId) => this.closeConnection(connectionId)));
|
|
222
218
|
}
|
|
223
219
|
async openConnection(descriptor, connectionId) {
|
|
224
220
|
const target = {
|
|
@@ -231,8 +227,7 @@ class ZLinkClientServerLocationRuntime {
|
|
|
231
227
|
try {
|
|
232
228
|
target.dealer = this.sockets.openClientServerConnection(descriptor.channelName, connectionId, descriptor.endpoint, {
|
|
233
229
|
onTransportReady: (routingId, endpoint) => {
|
|
234
|
-
void this.handleTransportReady(connectionId, routingId, endpoint)
|
|
235
|
-
.catch(error => this.locationRuntime.reportDiscoveryFailure(error));
|
|
230
|
+
void this.handleTransportReady(connectionId, routingId, endpoint).catch((error) => this.locationRuntime.reportDiscoveryFailure(error));
|
|
236
231
|
},
|
|
237
232
|
onTerminated: () => {
|
|
238
233
|
void this.handleConnectionTerminated(connectionId);
|
|
@@ -310,8 +305,7 @@ class ZLinkClientServerLocationRuntime {
|
|
|
310
305
|
return retryAdmission;
|
|
311
306
|
});
|
|
312
307
|
if (shouldRetry) {
|
|
313
|
-
void this.handleTransportReady(connectionId, _routingId, _endpoint)
|
|
314
|
-
.catch(error => this.locationRuntime.reportDiscoveryFailure(error));
|
|
308
|
+
void this.handleTransportReady(connectionId, _routingId, _endpoint).catch((error) => this.locationRuntime.reportDiscoveryFailure(error));
|
|
315
309
|
}
|
|
316
310
|
}
|
|
317
311
|
}
|
|
@@ -319,9 +313,9 @@ class ZLinkClientServerLocationRuntime {
|
|
|
319
313
|
const stableKey = clientServerStableKey(admitted.descriptor);
|
|
320
314
|
const connections = await this.lane.run(() => [...this.connections.values()]);
|
|
321
315
|
const superseded = connections
|
|
322
|
-
.filter(current => current.connectionId !== admitted.connectionId
|
|
323
|
-
|
|
324
|
-
.map(current => current.connectionId);
|
|
316
|
+
.filter((current) => current.connectionId !== admitted.connectionId &&
|
|
317
|
+
clientServerStableKey(current.descriptor) === stableKey)
|
|
318
|
+
.map((current) => current.connectionId);
|
|
325
319
|
for (const connectionId of superseded) {
|
|
326
320
|
await this.closeConnection(connectionId);
|
|
327
321
|
}
|
|
@@ -403,13 +397,13 @@ function clientServerConnectionId(descriptor) {
|
|
|
403
397
|
return `${channelName.length}:${channelName}:${serverRid.length}:${serverRid}:${descriptor.lifecycleGeneration}`;
|
|
404
398
|
}
|
|
405
399
|
function sameDescriptor(left, right) {
|
|
406
|
-
return left.lifecycleGeneration === right.lifecycleGeneration
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
400
|
+
return (left.lifecycleGeneration === right.lifecycleGeneration &&
|
|
401
|
+
left.descriptorRevision === right.descriptorRevision &&
|
|
402
|
+
left.endpoint === right.endpoint &&
|
|
403
|
+
left.weight === right.weight &&
|
|
404
|
+
left.state === right.state &&
|
|
405
|
+
left.ownerId === right.ownerId &&
|
|
406
|
+
left.leaseGeneration === right.leaseGeneration);
|
|
413
407
|
}
|
|
414
408
|
function toDiscoveryDescriptor(descriptor, effectiveMaxMessageBytes = 0x7fff_ffff) {
|
|
415
409
|
return {
|
|
@@ -455,14 +449,14 @@ function requestAdmission(dealer, descriptor, timeoutMs) {
|
|
|
455
449
|
});
|
|
456
450
|
}
|
|
457
451
|
function requireMatchingAdmission(expected, actual) {
|
|
458
|
-
if (actual.channelName !== expected.channelName
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
452
|
+
if (actual.channelName !== expected.channelName ||
|
|
453
|
+
actual.serverRid !== String(expected.serverRid) ||
|
|
454
|
+
actual.lifecycleGeneration !== expected.lifecycleGeneration ||
|
|
455
|
+
actual.descriptorRevision !== expected.descriptorRevision ||
|
|
456
|
+
actual.weight !== expected.weight ||
|
|
457
|
+
actual.state !== expected.state ||
|
|
458
|
+
actual.securityIdentity !== expected.securityIdentity ||
|
|
459
|
+
actual.advertisedEndpoint !== expected.endpoint) {
|
|
466
460
|
throw new configuration_1.ZLinkConfigurationException(`ClientServer '${expected.channelName}' admission does not match its descriptor.`);
|
|
467
461
|
}
|
|
468
462
|
}
|
|
@@ -471,7 +465,5 @@ function closeMessages(parts) {
|
|
|
471
465
|
part.close();
|
|
472
466
|
}
|
|
473
467
|
function normalizedMessageLimit(value) {
|
|
474
|
-
return Number.isSafeInteger(value) && value > 0
|
|
475
|
-
? Math.min(value, 0xffff_ffff)
|
|
476
|
-
: 0x7fff_ffff;
|
|
468
|
+
return Number.isSafeInteger(value) && value > 0 ? Math.min(value, 0xffff_ffff) : 0x7fff_ffff;
|
|
477
469
|
}
|
|
@@ -58,18 +58,15 @@ function encodeClientServerLivenessAck(probeId) {
|
|
|
58
58
|
return encodeLiveness(COMMAND_LIVENESS_ACK, probeId);
|
|
59
59
|
}
|
|
60
60
|
function isClientServerControlFrame(frame) {
|
|
61
|
-
return frame.byteLength >= 5
|
|
62
|
-
&& frame[0] === MAGIC_0
|
|
63
|
-
&& frame[1] === MAGIC_1
|
|
64
|
-
&& frame[2] === WIRE_MAJOR;
|
|
61
|
+
return (frame.byteLength >= 5 && frame[0] === MAGIC_0 && frame[1] === MAGIC_1 && frame[2] === WIRE_MAJOR);
|
|
65
62
|
}
|
|
66
63
|
function decodeClientServerControl(frame) {
|
|
67
64
|
if (frame.byteLength > MAX_DESCRIPTOR_BYTES)
|
|
68
65
|
fail('ClientServer control record is oversized.');
|
|
69
66
|
const reader = new Reader(frame);
|
|
70
|
-
if (reader.u8('magic[0]') !== MAGIC_0
|
|
71
|
-
|
|
72
|
-
|
|
67
|
+
if (reader.u8('magic[0]') !== MAGIC_0 ||
|
|
68
|
+
reader.u8('magic[1]') !== MAGIC_1 ||
|
|
69
|
+
reader.u8('wireMajor') !== WIRE_MAJOR) {
|
|
73
70
|
fail('ClientServer control record prefix is invalid.');
|
|
74
71
|
}
|
|
75
72
|
const command = reader.u8('command');
|
|
@@ -113,9 +110,7 @@ function decodeClientServerControl(frame) {
|
|
|
113
110
|
fail('ClientServer server admission role is invalid.');
|
|
114
111
|
const admission = decodeServerAdmission(reader);
|
|
115
112
|
reader.end();
|
|
116
|
-
return command === COMMAND_ADMIT
|
|
117
|
-
? { kind: 'admit', admission }
|
|
118
|
-
: { kind: 'update', admission };
|
|
113
|
+
return command === COMMAND_ADMIT ? { kind: 'admit', admission } : { kind: 'update', admission };
|
|
119
114
|
}
|
|
120
115
|
function encodeLiveness(command, probeId) {
|
|
121
116
|
return concat(prefix(command), encodeNonZeroU64(probeId, 'probeId'));
|
|
@@ -206,24 +201,36 @@ function encodeText16(value, field) {
|
|
|
206
201
|
}
|
|
207
202
|
function runtimeStateToWire(value) {
|
|
208
203
|
switch (value) {
|
|
209
|
-
case Locations_1.ZLinkFrameworkRuntimeState.Preparing:
|
|
210
|
-
|
|
204
|
+
case Locations_1.ZLinkFrameworkRuntimeState.Preparing:
|
|
205
|
+
return 0;
|
|
206
|
+
case Locations_1.ZLinkFrameworkRuntimeState.Serving:
|
|
207
|
+
return 1;
|
|
211
208
|
case Locations_1.ZLinkFrameworkRuntimeState.Relocating:
|
|
212
209
|
case Locations_1.ZLinkFrameworkRuntimeState.Relocated:
|
|
213
|
-
case Locations_1.ZLinkFrameworkRuntimeState.Draining:
|
|
214
|
-
|
|
215
|
-
case Locations_1.ZLinkFrameworkRuntimeState.
|
|
216
|
-
|
|
210
|
+
case Locations_1.ZLinkFrameworkRuntimeState.Draining:
|
|
211
|
+
return 2;
|
|
212
|
+
case Locations_1.ZLinkFrameworkRuntimeState.Stopped:
|
|
213
|
+
return 3;
|
|
214
|
+
case Locations_1.ZLinkFrameworkRuntimeState.Error:
|
|
215
|
+
return 4;
|
|
216
|
+
default:
|
|
217
|
+
fail('ClientServer runtime state is invalid.');
|
|
217
218
|
}
|
|
218
219
|
}
|
|
219
220
|
function runtimeStateFromWire(value) {
|
|
220
221
|
switch (value) {
|
|
221
|
-
case 0:
|
|
222
|
-
|
|
223
|
-
case
|
|
224
|
-
|
|
225
|
-
case
|
|
226
|
-
|
|
222
|
+
case 0:
|
|
223
|
+
return Locations_1.ZLinkFrameworkRuntimeState.Preparing;
|
|
224
|
+
case 1:
|
|
225
|
+
return Locations_1.ZLinkFrameworkRuntimeState.Serving;
|
|
226
|
+
case 2:
|
|
227
|
+
return Locations_1.ZLinkFrameworkRuntimeState.Draining;
|
|
228
|
+
case 3:
|
|
229
|
+
return Locations_1.ZLinkFrameworkRuntimeState.Stopped;
|
|
230
|
+
case 4:
|
|
231
|
+
return Locations_1.ZLinkFrameworkRuntimeState.Error;
|
|
232
|
+
default:
|
|
233
|
+
fail('ClientServer runtime state is invalid.');
|
|
227
234
|
}
|
|
228
235
|
}
|
|
229
236
|
function concat(...parts) {
|
|
@@ -83,9 +83,9 @@ function normalizeDispatchFailure(event) {
|
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
85
|
function channelDropReason(event) {
|
|
86
|
-
if (event.action !== ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
if (event.action !== ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop ||
|
|
87
|
+
(event.surface !== ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.Channel &&
|
|
88
|
+
event.surface !== ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.RouteMeshChannel))
|
|
89
89
|
return undefined;
|
|
90
90
|
switch (event.reason) {
|
|
91
91
|
case ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerMissing:
|
|
@@ -114,10 +114,12 @@ function dispatchErrorInfo(event) {
|
|
|
114
114
|
return {
|
|
115
115
|
errorType: event.error.name,
|
|
116
116
|
errorMessage: event.error.message,
|
|
117
|
-
...(cause === event.error
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
117
|
+
...(cause === event.error
|
|
118
|
+
? {}
|
|
119
|
+
: {
|
|
120
|
+
errorCauseType: cause instanceof Error ? cause.name : typeof cause,
|
|
121
|
+
errorCauseMessage: cause instanceof Error ? cause.message : String(cause)
|
|
122
|
+
})
|
|
121
123
|
};
|
|
122
124
|
}
|
|
123
125
|
return { errorType: typeof event.error, errorMessage: String(event.error) };
|
|
@@ -65,21 +65,20 @@ class ZLinkFanoutLocationRuntime {
|
|
|
65
65
|
if (timer !== undefined)
|
|
66
66
|
clearTimeout(timer);
|
|
67
67
|
const connectionIds = await this.lane.run(() => [...this.connections.keys()]);
|
|
68
|
-
await Promise.allSettled(connectionIds.map(id => this.closeConnection(id)));
|
|
68
|
+
await Promise.allSettled(connectionIds.map((id) => this.closeConnection(id)));
|
|
69
69
|
await this.removeLocalPublishers(signal);
|
|
70
70
|
}
|
|
71
71
|
activeTargets(channelName) {
|
|
72
72
|
return [...this.connections.values()]
|
|
73
|
-
.filter(target => target.state === 'ready')
|
|
74
|
-
.map(target => target.descriptor)
|
|
75
|
-
.filter(descriptor => descriptor.channelName === channelName);
|
|
73
|
+
.filter((target) => target.state === 'ready')
|
|
74
|
+
.map((target) => target.descriptor)
|
|
75
|
+
.filter((descriptor) => descriptor.channelName === channelName);
|
|
76
76
|
}
|
|
77
77
|
async reclaimOwnerRows(signal) {
|
|
78
78
|
const owner = this.requireOwnerToken();
|
|
79
79
|
const descriptors = await this.lane.run(() => [...this.localDescriptors]);
|
|
80
80
|
for (const [channelName, current] of descriptors) {
|
|
81
|
-
if (current.ownerId === owner.ownerId
|
|
82
|
-
&& current.leaseGeneration === owner.leaseGeneration) {
|
|
81
|
+
if (current.ownerId === owner.ownerId && current.leaseGeneration === owner.leaseGeneration) {
|
|
83
82
|
continue;
|
|
84
83
|
}
|
|
85
84
|
const candidate = {
|
|
@@ -125,11 +124,8 @@ class ZLinkFanoutLocationRuntime {
|
|
|
125
124
|
if (currentIdentity !== undefined)
|
|
126
125
|
return currentIdentity;
|
|
127
126
|
const created = {
|
|
128
|
-
publisherRid: channel.routingId
|
|
129
|
-
|
|
130
|
-
lifecycleGeneration: generatedLifecycle === 0n
|
|
131
|
-
? 1n
|
|
132
|
-
: generatedLifecycle
|
|
127
|
+
publisherRid: channel.routingId ?? `${channel.routingIdPrefix ?? 'fanout'}-${(0, node_crypto_1.randomUUID)()}`,
|
|
128
|
+
lifecycleGeneration: generatedLifecycle === 0n ? 1n : generatedLifecycle
|
|
133
129
|
};
|
|
134
130
|
this.publisherIdentities.set(channelName, created);
|
|
135
131
|
return created;
|
|
@@ -158,27 +154,22 @@ class ZLinkFanoutLocationRuntime {
|
|
|
158
154
|
}
|
|
159
155
|
async reconcileSubscribers(signal) {
|
|
160
156
|
for (const [channelName, channel] of this.registration.channels) {
|
|
161
|
-
if (channel.subscriber === undefined
|
|
162
|
-
|
|
157
|
+
if (channel.subscriber === undefined ||
|
|
158
|
+
(channel.subscriber.manualConnections?.length ?? 0) > 0) {
|
|
163
159
|
continue;
|
|
164
160
|
}
|
|
165
161
|
const rows = await this.listLivePublishers(channelName, signal);
|
|
166
|
-
const desired = new Map(rows.map(row => [
|
|
167
|
-
fanoutConnectionId(row),
|
|
168
|
-
row
|
|
169
|
-
]));
|
|
162
|
+
const desired = new Map(rows.map((row) => [fanoutConnectionId(row), row]));
|
|
170
163
|
for (const [connectionId, descriptor] of desired) {
|
|
171
164
|
const current = await this.lane.run(() => this.connections.get(connectionId));
|
|
172
165
|
if (current === undefined) {
|
|
173
166
|
await this.openConnection(connectionId, descriptor);
|
|
174
167
|
continue;
|
|
175
168
|
}
|
|
176
|
-
if (descriptor.descriptorRevision
|
|
177
|
-
< current.descriptor.descriptorRevision) {
|
|
169
|
+
if (descriptor.descriptorRevision < current.descriptor.descriptorRevision) {
|
|
178
170
|
continue;
|
|
179
171
|
}
|
|
180
|
-
if (descriptor.descriptorRevision
|
|
181
|
-
=== current.descriptor.descriptorRevision) {
|
|
172
|
+
if (descriptor.descriptorRevision === current.descriptor.descriptorRevision) {
|
|
182
173
|
if (!sameFanoutDescriptor(descriptor, current.descriptor)) {
|
|
183
174
|
await this.closeConnection(connectionId);
|
|
184
175
|
}
|
|
@@ -198,8 +189,7 @@ class ZLinkFanoutLocationRuntime {
|
|
|
198
189
|
}
|
|
199
190
|
const connections = await this.lane.run(() => [...this.connections]);
|
|
200
191
|
for (const [connectionId, current] of connections) {
|
|
201
|
-
if (current.descriptor.channelName === channelName
|
|
202
|
-
&& !desired.has(connectionId)) {
|
|
192
|
+
if (current.descriptor.channelName === channelName && !desired.has(connectionId)) {
|
|
203
193
|
await this.closeConnection(connectionId);
|
|
204
194
|
}
|
|
205
195
|
}
|
|
@@ -217,14 +207,11 @@ class ZLinkFanoutLocationRuntime {
|
|
|
217
207
|
},
|
|
218
208
|
onTerminated: () => {
|
|
219
209
|
const current = this.connections.get(connectionId);
|
|
220
|
-
if (target !== undefined
|
|
221
|
-
&& current === target
|
|
222
|
-
&& current.reconnectEligible) {
|
|
210
|
+
if (target !== undefined && current === target && current.reconnectEligible) {
|
|
223
211
|
this.sockets.removeFanoutPublisher(descriptor, connectionId);
|
|
224
212
|
current.state = 'connecting';
|
|
225
213
|
setImmediate(() => {
|
|
226
|
-
void this.replaceConnection(current)
|
|
227
|
-
.catch(error => this.locationRuntime.reportDiscoveryFailure(error));
|
|
214
|
+
void this.replaceConnection(current).catch((error) => this.locationRuntime.reportDiscoveryFailure(error));
|
|
228
215
|
});
|
|
229
216
|
}
|
|
230
217
|
}
|
|
@@ -258,9 +245,9 @@ class ZLinkFanoutLocationRuntime {
|
|
|
258
245
|
async replaceConnection(expected) {
|
|
259
246
|
const prepared = await this.lane.run(() => {
|
|
260
247
|
const controller = this.controller;
|
|
261
|
-
if (this.connections.get(expected.connectionId) !== expected
|
|
262
|
-
|
|
263
|
-
|
|
248
|
+
if (this.connections.get(expected.connectionId) !== expected ||
|
|
249
|
+
!expected.reconnectEligible ||
|
|
250
|
+
controller === undefined)
|
|
264
251
|
return undefined;
|
|
265
252
|
return { controller, descriptor: expected.descriptor };
|
|
266
253
|
});
|
|
@@ -285,9 +272,9 @@ class ZLinkFanoutLocationRuntime {
|
|
|
285
272
|
if (descriptor.state !== Locations_1.ZLinkFrameworkRuntimeState.Serving)
|
|
286
273
|
continue;
|
|
287
274
|
const lease = await this.storeOwnerLease(descriptor.ownerId, signal);
|
|
288
|
-
if (lease.kind === 'found'
|
|
289
|
-
|
|
290
|
-
|
|
275
|
+
if (lease.kind === 'found' &&
|
|
276
|
+
lease.token.leaseGeneration === descriptor.leaseGeneration &&
|
|
277
|
+
lease.leaseExpiresAt.getTime() > lease.storeNow.getTime()) {
|
|
291
278
|
live.push(descriptor);
|
|
292
279
|
}
|
|
293
280
|
}
|
|
@@ -322,7 +309,7 @@ class ZLinkFanoutLocationRuntime {
|
|
|
322
309
|
this.timer = setTimeout(() => {
|
|
323
310
|
this.timer = undefined;
|
|
324
311
|
void this.tickCore(this.controller?.signal)
|
|
325
|
-
.catch(error => this.locationRuntime.reportDiscoveryFailure(error))
|
|
312
|
+
.catch((error) => this.locationRuntime.reportDiscoveryFailure(error))
|
|
326
313
|
.finally(() => this.schedule());
|
|
327
314
|
}, this.options.pollingIntervalMs);
|
|
328
315
|
this.timer.unref();
|
|
@@ -337,20 +324,20 @@ function advertisedEndpoint(boundEndpoint, advertiseHost) {
|
|
|
337
324
|
return result;
|
|
338
325
|
}
|
|
339
326
|
function fanoutConnectionId(descriptor) {
|
|
340
|
-
return `${descriptor.channelName}\0${String(descriptor.publisherRid)}\0`
|
|
341
|
-
|
|
327
|
+
return (`${descriptor.channelName}\0${String(descriptor.publisherRid)}\0` +
|
|
328
|
+
descriptor.lifecycleGeneration.toString());
|
|
342
329
|
}
|
|
343
330
|
function sameFanoutImmutableIdentity(left, right) {
|
|
344
|
-
return left.channelName === right.channelName
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
331
|
+
return (left.channelName === right.channelName &&
|
|
332
|
+
left.publisherRid === right.publisherRid &&
|
|
333
|
+
left.lifecycleGeneration === right.lifecycleGeneration &&
|
|
334
|
+
left.endpoint === right.endpoint &&
|
|
335
|
+
left.securityIdentity === right.securityIdentity &&
|
|
336
|
+
left.ownerId === right.ownerId &&
|
|
337
|
+
left.leaseGeneration === right.leaseGeneration);
|
|
351
338
|
}
|
|
352
339
|
function sameFanoutDescriptor(left, right) {
|
|
353
|
-
return sameFanoutImmutableIdentity(left, right)
|
|
354
|
-
|
|
355
|
-
|
|
340
|
+
return (sameFanoutImmutableIdentity(left, right) &&
|
|
341
|
+
left.descriptorRevision === right.descriptorRevision &&
|
|
342
|
+
left.state === right.state);
|
|
356
343
|
}
|
|
@@ -10,15 +10,13 @@ exports.FANOUT_LIVENESS_PAYLOAD = Uint8Array.from([0x5a, 0x46, 0x01, 0x01]);
|
|
|
10
10
|
function inspectFanoutInbound(topic, parts) {
|
|
11
11
|
if (topic !== FanoutTopic_1.FANOUT_LIVENESS_TOPIC) {
|
|
12
12
|
const header = (0, channel_envelope_inspection_1.tryDecodeChannelHeader)(parts);
|
|
13
|
-
return header === undefined
|
|
14
|
-
? { kind: 'protocolError' }
|
|
15
|
-
: { kind: 'application', header };
|
|
13
|
+
return header === undefined ? { kind: 'protocolError' } : { kind: 'application', header };
|
|
16
14
|
}
|
|
17
15
|
if (parts.length !== 1)
|
|
18
16
|
return { kind: 'protocolError' };
|
|
19
17
|
const payload = parts[0].data();
|
|
20
|
-
return payload.length === exports.FANOUT_LIVENESS_PAYLOAD.length
|
|
21
|
-
|
|
18
|
+
return payload.length === exports.FANOUT_LIVENESS_PAYLOAD.length &&
|
|
19
|
+
payload.every((value, index) => value === exports.FANOUT_LIVENESS_PAYLOAD[index])
|
|
22
20
|
? { kind: 'beacon' }
|
|
23
21
|
: { kind: 'protocolError' };
|
|
24
22
|
}
|
|
@@ -33,7 +33,13 @@ class ZLinkLocalSpotRouteTransport {
|
|
|
33
33
|
return pending;
|
|
34
34
|
return new Promise((resolve, reject) => {
|
|
35
35
|
const timeout = setTimeout(() => reject(new configuration_1.ZLinkConfigurationException(`Route channel '${routerChannelId}' local SPOT request timed out.`)), effectiveTimeoutMs);
|
|
36
|
-
pending.then((value) => {
|
|
36
|
+
pending.then((value) => {
|
|
37
|
+
clearTimeout(timeout);
|
|
38
|
+
resolve(value);
|
|
39
|
+
}, (error) => {
|
|
40
|
+
clearTimeout(timeout);
|
|
41
|
+
reject(error);
|
|
42
|
+
});
|
|
37
43
|
});
|
|
38
44
|
}
|
|
39
45
|
}
|