diff options
author | andrew-rykov <arykov@ydb.tech> | 2023-10-30 20:07:43 +0300 |
---|---|---|
committer | andrew-rykov <arykov@ydb.tech> | 2023-10-30 20:42:41 +0300 |
commit | 8ccc99f1093aa077b04d35edfed58e21a01f0dcd (patch) | |
tree | 690a5c47451f5dc79353770e510debc3bca2c9a9 /library/cpp | |
parent | f3fc65218eee3457eb087a9f6df33d5a797075c5 (diff) | |
download | ydb-8ccc99f1093aa077b04d35edfed58e21a01f0dcd.tar.gz |
KIKIMR-19066 added hc optimal clock skew calculation
Interconnect в режиме реального времени отправляет данные о разнице во времени (ClockSkew) между собой и каждым подключенным пиром на whiteboard. На whiteboard эта информация собирается за период в 15 секунд, и из всех значений выбирается максимальное. Этот максимальный ClockSkew затем используется в ответах на запросы healthcheck-а в течение следующих 15 секунд.
Diffstat (limited to 'library/cpp')
-rw-r--r-- | library/cpp/actors/interconnect/interconnect_common.h | 27 | ||||
-rw-r--r-- | library/cpp/actors/interconnect/interconnect_tcp_session.cpp | 6 |
2 files changed, 29 insertions, 4 deletions
diff --git a/library/cpp/actors/interconnect/interconnect_common.h b/library/cpp/actors/interconnect/interconnect_common.h index d313038094..300153d8de 100644 --- a/library/cpp/actors/interconnect/interconnect_common.h +++ b/library/cpp/actors/interconnect/interconnect_common.h @@ -61,6 +61,30 @@ namespace NActors { } }; + struct TWhiteboardSessionStatus { + TActorSystem* ActorSystem; + ui32 PeerId; + TString Peer; + bool Connected; + bool Green; + bool Yellow; + bool Orange; + bool Red; + i64 ClockSkew; + + TWhiteboardSessionStatus(TActorSystem* actorSystem, ui32 peerId, const TString& peer, bool connected, bool green, bool yellow, bool orange, bool red, i64 clockSkew) + : ActorSystem(actorSystem) + , PeerId(peerId) + , Peer(peer) + , Connected(connected) + , Green(green) + , Yellow(yellow) + , Orange(orange) + , Red(red) + , ClockSkew(clockSkew) + {} + }; + struct TChannelSettings { ui16 Weight; }; @@ -72,8 +96,7 @@ namespace NActors { using TInitWhiteboardCallback = std::function<void(ui16 icPort, TActorSystem* actorSystem)>; - using TUpdateWhiteboardCallback = std::function<void(const TString& peer, bool connected, bool green, bool yellow, - bool orange, bool red, TActorSystem* actorSystem)>; + using TUpdateWhiteboardCallback = std::function<void(const TWhiteboardSessionStatus& data)>; struct TInterconnectProxyCommon : TAtomicRefCount<TInterconnectProxyCommon> { TActorId NameserviceId; diff --git a/library/cpp/actors/interconnect/interconnect_tcp_session.cpp b/library/cpp/actors/interconnect/interconnect_tcp_session.cpp index a7509fbc94..25c05898d2 100644 --- a/library/cpp/actors/interconnect/interconnect_tcp_session.cpp +++ b/library/cpp/actors/interconnect/interconnect_tcp_session.cpp @@ -994,13 +994,15 @@ namespace NActors { } while (false); } - callback(Proxy->Metrics->GetHumanFriendlyPeerHostName(), + callback({TlsActivationContext->ExecutorThread.ActorSystem, + Proxy->PeerNodeId, + Proxy->Metrics->GetHumanFriendlyPeerHostName(), connected, flagState == EFlag::GREEN, flagState == EFlag::YELLOW, flagState == EFlag::ORANGE, flagState == EFlag::RED, - TlsActivationContext->ExecutorThread.ActorSystem); + ReceiveContext->ClockSkew_us.load()}); } if (connected) { |