diff options
author | serg-belyakov <serg-belyakov@yandex-team.com> | 2023-01-31 16:50:02 +0300 |
---|---|---|
committer | serg-belyakov <serg-belyakov@yandex-team.com> | 2023-01-31 16:50:02 +0300 |
commit | c59ebb3abe9e37543ca3165cb747458d776ec8ce (patch) | |
tree | 1ace1581ceba2662ff487bf051894dd1269f9473 /library/cpp | |
parent | d944e5735d03f4f4645b89e7380b86a309c06280 (diff) | |
download | ydb-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.h | 1 | ||||
-rw-r--r-- | library/cpp/actors/interconnect/interconnect_handshake.cpp | 14 |
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)); } |