Skip to content

Commit dd1b532

Browse files
author
Vadim Averin
authored
Add security_tags table write hint (#6574)
1 parent 6340586 commit dd1b532

File tree

4 files changed

+50
-3
lines changed

4 files changed

+50
-3
lines changed

ydb/library/yql/providers/yt/gateway/native/yql_yt_native.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2157,6 +2157,15 @@ class TYtNativeGateway : public IYtGateway {
21572157
}
21582158
}
21592159

2160+
NYT::TNode securityTagsNode;
2161+
if (strOpts.contains(EYtSettingType::SecurityTags)) {
2162+
securityTagsNode = NYT::NodeFromYsonString(strOpts.at(EYtSettingType::SecurityTags));
2163+
}
2164+
2165+
if (EYtWriteMode::Append != mode && !securityTagsNode.IsUndefined()) {
2166+
yqlAttrs[SecurityTagsName] = securityTagsNode;
2167+
}
2168+
21602169
const auto userAttrsIt = strOpts.find(EYtSettingType::UserAttrs);
21612170
if (userAttrsIt != strOpts.cend()) {
21622171
const NYT::TNode mapNode = NYT::NodeFromYsonString(userAttrsIt->second);
@@ -2212,7 +2221,8 @@ class TYtNativeGateway : public IYtGateway {
22122221
appendToSorted, initial, entry, dstPath, dstEpoch, yqlAttrs, combineChunks,
22132222
dstCompressionCodec, dstErasureCodec, dstReplicationFactor, dstMedia, dstPrimaryMedium,
22142223
nativeYtTypeCompatibility, publishTx, cluster,
2215-
commitCheckpoint, columnGroupsSpec = std::move(columnGroupsSpec)] (const auto& f) mutable
2224+
commitCheckpoint, columnGroupsSpec = std::move(columnGroupsSpec),
2225+
securityTagsNode] (const auto& f) mutable
22162226
{
22172227
if (f.GetValue()) {
22182228
execCtx->QueryCacheItem.Destroy();
@@ -2245,6 +2255,12 @@ class TYtNativeGateway : public IYtGateway {
22452255
mergeSpec.AddInput(path);
22462256
}
22472257

2258+
NYT::TNode spec = execCtx->Session_->CreateSpecWithDesc();
2259+
2260+
if (EYtWriteMode::Append == mode && !securityTagsNode.IsUndefined()) {
2261+
spec["additional_security_tags"] = securityTagsNode;
2262+
}
2263+
22482264
auto ytDst = TRichYPath(dstPath);
22492265
if (EYtWriteMode::Append == mode && !appendToSorted) {
22502266
ytDst.Append(true);
@@ -2293,7 +2309,6 @@ class TYtNativeGateway : public IYtGateway {
22932309
mergeSpec.Mode(MM_ORDERED);
22942310
}
22952311

2296-
NYT::TNode spec = execCtx->Session_->CreateSpecWithDesc();
22972312
EYtOpProps flags = EYtOpProp::PublishedAutoMerge;
22982313
if (combineChunks) {
22992314
flags |= EYtOpProp::PublishedChunkCombine;

ydb/library/yql/providers/yt/provider/yql_yt_datasink_type_ann.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1474,6 +1474,7 @@ class TYtDataSinkTypeAnnotationTransformer : public TVisitorTransformerBase {
14741474
| EYtSettingType::MonotonicKeys
14751475
| EYtSettingType::MutationId
14761476
| EYtSettingType::ColumnGroups
1477+
| EYtSettingType::SecurityTags
14771478
, ctx))
14781479
{
14791480
return TStatus::Error;
@@ -1746,6 +1747,7 @@ class TYtDataSinkTypeAnnotationTransformer : public TVisitorTransformerBase {
17461747
| EYtSettingType::MonotonicKeys
17471748
| EYtSettingType::MutationId
17481749
| EYtSettingType::ColumnGroups
1750+
| EYtSettingType::SecurityTags
17491751
, ctx))
17501752
{
17511753
return TStatus::Error;

ydb/library/yql/providers/yt/provider/yql_yt_op_settings.cpp

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -869,8 +869,37 @@ bool ValidateSettings(const TExprNode& settingsNode, EYtSettingTypes accepted, T
869869
}
870870
break;
871871
}
872+
case EYtSettingType::SecurityTags: {
873+
if (!EnsureTupleSize(*setting, 2, ctx)) {
874+
return false;
875+
}
876+
if (!EnsureAtom(setting->Tail(), ctx)) {
877+
return false;
878+
}
879+
NYT::TNode securityTagsNode;
880+
try {
881+
securityTagsNode = NYT::NodeFromYsonString(setting->Tail().Content());
882+
} catch (const std::exception& e) {
883+
ctx.AddError(TIssue(ctx.GetPosition(setting->Tail().Pos()), TStringBuilder()
884+
<< "Failed to parse Yson: " << e.what()));
885+
return false;
886+
}
887+
if (!securityTagsNode.IsList()) {
888+
ctx.AddError(TIssue(ctx.GetPosition(setting->Tail().Pos()), TStringBuilder()
889+
<< "Expected YSON list of strings"));
890+
return false;
891+
}
892+
for (const auto &child : securityTagsNode.AsList()) {
893+
if (!child.IsString()) {
894+
ctx.AddError(TIssue(ctx.GetPosition(setting->Tail().Pos()), TStringBuilder()
895+
<< "Expected YSON list of strings"));
896+
return false;
897+
}
898+
}
899+
return true;
900+
}
872901
case EYtSettingType::LAST: {
873-
YQL_ENSURE(false);
902+
YQL_ENSURE(false, "Unexpected EYtSettingType");
874903
}
875904
}
876905
}

ydb/library/yql/providers/yt/provider/yql_yt_op_settings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ enum class EYtSettingType: ui64 {
116116
MonotonicKeys /* "monotonic_keys", "monotonickeys" */,
117117
MutationId /* "mutationid", "mutation_id" */,
118118
ColumnGroups /* "column_groups", "columngroups" */,
119+
SecurityTags /* "security_tags", "securitytags" */,
119120

120121
LAST
121122
};

0 commit comments

Comments
 (0)