This is an automated email from the ASF dual-hosted git repository.

karan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new eb056e23b5e Fix dictionarySize overrides in tests (#15354)
eb056e23b5e is described below

commit eb056e23b5e7d9ff2b1ffc3d8731c818eae4fade
Author: Zoltan Haindrich <[email protected]>
AuthorDate: Tue Nov 28 14:19:09 2023 +0100

    Fix dictionarySize overrides in tests (#15354)
    
    I think this is a problem as it discards the false return value when the 
putToKeyBuffer can't store the value because of the limit
    
    Not forwarding the return value at that point may lead to the normal 
continuation here regardless something was not added to the dictionary like here
---
 docs/querying/groupbyquery.md                             |  2 ++
 .../main/java/org/apache/druid/query/QueryContext.java    |  5 +++++
 .../apache/druid/query/groupby/GroupByQueryConfig.java    | 15 +++++++++++----
 .../groupby/epinephelinae/RowBasedGrouperHelper.java      |  3 +--
 .../groupby/epinephelinae/RowBasedKeySerdeHelper.java     |  2 ++
 .../column/GroupByColumnSelectorStrategy.java             |  3 +++
 .../druid/query/groupby/GroupByQueryConfigTest.java       |  4 ++--
 .../druid/sql/calcite/planner/DruidSqlValidator.java      |  4 ++--
 .../org/apache/druid/sql/calcite/CalciteQueryTest.java    |  2 +-
 9 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/docs/querying/groupbyquery.md b/docs/querying/groupbyquery.md
index d6980476c0b..935bd90a145 100644
--- a/docs/querying/groupbyquery.md
+++ b/docs/querying/groupbyquery.md
@@ -378,6 +378,8 @@ Supported query contexts:
 |`forceHashAggregation`|Overrides the value of 
`druid.query.groupBy.forceHashAggregation`|None|
 |`intermediateCombineDegree`|Overrides the value of 
`druid.query.groupBy.intermediateCombineDegree`|None|
 |`numParallelCombineThreads`|Overrides the value of 
`druid.query.groupBy.numParallelCombineThreads`|None|
+|`maxSelectorDictionarySize`|Overrides the value of 
`druid.query.groupBy.maxMergingDictionarySize`|None|
+|`maxMergingDictionarySize`|Overrides the value of 
`druid.query.groupBy.maxMergingDictionarySize`|None|
 |`mergeThreadLocal`|Whether merge buffers should always be split into 
thread-local buffers. Setting this to `true` reduces thread contention, but 
uses memory less efficiently. This tradeoff is beneficial when memory is 
plentiful. |false|
 |`sortByDimsFirst`|Sort the results first by dimension values and then by 
timestamp.|false|
 |`forceLimitPushDown`|When all fields in the orderby are part of the grouping 
key, the Broker will push limit application down to the Historical processes. 
When the sorting order uses fields that are not in the grouping key, applying 
this optimization can result in approximate results with unknown accuracy, so 
this optimization is disabled by default in that case. Enabling this context 
flag turns on limit push down for limit/orderbys that contain non-grouping key 
columns.|false|
diff --git a/processing/src/main/java/org/apache/druid/query/QueryContext.java 
b/processing/src/main/java/org/apache/druid/query/QueryContext.java
index c247ab0e639..6fa73f0b65c 100644
--- a/processing/src/main/java/org/apache/druid/query/QueryContext.java
+++ b/processing/src/main/java/org/apache/druid/query/QueryContext.java
@@ -217,6 +217,11 @@ public class QueryContext
     return QueryContexts.getAsHumanReadableBytes(key, get(key), defaultValue);
   }
 
+  public HumanReadableBytes getHumanReadableBytes(final String key, final long 
defaultBytes)
+  {
+    return QueryContexts.getAsHumanReadableBytes(key, get(key), 
HumanReadableBytes.valueOf(defaultBytes));
+  }
+
   public <E extends Enum<E>> E getEnum(String key, Class<E> clazz, E 
defaultValue)
   {
     return QueryContexts.getAsEnum(key, get(key), clazz, defaultValue);
diff --git 
a/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryConfig.java
 
b/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryConfig.java
index 6b94ba3bc53..40dc9715885 100644
--- 
a/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryConfig.java
+++ 
b/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryConfig.java
@@ -48,6 +48,8 @@ public class GroupByQueryConfig
   private static final String CTX_KEY_BUFFER_GROUPER_INITIAL_BUCKETS = 
"bufferGrouperInitialBuckets";
   private static final String CTX_KEY_BUFFER_GROUPER_MAX_LOAD_FACTOR = 
"bufferGrouperMaxLoadFactor";
   private static final String CTX_KEY_MAX_ON_DISK_STORAGE = "maxOnDiskStorage";
+  private static final String CTX_KEY_MAX_SELECTOR_DICTIONARY_SIZE = 
"maxSelectorDictionarySize";
+  private static final String CTX_KEY_MAX_MERGING_DICTIONARY_SIZE = 
"maxMergingDictionarySize";
   private static final String CTX_KEY_FORCE_HASH_AGGREGATION = 
"forceHashAggregation";
   private static final String CTX_KEY_INTERMEDIATE_COMBINE_DEGREE = 
"intermediateCombineDegree";
   private static final String CTX_KEY_NUM_PARALLEL_COMBINE_THREADS = 
"numParallelCombineThreads";
@@ -164,7 +166,7 @@ public class GroupByQueryConfig
    */
   long getActualMaxSelectorDictionarySize(final long maxHeapSize, final int 
numConcurrentQueries)
   {
-    if (maxSelectorDictionarySize.getBytes() == AUTOMATIC) {
+    if (getConfiguredMaxSelectorDictionarySize() == AUTOMATIC) {
       final long heapForDictionaries = (long) (maxHeapSize * 
SELECTOR_DICTIONARY_HEAP_FRACTION);
 
       return Math.max(
@@ -175,7 +177,7 @@ public class GroupByQueryConfig
           )
       );
     } else {
-      return maxSelectorDictionarySize.getBytes();
+      return getConfiguredMaxSelectorDictionarySize();
     }
   }
 
@@ -321,8 +323,13 @@ public class GroupByQueryConfig
             getMaxOnDiskStorage().getBytes()
         )
     );
