You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2018/08/16 22:20:13 UTC
[7/8] hbase git commit: HBASE-21047 Object creation of
StoreFileScanner thru constructor and close may leave refCount to -1 (Vishal
Khandelwal)
HBASE-21047 Object creation of StoreFileScanner thru constructor and close may leave refCount to -1 (Vishal Khandelwal)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/9e5a1cb2
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/9e5a1cb2
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/9e5a1cb2
Branch: refs/heads/branch-1.4
Commit: 9e5a1cb2ba71583e12f2d9fadd2bc82e911cdac8
Parents: 472a13a
Author: Andrew Purtell <ap...@apache.org>
Authored: Thu Aug 16 11:42:15 2018 -0700
Committer: Andrew Purtell <ap...@apache.org>
Committed: Thu Aug 16 11:43:32 2018 -0700
----------------------------------------------------------------------
.../hadoop/hbase/regionserver/StoreFile.java | 10 +++++++--
.../hbase/regionserver/StoreFileScanner.java | 1 +
.../hbase/regionserver/TestStoreFile.java | 23 ++++++++++++++++++++
3 files changed, 32 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/9e5a1cb2/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java
index 803bfb3..06cc57c 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java
@@ -1209,13 +1209,19 @@ public class StoreFile {
*/
public StoreFileScanner getStoreFileScanner(boolean cacheBlocks, boolean pread,
boolean isCompaction, long readPt, long scannerOrder, boolean canOptimizeForNonNullColumn) {
- // Increment the ref count
- refCount.incrementAndGet();
return new StoreFileScanner(this, getScanner(cacheBlocks, pread, isCompaction), !isCompaction,
reader.hasMVCCInfo(), readPt, scannerOrder, canOptimizeForNonNullColumn);
}
/**
+ * Increment the ref count associated with the reader when ever a scanner associated with the
+ * reader is opened
+ */
+ void incrementRefCount() {
+ refCount.incrementAndGet();
+ }
+
+ /**
* Decrement the ref count associated with the reader when ever a scanner associated
* with the reader is closed
*/
http://git-wip-us.apache.org/repos/asf/hbase/blob/9e5a1cb2/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java
index b3f7fa6..7343eaf 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java
@@ -94,6 +94,7 @@ public class StoreFileScanner implements KeyValueScanner {
this.hasMVCCInfo = hasMVCC;
this.scannerOrder = scannerOrder;
this.canOptimizeForNonNullColumn = canOptimizeForNonNullColumn;
+ this.reader.incrementRefCount();
}
boolean isPrimaryReplica() {
http://git-wip-us.apache.org/repos/asf/hbase/blob/9e5a1cb2/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreFile.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreFile.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreFile.java
index 9c9b4b2..6bd53c6 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreFile.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreFile.java
@@ -235,6 +235,29 @@ public class TestStoreFile extends HBaseTestCase {
}
@Test
+ public void testStoreFileReference() throws Exception {
+ Path f = new Path(ROOT_DIR, getName());
+ HFileContext meta = new HFileContextBuilder().withBlockSize(8 * 1024).build();
+ // Make a store file and write data to it.
+ StoreFile.Writer writer = new StoreFile.WriterBuilder(conf, cacheConf, this.fs).withFilePath(f)
+ .withFileContext(meta).build();
+
+ writeStoreFile(writer);
+ writer.close();
+
+ // Creates a reader for StoreFile
+ StoreFile.Reader reader = new StoreFile.Reader(this.fs, f, cacheConf, conf);
+ StoreFileScanner scanner =
+ new StoreFileScanner(reader, mock(HFileScanner.class), false, false, 0, 0, false);
+
+ // Verify after instantiating scanner refCount is increased
+ assertTrue(scanner.getReader().isReferencedInReads());
+ scanner.close();
+ // Verify after closing scanner refCount is decreased
+ assertFalse(scanner.getReader().isReferencedInReads());
+ }
+
+ @Test
public void testEmptyStoreFileRestrictKeyRanges() throws Exception {
StoreFile.Reader reader = mock(StoreFile.Reader.class);
Store store = mock(Store.class);