2
2
3
3
#include < ydb/library/actors/testlib/test_runtime.h>
4
4
5
+ #include < ydb/core/tx/scheme_cache/scheme_cache.h>
6
+
5
7
#include < thread>
6
8
7
9
namespace NKikimr {
@@ -117,7 +119,7 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
117
119
UNIT_ASSERT (!response2);
118
120
}
119
121
120
- Y_UNIT_TEST (AnalyzeRebootSa ) {
122
+ Y_UNIT_TEST (AnalyzeRebootSaBeforeAnalyzeTableResponse ) {
121
123
TTestEnv env (1 , 1 );
122
124
auto & runtime = *env.GetServer ().GetRuntime ();
123
125
auto tableInfo = CreateDatabaseTables (env, 1 , 1 )[0 ];
@@ -126,16 +128,135 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
126
128
127
129
bool eventSeen = false ;
128
130
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++;
133
253
});
134
254
135
255
auto analyzeRequest1 = MakeAnalyzeRequest ({tableInfo.PathId });
136
256
runtime.SendToPipe (tableInfo.SaTabletId , sender, analyzeRequest1.release ());
137
257
138
- runtime.WaitFor (" blocked 1st TEvAnalyzeTableResponse event" , [&]{ return eventSeen; });
258
+ runtime.WaitFor (" 5th TEvStatisticsRequest" , [&]{ return observerCount == 5 ; });
259
+ RebootTablet (runtime, tableInfo.SaTabletId , sender);
139
260
140
261
auto analyzeRequest2 = MakeAnalyzeRequest ({tableInfo.PathId });
141
262
runtime.SendToPipe (tableInfo.SaTabletId , sender, analyzeRequest2.release ());
0 commit comments