This is an automated email from the ASF dual-hosted git repository.
qiangcai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/carbondata.git
The following commit(s) were added to refs/heads/master by this push:
new 94c16c8 [CARBONDATA-3551] Fix NPE in multi-thread pruning on
NonTransactional tables
94c16c8 is described below
commit 94c16c8830a49fadbf363cc7b9cfc9de3ac35fd1
Author: ajantha-bhat <[email protected]>
AuthorDate: Fri Oct 18 11:06:44 2019 +0530
[CARBONDATA-3551] Fix NPE in multi-thread pruning on NonTransactional tables
This closes #3411
---
.../carbondata/core/datamap/DataMapFilter.java | 22 ++++++++++++++++++++++
.../carbondata/core/datamap/TableDataMap.java | 2 +-
.../core/scan/expression/ColumnExpression.java | 1 +
3 files changed, 24 insertions(+), 1 deletion(-)
diff --git
a/core/src/main/java/org/apache/carbondata/core/datamap/DataMapFilter.java
b/core/src/main/java/org/apache/carbondata/core/datamap/DataMapFilter.java
index ac4886d..46f37db 100644
--- a/core/src/main/java/org/apache/carbondata/core/datamap/DataMapFilter.java
+++ b/core/src/main/java/org/apache/carbondata/core/datamap/DataMapFilter.java
@@ -17,6 +17,7 @@
package org.apache.carbondata.core.datamap;
+import java.io.IOException;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
@@ -29,6 +30,7 @@ import
org.apache.carbondata.core.scan.executor.util.RestructureUtil;
import org.apache.carbondata.core.scan.expression.ColumnExpression;
import org.apache.carbondata.core.scan.expression.Expression;
import org.apache.carbondata.core.scan.filter.resolver.FilterResolverIntf;
+import org.apache.carbondata.core.util.ObjectSerializationUtil;
/**
* the filter of DataMap
@@ -41,15 +43,35 @@ public class DataMapFilter implements Serializable {
private FilterResolverIntf resolver;
+ private String serializedExpression;
+
public DataMapFilter(CarbonTable table, Expression expression) {
this.table = table;
this.expression = expression;
if (expression != null) {
checkIfFilterColumnExistsInTable();
+ try {
+ this.serializedExpression =
ObjectSerializationUtil.convertObjectToString(expression);
+ } catch (IOException e) {
+ throw new RuntimeException("Error while serializing the exception", e);
+ }
}
resolve();
}
+ public Expression getNewCopyOfExpression() {
+ if (expression != null) {
+ try {
+ return (Expression) ObjectSerializationUtil
+ .convertStringToObject(this.serializedExpression);
+ } catch (IOException e) {
+ throw new RuntimeException("Error while deserializing the exception",
e);
+ }
+ } else {
+ return null;
+ }
+ }
+
private Set<String> extractColumnExpressions(Expression expression) {
Set<String> columnExpressionList = new HashSet<>();
for (Expression expressions: expression.getChildren()) {
diff --git
a/core/src/main/java/org/apache/carbondata/core/datamap/TableDataMap.java
b/core/src/main/java/org/apache/carbondata/core/datamap/TableDataMap.java
index ecdd586..ff24a07 100644
--- a/core/src/main/java/org/apache/carbondata/core/datamap/TableDataMap.java
+++ b/core/src/main/java/org/apache/carbondata/core/datamap/TableDataMap.java
@@ -289,7 +289,7 @@ public final class TableDataMap extends
OperationEventListener {
for (int i = segmentDataMapGroup.getFromIndex();
i <= segmentDataMapGroup.getToIndex(); i++) {
List<Blocklet> dmPruneBlocklets = dataMapList.get(i).prune(
- filter.getExpression(), segmentProperties, partitions,
table);
+ filter.getNewCopyOfExpression(), segmentProperties,
partitions, table);
pruneBlocklets.addAll(addSegmentId(
blockletDetailsFetcher.getExtendedBlocklets(dmPruneBlocklets, segment),
segment));
diff --git
a/core/src/main/java/org/apache/carbondata/core/scan/expression/ColumnExpression.java
b/core/src/main/java/org/apache/carbondata/core/scan/expression/ColumnExpression.java
index 766d249..cb39553 100644
---
a/core/src/main/java/org/apache/carbondata/core/scan/expression/ColumnExpression.java
+++
b/core/src/main/java/org/apache/carbondata/core/scan/expression/ColumnExpression.java
@@ -103,6 +103,7 @@ public class ColumnExpression extends LeafExpression {
measure = null;
isDimension = false;
isMeasure = false;
+ carbonColumn = null;
}
@Override