aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authorandrew-rykov <arykov@ydb.tech>2023-10-30 20:07:43 +0300
committerandrew-rykov <arykov@ydb.tech>2023-10-30 20:42:41 +0300
commit8ccc99f1093aa077b04d35edfed58e21a01f0dcd (patch)
tree690a5c47451f5dc79353770e510debc3bca2c9a9 /library/cpp
parentf3fc65218eee3457eb087a9f6df33d5a797075c5 (diff)
downloadydb-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.h27
-rw-r--r--library/cpp/actors/interconnect/interconnect_tcp_session.cpp6
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) {