@@ -196,7 +196,15 @@ public void testSimpleMergeTaskReEnqueueingBySize() {
196
196
}
197
197
}
198
198
199
- public void testIndexingThrottlingWhenSubmittingMerges () {
199
+ public void testIndexingThrottlingWhenSubmittingMergesWithDiskIOThrottlingEnabled () {
200
+ testIndexingThrottlingWhenSubmittingMerges (true );
201
+ }
202
+
203
+ public void testIndexingThrottlingWhenSubmittingMergesWithDiskIOThrottlingDisabled () {
204
+ testIndexingThrottlingWhenSubmittingMerges (false );
205
+ }
206
+
207
+ private void testIndexingThrottlingWhenSubmittingMerges (boolean withDiskIOThrottlingEnabled ) {
200
208
final int maxThreadCount = randomIntBetween (1 , 5 );
201
209
// settings validation requires maxMergeCount >= maxThreadCount
202
210
final int maxMergeCount = maxThreadCount + randomIntBetween (0 , 5 );
@@ -209,6 +217,7 @@ public void testIndexingThrottlingWhenSubmittingMerges() {
209
217
Settings mergeSchedulerSettings = Settings .builder ()
210
218
.put (MergeSchedulerConfig .MAX_THREAD_COUNT_SETTING .getKey (), maxThreadCount )
211
219
.put (MergeSchedulerConfig .MAX_MERGE_COUNT_SETTING .getKey (), maxMergeCount )
220
+ .put (MergeSchedulerConfig .AUTO_THROTTLE_SETTING .getKey (), withDiskIOThrottlingEnabled )
212
221
.build ();
213
222
TestThreadPoolMergeScheduler threadPoolMergeScheduler = new TestThreadPoolMergeScheduler (
214
223
new ShardId ("index" , "_na_" , 1 ),
@@ -224,20 +233,20 @@ public void testIndexingThrottlingWhenSubmittingMerges() {
224
233
while (submittedMerges < mergesToSubmit - 1 ) {
225
234
isUsingMaxTargetIORate .set (randomBoolean ());
226
235
if (submittedMergeTasks .isEmpty () == false && randomBoolean ()) {
227
- // maybe schedule one submitted merge
236
+ // maybe schedule one of the submitted merges (but still it's not run)
228
237
MergeTask mergeTask = randomFrom (submittedMergeTasks );
229
238
submittedMergeTasks .remove (mergeTask );
230
239
mergeTask .schedule ();
231
240
} else {
232
- // submit one merge
241
+ // submit one new merge
233
242
MergeSource mergeSource = mock (MergeSource .class );
234
243
OneMerge oneMerge = mock (OneMerge .class );
235
244
when (oneMerge .getStoreMergeInfo ()).thenReturn (getNewMergeInfo (randomLongBetween (1L , 10L )));
236
245
when (oneMerge .getMergeProgress ()).thenReturn (new MergePolicy .OneMergeProgress ());
237
246
when (mergeSource .getNextMerge ()).thenReturn (oneMerge , (OneMerge ) null );
238
247
threadPoolMergeScheduler .merge (mergeSource , randomFrom (MergeTrigger .values ()));
239
248
submittedMerges ++;
240
- if (isUsingMaxTargetIORate .get () && submittedMerges > maxMergeCount ) {
249
+ if (( isUsingMaxTargetIORate .get () || withDiskIOThrottlingEnabled == false ) && submittedMerges > maxMergeCount ) {
241
250
expectIndexThrottling = true ;
242
251
} else if (submittedMerges <= maxMergeCount ) {
243
252
expectIndexThrottling = false ;
@@ -246,15 +255,20 @@ public void testIndexingThrottlingWhenSubmittingMerges() {
246
255
// assert IO throttle state
247
256
assertThat (threadPoolMergeScheduler .isIndexingThrottlingEnabled (), is (expectIndexThrottling ));
248
257
}
249
- // submit one last merge when IO throttling is at max value
250
- isUsingMaxTargetIORate .set (true );
258
+ if (withDiskIOThrottlingEnabled ) {
259
+ // submit one last merge when IO throttling is at max value
260
+ isUsingMaxTargetIORate .set (true );
261
+ } else {
262
+ // but if disk IO throttling is not enabled, indexing throttling should still be triggered
263
+ isUsingMaxTargetIORate .set (randomBoolean ());
264
+ }
251
265
MergeSource mergeSource = mock (MergeSource .class );
252
266
OneMerge oneMerge = mock (OneMerge .class );
253
267
when (oneMerge .getStoreMergeInfo ()).thenReturn (getNewMergeInfo (randomLongBetween (1L , 10L )));
254
268
when (oneMerge .getMergeProgress ()).thenReturn (new MergePolicy .OneMergeProgress ());
255
269
when (mergeSource .getNextMerge ()).thenReturn (oneMerge , (OneMerge ) null );
256
270
threadPoolMergeScheduler .merge (mergeSource , randomFrom (MergeTrigger .values ()));
257
- // assert index throttling because IO throttling is at max value
271
+ // assert indexing throttling state because IO throttling is at max value OR disk IO throttling is disabled
258
272
assertThat (threadPoolMergeScheduler .isIndexingThrottlingEnabled (), is (true ));
259
273
}
260
274
0 commit comments