Skip to content

Commit 7a9bcb1

Browse files
authored
Statistics: ANALYZE tests for SA reboot (#8077)
1 parent e56caba commit 7a9bcb1

File tree

1 file changed

+127
-6
lines changed

1 file changed

+127
-6
lines changed

ydb/core/statistics/aggregator/ut/ut_analyze_columnshard.cpp

Lines changed: 127 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
#include <ydb/library/actors/testlib/test_runtime.h>
44

5+
#include <ydb/core/tx/scheme_cache/scheme_cache.h>
6+
57
#include <thread>
68

79
namespace NKikimr {
@@ -117,7 +119,7 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
117119
UNIT_ASSERT(!response2);
118120
}
119121

120-
Y_UNIT_TEST(AnalyzeRebootSa) {
122+
Y_UNIT_TEST(AnalyzeRebootSaBeforeAnalyzeTableResponse) {
121123
TTestEnv env(1, 1);
122124
auto& runtime = *env.GetServer().GetRuntime();
123125
auto tableInfo = CreateDatabaseTables(env, 1, 1)[0];
@@ -126,16 +128,135 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
126128

127129
bool eventSeen = false;
128130
auto observer = runtime.AddObserver<TEvStatistics::TEvAnalyzeTableResponse>([&](auto&) {
129-
if (!eventSeen) {
130-
RebootTablet(runtime, tableInfo.SaTabletId, sender);
131-
eventSeen = true;
132-
}
131+
eventSeen = true;
132+
});
133+
134+
auto analyzeRequest1 = MakeAnalyzeRequest({tableInfo.PathId});
135+
runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest1.release());
136+
137+
runtime.WaitFor("TEvAnalyzeTableResponse", [&]{ return eventSeen; });
138+
RebootTablet(runtime, tableInfo.SaTabletId, sender);
139+
140+
auto analyzeRequest2 = MakeAnalyzeRequest({tableInfo.PathId});
141+
runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest2.release());
142+
143+
runtime.GrabEdgeEventRethrow<TEvStatistics::TEvAnalyzeResponse>(sender);
144+
}
145+
146+
Y_UNIT_TEST(AnalyzeRebootSaBeforeResolve) {
147+
TTestEnv env(1, 1);
148+
auto& runtime = *env.GetServer().GetRuntime();
149+
auto tableInfo = CreateDatabaseTables(env, 1, 1)[0];
150+
151+
auto sender = runtime.AllocateEdgeActor();
152+
153+
int observerCount = 0;
154+
auto observer = runtime.AddObserver<TEvTxProxySchemeCache::TEvResolveKeySetResult>([&](auto&){
155+
observerCount++;
156+
});
157+
158+
auto analyzeRequest1 = MakeAnalyzeRequest({tableInfo.PathId});
159+
runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest1.release());
160+
161+
runtime.WaitFor("TEvResolveKeySetResult", [&]{ return observerCount == 3; });
162+
RebootTablet(runtime, tableInfo.SaTabletId, sender);
163+
164+
auto analyzeRequest2 = MakeAnalyzeRequest({tableInfo.PathId});
165+
runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest2.release());
166+
167+
runtime.GrabEdgeEventRethrow<TEvStatistics::TEvAnalyzeResponse>(sender);
168+
}
169+
170+
Y_UNIT_TEST(AnalyzeRebootSaBeforeReqDistribution) {
171+
TTestEnv env(1, 1);
172+
auto& runtime = *env.GetServer().GetRuntime();
173+
auto tableInfo = CreateDatabaseTables(env, 1, 1)[0];
174+
175+
auto sender = runtime.AllocateEdgeActor();
176+
177+
bool eventSeen = false;
178+
auto observer = runtime.AddObserver<TEvHive::TEvRequestTabletDistribution>([&](auto&) {
179+
eventSeen = true;
180+
});
181+
182+
auto analyzeRequest1 = MakeAnalyzeRequest({tableInfo.PathId});
183+
runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest1.release());
184+
185+
runtime.WaitFor("TEvRequestTabletDistribution", [&]{ return eventSeen; });
186+
RebootTablet(runtime, tableInfo.SaTabletId, sender);
187+
188+
auto analyzeRequest2 = MakeAnalyzeRequest({tableInfo.PathId});
189+
runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest2.release());
190+
191+
runtime.GrabEdgeEventRethrow<TEvStatistics::TEvAnalyzeResponse>(sender);
192+
}
193+
194+
Y_UNIT_TEST(AnalyzeRebootSaBeforeAggregate) {
195+
TTestEnv env(1, 1);
196+
auto& runtime = *env.GetServer().GetRuntime();
197+
auto tableInfo = CreateDatabaseTables(env, 1, 1)[0];
198+
199+
auto sender = runtime.AllocateEdgeActor();
200+
201+
bool eventSeen = false;
202+
auto observer = runtime.AddObserver<TEvStatistics::TEvAggregateStatistics>([&](auto&){
203+
eventSeen = true;
204+
});
205+
206+
auto analyzeRequest1 = MakeAnalyzeRequest({tableInfo.PathId});
207+
runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest1.release());
208+
209+
runtime.WaitFor("TEvAggregateStatistics", [&]{ return eventSeen; });
210+
RebootTablet(runtime, tableInfo.SaTabletId, sender);
211+
212+
auto analyzeRequest2 = MakeAnalyzeRequest({tableInfo.PathId});
213+
runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest2.release());
214+
215+
runtime.GrabEdgeEventRethrow<TEvStatistics::TEvAnalyzeResponse>(sender);
216+
}
217+
218+
Y_UNIT_TEST(AnalyzeRebootSaBeforeSave) {
219+
TTestEnv env(1, 1);
220+
auto& runtime = *env.GetServer().GetRuntime();
221+
auto tableInfo = CreateDatabaseTables(env, 1, 1)[0];
222+
223+
auto sender = runtime.AllocateEdgeActor();
224+
225+
bool eventSeen = false;
226+
auto observer = runtime.AddObserver<TEvStatistics::TEvAggregateStatisticsResponse>([&](auto&){
227+
eventSeen = true;
228+
});
229+
230+
auto analyzeRequest1 = MakeAnalyzeRequest({tableInfo.PathId});
231+
runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest1.release());
232+
233+
runtime.WaitFor("TEvAggregateStatisticsResponse", [&]{ return eventSeen; });
234+
RebootTablet(runtime, tableInfo.SaTabletId, sender);
235+
236+
auto analyzeRequest2 = MakeAnalyzeRequest({tableInfo.PathId});
237+
runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest2.release());
238+
239+
runtime.GrabEdgeEventRethrow<TEvStatistics::TEvAnalyzeResponse>(sender);
240+
}
241+
242+
//
243+
Y_UNIT_TEST(AnalyzeRebootSaInAggregate) {
244+
TTestEnv env(1, 1);
245+
auto& runtime = *env.GetServer().GetRuntime();
246+
auto tableInfo = CreateDatabaseTables(env, 1, 10)[0];
247+
248+
auto sender = runtime.AllocateEdgeActor();
249+
250+
int observerCount = 0;
251+
auto observer = runtime.AddObserver<TEvStatistics::TEvStatisticsRequest>([&](auto&) {
252+
observerCount++;
133253
});
134254

135255
auto analyzeRequest1 = MakeAnalyzeRequest({tableInfo.PathId});
136256
runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest1.release());
137257

138-
runtime.WaitFor("blocked 1st TEvAnalyzeTableResponse event", [&]{ return eventSeen; });
258+
runtime.WaitFor("5th TEvStatisticsRequest", [&]{ return observerCount == 5; });
259+
RebootTablet(runtime, tableInfo.SaTabletId, sender);
139260

140261
auto analyzeRequest2 = MakeAnalyzeRequest({tableInfo.PathId});
141262
runtime.SendToPipe(tableInfo.SaTabletId, sender, analyzeRequest2.release());

0 commit comments

Comments
 (0)