hbase git commit: HBASE-17887 Row-level consistency is broken for read
Repository: hbase Updated Branches: refs/heads/master 5e046151d -> b34ab5980 HBASE-17887 Row-level consistency is broken for read Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/b34ab598 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/b34ab598 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/b34ab598 Branch: refs/heads/master Commit: b34ab5980ea7a21fd750537476027f9a8665eacc Parents: 5e04615 Author: Chia-Ping TsaiAuthored: Fri May 12 19:45:07 2017 +0800 Committer: Chia-Ping Tsai Committed: Fri May 12 19:45:07 2017 +0800 -- .../regionserver/ChangedReadersObserver.java| 12 +- .../hbase/regionserver/CompactingMemStore.java | 12 +- .../hadoop/hbase/regionserver/HStore.java | 26 ++- .../hadoop/hbase/regionserver/StoreScanner.java | 38 +++- .../hadoop/hbase/regionserver/TestStore.java| 225 ++- .../hbase/regionserver/TestStoreScanner.java| 5 +- .../hbase/regionserver/TestWideScanner.java | 3 +- 7 files changed, 293 insertions(+), 28 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hbase/blob/b34ab598/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java -- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java index 0bc75e7..a019666 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java @@ -21,18 +21,24 @@ package org.apache.hadoop.hbase.regionserver; import java.io.IOException; import java.util.List; - import org.apache.hadoop.hbase.classification.InterfaceAudience; - /** * If set of MapFile.Readers in Store change, implementors are notified. */ @InterfaceAudience.Private public interface ChangedReadersObserver { + + /** + * @return the read point of the current scan + */ + long getReadPoint(); + /** * Notify observers. + * @param sfs The new files + * @param memStoreScanners scanner of current memstore * @throws IOException e */ - void updateReaders(List sfs) throws IOException; + void updateReaders(List sfs, List memStoreScanners) throws IOException; } http://git-wip-us.apache.org/repos/asf/hbase/blob/b34ab598/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 aaf60e3..8d71efc 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 @@ -317,18 +317,24 @@ public class CompactingMemStore extends AbstractMemStore { * Scanners are ordered from 0 (oldest) to newest in increasing order. */ public List getScanners(long readPt) throws IOException { +MutableSegment activeTmp = active; List pipelineList = pipeline.getSegments(); List snapshotList = snapshot.getAllSegments(); long order = 1 + pipelineList.size() + snapshotList.size(); // The list of elements in pipeline + the active element + the snapshot segment // The order is the Segment ordinal -List list = new ArrayList((int) order); -order = addToScanners(active, readPt, order, list); +List list = createList((int) order); +order = addToScanners(activeTmp, readPt, order, list); order = addToScanners(pipelineList, readPt, order, list); addToScanners(snapshotList, readPt, order, list); return list; } + @VisibleForTesting + protected List createList(int capacity) { + return new ArrayList<>(capacity); + } + /** * Check whether anything need to be done based on the current active set size. * The method is invoked upon every addition to the active set. @@ -428,7 +434,7 @@ public class CompactingMemStore extends AbstractMemStore { } } - private void pushActiveToPipeline(MutableSegment active) { + protected void pushActiveToPipeline(MutableSegment active) { if (!active.isEmpty()) { pipeline.pushHead(active); resetActive(); http://git-wip-us.apache.org/repos/asf/hbase/blob/b34ab598/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java -- diff --git
hbase git commit: HBASE-17887 Row-level consistency is broken for read
Repository: hbase Updated Branches: refs/heads/branch-1 51cb53776 -> f81486445 HBASE-17887 Row-level consistency is broken for read Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/f8148644 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/f8148644 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/f8148644 Branch: refs/heads/branch-1 Commit: f81486445c072096022cca77eb0a53f1594ff204 Parents: 51cb537 Author: Chia-Ping TsaiAuthored: Fri May 12 19:44:16 2017 +0800 Committer: Chia-Ping Tsai Committed: Fri May 12 19:44:16 2017 +0800 -- .../regionserver/ChangedReadersObserver.java| 9 +- .../hbase/regionserver/DefaultMemStore.java | 301 ++- .../hadoop/hbase/regionserver/HStore.java | 9 +- .../hadoop/hbase/regionserver/StoreScanner.java | 45 ++- .../apache/hadoop/hbase/io/TestHeapSize.java| 3 +- .../hbase/regionserver/TestDefaultMemStore.java | 68 ++--- .../hadoop/hbase/regionserver/TestHRegion.java | 4 +- .../regionserver/TestMemStoreChunkPool.java | 12 +- .../hadoop/hbase/regionserver/TestStore.java| 155 +- .../hbase/regionserver/TestStoreScanner.java| 5 +- .../hbase/regionserver/TestWideScanner.java | 3 +- 11 files changed, 401 insertions(+), 213 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hbase/blob/f8148644/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java -- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java index 0bc75e7..4421ac5 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java @@ -30,9 +30,16 @@ import org.apache.hadoop.hbase.classification.InterfaceAudience; */ @InterfaceAudience.Private public interface ChangedReadersObserver { + + /** + * @return the read point of the current scan + */ + long getReadPoint(); /** * Notify observers. + * @param sfs The new files + * @param memStoreScanners scanner of current memstore * @throws IOException e */ - void updateReaders(List sfs) throws IOException; + void updateReaders(List sfs, List memStoreScanners) throws IOException; } http://git-wip-us.apache.org/repos/asf/hbase/blob/f8148644/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 7b7446a..b1e9f32 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 @@ -71,38 +71,26 @@ import com.google.common.annotations.VisibleForTesting; @InterfaceAudience.Private public class DefaultMemStore implements MemStore { private static final Log LOG = LogFactory.getLog(DefaultMemStore.class); + @VisibleForTesting static final String USEMSLAB_KEY = "hbase.hregion.memstore.mslab.enabled"; private static final boolean USEMSLAB_DEFAULT = true; - static final String MSLAB_CLASS_NAME = "hbase.regionserver.mslab.class"; + private static final String MSLAB_CLASS_NAME = "hbase.regionserver.mslab.class"; private Configuration conf; - // MemStore. Use a CellSkipListSet rather than SkipListSet because of the - // better semantics. The Map will overwrite if passed a key it already had - // whereas the Set will not add new Cell if key is same though value might be - // different. Value is not important -- just make sure always same - // reference passed. - volatile CellSkipListSet cellSet; - - // Snapshot of memstore. Made for flusher. - volatile CellSkipListSet snapshot; - + @VisibleForTesting final KeyValue.KVComparator comparator; - // Used to track own heapSize - final AtomicLong size; - private volatile long snapshotSize; - // Used to track when to flush - volatile long timeOfOldestEdit = Long.MAX_VALUE; + private volatile long timeOfOldestEdit = Long.MAX_VALUE; - TimeRangeTracker timeRangeTracker; - TimeRangeTracker snapshotTimeRangeTracker; + private volatile long snapshotId; + private volatile boolean tagsPresent; - volatile MemStoreLAB allocator; - volatile MemStoreLAB snapshotAllocator; - volatile long snapshotId; - volatile boolean
hbase git commit: HBASE-17887 Row-level consistency is broken for read
Repository: hbase Updated Branches: refs/heads/branch-1.3 5cbc041b9 -> 72edf521c HBASE-17887 Row-level consistency is broken for read Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/72edf521 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/72edf521 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/72edf521 Branch: refs/heads/branch-1.3 Commit: 72edf521c1effe3afe6ce6b39aaf843b8651a4a6 Parents: 5cbc041 Author: Chia-Ping TsaiAuthored: Fri May 12 19:42:45 2017 +0800 Committer: Chia-Ping Tsai Committed: Fri May 12 19:42:45 2017 +0800 -- .../regionserver/ChangedReadersObserver.java| 9 +- .../hbase/regionserver/DefaultMemStore.java | 300 ++- .../hadoop/hbase/regionserver/HStore.java | 9 +- .../hadoop/hbase/regionserver/StoreScanner.java | 44 ++- .../apache/hadoop/hbase/io/TestHeapSize.java| 3 +- .../hbase/regionserver/TestDefaultMemStore.java | 66 ++-- .../hadoop/hbase/regionserver/TestHRegion.java | 4 +- .../regionserver/TestMemStoreChunkPool.java | 12 +- .../hadoop/hbase/regionserver/TestStore.java| 151 +- .../hbase/regionserver/TestStoreScanner.java| 5 +- .../hbase/regionserver/TestWideScanner.java | 3 +- 11 files changed, 398 insertions(+), 208 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hbase/blob/72edf521/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java -- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java index 0bc75e7..4421ac5 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java @@ -30,9 +30,16 @@ import org.apache.hadoop.hbase.classification.InterfaceAudience; */ @InterfaceAudience.Private public interface ChangedReadersObserver { + + /** + * @return the read point of the current scan + */ + long getReadPoint(); /** * Notify observers. + * @param sfs The new files + * @param memStoreScanners scanner of current memstore * @throws IOException e */ - void updateReaders(List sfs) throws IOException; + void updateReaders(List sfs, List memStoreScanners) throws IOException; } http://git-wip-us.apache.org/repos/asf/hbase/blob/72edf521/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 70f5a12..884ef29 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 @@ -70,38 +70,26 @@ import com.google.common.annotations.VisibleForTesting; @InterfaceAudience.Private public class DefaultMemStore implements MemStore { private static final Log LOG = LogFactory.getLog(DefaultMemStore.class); + @VisibleForTesting static final String USEMSLAB_KEY = "hbase.hregion.memstore.mslab.enabled"; private static final boolean USEMSLAB_DEFAULT = true; - static final String MSLAB_CLASS_NAME = "hbase.regionserver.mslab.class"; + private static final String MSLAB_CLASS_NAME = "hbase.regionserver.mslab.class"; private Configuration conf; - // MemStore. Use a CellSkipListSet rather than SkipListSet because of the - // better semantics. The Map will overwrite if passed a key it already had - // whereas the Set will not add new Cell if key is same though value might be - // different. Value is not important -- just make sure always same - // reference passed. - volatile CellSkipListSet cellSet; - - // Snapshot of memstore. Made for flusher. - volatile CellSkipListSet snapshot; - + @VisibleForTesting final KeyValue.KVComparator comparator; - // Used to track own heapSize - final AtomicLong size; - private volatile long snapshotSize; - // Used to track when to flush - volatile long timeOfOldestEdit = Long.MAX_VALUE; + private volatile long timeOfOldestEdit = Long.MAX_VALUE; - TimeRangeTracker timeRangeTracker; - TimeRangeTracker snapshotTimeRangeTracker; + private volatile long snapshotId; + private volatile boolean tagsPresent; - volatile MemStoreLAB allocator; - volatile MemStoreLAB snapshotAllocator; - volatile long snapshotId; - volatile boolean