HBASE-2453 Revisit compaction policies after HBASE-2248 commit
git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@934660 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
49458a95cd
commit
1f58ab7c38
|
@ -272,6 +272,7 @@ Release 0.21.0 - Unreleased
|
||||||
HBASE-2439 HBase can get stuck if updates to META are blocked
|
HBASE-2439 HBase can get stuck if updates to META are blocked
|
||||||
(Kannan Muthukkaruppan via Stack)
|
(Kannan Muthukkaruppan via Stack)
|
||||||
HBASE-2451 .META. by-passes cache; BLOCKCACHE=>'false'
|
HBASE-2451 .META. by-passes cache; BLOCKCACHE=>'false'
|
||||||
|
HBASE-2453 Revisit compaction policies after HBASE-2248 commit
|
||||||
|
|
||||||
IMPROVEMENTS
|
IMPROVEMENTS
|
||||||
HBASE-1760 Cleanup TODOs in HTable
|
HBASE-1760 Cleanup TODOs in HTable
|
||||||
|
|
|
@ -35,13 +35,11 @@ import java.util.List;
|
||||||
public class MinorCompactingStoreScanner implements KeyValueScanner, InternalScanner {
|
public class MinorCompactingStoreScanner implements KeyValueScanner, InternalScanner {
|
||||||
|
|
||||||
private KeyValueHeap heap;
|
private KeyValueHeap heap;
|
||||||
private ScanDeleteTracker deleteTracker;
|
|
||||||
private KeyValue.KVComparator comparator;
|
private KeyValue.KVComparator comparator;
|
||||||
|
|
||||||
MinorCompactingStoreScanner(Store store,
|
MinorCompactingStoreScanner(Store store,
|
||||||
KeyValueScanner [] scanners) {
|
KeyValueScanner [] scanners) {
|
||||||
comparator = store.comparator;
|
comparator = store.comparator;
|
||||||
deleteTracker = new ScanDeleteTracker();
|
|
||||||
KeyValue firstKv = KeyValue.createFirstOnRow(HConstants.EMPTY_START_ROW);
|
KeyValue firstKv = KeyValue.createFirstOnRow(HConstants.EMPTY_START_ROW);
|
||||||
for (KeyValueScanner scanner : scanners ) {
|
for (KeyValueScanner scanner : scanners ) {
|
||||||
scanner.seek(firstKv);
|
scanner.seek(firstKv);
|
||||||
|
@ -53,7 +51,6 @@ public class MinorCompactingStoreScanner implements KeyValueScanner, InternalSca
|
||||||
MinorCompactingStoreScanner(String cfName, KeyValue.KVComparator comparator,
|
MinorCompactingStoreScanner(String cfName, KeyValue.KVComparator comparator,
|
||||||
KeyValueScanner [] scanners) {
|
KeyValueScanner [] scanners) {
|
||||||
this.comparator = comparator;
|
this.comparator = comparator;
|
||||||
deleteTracker = new ScanDeleteTracker();
|
|
||||||
|
|
||||||
KeyValue firstKv = KeyValue.createFirstOnRow(HConstants.EMPTY_START_ROW);
|
KeyValue firstKv = KeyValue.createFirstOnRow(HConstants.EMPTY_START_ROW);
|
||||||
for (KeyValueScanner scanner : scanners ) {
|
for (KeyValueScanner scanner : scanners ) {
|
||||||
|
@ -89,9 +86,6 @@ public class MinorCompactingStoreScanner implements KeyValueScanner, InternalSca
|
||||||
close();
|
close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// between rows.
|
|
||||||
deleteTracker.reset();
|
|
||||||
|
|
||||||
KeyValue kv;
|
KeyValue kv;
|
||||||
while ((kv = heap.peek()) != null) {
|
while ((kv = heap.peek()) != null) {
|
||||||
// check to see if this is a different row
|
// check to see if this is a different row
|
||||||
|
@ -99,27 +93,6 @@ public class MinorCompactingStoreScanner implements KeyValueScanner, InternalSca
|
||||||
// reached next row
|
// reached next row
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if delete type, output no matter what:
|
|
||||||
if (kv.getType() != KeyValue.Type.Put.getCode()) {
|
|
||||||
deleteTracker.add(kv.getBuffer(),
|
|
||||||
kv.getQualifierOffset(),
|
|
||||||
kv.getQualifierLength(),
|
|
||||||
kv.getTimestamp(),
|
|
||||||
kv.getType());
|
|
||||||
|
|
||||||
writer.append(heap.next());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (deleteTracker.isDeleted(kv.getBuffer(),
|
|
||||||
kv.getQualifierOffset(),
|
|
||||||
kv.getQualifierLength(),
|
|
||||||
kv.getTimestamp())) {
|
|
||||||
heap.next();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.append(heap.next());
|
writer.append(heap.next());
|
||||||
}
|
}
|
||||||
close();
|
close();
|
||||||
|
@ -133,9 +106,6 @@ public class MinorCompactingStoreScanner implements KeyValueScanner, InternalSca
|
||||||
close();
|
close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// between rows.
|
|
||||||
deleteTracker.reset();
|
|
||||||
|
|
||||||
KeyValue kv;
|
KeyValue kv;
|
||||||
while ((kv = heap.peek()) != null) {
|
while ((kv = heap.peek()) != null) {
|
||||||
// check to see if this is a different row
|
// check to see if this is a different row
|
||||||
|
@ -143,27 +113,6 @@ public class MinorCompactingStoreScanner implements KeyValueScanner, InternalSca
|
||||||
// reached next row
|
// reached next row
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if delete type, output no matter what:
|
|
||||||
if (kv.getType() != KeyValue.Type.Put.getCode()) {
|
|
||||||
deleteTracker.add(kv.getBuffer(),
|
|
||||||
kv.getQualifierOffset(),
|
|
||||||
kv.getQualifierLength(),
|
|
||||||
kv.getTimestamp(),
|
|
||||||
kv.getType());
|
|
||||||
|
|
||||||
results.add(heap.next());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (deleteTracker.isDeleted(kv.getBuffer(),
|
|
||||||
kv.getQualifierOffset(),
|
|
||||||
kv.getQualifierLength(),
|
|
||||||
kv.getTimestamp())) {
|
|
||||||
heap.next();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
results.add(heap.next());
|
results.add(heap.next());
|
||||||
}
|
}
|
||||||
close();
|
close();
|
||||||
|
|
|
@ -52,10 +52,18 @@ public class TestMinorCompactingStoreScanner extends TestCase {
|
||||||
new MinorCompactingStoreScanner("cf", KeyValue.COMPARATOR, scanners);
|
new MinorCompactingStoreScanner("cf", KeyValue.COMPARATOR, scanners);
|
||||||
List<KeyValue> results = new ArrayList<KeyValue>();
|
List<KeyValue> results = new ArrayList<KeyValue>();
|
||||||
assertTrue(scan.next(results));
|
assertTrue(scan.next(results));
|
||||||
assertEquals(3, results.size());
|
assertEquals(11, results.size());
|
||||||
assertEquals(kvs[0], results.get(0));
|
assertEquals(kvs[0], results.get(0));
|
||||||
assertEquals(kvs[5], results.get(1));
|
assertEquals(kvs[1], results.get(1));
|
||||||
assertEquals(kvs[8], results.get(2));
|
assertEquals(kvs[2], results.get(2));
|
||||||
|
assertEquals(kvs[3], results.get(3));
|
||||||
|
assertEquals(kvs[5], results.get(4));
|
||||||
|
assertEquals(kvs[4], results.get(5));
|
||||||
|
assertEquals(kvs[6], results.get(6));
|
||||||
|
assertEquals(kvs[8], results.get(7));
|
||||||
|
assertEquals(kvs[7], results.get(8));
|
||||||
|
assertEquals(kvs[9], results.get(9));
|
||||||
|
assertEquals(kvs[10], results.get(10));
|
||||||
|
|
||||||
results.clear();
|
results.clear();
|
||||||
assertFalse(scan.next(results));
|
assertFalse(scan.next(results));
|
||||||
|
@ -76,8 +84,9 @@ public class TestMinorCompactingStoreScanner extends TestCase {
|
||||||
new MinorCompactingStoreScanner("cf", KeyValue.COMPARATOR, scanners);
|
new MinorCompactingStoreScanner("cf", KeyValue.COMPARATOR, scanners);
|
||||||
List<KeyValue> results = new ArrayList<KeyValue>();
|
List<KeyValue> results = new ArrayList<KeyValue>();
|
||||||
assertFalse(scan.next(results));
|
assertFalse(scan.next(results));
|
||||||
assertEquals(2, results.size());
|
assertEquals(3, results.size());
|
||||||
assertEquals(kvs[0], results.get(0));
|
assertEquals(kvs[0], results.get(0));
|
||||||
assertEquals(kvs[1], results.get(1));
|
assertEquals(kvs[1], results.get(1));
|
||||||
|
assertEquals(kvs[2], results.get(2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue