48
48
import static org .mockito .Mockito .when ;
49
49
50
50
public class QueryGroupServiceTests extends OpenSearchTestCase {
51
+ public static final String QUERY_GROUP_ID = "queryGroupId1" ;
51
52
private QueryGroupService queryGroupService ;
52
53
private QueryGroupTaskCancellationService mockCancellationService ;
53
54
private ClusterService mockClusterService ;
@@ -68,6 +69,7 @@ public void setUp() throws Exception {
68
69
mockNodeDuressTrackers = Mockito .mock (NodeDuressTrackers .class );
69
70
mockCancellationService = Mockito .mock (TestQueryGroupCancellationService .class );
70
71
mockQueryGroupsStateAccessor = new QueryGroupsStateAccessor ();
72
+ when (mockNodeDuressTrackers .isNodeInDuress ()).thenReturn (false );
71
73
72
74
queryGroupService = new QueryGroupService (
73
75
mockCancellationService ,
@@ -203,26 +205,52 @@ public void testRejectIfNeeded_whenQueryGroupIdIsNullOrDefaultOne() {
203
205
verify (spyMap , never ()).get (any ());
204
206
}
205
207
208
+ public void testRejectIfNeeded_whenSoftModeQueryGroupIsContendedAndNodeInDuress () {
209
+ Set <QueryGroup > activeQueryGroups = getActiveQueryGroups (
210
+ "testQueryGroup" ,
211
+ QUERY_GROUP_ID ,
212
+ MutableQueryGroupFragment .ResiliencyMode .SOFT ,
213
+ Map .of (ResourceType .CPU , 0.10 )
214
+ );
215
+ mockQueryGroupStateMap = new HashMap <>();
216
+ mockQueryGroupStateMap .put ("queryGroupId1" , new QueryGroupState ());
217
+ QueryGroupState state = new QueryGroupState ();
218
+ QueryGroupState .ResourceTypeState cpuResourceState = new QueryGroupState .ResourceTypeState (ResourceType .CPU );
219
+ cpuResourceState .setLastRecordedUsage (0.10 );
220
+ state .getResourceState ().put (ResourceType .CPU , cpuResourceState );
221
+ QueryGroupState spyState = spy (state );
222
+ mockQueryGroupStateMap .put (QUERY_GROUP_ID , spyState );
223
+
224
+ mockQueryGroupsStateAccessor = new QueryGroupsStateAccessor (mockQueryGroupStateMap );
225
+
226
+ queryGroupService = new QueryGroupService (
227
+ mockCancellationService ,
228
+ mockClusterService ,
229
+ mockThreadPool ,
230
+ mockWorkloadManagementSettings ,
231
+ mockNodeDuressTrackers ,
232
+ mockQueryGroupsStateAccessor ,
233
+ activeQueryGroups ,
234
+ new HashSet <>()
235
+ );
236
+ when (mockWorkloadManagementSettings .getWlmMode ()).thenReturn (WlmMode .ENABLED );
237
+ when (mockNodeDuressTrackers .isNodeInDuress ()).thenReturn (true );
238
+ assertThrows (OpenSearchRejectedExecutionException .class , () -> queryGroupService .rejectIfNeeded ("queryGroupId1" ));
239
+ }
240
+
206
241
public void testRejectIfNeeded_whenQueryGroupIsSoftMode () {
207
- QueryGroup testQueryGroup = new QueryGroup (
242
+ Set < QueryGroup > activeQueryGroups = getActiveQueryGroups (
208
243
"testQueryGroup" ,
209
- "queryGroupId1" ,
210
- new MutableQueryGroupFragment ( MutableQueryGroupFragment .ResiliencyMode .SOFT , Map . of ( ResourceType . CPU , 0.10 )) ,
211
- 1L
244
+ QUERY_GROUP_ID ,
245
+ MutableQueryGroupFragment .ResiliencyMode .SOFT ,
246
+ Map . of ( ResourceType . CPU , 0.10 )
212
247
);
213
- Set <QueryGroup > activeQueryGroups = new HashSet <>() {
214
- {
215
- add (testQueryGroup );
216
- }
217
- };
218
248
mockQueryGroupStateMap = new HashMap <>();
219
249
QueryGroupState spyState = spy (new QueryGroupState ());
220
250
mockQueryGroupStateMap .put ("queryGroupId1" , spyState );
221
251
222
252
mockQueryGroupsStateAccessor = new QueryGroupsStateAccessor (mockQueryGroupStateMap );
223
253
224
- Map <String , QueryGroupState > spyMap = spy (mockQueryGroupStateMap );
225
-
226
254
queryGroupService = new QueryGroupService (
227
255
mockCancellationService ,
228
256
mockClusterService ,
@@ -239,11 +267,11 @@ public void testRejectIfNeeded_whenQueryGroupIsSoftMode() {
239
267
}
240
268
241
269
public void testRejectIfNeeded_whenQueryGroupIsEnforcedMode_andNotBreaching () {
242
- QueryGroup testQueryGroup = new QueryGroup (
270
+ QueryGroup testQueryGroup = getQueryGroup (
243
271
"testQueryGroup" ,
244
272
"queryGroupId1" ,
245
- new MutableQueryGroupFragment ( MutableQueryGroupFragment .ResiliencyMode .ENFORCED , Map . of ( ResourceType . CPU , 0.10 )) ,
246
- 1L
273
+ MutableQueryGroupFragment .ResiliencyMode .ENFORCED ,
274
+ Map . of ( ResourceType . CPU , 0.10 )
247
275
);
248
276
QueryGroup spuQueryGroup = spy (testQueryGroup );
249
277
Set <QueryGroup > activeQueryGroups = new HashSet <>() {
@@ -464,6 +492,31 @@ public void testShouldSBPHandle() {
464
492
465
493
}
466
494
495
+ private static Set <QueryGroup > getActiveQueryGroups (
496
+ String name ,
497
+ String id ,
498
+ MutableQueryGroupFragment .ResiliencyMode mode ,
499
+ Map <ResourceType , Double > resourceLimits
500
+ ) {
501
+ QueryGroup testQueryGroup = getQueryGroup (name , id , mode , resourceLimits );
502
+ Set <QueryGroup > activeQueryGroups = new HashSet <>() {
503
+ {
504
+ add (testQueryGroup );
505
+ }
506
+ };
507
+ return activeQueryGroups ;
508
+ }
509
+
510
+ private static QueryGroup getQueryGroup (
511
+ String name ,
512
+ String id ,
513
+ MutableQueryGroupFragment .ResiliencyMode mode ,
514
+ Map <ResourceType , Double > resourceLimits
515
+ ) {
516
+ QueryGroup testQueryGroup = new QueryGroup (name , id , new MutableQueryGroupFragment (mode , resourceLimits ), 1L );
517
+ return testQueryGroup ;
518
+ }
519
+
467
520
// This is needed to test the behavior of QueryGroupService#doRun method
468
521
static class TestQueryGroupCancellationService extends QueryGroupTaskCancellationService {
469
522
public TestQueryGroupCancellationService (
0 commit comments