diff options
author | ulya-sidorina <yulia@ydb.tech> | 2023-05-18 11:45:01 +0300 |
---|---|---|
committer | ulya-sidorina <yulia@ydb.tech> | 2023-05-18 11:45:01 +0300 |
commit | 17685fd08f59368fa7cdda98ae40e66c425643e3 (patch) | |
tree | 1b645e654e3ae8dbdb9ba0d576227fc7f7265a0f | |
parent | 97ad50c6ad821532af89637a8b2ca8aaa61c1650 (diff) | |
download | ydb-17685fd08f59368fa7cdda98ae40e66c425643e3.tar.gz |
move EnableKqpImmediateEffects flag to TTableServiceConfig
refactor(kqp): move EnableKqpImmediateEffects flag to TTableServiceConfig
-rw-r--r-- | ydb/core/kqp/compile_service/kqp_compile_actor.cpp | 1 | ||||
-rw-r--r-- | ydb/core/kqp/provider/yql_kikimr_exec.cpp | 7 | ||||
-rw-r--r-- | ydb/core/kqp/provider/yql_kikimr_provider.h | 24 | ||||
-rw-r--r-- | ydb/core/kqp/provider/yql_kikimr_settings.h | 2 | ||||
-rw-r--r-- | ydb/core/kqp/session_actor/kqp_query_state.h | 2 | ||||
-rw-r--r-- | ydb/core/kqp/session_actor/kqp_session_actor.cpp | 10 | ||||
-rw-r--r-- | ydb/core/kqp/session_actor/kqp_tx.cpp | 2 | ||||
-rw-r--r-- | ydb/core/kqp/session_actor/kqp_tx.h | 11 | ||||
-rw-r--r-- | ydb/core/kqp/ut/common/kqp_ut_common.cpp | 9 | ||||
-rw-r--r-- | ydb/core/kqp/ut/effects/kqp_immediate_effects_ut.cpp | 200 | ||||
-rw-r--r-- | ydb/core/kqp/ut/query/kqp_query_ut.cpp | 2 | ||||
-rw-r--r-- | ydb/core/protos/config.proto | 4 | ||||
-rw-r--r-- | ydb/core/testlib/basics/feature_flags.h | 1 | ||||
-rw-r--r-- | ydb/core/tx/datashard/datashard_ut_volatile.cpp | 4 |
14 files changed, 159 insertions, 120 deletions
diff --git a/ydb/core/kqp/compile_service/kqp_compile_actor.cpp b/ydb/core/kqp/compile_service/kqp_compile_actor.cpp index 6952bf9ea88..34757a637ec 100644 --- a/ydb/core/kqp/compile_service/kqp_compile_actor.cpp +++ b/ydb/core/kqp/compile_service/kqp_compile_actor.cpp @@ -368,6 +368,7 @@ void ApplyServiceConfig(TKikimrConfiguration& kqpConfig, const TTableServiceConf kqpConfig.EnablePredicateExtractForDataQuery = serviceConfig.GetEnablePredicateExtractForDataQueries(); kqpConfig.EnablePredicateExtractForScanQuery = serviceConfig.GetEnablePredicateExtractForScanQueries(); kqpConfig.EnableSequentialHints = serviceConfig.GetEnableSequentialHints(); + kqpConfig.EnableKqpImmediateEffects = serviceConfig.GetEnableKqpImmediateEffects(); } IActor* CreateKqpCompileActor(const TActorId& owner, const TKqpSettings::TConstPtr& kqpSettings, diff --git a/ydb/core/kqp/provider/yql_kikimr_exec.cpp b/ydb/core/kqp/provider/yql_kikimr_exec.cpp index 684a6cd207d..6848f5098b2 100644 --- a/ydb/core/kqp/provider/yql_kikimr_exec.cpp +++ b/ydb/core/kqp/provider/yql_kikimr_exec.cpp @@ -1817,7 +1817,6 @@ private: std::pair<bool, TIssues> ApplyTableOperations(const TString& cluster, const TVector<NKqpProto::TKqpTableOp>& tableOps) { - bool enableImmediateEffects = SessionCtx->Config().FeatureFlags.GetEnableKqpImmediateEffects(); auto queryType = SessionCtx->Query().Type; TVector<NKqpProto::TKqpTableInfo> tableInfo; @@ -1830,11 +1829,11 @@ private: } if (!SessionCtx->HasTx()) { - TKikimrTransactionContextBase emptyCtx; - return emptyCtx.ApplyTableOperations(tableOps, tableInfo, enableImmediateEffects, queryType); + TKikimrTransactionContextBase emptyCtx(SessionCtx->Config().EnableKqpImmediateEffects); + return emptyCtx.ApplyTableOperations(tableOps, tableInfo, queryType); } - return SessionCtx->Tx().ApplyTableOperations(tableOps, tableInfo, enableImmediateEffects, queryType); + return SessionCtx->Tx().ApplyTableOperations(tableOps, tableInfo, queryType); } bool ApplyDdlOperation(const TString& cluster, TPositionHandle pos, const TString& table, diff --git a/ydb/core/kqp/provider/yql_kikimr_provider.h b/ydb/core/kqp/provider/yql_kikimr_provider.h index 02d9ae3a69d..e45598a5c0b 100644 --- a/ydb/core/kqp/provider/yql_kikimr_provider.h +++ b/ydb/core/kqp/provider/yql_kikimr_provider.h @@ -240,13 +240,8 @@ bool AddDmlIssue(const TIssue& issue, TExprContext& ctx); class TKikimrTransactionContextBase : public TThrRefBase { public: - THashMap<TString, TYdbOperations> TableOperations; - bool HasUncommittedChangesRead = false; - THashMap<TKikimrPathId, TString> TableByIdMap; - TMaybe<NKikimrKqp::EIsolationLevel> EffectiveIsolationLevel; - bool Readonly = false; - bool Invalidated = false; - bool Closed = false; + explicit TKikimrTransactionContextBase(bool enableImmediateEffects) : EnableImmediateEffects(enableImmediateEffects) { + } bool HasStarted() const { return EffectiveIsolationLevel.Defined(); @@ -282,7 +277,7 @@ public: template<class IterableKqpTableOps, class IterableKqpTableInfos> std::pair<bool, TIssues> ApplyTableOperations(const IterableKqpTableOps& operations, - const IterableKqpTableInfos& tableInfos, bool enableImmediateEffects, EKikimrQueryType queryType) + const IterableKqpTableInfos& tableInfos, EKikimrQueryType queryType) { TIssues issues; if (IsClosed()) { @@ -366,7 +361,7 @@ public: bool currentModify = currentOps & KikimrModifyOps(); if (currentModify) { if (KikimrReadOps() & newOp) { - if (!enableImmediateEffects) { + if (!EnableImmediateEffects) { TString message = TStringBuilder() << "Data modifications previously made to table '" << table << "' in current transaction won't be seen by operation: '" << newOp << "'"; @@ -379,7 +374,7 @@ public: } if (info->GetHasIndexTables()) { - if (!enableImmediateEffects) { + if (!EnableImmediateEffects) { TString message = TStringBuilder() << "Multiple modification of table with secondary indexes is not supported yet"; issues.AddIssue(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message)); @@ -398,6 +393,15 @@ public: virtual ~TKikimrTransactionContextBase() = default; +public: + THashMap<TString, TYdbOperations> TableOperations; + bool HasUncommittedChangesRead = false; + const bool EnableImmediateEffects; + THashMap<TKikimrPathId, TString> TableByIdMap; + TMaybe<NKikimrKqp::EIsolationLevel> EffectiveIsolationLevel; + bool Readonly = false; + bool Invalidated = false; + bool Closed = false; }; class TKikimrSessionContext : public TThrRefBase { diff --git a/ydb/core/kqp/provider/yql_kikimr_settings.h b/ydb/core/kqp/provider/yql_kikimr_settings.h index ae76d4c484c..1b9793a6933 100644 --- a/ydb/core/kqp/provider/yql_kikimr_settings.h +++ b/ydb/core/kqp/provider/yql_kikimr_settings.h @@ -137,7 +137,7 @@ struct TKikimrConfiguration : public TKikimrSettings, public NCommon::TSettingDi bool EnableKqpScanQueryStreamIdxLookupJoin = false; bool EnablePredicateExtractForScanQuery = true; bool EnablePredicateExtractForDataQuery = false; - + bool EnableKqpImmediateEffects = false; bool EnableSequentialHints = false; }; diff --git a/ydb/core/kqp/session_actor/kqp_query_state.h b/ydb/core/kqp/session_actor/kqp_query_state.h index 139a536e266..5ab09057b0b 100644 --- a/ydb/core/kqp/session_actor/kqp_query_state.h +++ b/ydb/core/kqp/session_actor/kqp_query_state.h @@ -242,7 +242,7 @@ public: } if (TxCtx->HasUncommittedChangesRead) { - YQL_ENSURE(AppData()->FeatureFlags.GetEnableKqpImmediateEffects()); + YQL_ENSURE(TxCtx->EnableImmediateEffects); if (tx && tx->GetHasEffects()) { YQL_ENSURE(tx->ResultsSize() == 0); diff --git a/ydb/core/kqp/session_actor/kqp_session_actor.cpp b/ydb/core/kqp/session_actor/kqp_session_actor.cpp index 4b576ff2a38..1c99d959823 100644 --- a/ydb/core/kqp/session_actor/kqp_session_actor.cpp +++ b/ydb/core/kqp/session_actor/kqp_session_actor.cpp @@ -562,7 +562,8 @@ public: void BeginTx(const Ydb::Table::TransactionSettings& settings) { QueryState->TxId = UlidGen.Next(); - QueryState->TxCtx = MakeIntrusive<TKqpTransactionContext>(false, AppData()->FunctionRegistry, AppData()->TimeProvider, AppData()->RandomProvider); + QueryState->TxCtx = MakeIntrusive<TKqpTransactionContext>(false, AppData()->FunctionRegistry, + AppData()->TimeProvider, AppData()->RandomProvider, Config->EnableKqpImmediateEffects); QueryState->QueryData = std::make_shared<TQueryData>(QueryState->TxCtx->TxAlloc); QueryState->TxCtx->SetIsolationLevel(settings); QueryState->TxCtx->OnBeginQuery(); @@ -609,7 +610,7 @@ public: } } else { QueryState->TxCtx = MakeIntrusive<TKqpTransactionContext>(false, AppData()->FunctionRegistry, - AppData()->TimeProvider, AppData()->RandomProvider); + AppData()->TimeProvider, AppData()->RandomProvider, Config->EnableKqpImmediateEffects); QueryState->QueryData = std::make_shared<TQueryData>(QueryState->TxCtx->TxAlloc); QueryState->TxCtx->EffectiveIsolationLevel = NKikimrKqp::ISOLATION_LEVEL_UNDEFINED; } @@ -624,9 +625,8 @@ public: } const NKqpProto::TKqpPhyQuery& phyQuery = QueryState->PreparedQuery->GetPhysicalQuery(); - bool enableImmediateEffects = Config->FeatureFlags.GetEnableKqpImmediateEffects(); auto [success, issues] = QueryState->TxCtx->ApplyTableOperations(phyQuery.GetTableOps(), phyQuery.GetTableInfos(), - enableImmediateEffects, EKikimrQueryType::Dml); + EKikimrQueryType::Dml); if (!success) { YQL_ENSURE(!issues.Empty()); ReplyQueryError(GetYdbStatus(issues), "", MessageFromIssues(issues)); @@ -950,7 +950,7 @@ public: request.AcquireLocksTxId = txCtx.Locks.GetLockTxId(); if (txCtx.HasUncommittedChangesRead) { - YQL_ENSURE(Config->FeatureFlags.GetEnableKqpImmediateEffects()); + YQL_ENSURE(txCtx.EnableImmediateEffects); request.UseImmediateEffects = true; } } diff --git a/ydb/core/kqp/session_actor/kqp_tx.cpp b/ydb/core/kqp/session_actor/kqp_tx.cpp index deb3ec70903..034c65a0a37 100644 --- a/ydb/core/kqp/session_actor/kqp_tx.cpp +++ b/ydb/core/kqp/session_actor/kqp_tx.cpp @@ -157,7 +157,7 @@ bool NeedSnapshot(const TKqpTransactionContext& txCtx, const NYql::TKikimrConfig } if (txCtx.HasUncommittedChangesRead) { - YQL_ENSURE(config.FeatureFlags.GetEnableKqpImmediateEffects()); + YQL_ENSURE(txCtx.EnableImmediateEffects); return true; } diff --git a/ydb/core/kqp/session_actor/kqp_tx.h b/ydb/core/kqp/session_actor/kqp_tx.h index 179b8ed6b62..642f5c07b6d 100644 --- a/ydb/core/kqp/session_actor/kqp_tx.h +++ b/ydb/core/kqp/session_actor/kqp_tx.h @@ -123,8 +123,9 @@ private: class TKqpTransactionContext : public NYql::TKikimrTransactionContextBase { public: explicit TKqpTransactionContext(bool implicit, const NMiniKQL::IFunctionRegistry* funcRegistry, - TIntrusivePtr<ITimeProvider> timeProvider, TIntrusivePtr<IRandomProvider> randomProvider) - : Implicit(implicit) + TIntrusivePtr<ITimeProvider> timeProvider, TIntrusivePtr<IRandomProvider> randomProvider, bool enableImmediateEffects) + : NYql::TKikimrTransactionContextBase(enableImmediateEffects) + , Implicit(implicit) , ParamsState(MakeIntrusive<TParamsState>()) { CreationTime = TInstant::Now(); @@ -223,7 +224,7 @@ public: bool ShouldExecuteDeferredEffects() const { if (HasUncommittedChangesRead) { - YQL_ENSURE(AppData()->FeatureFlags.GetEnableKqpImmediateEffects()); + YQL_ENSURE(EnableImmediateEffects); return !DeferredEffects.Empty(); } @@ -231,8 +232,8 @@ public: } bool CanDeferEffects() const { - if (HasUncommittedChangesRead) { - YQL_ENSURE(AppData()->FeatureFlags.GetEnableKqpImmediateEffects()); + if (HasUncommittedChangesRead || AppData()->FeatureFlags.GetEnableForceImmediateEffectsExecution()) { + YQL_ENSURE(EnableImmediateEffects); return false; } diff --git a/ydb/core/kqp/ut/common/kqp_ut_common.cpp b/ydb/core/kqp/ut/common/kqp_ut_common.cpp index 4a439610231..9df8580af7b 100644 --- a/ydb/core/kqp/ut/common/kqp_ut_common.cpp +++ b/ydb/core/kqp/ut/common/kqp_ut_common.cpp @@ -104,15 +104,6 @@ TKikimrRunner::TKikimrRunner(const TKikimrSettings& settings) { ServerSettings->SetFrFactory(&UdfFrFactory); ServerSettings->SetEnableNotNullColumns(true); ServerSettings->SetEnableMoveIndex(true); - - if (settings.FeatureFlags.GetEnableKqpImmediateEffects()) { - Tests::TServerSettings::TControls controls; - controls.MutableDataShardControls()->SetPrioritizedMvccSnapshotReads(1); - controls.MutableDataShardControls()->SetUnprotectedMvccSnapshotReads(1); - controls.MutableDataShardControls()->SetEnableLockedWrites(1); - - ServerSettings->SetControls(controls); - } if (settings.LogStream) ServerSettings->SetLogBackend(new TStreamLogBackend(settings.LogStream)); diff --git a/ydb/core/kqp/ut/effects/kqp_immediate_effects_ut.cpp b/ydb/core/kqp/ut/effects/kqp_immediate_effects_ut.cpp index c99e549d43e..bf66ee01bdb 100644 --- a/ydb/core/kqp/ut/effects/kqp_immediate_effects_ut.cpp +++ b/ydb/core/kqp/ut/effects/kqp_immediate_effects_ut.cpp @@ -57,8 +57,9 @@ namespace { Y_UNIT_TEST_SUITE(KqpImmediateEffects) { Y_UNIT_TEST(Upsert) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -113,8 +114,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(UpsertDuplicates) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -146,8 +148,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(UpsertExistingKey) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -192,8 +195,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(Replace) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -248,8 +252,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(ReplaceDuplicates) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -281,8 +286,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(ReplaceExistingKey) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -327,8 +333,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(Insert) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -383,8 +390,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(InsertDuplicates) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -410,8 +418,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(InsertExistingKey) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -436,8 +445,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(UpdateOn) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -488,8 +498,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(Delete) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -536,8 +547,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(UpdateAfterUpsert) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -565,8 +577,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(DeleteAfterUpsert) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -603,8 +616,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(UpdateAfterInsert) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -632,8 +646,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(DeleteAfterInsert) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -671,8 +686,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(UpsertAfterInsert) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -696,8 +712,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(UpsertAfterInsertWithIndex) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -771,8 +788,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(DeleteOnAfterInsertWithIndex) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -832,8 +850,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(MultipleEffectsWithIndex) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -872,8 +891,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(InsertConflictTxAborted) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -912,8 +932,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(UpsertConflictInteractiveTxAborted) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session1 = db.CreateSession().GetValueSync().GetSession(); @@ -984,8 +1005,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(MultiShardUpsertAfterRead) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -1016,8 +1038,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(TxWithReadAtTheEnd) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -1059,8 +1082,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(InteractiveTxWithReadAtTheEnd) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -1121,8 +1145,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(TxWithWriteAtTheEnd) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -1163,8 +1188,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(InteractiveTxWithWriteAtTheEnd) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -1224,8 +1250,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(UnobservedUncommittedChangeConflict) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -1302,8 +1329,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(AlreadyBrokenImmediateEffects) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -1389,8 +1417,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(WriteThenReadWithCommit) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -1439,8 +1468,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(ConflictingKeyR1WR2) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session1 = db.CreateSession().GetValueSync().GetSession(); @@ -1496,8 +1526,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(ConflictingKeyR1RWR2) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session1 = db.CreateSession().GetValueSync().GetSession(); @@ -1557,8 +1588,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(ConflictingKeyR1WRR2) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session1 = db.CreateSession().GetValueSync().GetSession(); @@ -1618,8 +1650,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(ConflictingKeyW1RR2) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session1 = db.CreateSession().GetValueSync().GetSession(); @@ -1675,8 +1708,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(ConflictingKeyW1WR2) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session1 = db.CreateSession().GetValueSync().GetSession(); @@ -1730,8 +1764,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(ConflictingKeyW1RWR2) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session1 = db.CreateSession().GetValueSync().GetSession(); @@ -1786,8 +1821,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(ConflictingKeyW1WRR2) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session1 = db.CreateSession().GetValueSync().GetSession(); @@ -1842,8 +1878,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(ConflictingKeyRW1RR2) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session1 = db.CreateSession().GetValueSync().GetSession(); @@ -1903,8 +1940,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(ConflictingKeyRW1WR2) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session1 = db.CreateSession().GetValueSync().GetSession(); @@ -1959,8 +1997,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(ConflictingKeyRW1RWR2) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session1 = db.CreateSession().GetValueSync().GetSession(); @@ -2016,8 +2055,9 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } Y_UNIT_TEST(ConflictingKeyRW1WRR2) { - auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); + auto serverSettings = TKikimrSettings().SetAppConfig(appConfig); TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session1 = db.CreateSession().GetValueSync().GetSession(); diff --git a/ydb/core/kqp/ut/query/kqp_query_ut.cpp b/ydb/core/kqp/ut/query/kqp_query_ut.cpp index 39dcf24159f..16ee2974d1f 100644 --- a/ydb/core/kqp/ut/query/kqp_query_ut.cpp +++ b/ydb/core/kqp/ut/query/kqp_query_ut.cpp @@ -309,8 +309,8 @@ Y_UNIT_TEST_SUITE(KqpQuery) { Y_UNIT_TEST_TWIN(QueryClientTimeout, EnableImmediateEffects) { NKikimrConfig::TAppConfig app; app.MutableTableServiceConfig()->SetEnableKqpDataQuerySourceRead(false); + app.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(EnableImmediateEffects); auto serverSettings = TKikimrSettings() - .SetEnableKqpImmediateEffects(EnableImmediateEffects) .SetAppConfig(app); TKikimrRunner kikimr(serverSettings); diff --git a/ydb/core/protos/config.proto b/ydb/core/protos/config.proto index 5cecf835a6d..16c93660415 100644 --- a/ydb/core/protos/config.proto +++ b/ydb/core/protos/config.proto @@ -788,7 +788,7 @@ message TFeatureFlags { optional bool EnableChangefeedInitialScan = 77 [default = false]; reserved 78; // EnableKqpScanQuerySourceRead optional bool EnableDynamicNodeAuthorization = 79 [default = false]; - optional bool EnableKqpImmediateEffects = 80 [default = false]; + reserved 80; // EnableKqpImmediateEffect optional bool EnableDataShardGenericReadSets = 81 [default = false]; // enable alter database operation to create subdomain's system tablets // directly in subdomain's hive @@ -804,6 +804,7 @@ message TFeatureFlags { optional bool EnablePQConfigTransactionsAtSchemeShard = 91 [default = false]; optional bool EnableScriptExecutionOperations = 92 [default = false]; optional bool EnableImplicitQueryParameterTypes = 93 [default = true]; + optional bool EnableForceImmediateEffectsExecution = 94 [default = false]; } @@ -1284,6 +1285,7 @@ message TTableServiceConfig { optional bool EnablePredicateExtractForScanQueries = 36 [default = true]; optional bool EnablePredicateExtractForDataQueries = 37 [default = true]; optional bool EnableSequentialHints = 38 [default = false]; + optional bool EnableKqpImmediateEffects = 39 [default = false]; }; // Config describes immediate controls and allows diff --git a/ydb/core/testlib/basics/feature_flags.h b/ydb/core/testlib/basics/feature_flags.h index a13a33b802d..4eef0b5ea43 100644 --- a/ydb/core/testlib/basics/feature_flags.h +++ b/ydb/core/testlib/basics/feature_flags.h @@ -38,7 +38,6 @@ public: FEATURE_FLAG_SETTER(EnableArrowFormatAtDatashard) FEATURE_FLAG_SETTER(EnableGrpcAudit) FEATURE_FLAG_SETTER(EnableChangefeedInitialScan) - FEATURE_FLAG_SETTER(EnableKqpImmediateEffects) FEATURE_FLAG_SETTER(EnableDataShardGenericReadSets) FEATURE_FLAG_SETTER(EnableAlterDatabaseCreateHiveFirst) FEATURE_FLAG_SETTER(EnableDataShardVolatileTransactions) diff --git a/ydb/core/tx/datashard/datashard_ut_volatile.cpp b/ydb/core/tx/datashard/datashard_ut_volatile.cpp index 8fac76fa665..36d60abbeab 100644 --- a/ydb/core/tx/datashard/datashard_ut_volatile.cpp +++ b/ydb/core/tx/datashard/datashard_ut_volatile.cpp @@ -1706,10 +1706,12 @@ Y_UNIT_TEST_SUITE(DataShardVolatile) { Y_UNIT_TEST(DistributedWriteThenLateWriteReadCommit) { TPortManager pm; TServerSettings serverSettings(pm.GetPort(2134)); + NKikimrConfig::TAppConfig appCfg; + appCfg.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); serverSettings.SetDomainName("Root") .SetUseRealThreads(false) .SetDomainPlanResolution(1000) - .SetEnableKqpImmediateEffects(true) + .SetAppConfig(appCfg) .SetEnableDataShardVolatileTransactions(true); Tests::TServer::TPtr server = new TServer(serverSettings); |