-    newConfig.maxSelectorDictionarySize = maxSelectorDictionarySize; // No 
overrides
-    newConfig.maxMergingDictionarySize = maxMergingDictionarySize; // No 
overrides
+
+    newConfig.maxSelectorDictionarySize = queryContext
+        .getHumanReadableBytes(CTX_KEY_MAX_SELECTOR_DICTIONARY_SIZE, 
getConfiguredMaxSelectorDictionarySize());
+
+    newConfig.maxMergingDictionarySize = queryContext
+        .getHumanReadableBytes(CTX_KEY_MAX_MERGING_DICTIONARY_SIZE, 
getConfiguredMaxMergingDictionarySize());
+
     newConfig.forcePushDownLimit = 
queryContext.getBoolean(CTX_KEY_FORCE_LIMIT_PUSH_DOWN, isForcePushDownLimit());
     newConfig.applyLimitPushDownToSegment = queryContext.getBoolean(
         CTX_KEY_APPLY_LIMIT_PUSH_DOWN_TO_SEGMENT,
diff --git 
a/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java
 
b/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java
index 8c3e485ef7c..1bdad6df088 100644
--- 
a/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java
+++ 
b/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java
@@ -1921,8 +1921,7 @@ public class RowBasedGrouperHelper
         } else {
           keyBuffer.put(NullHandling.IS_NOT_NULL_BYTE);
         }
-        delegate.putToKeyBuffer(key, idx);
-        return true;
+        return delegate.putToKeyBuffer(key, idx);
       }
 
       @Override
diff --git 
a/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedKeySerdeHelper.java
 
b/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedKeySerdeHelper.java
index a65c2ea031c..1cb29d23bc0 100644
--- 
a/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedKeySerdeHelper.java
+++ 
b/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedKeySerdeHelper.java
@@ -22,6 +22,7 @@ package org.apache.druid.query.groupby.epinephelinae;
 import org.apache.druid.query.groupby.epinephelinae.Grouper.BufferComparator;
 import 
org.apache.druid.query.groupby.epinephelinae.RowBasedGrouperHelper.RowBasedKey;
 
+import javax.annotation.CheckReturnValue;
 import java.nio.ByteBuffer;
 
 interface RowBasedKeySerdeHelper
@@ -43,6 +44,7 @@ interface RowBasedKeySerdeHelper
    *
    * @return true if the value was added to the key, false otherwise
    */
