From 7a9bcb19b8bafb9cbaa639c9d998e614764ca109 Mon Sep 17 00:00:00 2001 From: azevaykin <145343289+azevaykin@users.noreply.github.com> Date: Wed, 21 Aug 2024 14:22:54 +0300 Subject: [PATCH] Statistics: ANALYZE tests for SA reboot (#8077) --- .../aggregator/ut/ut_analyze_columnshard.cpp | 133 +++++++++++++++++- 1 file changed, 127 insertions(+), 6 deletions(-) diff --git a/ydb/core/statistics/aggregator/ut/ut_analyze_columnshard.cpp b/ydb/core/statistics/aggregator/ut/ut_analyze_columnshard.cpp index 16257cddcd8d..fb6a87996d2e 100644 --- a/ydb/core/statistics/aggregator/ut/ut_analyze_columnshard.cpp +++ b/ydb/core/statistics/aggregator/ut/ut_analyze_columnshard.cpp @@ -2,6 +2,8 @@ #include +#include + #include namespace NKikimr { @@ -117,7 +119,7 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) { UNIT_ASSERT(!response2); } - Y_UNIT_TEST(AnalyzeRebootSa) { + Y_UNIT_TEST(AnalyzeRebootSaBeforeAnalyzeTableResponse) { TTestEnv env(1, 1); auto& runtime = *env.GetServer().GetRuntime(); auto tableInfo = CreateDatabaseTables(env, 1, 1)[0]; @@ -126,16 +128,135 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) { bool eventSeen = false; auto observer = runtime.AddObserver([&](auto&) { - if (!eventSeen) { - RebootTablet(runtime, tableInfo.SaTabletId, sender); - eventSeen = true; - } + eventSeen = true; + }); + + auto analyzeRequest1 = MakeAnalyzeRequest({tableInfo.PathId}); + runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest1.release()); + + runtime.WaitFor("TEvAnalyzeTableResponse", [&]{ return eventSeen; }); + RebootTablet(runtime, tableInfo.SaTabletId, sender); + + auto analyzeRequest2 = MakeAnalyzeRequest({tableInfo.PathId}); + runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest2.release()); + + runtime.GrabEdgeEventRethrow(sender); + } + + Y_UNIT_TEST(AnalyzeRebootSaBeforeResolve) { + TTestEnv env(1, 1); + auto& runtime = *env.GetServer().GetRuntime(); + auto tableInfo = CreateDatabaseTables(env, 1, 1)[0]; + + auto sender = runtime.AllocateEdgeActor(); + + int observerCount = 0; + auto observer = runtime.AddObserver([&](auto&){ + observerCount++; + }); + + auto analyzeRequest1 = MakeAnalyzeRequest({tableInfo.PathId}); + runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest1.release()); + + runtime.WaitFor("TEvResolveKeySetResult", [&]{ return observerCount == 3; }); + RebootTablet(runtime, tableInfo.SaTabletId, sender); + + auto analyzeRequest2 = MakeAnalyzeRequest({tableInfo.PathId}); + runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest2.release()); + + runtime.GrabEdgeEventRethrow(sender); + } + + Y_UNIT_TEST(AnalyzeRebootSaBeforeReqDistribution) { + TTestEnv env(1, 1); + auto& runtime = *env.GetServer().GetRuntime(); + auto tableInfo = CreateDatabaseTables(env, 1, 1)[0]; + + auto sender = runtime.AllocateEdgeActor(); + + bool eventSeen = false; + auto observer = runtime.AddObserver([&](auto&) { + eventSeen = true; + }); + + auto analyzeRequest1 = MakeAnalyzeRequest({tableInfo.PathId}); + runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest1.release()); + + runtime.WaitFor("TEvRequestTabletDistribution", [&]{ return eventSeen; }); + RebootTablet(runtime, tableInfo.SaTabletId, sender); + + auto analyzeRequest2 = MakeAnalyzeRequest({tableInfo.PathId}); + runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest2.release()); + + runtime.GrabEdgeEventRethrow(sender); + } + + Y_UNIT_TEST(AnalyzeRebootSaBeforeAggregate) { + TTestEnv env(1, 1); + auto& runtime = *env.GetServer().GetRuntime(); + auto tableInfo = CreateDatabaseTables(env, 1, 1)[0]; + + auto sender = runtime.AllocateEdgeActor(); + + bool eventSeen = false; + auto observer = runtime.AddObserver([&](auto&){ + eventSeen = true; + }); + + auto analyzeRequest1 = MakeAnalyzeRequest({tableInfo.PathId}); + runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest1.release()); + + runtime.WaitFor("TEvAggregateStatistics", [&]{ return eventSeen; }); + RebootTablet(runtime, tableInfo.SaTabletId, sender); + + auto analyzeRequest2 = MakeAnalyzeRequest({tableInfo.PathId}); + runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest2.release()); + + runtime.GrabEdgeEventRethrow(sender); + } + + Y_UNIT_TEST(AnalyzeRebootSaBeforeSave) { + TTestEnv env(1, 1); + auto& runtime = *env.GetServer().GetRuntime(); + auto tableInfo = CreateDatabaseTables(env, 1, 1)[0]; + + auto sender = runtime.AllocateEdgeActor(); + + bool eventSeen = false; + auto observer = runtime.AddObserver([&](auto&){ + eventSeen = true; + }); + + auto analyzeRequest1 = MakeAnalyzeRequest({tableInfo.PathId}); + runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest1.release()); + + runtime.WaitFor("TEvAggregateStatisticsResponse", [&]{ return eventSeen; }); + RebootTablet(runtime, tableInfo.SaTabletId, sender); + + auto analyzeRequest2 = MakeAnalyzeRequest({tableInfo.PathId}); + runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest2.release()); + + runtime.GrabEdgeEventRethrow(sender); + } + + // + Y_UNIT_TEST(AnalyzeRebootSaInAggregate) { + TTestEnv env(1, 1); + auto& runtime = *env.GetServer().GetRuntime(); + auto tableInfo = CreateDatabaseTables(env, 1, 10)[0]; + + auto sender = runtime.AllocateEdgeActor(); + + int observerCount = 0; + auto observer = runtime.AddObserver([&](auto&) { + observerCount++; }); auto analyzeRequest1 = MakeAnalyzeRequest({tableInfo.PathId}); runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest1.release()); - runtime.WaitFor("blocked 1st TEvAnalyzeTableResponse event", [&]{ return eventSeen; }); + runtime.WaitFor("5th TEvStatisticsRequest", [&]{ return observerCount == 5; }); + RebootTablet(runtime, tableInfo.SaTabletId, sender); auto analyzeRequest2 = MakeAnalyzeRequest({tableInfo.PathId}); runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest2.release());