You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@carbondata.apache.org by ra...@apache.org on 2018/09/24 11:23:50 UTC

carbondata git commit: [Compatibility] fix legacy store compatibility issue

Repository: carbondata
Updated Branches:
  refs/heads/master 23bd6e9af -> 0ad90820a


[Compatibility] fix legacy store compatibility issue

Problem:
Migrate a table from 1.1 version with one segment to the latest version and do one load. Now the table will have 1 legacy segment and 1 non-legacy segment.
During query when the blocklet count is calculated for both the blocks. Legacy segment should give 0 to avoid blocklet pruning as min max is not there and nonLegacy segment should give 1 so that all the blocklets are scanned for query.
Datamap schema is cached to avoid calculating it again. For segment2 the datamap schema of segment1 is being used due to which isLegacy flag is being misused.

Solution:
Pass 0 as blocklet count for legacy store and calculate blocklet count only for new segments.
Be sure to do all of the following checklist to help us incorporate
your contribution quickly and easily:

This closes #2746


Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo
Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/0ad90820
Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/0ad90820
Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/0ad90820

Branch: refs/heads/master
Commit: 0ad90820acd78b8158edb4025e559df363af6800
Parents: 23bd6e9
Author: kunal642 <ku...@gmail.com>
Authored: Fri Sep 21 18:43:22 2018 +0530
Committer: ravipesala <ra...@gmail.com>
Committed: Mon Sep 24 16:53:35 2018 +0530

----------------------------------------------------------------------
 .../indexstore/blockletindex/BlockDataMap.java  | 21 ++++++++++----------
 1 file changed, 10 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/carbondata/blob/0ad90820/core/src/main/java/org/apache/carbondata/core/indexstore/blockletindex/BlockDataMap.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/carbondata/core/indexstore/blockletindex/BlockDataMap.java b/core/src/main/java/org/apache/carbondata/core/indexstore/blockletindex/BlockDataMap.java
index 8a1538e..0cf9914 100644
--- a/core/src/main/java/org/apache/carbondata/core/indexstore/blockletindex/BlockDataMap.java
+++ b/core/src/main/java/org/apache/carbondata/core/indexstore/blockletindex/BlockDataMap.java
@@ -238,6 +238,10 @@ public class BlockDataMap extends CoarseGrainDataMap
             blockMetaInfo, updatedMinValues, updatedMaxValues, minMaxFlag);
       }
     }
+    List<Short> blockletCountList = new ArrayList<>();
+    blockletCountList.add((short) 0);
+    byte[] blockletCount = convertRowCountFromShortToByteArray(blockletCountList);
+    summaryRow.setByteArray(blockletCount, taskSummarySchema.length - 1);
     setMinMaxFlagForTaskSummary(summaryRow, taskSummarySchema, segmentProperties, minMaxFlag);
     return summaryRow;
   }
@@ -627,17 +631,12 @@ public class BlockDataMap extends CoarseGrainDataMap
 
   // get total blocklet number in this datamap
   protected int getTotalBlocklets() {
-    if (isLegacyStore) {
-      // dummy value
-      return 0;
-    } else {
-      ByteBuffer byteBuffer = ByteBuffer.wrap(getBlockletRowCountForEachBlock());
-      int sum = 0;
-      while (byteBuffer.hasRemaining()) {
-        sum += byteBuffer.getShort();
-      }
-      return sum;
+    ByteBuffer byteBuffer = ByteBuffer.wrap(getBlockletRowCountForEachBlock());
+    int sum = 0;
+    while (byteBuffer.hasRemaining()) {
+      sum += byteBuffer.getShort();
     }
+    return sum;
   }
 
   private List<Blocklet> prune(FilterResolverIntf filterExp) {
@@ -1000,7 +999,7 @@ public class BlockDataMap extends CoarseGrainDataMap
         SegmentPropertiesAndSchemaHolder.getInstance()
             .getSegmentPropertiesWrapper(segmentPropertiesIndex);
     try {
-      return segmentPropertiesWrapper.getTaskSummarySchema(!isLegacyStore, isFilePathStored);
+      return segmentPropertiesWrapper.getTaskSummarySchema(true, isFilePathStored);
     } catch (MemoryException e) {
       throw new RuntimeException(e);
     }