Skip to content

Commit c8c54d4

Browse files
authored
add test with build in progress index & chooser (#12148)
1 parent be00795 commit c8c54d4

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed

ydb/core/kqp/ut/scheme/kqp_constraints_ut.cpp

+112
Original file line numberDiff line numberDiff line change
@@ -850,6 +850,118 @@ Y_UNIT_TEST_SUITE(KqpConstraints) {
850850

851851
}
852852

853+
Y_UNIT_TEST(IndexAutoChooseAndNonReadyIndex) {
854+
NKikimrConfig::TAppConfig appConfig;
855+
appConfig.MutableTableServiceConfig()->SetIndexAutoChooseMode(NKikimrConfig::TTableServiceConfig_EIndexAutoChooseMode_MAX_USED_PREFIX);
856+
TKikimrRunner kikimr(TKikimrSettings().SetUseRealThreads(false).SetPQConfig(DefaultPQConfig()).SetAppConfig(appConfig));
857+
auto db = kikimr.RunCall([&] { return kikimr.GetTableClient(); } );
858+
auto session = kikimr.RunCall([&] { return db.CreateSession().GetValueSync().GetSession(); } );
859+
auto querySession = kikimr.RunCall([&] { return db.CreateSession().GetValueSync().GetSession(); } );
860+
861+
auto& runtime = *kikimr.GetTestServer().GetRuntime();
862+
863+
{
864+
auto query = R"(
865+
--!syntax_v1
866+
CREATE TABLE `/Root/IndexChooseAndNonReadyIndex` (
867+
Key Uint32 NOT NULL,
868+
Value String NOT NULL,
869+
PRIMARY KEY (Key)
870+
);
871+
)";
872+
873+
auto result = kikimr.RunCall([&]{ return session.ExecuteSchemeQuery(query).GetValueSync(); });
874+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS,
875+
result.GetIssues().ToString());
876+
}
877+
878+
auto fQuery = [&](TString query) -> TString {
879+
NYdb::NTable::TExecDataQuerySettings execSettings;
880+
execSettings.KeepInQueryCache(true);
881+
execSettings.CollectQueryStats(ECollectQueryStatsMode::Basic);
882+
883+
auto result = kikimr.RunCall([&] {
884+
return querySession
885+
.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx(),
886+
execSettings)
887+
.ExtractValueSync(); } );
888+
889+
if (result.GetStatus() == EStatus::SUCCESS) {
890+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS,
891+
result.GetIssues().ToString());
892+
if (result.GetResultSets().size() > 0)
893+
return NYdb::FormatResultSetYson(result.GetResultSet(0));
894+
return "";
895+
} else {
896+
return TStringBuilder() << result.GetStatus() << ": " << result.GetIssues().ToString();
897+
}
898+
};
899+
900+
fQuery(R"(
901+
UPSERT INTO `/Root/IndexChooseAndNonReadyIndex` (Key, Value) VALUES (1, "Old");
902+
)");
903+
904+
auto fCompareTable = [&](TString expected) {
905+
TString query = R"(
906+
SELECT * FROM `/Root/IndexChooseAndNonReadyIndex` WHERE Value = "Old";
907+
)";
908+
CompareYson(expected, fQuery(query));
909+
};
910+
911+
fCompareTable(R"(
912+
[
913+
[1u;"Old"]
914+
]
915+
)");
916+
917+
auto alterQuery = R"(
918+
--!syntax_v1
919+
ALTER TABLE `/Root/IndexChooseAndNonReadyIndex` ADD INDEX Index GLOBAL ON (Value);
920+
)";
921+
922+
bool enabledCapture = true;
923+
TVector<TAutoPtr<IEventHandle>> delayedUpsertRows;
924+
auto grab = [&delayedUpsertRows, &enabledCapture](TAutoPtr<IEventHandle>& ev) -> auto {
925+
if (enabledCapture && ev->GetTypeRewrite() == NKikimr::TEvDataShard::TEvUploadRowsRequest::EventType) {
926+
delayedUpsertRows.emplace_back(ev.Release());
927+
return TTestActorRuntime::EEventAction::DROP;
928+
}
929+
930+
return TTestActorRuntime::EEventAction::PROCESS;
931+
};
932+
933+
TDispatchOptions opts;
934+
opts.FinalEvents.emplace_back([&delayedUpsertRows](IEventHandle&) {
935+
return delayedUpsertRows.size() > 0;
936+
});
937+
938+
runtime.SetObserverFunc(grab);
939+
940+
auto alterFuture = kikimr.RunInThreadPool([&] { return session.ExecuteSchemeQuery(alterQuery).GetValueSync(); });
941+
942+
runtime.DispatchEvents(opts);
943+
Y_VERIFY_S(delayedUpsertRows.size() > 0, "no upload rows requests");
944+
945+
fCompareTable(R"(
946+
[
947+
[1u;"Old"]
948+
]
949+
)");
950+
951+
enabledCapture = false;
952+
for (const auto& ev: delayedUpsertRows) {
953+
runtime.Send(ev);
954+
}
955+
956+
auto result = runtime.WaitFuture(alterFuture);
957+
fCompareTable(R"(
958+
[
959+
[1u;"Old"]
960+
]
961+
)");
962+
963+
}
964+
853965
Y_UNIT_TEST(AddNonColumnDoesnotReturnInternalError) {
854966

855967
NKikimrConfig::TAppConfig appConfig;

0 commit comments

Comments
 (0)