You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ra...@apache.org on 2016/06/29 17:41:53 UTC

hbase git commit: HBASE-16143 Change MemstoreScanner constructor to accept List (Ram)

Repository: hbase
Updated Branches:
  refs/heads/master 294c2dae9 -> 9b1ecb31f


HBASE-16143 Change MemstoreScanner constructor to accept
List<KeyValueScanner> (Ram)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/9b1ecb31
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/9b1ecb31
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/9b1ecb31

Branch: refs/heads/master
Commit: 9b1ecb31f0fdab6208d376fd06ebecdc1d916812
Parents: 294c2da
Author: Ramkrishna <ra...@intel.com>
Authored: Wed Jun 29 23:10:55 2016 +0530
Committer: Ramkrishna <ra...@intel.com>
Committed: Wed Jun 29 23:10:55 2016 +0530

----------------------------------------------------------------------
 .../hbase/regionserver/AbstractMemStore.java    | 16 --------
 .../hbase/regionserver/CompactingMemStore.java  | 13 ++++--
 .../hbase/regionserver/DefaultMemStore.java     | 16 ++++----
 .../hbase/regionserver/MemStoreCompactor.java   |  2 +-
 .../hbase/regionserver/MemStoreScanner.java     | 42 +++++++++++---------
 .../hbase/regionserver/SegmentScanner.java      | 10 +----
 6 files changed, 43 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/9b1ecb31/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/AbstractMemStore.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/AbstractMemStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/AbstractMemStore.java
index 0f27e0e..d25f960 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/AbstractMemStore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/AbstractMemStore.java
@@ -21,7 +21,6 @@ package org.apache.hadoop.hbase.regionserver;
 import com.google.common.annotations.VisibleForTesting;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.NavigableSet;
@@ -192,14 +191,6 @@ public abstract class AbstractMemStore implements MemStore {
     return getActive().getSize();
   }
 
