You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by sy...@apache.org on 2015/10/24 00:49:37 UTC
[17/50] [abbrv] hbase git commit: HBASE-14643 - Avoid Splits from
once again opening a closed reader for fetching the first and last key (Heng
Chen)
HBASE-14643 - Avoid Splits from once again opening a closed reader for
fetching the first and last key (Heng Chen)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/6e3b7af0
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/6e3b7af0
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/6e3b7af0
Branch: refs/heads/hbase-12439
Commit: 6e3b7af0efced7351163a5011a44bfc18851fce0
Parents: 5a5b854
Author: ramkrishna <ra...@gmail.com>
Authored: Wed Oct 21 10:12:38 2015 +0530
Committer: ramkrishna <ra...@gmail.com>
Committed: Wed Oct 21 10:12:38 2015 +0530
----------------------------------------------------------------------
.../hbase/regionserver/HRegionFileSystem.java | 8 +++----
.../hadoop/hbase/regionserver/StoreFile.java | 23 ++++++++++++++++++++
.../hbase/regionserver/TestStoreFile.java | 5 ++++-
3 files changed, 31 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/6e3b7af0/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java
index b16738f..412f9b3 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java
@@ -587,23 +587,23 @@ public class HRegionFileSystem {
if (top) {
//check if larger than last key.
KeyValue splitKey = KeyValueUtil.createFirstOnRow(splitRow);
- Cell lastKey = f.createReader().getLastKey();
+ Cell lastKey = f.getLastKey();
// If lastKey is null means storefile is empty.
if (lastKey == null) {
return null;
}
- if (f.getReader().getComparator().compare(splitKey, lastKey) > 0) {
+ if (f.getComparator().compare(splitKey, lastKey) > 0) {
return null;
}
} else {
//check if smaller than first key
KeyValue splitKey = KeyValueUtil.createLastOnRow(splitRow);
- Cell firstKey = f.createReader().getFirstKey();
+ Cell firstKey = f.getFirstKey();
// If firstKey is null means storefile is empty.
if (firstKey == null) {
return null;
}
- if (f.getReader().getComparator().compare(splitKey, firstKey) < 0) {
+ if (f.getComparator().compare(splitKey, firstKey) < 0) {
return null;
}
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/6e3b7af0/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 11d71cf..88aa151 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
@@ -129,6 +129,25 @@ public class StoreFile {
// Set when we obtain a Reader.
private long maxMemstoreTS = -1;
+ // firstKey, lastkey and cellComparator will be set when openReader.
+ private Cell firstKey;
+
+ private Cell lastKey;
+
+ private Comparator comparator;
+
+ public Cell getFirstKey() {
+ return firstKey;
+ }
+
+ public Cell getLastKey() {
+ return lastKey;
+ }
+
+ public Comparator getComparator() {
+ return comparator;
+ }
+
public long getMaxMemstoreTS() {
return maxMemstoreTS;
}
@@ -475,6 +494,10 @@ public class StoreFile {
"proceeding without", e);
this.reader.timeRangeTracker = null;
}
+ // initialize so we can reuse them after reader closed.
+ firstKey = reader.getFirstKey();
+ lastKey = reader.getLastKey();
+ comparator = reader.getComparator();
return this.reader;
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/6e3b7af0/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 b763a22..85e4439 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
@@ -175,6 +175,8 @@ public class TestStoreFile extends HBaseTestCase {
byte [] midRow = CellUtil.cloneRow(kv);
kv = reader.getLastKey();
byte [] finalRow = CellUtil.cloneRow(kv);
+ hsf.closeReader(true);
+
// Make a reference
HRegionInfo splitHri = new HRegionInfo(hri.getTable(), null, midRow);
Path refPath = splitStoreFile(regionFs, splitHri, TEST_FAMILY, hsf, midRow, true);
@@ -275,9 +277,10 @@ public class TestStoreFile extends HBaseTestCase {
HRegionInfo splitHriA = new HRegionInfo(hri.getTable(), null, SPLITKEY);
HRegionInfo splitHriB = new HRegionInfo(hri.getTable(), SPLITKEY, null);
StoreFile f = new StoreFile(fs, linkFilePath, testConf, cacheConf, BloomType.NONE);
+ f.createReader();
Path pathA = splitStoreFile(cloneRegionFs, splitHriA, TEST_FAMILY, f, SPLITKEY, true); // top
Path pathB = splitStoreFile(cloneRegionFs, splitHriB, TEST_FAMILY, f, SPLITKEY, false);// bottom
-
+ f.closeReader(true);
// OK test the thing
FSUtils.logFileSystemState(fs, testDir, LOG);