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]