Browse Source

YQL-16922 feature flag, another way to keep inner worlds deps

vvvv 1 year ago
parent
commit
fbd998fd44

+ 1 - 0
ydb/library/yql/providers/yt/common/yql_yt_settings.cpp

@@ -451,6 +451,7 @@ TYtConfiguration::TYtConfiguration()
             }
             return res;
         });
+    REGISTER_SETTING(*this, ViewIsolation);
 }
 
 EReleaseTempDataMode GetReleaseTempDataMode(const TYtSettings& settings) {

+ 1 - 0
ydb/library/yql/providers/yt/common/yql_yt_settings.h

@@ -260,6 +260,7 @@ struct TYtSettings {
     NCommon::TConfSetting<double, false> MaxCpuUsageToFuseMultiOuts;
     NCommon::TConfSetting<double, false> MaxReplicationFactorToFuseMultiOuts;
     NCommon::TConfSetting<ui64, false> ApplyStoredConstraints;
+    NCommon::TConfSetting<bool, false> ViewIsolation;
 };
 
 EReleaseTempDataMode GetReleaseTempDataMode(const TYtSettings& settings);

+ 16 - 1
ydb/library/yql/providers/yt/provider/yql_yt_datasource.cpp

@@ -730,7 +730,9 @@ private:
                 YQL_ENSURE(root, "View is not initialized: " << view);
                 TOptimizeExprSettings settings(nullptr);
                 settings.VisitChanges = true;
-                auto status = OptimizeExpr(root, root, [newReadNode, rightOverRead, &readNode](const TExprNode::TPtr& node, TExprContext& ctx) {
+                TExprNode::TListType innerWorlds;
+                const bool enableViewIsolation = State_->Configuration->ViewIsolation.Get().GetOrElse(false);
+                auto status = OptimizeExpr(root, root, [newReadNode, rightOverRead, &readNode, enableViewIsolation, &innerWorlds](const TExprNode::TPtr& node, TExprContext& ctx) {
                     if (auto world = TMaybeNode<TCoLeft>(node).Input().Maybe<TCoRead>().World()) {
                         return world.Cast().Ptr();
                     }
@@ -752,6 +754,12 @@ private:
                             YQL_ENSURE(false, "Unknown table name (should be self or self_raw): " << tableName);
                         }
 
+                        if (enableViewIsolation) {
+                            if (read.World().Raw()->Type() != TExprNode::World) {
+                                innerWorlds.push_back(read.World().Ptr());
+                            }
+                        }
+
                         return selfRead;
                     }
 
@@ -766,6 +774,13 @@ private:
                 if (status.Level == IGraphTransformer::TStatus::Error) {
                     return {};
                 }
+
+                if (!innerWorlds.empty()) {
+                    innerWorlds.push_back(origReadNode.World().Ptr());
+                    auto combined = ctx.NewCallable(origReadNode.World().Pos(), "Sync!", std::move(innerWorlds));
+                    root = ctx.ReplaceNode(std::move(root), *origReadNode.World().Raw(), combined);
+                }
+
                 newReadNode = root;
                 ctx.Step
                     .Repeat(TExprStep::ExpandApplyForLambdas)

+ 4 - 2
ydb/library/yql/providers/yt/provider/yql_yt_load_table_meta.cpp

@@ -102,7 +102,8 @@ public:
                         // Intents/views can be updated since evaluation phase
                         if (!tableDesc.FillViews(
                             clusterAndTable.first, clusterAndTable.second, ctx,
-                            State_->Types->Modules.get(), State_->Types->UrlListerManager.Get(), *State_->Types->RandomProvider
+                            State_->Types->Modules.get(), State_->Types->UrlListerManager.Get(), *State_->Types->RandomProvider,
+                            State_->Configuration->ViewIsolation.Get().GetOrElse(false)
                         )) {
                             return TStatus::Error;
                         }
@@ -229,7 +230,8 @@ public:
                 if (0 == LoadCtx->Epoch) {
                     if (!tableDesc.Fill(
                         cluster, tableName, ctx,
-                        State_->Types->Modules.get(), State_->Types->UrlListerManager.Get(), *State_->Types->RandomProvider
+                        State_->Types->Modules.get(), State_->Types->UrlListerManager.Get(), *State_->Types->RandomProvider,
+                        State_->Configuration->ViewIsolation.Get().GetOrElse(false)
                     )) {
                         return TStatus::Error;
                     }

+ 6 - 4
ydb/library/yql/providers/yt/provider/yql_yt_provider.cpp

@@ -14,7 +14,8 @@ namespace NYql {
 
 bool TYtTableDescription::Fill(
     const TString& cluster, const TString& table, TExprContext& ctx,
-    IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider) {
+    IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider,
+    bool allowViewIsolation) {
     const TStructExprType* type = RowSpec ? RowSpec->GetType() : nullptr;
     if (!type) {
         TVector<const TItemExprType*> items;
@@ -28,7 +29,7 @@ bool TYtTableDescription::Fill(
 
     if (!TYtTableDescriptionBase::Fill(TString{YtProviderName}, cluster,
         table, type, Meta->SqlView, Meta->SqlViewSyntaxVersion, Meta->Attrs, ctx,
-        moduleResolver, urlListerManager, randomProvider)) {
+        moduleResolver, urlListerManager, randomProvider, allowViewIsolation)) {
         return false;
     }
     if (QB2RowSpec) {
@@ -243,10 +244,11 @@ void TYtTableDescription::SetConstraintsReady() {
 
 bool TYtTableDescription::FillViews(
     const TString& cluster, const TString& table, TExprContext& ctx,
-    IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider) {
+    IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider,
+    bool allowViewIsolation) {
     return TYtTableDescriptionBase::FillViews(
         TString{YtProviderName}, cluster, table, Meta->Attrs, ctx,
-        moduleResolver, urlListerManager, randomProvider);
+        moduleResolver, urlListerManager, randomProvider, allowViewIsolation);
 }
 
 const TYtTableDescription& TYtTablesData::GetTable(const TString& cluster, const TString& table, TMaybe<ui32> epoch) const {

+ 4 - 2
ydb/library/yql/providers/yt/provider/yql_yt_provider.h

@@ -46,14 +46,16 @@ struct TYtTableDescription: public TYtTableDescriptionBase {
 
     bool Fill(
         const TString& cluster, const TString& table, TExprContext& ctx,
-        IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider);
+        IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider,
+        bool allowViewIsolation);
     void ToYson(NYson::TYsonWriter& writer, const TString& cluster, const TString& table, const TString& view) const;
     bool Validate(TPosition pos, TStringBuf cluster, TStringBuf tableName, bool withQB,
         const THashMap<std::pair<TString, TString>, TString>& anonymousLabels, TExprContext& ctx) const;
     void SetConstraintsReady();
     bool FillViews(
         const TString& cluster, const TString& table, TExprContext& ctx,
-        IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider);
+        IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider,
+        bool allowViewIsolation);
 };
 
 // Anonymous tables are kept by labels

+ 12 - 9
ydb/library/yql/providers/yt/provider/yql_yt_table_desc.cpp

@@ -150,7 +150,7 @@ TExprNode::TPtr BuildIgnoreTypeV3Remapper(const TStructExprType* rowType, TExprC
 }
 
 TExprNode::TPtr CompileViewSql(const TString& provider, const TString& cluster, const TString& sql, ui16 syntaxVersion,
-    TExprContext& ctx, IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider)
+    TExprContext& ctx, IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider, bool enableViewIsolation)
 {
     NSQLTranslation::TTranslationSettings settings;
     settings.Mode = NSQLTranslation::ESqlMode::LIMITED_VIEW;
@@ -159,7 +159,10 @@ TExprNode::TPtr CompileViewSql(const TString& provider, const TString& cluster,
     settings.SyntaxVersion = syntaxVersion;
     settings.V0Behavior = NSQLTranslation::EV0Behavior::Disable;
     settings.FileAliasPrefix = "view_" + randomProvider.GenUuid4().AsGuidString() + "/";
-    settings.FileAliasPrefix.clear(); // disable FileAliasPrefix while preserving number of randomProvider calls
+    if (!enableViewIsolation) {
+        settings.FileAliasPrefix.clear(); // disable FileAliasPrefix while preserving number of randomProvider calls
+    }
+
     NYql::TAstParseResult sqlRes = NSQLTranslation::SqlToYql(sql, settings);
     ctx.IssueManager.RaiseIssues(sqlRes.Issues);
     if (!sqlRes.IsOk()) {
@@ -241,10 +244,10 @@ TExprNode::TPtr CompileViewSql(const TString& provider, const TString& cluster,
 
 
 bool TYtViewDescription::Fill(const TString& provider, const TString& cluster, const TString& sql, ui16 syntaxVersion, TExprContext& ctx,
-    IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider)
+    IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider, bool enableViewIsolation)
 {
     Sql = sql;
-    CompiledSql = CompileViewSql(provider, cluster, sql, syntaxVersion, ctx, moduleResolver, urlListerManager, randomProvider);
+    CompiledSql = CompileViewSql(provider, cluster, sql, syntaxVersion, ctx, moduleResolver, urlListerManager, randomProvider, enableViewIsolation);
     return bool(CompiledSql);
 }
 
@@ -255,7 +258,7 @@ void TYtViewDescription::CleanupCompiledSQL()
 
 bool TYtTableDescriptionBase::Fill(const TString& provider, const TString& cluster, const TString& table,
     const TStructExprType* type, const TString& viewSql, ui16 syntaxVersion, const THashMap<TString, TString>& metaAttrs,
-    TExprContext& ctx, IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider)
+    TExprContext& ctx, IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider, bool enableViewIsolation)
 {
     // (1) row type
     RawRowType = type;
@@ -334,13 +337,13 @@ bool TYtTableDescriptionBase::Fill(const TString& provider, const TString& clust
     }
 
     // (3) views
-    if (!FillViews(provider, cluster, table, metaAttrs, ctx, moduleResolver, urlListerManager, randomProvider)) {
+    if (!FillViews(provider, cluster, table, metaAttrs, ctx, moduleResolver, urlListerManager, randomProvider, enableViewIsolation)) {
         return false;
     }
 
     if (viewSql) {
         if (!View) {
-            if (!View.ConstructInPlace().Fill(provider, cluster, viewSql, syntaxVersion, ctx, moduleResolver, urlListerManager, randomProvider)) {
+            if (!View.ConstructInPlace().Fill(provider, cluster, viewSql, syntaxVersion, ctx, moduleResolver, urlListerManager, randomProvider, enableViewIsolation)) {
                 ctx.AddError(TIssue(TPosition(),
                     TStringBuilder() << "Can't load sql view, table: " << cluster << '.' << table));
                 return false;
@@ -353,7 +356,7 @@ bool TYtTableDescriptionBase::Fill(const TString& provider, const TString& clust
 
 bool TYtTableDescriptionBase::FillViews(const TString& provider, const TString& cluster, const TString& table,
     const THashMap<TString, TString>& metaAttrs, TExprContext& ctx, IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager,
-    IRandomProvider& randomProvider)
+    IRandomProvider& randomProvider, bool allowViewIsolation)
 {
     for (auto& view: Views) {
         TYtViewDescription& viewDesc = view.second;
@@ -381,7 +384,7 @@ bool TYtTableDescriptionBase::FillViews(const TString& provider, const TString&
                 }
             }
 
-            if (!viewDesc.Fill(provider, cluster, viewSql, syntaxVersion, ctx, moduleResolver, urlListerManager, randomProvider)) {
+            if (!viewDesc.Fill(provider, cluster, viewSql, syntaxVersion, ctx, moduleResolver, urlListerManager, randomProvider, allowViewIsolation)) {
                 ctx.AddError(TIssue(TPosition(),
                     TStringBuilder() << "Can't load sql view " << viewSql.Quote()
                     << ", table: " << cluster << '.' << table

+ 5 - 3
ydb/library/yql/providers/yt/provider/yql_yt_table_desc.h

@@ -49,7 +49,7 @@ struct TYtViewDescription {
     const TTypeAnnotationNode* RowType = nullptr; // Filled only if scheme requested
 
     bool Fill(const TString& provider, const TString& cluster, const TString& sql, ui16 syntaxVersion, TExprContext& ctx,
-        IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider);
+        IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider, bool enableViewIsolation);
     void CleanupCompiledSQL();
 };
 
@@ -70,10 +70,12 @@ struct TYtTableDescriptionBase {
 
     bool Fill(const TString& provider, const TString& cluster, const TString& table, const TStructExprType* type,
         const TString& viewSql, ui16 syntaxVersion, const THashMap<TString, TString>& metaAttrs, TExprContext& ctx,
-        IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider);
+        IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider,
+        bool enableViewIsolation);
     void CleanupCompiledSQL();
     bool FillViews(const TString& provider, const TString& cluster, const TString& table, const THashMap<TString, TString>& metaAttrs,
-        TExprContext& ctx, IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider);
+        TExprContext& ctx, IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider,
+        bool enableViewIsolation);
 };
 
 }

+ 22 - 0
ydb/library/yql/tests/sql/dq_file/part1/canondata/result.json

@@ -5271,6 +5271,28 @@
         }
     ],
     "test.test[udf-udf_empty--Results]": [],
+    "test.test[view-file_inner--Analyze]": [
+        {
+            "checksum": "54309e5edab077a2d8be42ffb37c28ef",
+            "size": 3714,
+            "uri": "https://storage.yandex-team.ru/get-devtools/1936842/2efa1889a5b9a34d1d175cc9294c735a49bae32b/resource.tar.gz#test.test_view-file_inner--Analyze_/plan.txt"
+        }
+    ],
+    "test.test[view-file_inner--Debug]": [
+        {
+            "checksum": "62667771fc9f6b4e85c2b2c0234bb544",
+            "size": 2292,
+            "uri": "https://storage.yandex-team.ru/get-devtools/1936842/2efa1889a5b9a34d1d175cc9294c735a49bae32b/resource.tar.gz#test.test_view-file_inner--Debug_/opt.yql_patched"
+        }
+    ],
+    "test.test[view-file_inner--Plan]": [
+        {
+            "checksum": "54309e5edab077a2d8be42ffb37c28ef",
+            "size": 3714,
+            "uri": "https://storage.yandex-team.ru/get-devtools/1936842/2efa1889a5b9a34d1d175cc9294c735a49bae32b/resource.tar.gz#test.test_view-file_inner--Plan_/plan.txt"
+        }
+    ],
+    "test.test[view-file_inner--Results]": [],
     "test.test[view-view_with_library--Analyze]": [
         {
             "checksum": "6eee21387ac9a19187d0bfda16852d86",

+ 5 - 0
ydb/library/yql/tests/sql/dq_file/part2/canondata/result.json

@@ -5789,6 +5789,11 @@
         }
     ],
     "test.test[union_all-union_all_with_discard_into_result_ansi-default.txt-Results]": [],
+    "test.test[view-file_outer--Results]": [
+        {
+            "uri": "file://test.test_view-file_outer--Results_/extracted"
+        }
+    ],
     "test.test[weak_field-yql-7888_mapfieldsubset--Analyze]": [
         {
             "checksum": "794347e345742152325e2c4ad845019f",

Some files were not shown because too many files changed in this diff