HBASE-4081 Issues with HRegion.compactStores methods
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1147350 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c8ce6dbd7d
commit
6f476bfd0e
|
@ -314,6 +314,7 @@ Release 0.91.0 - Unreleased
|
||||||
HBASE-4054 Usability improvement to HTablePool (Daniel Iancu)
|
HBASE-4054 Usability improvement to HTablePool (Daniel Iancu)
|
||||||
HBASE-4079 HTableUtil - helper class for loading data (Doug Meil via Ted Yu)
|
HBASE-4079 HTableUtil - helper class for loading data (Doug Meil via Ted Yu)
|
||||||
HBASE-3871 Speedup LoadIncrementalHFiles by parallelizing HFile splitting
|
HBASE-3871 Speedup LoadIncrementalHFiles by parallelizing HFile splitting
|
||||||
|
HBASE-4081 Issues with HRegion.compactStores methods (Ming Ma)
|
||||||
|
|
||||||
TASKS
|
TASKS
|
||||||
HBASE-3559 Move report of split to master OFF the heartbeat channel
|
HBASE-3559 Move report of split to master OFF the heartbeat channel
|
||||||
|
|
|
@ -815,33 +815,27 @@ public class HRegion implements HeapSize { // , Writable{
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called by compaction thread and after region is opened to compact the
|
* This is a helper function that compact all the stores synchronously
|
||||||
* HStores if necessary.
|
* It is used by utilities and testing
|
||||||
*
|
|
||||||
* <p>This operation could block for a long time, so don't call it from a
|
|
||||||
* time-sensitive thread.
|
|
||||||
*
|
|
||||||
* Note that no locking is necessary at this level because compaction only
|
|
||||||
* conflicts with a region split, and that cannot happen because the region
|
|
||||||
* server does them sequentially and not in parallel.
|
|
||||||
*
|
*
|
||||||
* @param majorCompaction True to force a major compaction regardless of thresholds
|
* @param majorCompaction True to force a major compaction regardless of thresholds
|
||||||
* @return split row if split is needed
|
|
||||||
* @throws IOException e
|
* @throws IOException e
|
||||||
*/
|
*/
|
||||||
byte [] compactStores(final boolean majorCompaction)
|
void compactStores(final boolean majorCompaction)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
if (majorCompaction) {
|
if (majorCompaction) {
|
||||||
this.triggerMajorCompaction();
|
this.triggerMajorCompaction();
|
||||||
}
|
}
|
||||||
return compactStores();
|
compactStores();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compact all the stores and return the split key of the first store that needs
|
* This is a helper function that compact all the stores synchronously
|
||||||
* to be split.
|
* It is used by utilities and testing
|
||||||
|
*
|
||||||
|
* @throws IOException e
|
||||||
*/
|
*/
|
||||||
public byte[] compactStores() throws IOException {
|
public void compactStores() throws IOException {
|
||||||
for(Store s : getStores().values()) {
|
for(Store s : getStores().values()) {
|
||||||
CompactionRequest cr = s.requestCompaction();
|
CompactionRequest cr = s.requestCompaction();
|
||||||
if(cr != null) {
|
if(cr != null) {
|
||||||
|
@ -851,13 +845,8 @@ public class HRegion implements HeapSize { // , Writable{
|
||||||
s.finishRequest(cr);
|
s.finishRequest(cr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
byte[] splitRow = s.checkSplit();
|
|
||||||
if (splitRow != null) {
|
|
||||||
return splitRow;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called by compaction thread and after region is opened to compact the
|
* Called by compaction thread and after region is opened to compact the
|
||||||
|
@ -3829,7 +3818,7 @@ public class HRegion implements HeapSize { // , Writable{
|
||||||
// nothing
|
// nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
byte[] checkSplit() {
|
public byte[] checkSplit() {
|
||||||
if (this.splitPoint != null) {
|
if (this.splitPoint != null) {
|
||||||
return this.splitPoint;
|
return this.splitPoint;
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,7 +146,11 @@ public class TestCoprocessorInterface extends HBaseTestCase {
|
||||||
addContent(region, fam3);
|
addContent(region, fam3);
|
||||||
region.flushcache();
|
region.flushcache();
|
||||||
}
|
}
|
||||||
byte [] splitRow = region.compactStores();
|
|
||||||
|
region.compactStores();
|
||||||
|
|
||||||
|
byte [] splitRow = region.checkSplit();
|
||||||
|
|
||||||
assertNotNull(splitRow);
|
assertNotNull(splitRow);
|
||||||
HRegion [] regions = split(region, splitRow);
|
HRegion [] regions = split(region, splitRow);
|
||||||
for (int i = 0; i < regions.length; i++) {
|
for (int i = 0; i < regions.length; i++) {
|
||||||
|
|
|
@ -1290,7 +1290,8 @@ public class TestHRegion extends HBaseTestCase {
|
||||||
try {
|
try {
|
||||||
LOG.info("" + addContent(region, fam3));
|
LOG.info("" + addContent(region, fam3));
|
||||||
region.flushcache();
|
region.flushcache();
|
||||||
byte [] splitRow = region.compactStores();
|
region.compactStores();
|
||||||
|
byte [] splitRow = region.checkSplit();
|
||||||
assertNotNull(splitRow);
|
assertNotNull(splitRow);
|
||||||
LOG.info("SplitRow: " + Bytes.toString(splitRow));
|
LOG.info("SplitRow: " + Bytes.toString(splitRow));
|
||||||
HRegion [] subregions = splitRegion(region, splitRow);
|
HRegion [] subregions = splitRegion(region, splitRow);
|
||||||
|
@ -2295,7 +2296,8 @@ public class TestHRegion extends HBaseTestCase {
|
||||||
try {
|
try {
|
||||||
LOG.info("" + addContent(region, fam3));
|
LOG.info("" + addContent(region, fam3));
|
||||||
region.flushcache();
|
region.flushcache();
|
||||||
byte [] splitRow = region.compactStores();
|
region.compactStores();
|
||||||
|
byte [] splitRow = region.checkSplit();
|
||||||
assertNotNull(splitRow);
|
assertNotNull(splitRow);
|
||||||
LOG.info("SplitRow: " + Bytes.toString(splitRow));
|
LOG.info("SplitRow: " + Bytes.toString(splitRow));
|
||||||
HRegion [] regions = splitRegion(region, splitRow);
|
HRegion [] regions = splitRegion(region, splitRow);
|
||||||
|
@ -2329,7 +2331,8 @@ public class TestHRegion extends HBaseTestCase {
|
||||||
byte [][] midkeys = new byte [regions.length][];
|
byte [][] midkeys = new byte [regions.length][];
|
||||||
// To make regions splitable force compaction.
|
// To make regions splitable force compaction.
|
||||||
for (int i = 0; i < regions.length; i++) {
|
for (int i = 0; i < regions.length; i++) {
|
||||||
midkeys[i] = regions[i].compactStores();
|
regions[i].compactStores();
|
||||||
|
midkeys[i] = regions[i].checkSplit();
|
||||||
}
|
}
|
||||||
|
|
||||||
TreeMap<String, HRegion> sortedMap = new TreeMap<String, HRegion>();
|
TreeMap<String, HRegion> sortedMap = new TreeMap<String, HRegion>();
|
||||||
|
|
Loading…
Reference in New Issue