Fix priority parsing in HiLoQueryLaningStrategy (#11302)
diff --git a/server/src/main/java/org/apache/druid/server/scheduling/HiLoQueryLaningStrategy.java b/server/src/main/java/org/apache/druid/server/scheduling/HiLoQueryLaningStrategy.java
index 0a97422..3af5d10 100644
--- a/server/src/main/java/org/apache/druid/server/scheduling/HiLoQueryLaningStrategy.java
+++ b/server/src/main/java/org/apache/druid/server/scheduling/HiLoQueryLaningStrategy.java
@@ -67,8 +67,12 @@
public <T> Optional<String> computeLane(QueryPlus<T> query, Set<SegmentServerSelector> segments)
{
final Query<T> theQuery = query.getQuery();
- // QueryContexts.getPriority gives a default, since we are setting priority
- final Integer priority = theQuery.getContextValue(QueryContexts.PRIORITY_KEY);
+ // QueryContexts.getPriority gives a default, but it can parse the value to integer. Before calling QueryContexts.getPriority
+ // we make sure that priority has been set.
+ Integer priority = null;
+ if (null != theQuery.getContextValue(QueryContexts.PRIORITY_KEY)) {
+ priority = QueryContexts.getPriority(theQuery);
+ }
final String lane = theQuery.getContextValue(QueryContexts.LANE_KEY);
if (lane == null && priority != null && priority < 0) {
return Optional.of(LOW);
diff --git a/server/src/test/java/org/apache/druid/server/scheduling/HiLoQueryLaningStrategyTest.java b/server/src/test/java/org/apache/druid/server/scheduling/HiLoQueryLaningStrategyTest.java
index 3bc7c36..2dc8594 100644
--- a/server/src/test/java/org/apache/druid/server/scheduling/HiLoQueryLaningStrategyTest.java
+++ b/server/src/test/java/org/apache/druid/server/scheduling/HiLoQueryLaningStrategyTest.java
@@ -156,6 +156,13 @@
}
@Test
+ public void testLaningInteractivePriority_String()
+ {
+ TimeseriesQuery query = queryBuilder.context(ImmutableMap.of(QueryContexts.PRIORITY_KEY, "100")).build();
+ Assert.assertFalse(strategy.computeLane(QueryPlus.wrap(query), ImmutableSet.of()).isPresent());
+ }
+
+ @Test
public void testLaningLowPriority()
{
TimeseriesQuery query = queryBuilder.context(ImmutableMap.of(QueryContexts.PRIORITY_KEY, -1)).build();
@@ -167,6 +174,17 @@
}
@Test
+ public void testLaningLowPriority_String()
+ {
+ TimeseriesQuery query = queryBuilder.context(ImmutableMap.of(QueryContexts.PRIORITY_KEY, "-1")).build();
+ Assert.assertTrue(strategy.computeLane(QueryPlus.wrap(query), ImmutableSet.of()).isPresent());
+ Assert.assertEquals(
+ HiLoQueryLaningStrategy.LOW,
+ strategy.computeLane(QueryPlus.wrap(query), ImmutableSet.of()).get()
+ );
+ }
+
+ @Test
public void testLaningPreservesManualSetLane()
{
TimeseriesQuery query = queryBuilder.context(