aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authorserg-belyakov <serg-belyakov@yandex-team.com>2023-01-31 16:50:02 +0300
committerserg-belyakov <serg-belyakov@yandex-team.com>2023-01-31 16:50:02 +0300
commitc59ebb3abe9e37543ca3165cb747458d776ec8ce (patch)
tree1ace1581ceba2662ff487bf051894dd1269f9473 /library/cpp
parentd944e5735d03f4f4645b89e7380b86a309c06280 (diff)
downloadydb-c59ebb3abe9e37543ca3165cb747458d776ec8ce.tar.gz
Parse old IC version record, when new one is not present,
UT initial optional minor tag Initial
Diffstat (limited to 'library/cpp')
-rw-r--r--library/cpp/actors/interconnect/interconnect_common.h1
-rw-r--r--library/cpp/actors/interconnect/interconnect_handshake.cpp14
2 files changed, 14 insertions, 1 deletions
diff --git a/library/cpp/actors/interconnect/interconnect_common.h b/library/cpp/actors/interconnect/interconnect_common.h
index 3364ca4cd97..64b707dc96f 100644
--- a/library/cpp/actors/interconnect/interconnect_common.h
+++ b/library/cpp/actors/interconnect/interconnect_common.h
@@ -106,6 +106,7 @@ namespace NActors {
std::optional<TString> CompatibilityInfo;
std::function<bool(const TString&, TString&)> ValidateCompatibilityInfo;
+ std::function<bool(const TInterconnectProxyCommon::TVersionInfo&, TString&)> ValidateCompatibilityOldFormat;
using TPtr = TIntrusivePtr<TInterconnectProxyCommon>;
};
diff --git a/library/cpp/actors/interconnect/interconnect_handshake.cpp b/library/cpp/actors/interconnect/interconnect_handshake.cpp
index df0ca29f2b9..cf1579bf8a1 100644
--- a/library/cpp/actors/interconnect/interconnect_handshake.cpp
+++ b/library/cpp/actors/interconnect/interconnect_handshake.cpp
@@ -291,13 +291,25 @@ namespace NActors {
template<typename T, typename TCallback>
void ValidateCompatibilityInfo(const T& proto, TCallback&& errorCallback) {
// if possible, use new CompatibilityInfo field
- if (Common->ValidateCompatibilityInfo && proto.HasCompatibilityInfo()) {
+ if (proto.HasCompatibilityInfo() && Common->ValidateCompatibilityInfo) {
TString errorReason;
if (!Common->ValidateCompatibilityInfo(proto.GetCompatibilityInfo(), errorReason)) {
TStringStream s("Local and peer CompatibilityInfo are incompatible");
s << ", errorReason# " << errorReason;
errorCallback(s.Str());
}
+ } else if (proto.HasVersionTag() && Common->ValidateCompatibilityOldFormat) {
+ TInterconnectProxyCommon::TVersionInfo oldFormat;
+ oldFormat.Tag = proto.GetVersionTag();
+ for (ui32 i = 0; i < proto.AcceptedVersionTagsSize(); ++i) {
+ oldFormat.AcceptedTags.insert(proto.GetAcceptedVersionTags(i));
+ }
+ TString errorReason;
+ if (!Common->ValidateCompatibilityOldFormat(oldFormat, errorReason)) {
+ TStringStream s("Local CompatibilityInfo and peer TVersionInfo are incompatible");
+ s << ", errorReason# " << errorReason;
+ errorCallback(s.Str());
+ }
} else {
ValidateVersionTag(proto, std::forward<TCallback>(errorCallback));
}