diff options
| author | udovichenko-r <[email protected]> | 2025-11-12 16:35:54 +0300 |
|---|---|---|
| committer | udovichenko-r <[email protected]> | 2025-11-12 17:22:14 +0300 |
| commit | b4abe24d34fa2148ab7c938cd24bdc331fe4eecd (patch) | |
| tree | f788632d217cb3dea5d749a3de385735808a28f2 | |
| parent | 69eb8a156b9c3547684eabb28f6055b0ec1c1f4c (diff) | |
Use isRobot API flag in task runner
commit_hash:cfe2b8b385e4d0420832ee38e3190db0251933b8
5 files changed, 37 insertions, 12 deletions
diff --git a/yql/essentials/core/credentials/yql_credentials.h b/yql/essentials/core/credentials/yql_credentials.h index cc5bf5d8e29..8b643fe102a 100644 --- a/yql/essentials/core/credentials/yql_credentials.h +++ b/yql/essentials/core/credentials/yql_credentials.h @@ -48,6 +48,14 @@ public: return Groups_; } + void SetIsRobot(bool isRobot) { + IsRobot_ = isRobot; + } + + bool IsRobot() const { + return IsRobot_; + } + const TCredential* FindCredential(const TStringBuf& name) const; TString FindCredentialContent(const TStringBuf& name1, const TStringBuf& name2, const TString& defaultContent) const; @@ -60,6 +68,7 @@ private: THashMap<TString, TCredential> CredentialTable_; TUserCredentials UserCredentials_; std::unordered_set<TString> Groups_; + bool IsRobot_ = false; }; } // namespace NYql diff --git a/yql/essentials/providers/common/activation/yql_activation.cpp b/yql/essentials/providers/common/activation/yql_activation.cpp index 85adeb0ba7b..3e10c121897 100644 --- a/yql/essentials/providers/common/activation/yql_activation.cpp +++ b/yql/essentials/providers/common/activation/yql_activation.cpp @@ -12,7 +12,7 @@ namespace NYql::NConfig { template <class TActivation> -ui32 GetPercentage(const TActivation& activation, const TString& userName, const std::unordered_set<std::string_view>& groups) { +ui32 GetPercentage(const TActivation& activation, const TString& userName, bool isRobot, const std::unordered_set<std::string_view>& groups) { if (AnyOf(activation.GetIncludeUsers(), [&](const auto& user) { return user == userName; })) { return 100; } @@ -32,7 +32,7 @@ ui32 GetPercentage(const TActivation& activation, const TString& userName, const if (currentRev && AnyOf(activation.GetExcludeRevisions(), [&](const auto& rev) { return rev == currentRev; })) { return 0; } - if ((userName.StartsWith("robot-") || userName.StartsWith("zomb-")) && activation.GetExcludeRobots()) { + if (isRobot && activation.GetExcludeRobots()) { return 0; } @@ -55,13 +55,13 @@ ui32 GetPercentage(const TActivation& activation, const TString& userName, const } template <class TActivation> -bool Allow(const TActivation& activation, const TString& userName, const std::unordered_set<std::string_view>& groups) { - ui32 percent = GetPercentage(activation, userName, groups); +bool Allow(const TActivation& activation, const TString& userName, bool isRobot, const std::unordered_set<std::string_view>& groups) { + ui32 percent = GetPercentage(activation, userName, isRobot, groups); const auto random = RandomNumber<ui8>(100); return random < percent; } -template ui32 GetPercentage<NYql::TActivationPercentage>(const NYql::TActivationPercentage& activation, const TString& userName, const std::unordered_set<std::string_view>& groups); -template bool Allow<NYql::TActivationPercentage>(const NYql::TActivationPercentage& activation, const TString& userName, const std::unordered_set<std::string_view>& groups); +template ui32 GetPercentage<NYql::TActivationPercentage>(const NYql::TActivationPercentage& activation, const TString& userName, bool isRobot, const std::unordered_set<std::string_view>& groups); +template bool Allow<NYql::TActivationPercentage>(const NYql::TActivationPercentage& activation, const TString& userName, bool isRobot, const std::unordered_set<std::string_view>& groups); } // namespace NYql::NConfig diff --git a/yql/essentials/providers/common/activation/yql_activation.h b/yql/essentials/providers/common/activation/yql_activation.h index 3d4f3068e55..fcac244bed2 100644 --- a/yql/essentials/providers/common/activation/yql_activation.h +++ b/yql/essentials/providers/common/activation/yql_activation.h @@ -6,9 +6,21 @@ namespace NYql::NConfig { template <class TActivation> -ui32 GetPercentage(const TActivation& activation, const TString& userName, const std::unordered_set<std::string_view>& groups); +ui32 GetPercentage(const TActivation& activation, const TString& userName, bool userIsRobot, const std::unordered_set<std::string_view>& groups); +// TODO: remove after changing DQ provider template <class TActivation> -bool Allow(const TActivation& activation, const TString& userName, const std::unordered_set<std::string_view>& groups); +ui32 GetPercentage(const TActivation& activation, const TString& userName, const std::unordered_set<std::string_view>& groups) { + return GetPercentage(activation, userName, userName.StartsWith("robot-") || userName.StartsWith("zomb-"), groups); +} + +template <class TActivation> +bool Allow(const TActivation& activation, const TString& userName, bool userIsRobot, const std::unordered_set<std::string_view>& groups); + +// TODO: remove after changing DQ provider +template <class TActivation> +bool Allow(const TActivation& activation, const TString& userName, const std::unordered_set<std::string_view>& groups) { + return Allow(activation, userName, userName.StartsWith("robot-") || userName.StartsWith("zomb-"), groups); +} } // namespace NYql::NConfig diff --git a/yql/essentials/providers/config/yql_config_provider.cpp b/yql/essentials/providers/config/yql_config_provider.cpp index 4ca9f7e3778..5f534bde8c0 100644 --- a/yql/essentials/providers/config/yql_config_provider.cpp +++ b/yql/essentials/providers/config/yql_config_provider.cpp @@ -144,14 +144,16 @@ public: bool Initialize(TExprContext& ctx) override { std::unordered_set<std::string_view> groups; + bool isRobot = false; if (Types_.Credentials != nullptr) { groups.insert(Types_.Credentials->GetGroups().begin(), Types_.Credentials->GetGroups().end()); + isRobot = Types_.Credentials->IsRobot(); } - auto filter = [this, groups = std::move(groups)](const TCoreAttr& attr) { + auto filter = [this, groups = std::move(groups), isRobot](const TCoreAttr& attr) { if (!attr.HasActivation() || !Username_) { return true; } - if (NConfig::Allow(attr.GetActivation(), Username_, groups)) { + if (NConfig::Allow(attr.GetActivation(), Username_, isRobot, groups)) { Statistics_.Entries.emplace_back(TStringBuilder() << "Activation:" << attr.GetName(), 0, 0, 0, 0, 1); return true; } diff --git a/yt/yql/providers/yt/provider/yql_yt_provider.cpp b/yt/yql/providers/yt/provider/yql_yt_provider.cpp index c0854fa7b99..f70e866ebd5 100644 --- a/yt/yql/providers/yt/provider/yql_yt_provider.cpp +++ b/yt/yql/providers/yt/provider/yql_yt_provider.cpp @@ -360,14 +360,16 @@ std::pair<std::shared_ptr<TYtState>, TStatWriter> CreateYtNativeState(IYtGateway if (ytGatewayConfig) { std::unordered_set<std::string_view> groups; + bool isRobot = false; if (ytState->Types->Credentials != nullptr) { groups.insert(ytState->Types->Credentials->GetGroups().begin(), ytState->Types->Credentials->GetGroups().end()); + isRobot = ytState->Types->Credentials->IsRobot(); } - auto filter = [userName, ytState, groups = std::move(groups)](const NYql::TAttr& attr) -> bool { + auto filter = [userName, ytState, groups = std::move(groups), isRobot](const NYql::TAttr& attr) -> bool { if (!attr.HasActivation()) { return true; } - if (NConfig::Allow(attr.GetActivation(), userName, groups)) { + if (NConfig::Allow(attr.GetActivation(), userName, isRobot, groups)) { with_lock(ytState->StatisticsMutex) { ytState->Statistics[Max<ui32>()].Entries.emplace_back(TStringBuilder() << "Activation:" << attr.GetName(), 0, 0, 0, 0, 1); } |