-  /**
-   * @return a list containing a single memstore scanner.
-   */
-  @Override
-  public List<KeyValueScanner> getScanners(long readPt) throws IOException {
-    return Collections.<KeyValueScanner> singletonList(new MemStoreScanner(this, readPt));
-  }
-
   @Override
   public long getSnapshotSize() {
     return getSnapshot().getSize();
@@ -441,13 +432,6 @@ public abstract class AbstractMemStore implements MemStore {
   protected abstract void checkActiveSize();
 
   /**
-   * Returns a list of Store segment scanners, one per each store segment
-   * @param readPt the version number required to initialize the scanners
-   * @return a list of Store segment scanners, one per each store segment
-   */
-  protected abstract List<SegmentScanner> getListOfScanners(long readPt) throws IOException;
-
-  /**
    * Returns an ordered list of segments from most recent to oldest in memstore
    * @return an ordered list of segments from most recent to oldest in memstore
    */

http://git-wip-us.apache.org/repos/asf/hbase/blob/9b1ecb31/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java
index ec5684d..cd923f9 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java
@@ -20,6 +20,8 @@ package org.apache.hadoop.hbase.regionserver;
 
 import com.google.common.annotations.VisibleForTesting;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.ThreadPoolExecutor;
@@ -226,17 +228,20 @@ public class CompactingMemStore extends AbstractMemStore {
   /*
    * Scanners are ordered from 0 (oldest) to newest in increasing order.
    */
-  protected List<SegmentScanner> getListOfScanners(long readPt) throws IOException {
+  public List<KeyValueScanner> getScanners(long readPt) throws IOException {
     List<Segment> pipelineList = pipeline.getSegments();
     long order = pipelineList.size();
-    LinkedList<SegmentScanner> list = new LinkedList<SegmentScanner>();
-    list.add(getActive().getSegmentScanner(readPt, order+1));
+    // The list of elements in pipeline + the active element + the snapshot segment
+    // TODO : This will change when the snapshot is made of more than one element
+    List<KeyValueScanner> list = new ArrayList<KeyValueScanner>(pipelineList.size() + 2);
+    list.add(getActive().getSegmentScanner(readPt, order + 1));
     for (Segment item : pipelineList) {
       list.add(item.getSegmentScanner(readPt, order));
       order--;
     }
     list.add(getSnapshot().getSegmentScanner(readPt, order));
-    return list;
+    return Collections.<KeyValueScanner> singletonList(
+      new MemStoreScanner((AbstractMemStore) this, list, readPt));
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/9b1ecb31/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DefaultMemStore.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DefaultMemStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DefaultMemStore.java
index cdc910e..c21dbb5 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DefaultMemStore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DefaultMemStore.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.lang.management.ManagementFactory;
 import java.lang.management.RuntimeMXBean;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.commons.logging.Log;
@@ -113,18 +114,19 @@ public class DefaultMemStore extends AbstractMemStore {
   /*
    * Scanners are ordered from 0 (oldest) to newest in increasing order.
    */
-  protected List<SegmentScanner> getListOfScanners(long readPt) throws IOException {
-    List<SegmentScanner> list = new ArrayList<SegmentScanner>(2);
-    list.add(0, getActive().getSegmentScanner(readPt, 1));
-    list.add(1, getSnapshot().getSegmentScanner(readPt, 0));
-    return list;
+  public List<KeyValueScanner> getScanners(long readPt) throws IOException {
+    List<KeyValueScanner> list = new ArrayList<KeyValueScanner>(2);
+    list.add(getActive().getSegmentScanner(readPt, 1));
+    list.add(getSnapshot().getSegmentScanner(readPt, 0));
+    return Collections.<KeyValueScanner> singletonList(
+      new MemStoreScanner((AbstractMemStore) this, list, readPt));
   }
 
   @Override
   protected List<Segment> getSegments() throws IOException {
     List<Segment> list = new ArrayList<Segment>(2);
-    list.add(0, getActive());
-    list.add(1, getSnapshot());
+    list.add(getActive());
+    list.add(getSnapshot());
     return list;
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/9b1ecb31/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java
index 5b2876d..691ebb9 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java
@@ -67,7 +67,7 @@ class MemStoreCompactor {
   public boolean startCompaction() throws IOException {
     if (!compactingMemStore.hasCompactibleSegments()) return false;  // no compaction on empty
 
-    List<SegmentScanner> scanners = new ArrayList<SegmentScanner>();
+    List<KeyValueScanner> scanners = new ArrayList<KeyValueScanner>();
     // get the list of segments from the pipeline
     versionedList = compactingMemStore.getCompactibleSegments();
     // the list is marked with specific version

http://git-wip-us.apache.org/repos/asf/hbase/blob/9b1ecb31/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreScanner.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreScanner.java
index 01a7ff3..3d31d2a 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreScanner.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreScanner.java
@@ -57,35 +57,39 @@ public class MemStoreScanner extends NonLazyKeyValueScanner {
 
   private long readPoint;
   // remember the initial version of the scanners list
-  List<SegmentScanner> scanners;
+  List<KeyValueScanner> scanners;
   // pointer back to the relevant MemStore
   // is needed for shouldSeek() method
   private AbstractMemStore backwardReferenceToMemStore;
 
   /**
-   * Constructor.
    * If UNDEFINED type for MemStoreScanner is provided, the forward heap is used as default!
    * After constructor only one heap is going to be initialized for entire lifespan
    * of the MemStoreScanner. A specific scanner can only be one directional!
    *
    * @param ms        Pointer back to the MemStore
-   * @param readPoint Read point below which we can safely remove duplicate KVs
-   * @param type      The scan type COMPACT_FORWARD should be used for compaction
+   * @param scanners  List of scanners over the segments
+   * @param readPt    Read point below which we can safely remove duplicate KVs
    */
-  public MemStoreScanner(AbstractMemStore ms, long readPoint, Type type) throws IOException {
-    this(ms, ms.getListOfScanners(readPoint), readPoint, type);
-  }
-
-  /* Constructor used only when the scan usage is unknown
-  and need to be defined according to the first move */
-  public MemStoreScanner(AbstractMemStore ms, long readPt) throws IOException {
-    this(ms, readPt, Type.UNDEFINED);
+  public MemStoreScanner(AbstractMemStore ms, List<KeyValueScanner> scanners, long readPt)
+      throws IOException {
+    this(ms, scanners, readPt, Type.UNDEFINED);
   }
 
-  public MemStoreScanner(AbstractMemStore ms, List<SegmentScanner> scanners, long readPoint,
+  /**
+   * If UNDEFINED type for MemStoreScanner is provided, the forward heap is used as default!
+   * After constructor only one heap is going to be initialized for entire lifespan
+   * of the MemStoreScanner. A specific scanner can only be one directional!
+   *
+   * @param ms        Pointer back to the MemStore
+   * @param scanners  List of scanners over the segments
+   * @param readPt Read point below which we can safely remove duplicate KVs
+   * @param type      The scan type COMPACT_FORWARD should be used for compaction
+   */
+  public MemStoreScanner(AbstractMemStore ms, List<KeyValueScanner> scanners, long readPt,
       Type type) throws IOException {
     super();
-    this.readPoint = readPoint;
+    this.readPoint = readPt;
     this.type = type;
     switch (type) {
       case UNDEFINED:
@@ -262,8 +266,8 @@ public class MemStoreScanner extends NonLazyKeyValueScanner {
       return true;
     }
 
-    for (SegmentScanner sc : scanners) {
-      if (sc.shouldSeek(scan, oldestUnexpiredTS)) {
+    for (KeyValueScanner sc : scanners) {
+      if (sc.shouldUseScanner(scan, store, oldestUnexpiredTS)) {
         return true;
       }
     }
@@ -275,7 +279,7 @@ public class MemStoreScanner extends NonLazyKeyValueScanner {
   public String toString() {
     StringBuffer buf = new StringBuffer();
     int i = 1;
-    for (SegmentScanner scanner : scanners) {
+    for (KeyValueScanner scanner : scanners) {
       buf.append("scanner (" + i + ") " + scanner.toString() + " ||| ");
       i++;
     }
@@ -289,7 +293,7 @@ public class MemStoreScanner extends NonLazyKeyValueScanner {
    */
   private boolean restartBackwardHeap(Cell cell) throws IOException {
     boolean res = false;
-    for (SegmentScanner scan : scanners) {
+    for (KeyValueScanner scan : scanners) {
       res |= scan.seekToPreviousRow(cell);
     }
     this.backwardHeap =
@@ -315,7 +319,7 @@ public class MemStoreScanner extends NonLazyKeyValueScanner {
         forwardHeap = null;
         // before building the heap seek for the relevant key on the scanners,
         // for the heap to be built from the scanners correctly
-        for (SegmentScanner scan : scanners) {
+        for (KeyValueScanner scan : scanners) {
           if (toLast) {
             res |= scan.seekToLastRow();
           } else {

http://git-wip-us.apache.org/repos/asf/hbase/blob/9b1ecb31/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SegmentScanner.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SegmentScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SegmentScanner.java
index a04c1da..1191f30 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SegmentScanner.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SegmentScanner.java
@@ -243,7 +243,7 @@ public class SegmentScanner implements KeyValueScanner {
    */
   @Override
   public boolean shouldUseScanner(Scan scan, Store store, long oldestUnexpiredTS) {
-    return true;
+    return getSegment().shouldSeek(scan,oldestUnexpiredTS);
   }
   /**
    * This scanner is working solely on the in-memory MemStore therefore this
@@ -305,14 +305,6 @@ public class SegmentScanner implements KeyValueScanner {
     // do nothing
   }
 
-  /**
-   * Returns whether the given scan should seek in this segment
-   * @return whether the given scan should seek in this segment
-   */
-  public boolean shouldSeek(Scan scan, long oldestUnexpiredTS) {
-    return getSegment().shouldSeek(scan,oldestUnexpiredTS);
-  }
-
   protected Segment getSegment(){
     return segment;
   }