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

abhishek 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 dff5bcb0a6c Fix resultcache multiple postaggregation restore (#15402)
dff5bcb0a6c is described below

commit dff5bcb0a6c693e6fc8131e91c5029dbab132fa1
Author: Zoltan Haindrich <[email protected]>
AuthorDate: Tue Nov 21 11:28:20 2023 +0100

    Fix resultcache multiple postaggregation restore (#15402)
    
    Fixes https://github.com/apache/druid/issues/15393
---
 .../apache/druid/query/groupby/GroupByQueryQueryToolChest.java   | 9 +++++----
 .../druid/query/groupby/GroupByQueryQueryToolChestTest.java      | 9 +++++----
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git 
a/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChest.java
 
b/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChest.java
index 9c746dd4142..96b8c7ec69f 100644
--- 
a/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChest.java
+++ 
b/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChest.java
@@ -35,6 +35,7 @@ import com.google.common.base.Supplier;
 import com.google.common.collect.Lists;
 import com.google.inject.Inject;
 import org.apache.druid.data.input.Row;
+import org.apache.druid.error.DruidException;
 import org.apache.druid.frame.Frame;
 import org.apache.druid.frame.FrameType;
 import org.apache.druid.frame.allocation.MemoryAllocatorFactory;
@@ -62,7 +63,6 @@ import org.apache.druid.query.SubqueryQueryRunner;
 import org.apache.druid.query.aggregation.AggregatorFactory;
 import org.apache.druid.query.aggregation.MetricManipulationFn;
 import org.apache.druid.query.aggregation.MetricManipulatorFns;
-import org.apache.druid.query.aggregation.PostAggregator;
 import org.apache.druid.query.cache.CacheKeyBuilder;
 import org.apache.druid.query.context.ResponseContext;
 import org.apache.druid.query.dimension.DefaultDimensionSpec;
@@ -651,9 +651,10 @@ public class GroupByQueryQueryToolChest extends 
QueryToolChest<ResultRow, GroupB
             );
 
             if (isResultLevelCache) {
-              Iterator<PostAggregator> postItr = 
query.getPostAggregatorSpecs().iterator();
-              int postPos = 0;
-              while (postItr.hasNext() && results.hasNext()) {
+              for (int postPos = 0; postPos < 
query.getPostAggregatorSpecs().size(); postPos++) {
+                if (!results.hasNext()) {
+                  throw DruidException.defensive("Ran out of objects while 
reading postaggs from cache!");
+                }
                 resultRow.set(postAggregatorStart + postPos, results.next());
               }
             }
diff --git 
a/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChestTest.java
 
b/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChestTest.java
index 9b0a8e193af..3a5a8d032af 100644
--- 
a/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChestTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChestTest.java
@@ -986,7 +986,8 @@ public class GroupByQueryQueryToolChestTest extends 
InitializedNullHandlingTest
             )
         )
         .setPostAggregatorSpecs(
-            ImmutableList.of(new ConstantPostAggregator("post", 10))
+            new ConstantPostAggregator("post", 10),
+            new ConstantPostAggregator("post2", 20)
         )
         .setGranularity(QueryRunnerTestHelper.DAY_GRAN)
         .build();
@@ -1017,14 +1018,14 @@ public class GroupByQueryQueryToolChestTest extends 
InitializedNullHandlingTest
     Assert.assertEquals(result1, fromCacheResult);
 
     // test timestamps that result in integer size millis
-    final ResultRow result2 = ResultRow.of(123L, dimValue, 1, dimValue, 10);
+    final ResultRow result2 = ResultRow.of(123L, dimValue, 1, dimValue, 10, 
20);
 
     // Please see the comments on aggregator serde and type handling in 
CacheStrategy.fetchAggregatorsFromCache()
     final ResultRow typeAdjustedResult2;
     if (valueType.is(ValueType.FLOAT)) {
-      typeAdjustedResult2 = ResultRow.of(123L, dimValue, 1, 2.1d, 10);
+      typeAdjustedResult2 = ResultRow.of(123L, dimValue, 1, 2.1d, 10, 20);
     } else if (valueType.is(ValueType.LONG)) {
-      typeAdjustedResult2 = ResultRow.of(123L, dimValue, 1, 2, 10);
+      typeAdjustedResult2 = ResultRow.of(123L, dimValue, 1, 2, 10, 20);
     } else {
       typeAdjustedResult2 = result2;
     }


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

Reply via email to