This is an automated email from the ASF dual-hosted git repository.
siddteotia pushed a commit to branch hotfix-0630
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/hotfix-0630 by this push:
new a4683b5 Fix double memory allocation during operator setup (#5619)
a4683b5 is described below
commit a4683b5667611d095bf24e45e1d014455e8a0362
Author: Sidd <[email protected]>
AuthorDate: Thu Jun 25 15:13:08 2020 -0700
Fix double memory allocation during operator setup (#5619)
Co-authored-by: Siddharth Teotia <[email protected]>
---
.../org/apache/pinot/core/operator/ProjectionOperator.java | 9 +++++----
.../apache/pinot/core/operator/blocks/MultiValueBlock.java | 10 ++++++++--
.../apache/pinot/core/operator/blocks/ProjectionBlock.java | 14 ++++++++------
.../pinot/core/operator/blocks/SingleValueBlock.java | 8 ++++++--
4 files changed, 27 insertions(+), 14 deletions(-)
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/ProjectionOperator.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/ProjectionOperator.java
index 2abf311..00dc5c8 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/ProjectionOperator.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/ProjectionOperator.java
@@ -24,6 +24,7 @@ import org.apache.pinot.core.common.Block;
import org.apache.pinot.core.common.DataBlockCache;
import org.apache.pinot.core.common.DataFetcher;
import org.apache.pinot.core.common.DataSource;
+import org.apache.pinot.core.common.DataSourceMetadata;
import org.apache.pinot.core.operator.blocks.DocIdSetBlock;
import org.apache.pinot.core.operator.blocks.ProjectionBlock;
@@ -32,15 +33,15 @@ public class ProjectionOperator extends
BaseOperator<ProjectionBlock> {
private static final String OPERATOR_NAME = "ProjectionOperator";
private final Map<String, DataSource> _dataSourceMap;
- private final Map<String, Block> _dataBlockMap;
+ private final Map<String, DataSourceMetadata> _dataSourceMetadataMap;
private final BaseOperator<DocIdSetBlock> _docIdSetOperator;
private final DataBlockCache _dataBlockCache;
public ProjectionOperator(Map<String, DataSource> dataSourceMap,
BaseOperator<DocIdSetBlock> docIdSetOperator) {
_dataSourceMap = dataSourceMap;
- _dataBlockMap = new HashMap<>(dataSourceMap.size());
+ _dataSourceMetadataMap = new HashMap<>(dataSourceMap.size());
for (Map.Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
- _dataBlockMap.put(entry.getKey(), entry.getValue().nextBlock());
+ _dataSourceMetadataMap.put(entry.getKey(),
entry.getValue().getDataSourceMetadata());
}
_docIdSetOperator = docIdSetOperator;
_dataBlockCache = new DataBlockCache(new DataFetcher(dataSourceMap));
@@ -62,7 +63,7 @@ public class ProjectionOperator extends
BaseOperator<ProjectionBlock> {
return null;
} else {
_dataBlockCache.initNewBlock(docIdSetBlock.getDocIdSet(),
docIdSetBlock.getSearchableLength());
- return new ProjectionBlock(_dataBlockMap, _dataBlockCache,
docIdSetBlock);
+ return new ProjectionBlock(_dataSourceMetadataMap, _dataBlockCache,
docIdSetBlock);
}
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/MultiValueBlock.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/MultiValueBlock.java
index 825dcc8..b07dc18 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/MultiValueBlock.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/MultiValueBlock.java
@@ -31,12 +31,15 @@ import org.apache.pinot.spi.data.FieldSpec;
@SuppressWarnings("rawtypes")
public final class MultiValueBlock implements Block {
- private final BlockValSet _blockValSet;
+ private final SingleColumnMultiValueReader _reader;
+ private final FieldSpec.DataType _dataType;
private final BlockMetadata _blockMetadata;
+ private BlockValSet _blockValSet;
public MultiValueBlock(SingleColumnMultiValueReader reader, int numDocs, int
maxNumMultiValues,
FieldSpec.DataType dataType, Dictionary dictionary) {
- _blockValSet = new MultiValueSet(reader, dataType);
+ _reader = reader;
+ _dataType = dataType;
_blockMetadata = new BlockMetadataImpl(numDocs, false, maxNumMultiValues,
dataType, dictionary);
}
@@ -47,6 +50,9 @@ public final class MultiValueBlock implements Block {
@Override
public BlockValSet getBlockValueSet() {
+ if (_blockValSet == null) {
+ _blockValSet = new MultiValueSet(_reader, _dataType);
+ }
return _blockValSet;
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/ProjectionBlock.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/ProjectionBlock.java
index 1179885..c3b8774 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/ProjectionBlock.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/ProjectionBlock.java
@@ -25,7 +25,9 @@ import org.apache.pinot.core.common.BlockDocIdValueSet;
import org.apache.pinot.core.common.BlockMetadata;
import org.apache.pinot.core.common.BlockValSet;
import org.apache.pinot.core.common.DataBlockCache;
+import org.apache.pinot.core.common.DataSourceMetadata;
import org.apache.pinot.core.operator.docvalsets.ProjectionBlockValSet;
+import org.apache.pinot.spi.data.FieldSpec;
/**
@@ -33,12 +35,12 @@ import
org.apache.pinot.core.operator.docvalsets.ProjectionBlockValSet;
* It provides DocIdSetBlock for a given column.
*/
public class ProjectionBlock implements Block {
- private final Map<String, Block> _blockMap;
+ private final Map<String, DataSourceMetadata> _dataSourceMetadataMap;
private final DocIdSetBlock _docIdSetBlock;
private final DataBlockCache _dataBlockCache;
- public ProjectionBlock(Map<String, Block> blockMap, DataBlockCache
dataBlockCache, DocIdSetBlock docIdSetBlock) {
- _blockMap = blockMap;
+ public ProjectionBlock(Map<String, DataSourceMetadata>
dataSourceMetadataMap, DataBlockCache dataBlockCache, DocIdSetBlock
docIdSetBlock) {
+ _dataSourceMetadataMap = dataSourceMetadataMap;
_docIdSetBlock = docIdSetBlock;
_dataBlockCache = dataBlockCache;
}
@@ -64,9 +66,9 @@ public class ProjectionBlock implements Block {
}
public BlockValSet getBlockValueSet(String column) {
- BlockMetadata blockMetadata = _blockMap.get(column).getMetadata();
- return new ProjectionBlockValSet(_dataBlockCache, column,
blockMetadata.getDataType(),
- blockMetadata.isSingleValue());
+ FieldSpec fieldSpec = _dataSourceMetadataMap.get(column).getFieldSpec();
+ return new ProjectionBlockValSet(_dataBlockCache, column,
fieldSpec.getDataType(),
+ fieldSpec.isSingleValueField());
}
public DocIdSetBlock getDocIdSetBlock() {
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/SingleValueBlock.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/SingleValueBlock.java
index 132e54e..6e9615b 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/SingleValueBlock.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/SingleValueBlock.java
@@ -32,13 +32,14 @@ import org.apache.pinot.spi.data.FieldSpec;
@SuppressWarnings("rawtypes")
public final class SingleValueBlock implements Block {
private final SingleColumnSingleValueReader _reader;
- private final BlockValSet _blockValSet;
+ private final FieldSpec.DataType _dataType;
private final BlockMetadata _blockMetadata;
+ private BlockValSet _blockValSet;
public SingleValueBlock(SingleColumnSingleValueReader reader, int numDocs,
FieldSpec.DataType dataType,
Dictionary dictionary) {
_reader = reader;
- _blockValSet = new SingleValueSet(reader, dataType);
+ _dataType = dataType;
_blockMetadata = new BlockMetadataImpl(numDocs, true, 0, dataType,
dictionary);
}
@@ -53,6 +54,9 @@ public final class SingleValueBlock implements Block {
@Override
public BlockValSet getBlockValueSet() {
+ if (_blockValSet == null) {
+ _blockValSet = new SingleValueSet(_reader, _dataType);
+ }
return _blockValSet;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]