+  @CheckReturnValue
   boolean putToKeyBuffer(RowBasedKey key, int idx);
 
   /**
diff --git 
a/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/column/GroupByColumnSelectorStrategy.java
 
b/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/column/GroupByColumnSelectorStrategy.java
index 1a2bfc580a3..26095b5a2b2 100644
--- 
a/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/column/GroupByColumnSelectorStrategy.java
+++ 
b/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/column/GroupByColumnSelectorStrategy.java
@@ -25,6 +25,7 @@ import org.apache.druid.query.groupby.epinephelinae.Grouper;
 import org.apache.druid.query.ordering.StringComparator;
 import org.apache.druid.segment.ColumnValueSelector;
 
+import javax.annotation.CheckReturnValue;
 import javax.annotation.Nullable;
 import java.nio.ByteBuffer;
 
@@ -89,6 +90,7 @@ public interface GroupByColumnSelectorStrategy extends 
ColumnSelectorStrategy
    * @return estimated increase in internal state footprint, in bytes, as a 
result of this operation. May be zero if
    * memory did not increase as a result of this operation. Will not be 
negative.
    */
+  @CheckReturnValue
   int initColumnValues(ColumnValueSelector selector, int columnIndex, Object[] 
valuess);
 
   /**
@@ -144,6 +146,7 @@ public interface GroupByColumnSelectorStrategy extends 
ColumnSelectorStrategy
    * @return estimated increase in internal state footprint, in bytes, as a 
result of this operation. May be zero if
    * memory did not increase as a result of this operation. Will not be 
negative.
    */
+  @CheckReturnValue
   int writeToKeyBuffer(int keyBufferPosition, ColumnValueSelector selector, 
ByteBuffer keyBuffer);
 
   /**
diff --git 
a/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryConfigTest.java
 
b/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryConfigTest.java
index b034210bcf7..34ed99cda21 100644
--- 
a/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryConfigTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryConfigTest.java
@@ -102,8 +102,8 @@ public class GroupByQueryConfigTest
     Assert.assertEquals(true, config2.isSingleThreaded());
     Assert.assertEquals(1, config2.getBufferGrouperInitialBuckets());
     Assert.assertEquals(3_000_000, config2.getMaxOnDiskStorage().getBytes());
-    Assert.assertEquals(5 /* Can't override */, 
config2.getConfiguredMaxSelectorDictionarySize());
-    Assert.assertEquals(6_000_000 /* Can't override */, 
config2.getConfiguredMaxMergingDictionarySize());
+    Assert.assertEquals(3, config2.getConfiguredMaxSelectorDictionarySize());
+    Assert.assertEquals(4, config2.getConfiguredMaxMergingDictionarySize());
     Assert.assertEquals(7.0, config2.getBufferGrouperMaxLoadFactor(), 0.0);
     Assert.assertTrue(config2.isApplyLimitPushDownToSegment());
   }
diff --git 
a/sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidSqlValidator.java 
b/sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidSqlValidator.java
index 2844350241b..34f3c7410f3 100644
--- 
a/sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidSqlValidator.java
+++ 
b/sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidSqlValidator.java
@@ -60,8 +60,8 @@ class DruidSqlValidator extends BaseDruidSqlValidator
       if (!plannerContext.featureAvailable(EngineFeature.WINDOW_FUNCTIONS)) {
         throw buildCalciteContextException(
             StringUtils.format(
-                "The query contains window functions; To run these window 
functions, enable [%s] in query context.",
-                EngineFeature.WINDOW_FUNCTIONS),
+                "The query contains window functions; To run these window 
functions, specify [%s] in query context.",
+                PlannerContext.CTX_ENABLE_WINDOW_FNS),
             call);
       }
     }
diff --git 
a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java 
b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java
index eb232c6957a..e03130a04f1 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java
@@ -14396,7 +14396,7 @@ public class CalciteQueryTest extends 
BaseCalciteQueryTest
         .sql("SELECT dim1,ROW_NUMBER() OVER () from druid.foo")
         .run());
 
-    assertThat(e, invalidSqlIs("The query contains window functions; To run 
these window functions, enable [WINDOW_FUNCTIONS] in query context. (line [1], 
column [13])"));
+    assertThat(e, invalidSqlIs("The query contains window functions; To run 
these window functions, specify [enableWindowing] in query context. (line [1], 
column [13])"));
   }
 
   @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to