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

Reply via email to