HBASE-16776 Remove duplicated versions of countRow() in tests
This commit is contained in:
parent
06758bf630
commit
b548d4978b
|
@ -2219,13 +2219,7 @@ public class HBaseTestingUtility extends HBaseCommonTestingUtility {
|
||||||
for (byte[] family: families) {
|
for (byte[] family: families) {
|
||||||
scan.addFamily(family);
|
scan.addFamily(family);
|
||||||
}
|
}
|
||||||
ResultScanner results = table.getScanner(scan);
|
return countRows(table, scan);
|
||||||
int count = 0;
|
|
||||||
for (@SuppressWarnings("unused") Result res : results) {
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
results.close();
|
|
||||||
return count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2240,6 +2234,32 @@ public class HBaseTestingUtility extends HBaseCommonTestingUtility {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int countRows(final Region region) throws IOException {
|
||||||
|
return countRows(region, new Scan());
|
||||||
|
}
|
||||||
|
|
||||||
|
public int countRows(final Region region, final Scan scan) throws IOException {
|
||||||
|
InternalScanner scanner = region.getScanner(scan);
|
||||||
|
try {
|
||||||
|
return countRows(scanner);
|
||||||
|
} finally {
|
||||||
|
scanner.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int countRows(final InternalScanner scanner) throws IOException {
|
||||||
|
// Do not retrieve the mob data when scanning
|
||||||
|
int scannedCount = 0;
|
||||||
|
List<Cell> results = new ArrayList<Cell>();
|
||||||
|
boolean hasMore = true;
|
||||||
|
while (hasMore) {
|
||||||
|
hasMore = scanner.next(results);
|
||||||
|
scannedCount += results.size();
|
||||||
|
results.clear();
|
||||||
|
}
|
||||||
|
return scannedCount;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an md5 digest of the entire contents of a table.
|
* Return an md5 digest of the entire contents of a table.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -504,7 +504,7 @@ public class TestFromClientSide {
|
||||||
byte [] endKey = regions.get(0).getRegionInfo().getEndKey();
|
byte [] endKey = regions.get(0).getRegionInfo().getEndKey();
|
||||||
// Count rows with a filter that stops us before passed 'endKey'.
|
// Count rows with a filter that stops us before passed 'endKey'.
|
||||||
// Should be count of rows in first region.
|
// Should be count of rows in first region.
|
||||||
int endKeyCount = countRows(t, createScanWithRowFilter(endKey));
|
int endKeyCount = TEST_UTIL.countRows(t, createScanWithRowFilter(endKey));
|
||||||
assertTrue(endKeyCount < rowCount);
|
assertTrue(endKeyCount < rowCount);
|
||||||
|
|
||||||
// How do I know I did not got to second region? Thats tough. Can't really
|
// How do I know I did not got to second region? Thats tough. Can't really
|
||||||
|
@ -516,29 +516,29 @@ public class TestFromClientSide {
|
||||||
// New test. Make it so scan goes into next region by one and then two.
|
// New test. Make it so scan goes into next region by one and then two.
|
||||||
// Make sure count comes out right.
|
// Make sure count comes out right.
|
||||||
byte [] key = new byte [] {endKey[0], endKey[1], (byte)(endKey[2] + 1)};
|
byte [] key = new byte [] {endKey[0], endKey[1], (byte)(endKey[2] + 1)};
|
||||||
int plusOneCount = countRows(t, createScanWithRowFilter(key));
|
int plusOneCount = TEST_UTIL.countRows(t, createScanWithRowFilter(key));
|
||||||
assertEquals(endKeyCount + 1, plusOneCount);
|
assertEquals(endKeyCount + 1, plusOneCount);
|
||||||
key = new byte [] {endKey[0], endKey[1], (byte)(endKey[2] + 2)};
|
key = new byte [] {endKey[0], endKey[1], (byte)(endKey[2] + 2)};
|
||||||
int plusTwoCount = countRows(t, createScanWithRowFilter(key));
|
int plusTwoCount = TEST_UTIL.countRows(t, createScanWithRowFilter(key));
|
||||||
assertEquals(endKeyCount + 2, plusTwoCount);
|
assertEquals(endKeyCount + 2, plusTwoCount);
|
||||||
|
|
||||||
// New test. Make it so I scan one less than endkey.
|
// New test. Make it so I scan one less than endkey.
|
||||||
key = new byte [] {endKey[0], endKey[1], (byte)(endKey[2] - 1)};
|
key = new byte [] {endKey[0], endKey[1], (byte)(endKey[2] - 1)};
|
||||||
int minusOneCount = countRows(t, createScanWithRowFilter(key));
|
int minusOneCount = TEST_UTIL.countRows(t, createScanWithRowFilter(key));
|
||||||
assertEquals(endKeyCount - 1, minusOneCount);
|
assertEquals(endKeyCount - 1, minusOneCount);
|
||||||
// For above test... study logs. Make sure we do "Finished with scanning.."
|
// For above test... study logs. Make sure we do "Finished with scanning.."
|
||||||
// in first region and that we do not fall into the next region.
|
// in first region and that we do not fall into the next region.
|
||||||
|
|
||||||
key = new byte [] {'a', 'a', 'a'};
|
key = new byte [] {'a', 'a', 'a'};
|
||||||
int countBBB = countRows(t,
|
int countBBB = TEST_UTIL.countRows(t,
|
||||||
createScanWithRowFilter(key, null, CompareFilter.CompareOp.EQUAL));
|
createScanWithRowFilter(key, null, CompareFilter.CompareOp.EQUAL));
|
||||||
assertEquals(1, countBBB);
|
assertEquals(1, countBBB);
|
||||||
|
|
||||||
int countGreater = countRows(t, createScanWithRowFilter(endKey, null,
|
int countGreater = TEST_UTIL.countRows(t, createScanWithRowFilter(endKey, null,
|
||||||
CompareFilter.CompareOp.GREATER_OR_EQUAL));
|
CompareFilter.CompareOp.GREATER_OR_EQUAL));
|
||||||
// Because started at start of table.
|
// Because started at start of table.
|
||||||
assertEquals(0, countGreater);
|
assertEquals(0, countGreater);
|
||||||
countGreater = countRows(t, createScanWithRowFilter(endKey, endKey,
|
countGreater = TEST_UTIL.countRows(t, createScanWithRowFilter(endKey, endKey,
|
||||||
CompareFilter.CompareOp.GREATER_OR_EQUAL));
|
CompareFilter.CompareOp.GREATER_OR_EQUAL));
|
||||||
assertEquals(rowCount - endKeyCount, countGreater);
|
assertEquals(rowCount - endKeyCount, countGreater);
|
||||||
}
|
}
|
||||||
|
@ -602,7 +602,7 @@ public class TestFromClientSide {
|
||||||
try (Table t = TEST_UTIL.getConnection().getTable(name)) {
|
try (Table t = TEST_UTIL.getConnection().getTable(name)) {
|
||||||
int rowCount = TEST_UTIL.loadTable(t, FAMILY, false);
|
int rowCount = TEST_UTIL.loadTable(t, FAMILY, false);
|
||||||
TEST_UTIL.getAdmin().flush(name);
|
TEST_UTIL.getAdmin().flush(name);
|
||||||
int actualRowCount = countRows(t, new Scan().addColumn(FAMILY, FAMILY));
|
int actualRowCount = TEST_UTIL.countRows(t, new Scan().addColumn(FAMILY, FAMILY));
|
||||||
assertEquals(rowCount, actualRowCount);
|
assertEquals(rowCount, actualRowCount);
|
||||||
}
|
}
|
||||||
assertTrue(ExceptionInReseekRegionObserver.reqCount.get() > 0);
|
assertTrue(ExceptionInReseekRegionObserver.reqCount.get() > 0);
|
||||||
|
@ -635,28 +635,9 @@ public class TestFromClientSide {
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* @param t
|
|
||||||
* @param s
|
|
||||||
* @return Count of rows in table.
|
|
||||||
* @throws IOException
|
|
||||||
*/
|
|
||||||
private int countRows(final Table t, final Scan s)
|
|
||||||
throws IOException {
|
|
||||||
// Assert all rows in table.
|
|
||||||
ResultScanner scanner = t.getScanner(s);
|
|
||||||
int count = 0;
|
|
||||||
for (Result result: scanner) {
|
|
||||||
count++;
|
|
||||||
assertTrue(result.size() > 0);
|
|
||||||
// LOG.info("Count=" + count + ", row=" + Bytes.toString(result.getRow()));
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void assertRowCount(final Table t, final int expected)
|
private void assertRowCount(final Table t, final int expected)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
assertEquals(expected, countRows(t, new Scan()));
|
assertEquals(expected, TEST_UTIL.countRows(t, new Scan()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -95,7 +95,7 @@ public class TestServerCrashProcedure {
|
||||||
try (Table t = this.util.getConnection().getTable(tableName)) {
|
try (Table t = this.util.getConnection().getTable(tableName)) {
|
||||||
// Load the table with a bit of data so some logs to split and some edits in each region.
|
// Load the table with a bit of data so some logs to split and some edits in each region.
|
||||||
this.util.loadTable(t, HBaseTestingUtility.COLUMNS[0]);
|
this.util.loadTable(t, HBaseTestingUtility.COLUMNS[0]);
|
||||||
int count = countRows(t);
|
int count = util.countRows(t);
|
||||||
// Run the procedure executor outside the master so we can mess with it. Need to disable
|
// Run the procedure executor outside the master so we can mess with it. Need to disable
|
||||||
// Master's running of the server crash processing.
|
// Master's running of the server crash processing.
|
||||||
HMaster master = this.util.getHBaseCluster().getMaster();
|
HMaster master = this.util.getHBaseCluster().getMaster();
|
||||||
|
@ -123,15 +123,7 @@ public class TestServerCrashProcedure {
|
||||||
// Now run through the procedure twice crashing the executor on each step...
|
// Now run through the procedure twice crashing the executor on each step...
|
||||||
MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId);
|
MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId);
|
||||||
// Assert all data came back.
|
// Assert all data came back.
|
||||||
assertEquals(count, countRows(t));
|
assertEquals(count, util.countRows(t));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int countRows(final Table t) throws IOException {
|
|
||||||
int count = 0;
|
|
||||||
try (ResultScanner scanner = t.getScanner(new Scan())) {
|
|
||||||
while(scanner.next() != null) count++;
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -132,7 +132,7 @@ public class TestMobStoreCompaction {
|
||||||
}
|
}
|
||||||
assertEquals("Before compaction: store files", compactionThreshold, countStoreFiles());
|
assertEquals("Before compaction: store files", compactionThreshold, countStoreFiles());
|
||||||
assertEquals("Before compaction: mob file count", 0, countMobFiles());
|
assertEquals("Before compaction: mob file count", 0, countMobFiles());
|
||||||
assertEquals("Before compaction: rows", compactionThreshold, countRows());
|
assertEquals("Before compaction: rows", compactionThreshold, UTIL.countRows(region));
|
||||||
assertEquals("Before compaction: mob rows", 0, countMobRows());
|
assertEquals("Before compaction: mob rows", 0, countMobRows());
|
||||||
|
|
||||||
region.compactStores();
|
region.compactStores();
|
||||||
|
@ -140,7 +140,7 @@ public class TestMobStoreCompaction {
|
||||||
assertEquals("After compaction: store files", 1, countStoreFiles());
|
assertEquals("After compaction: store files", 1, countStoreFiles());
|
||||||
assertEquals("After compaction: mob file count", 0, countMobFiles());
|
assertEquals("After compaction: mob file count", 0, countMobFiles());
|
||||||
assertEquals("After compaction: referenced mob file count", 0, countReferencedMobFiles());
|
assertEquals("After compaction: referenced mob file count", 0, countReferencedMobFiles());
|
||||||
assertEquals("After compaction: rows", compactionThreshold, countRows());
|
assertEquals("After compaction: rows", compactionThreshold, UTIL.countRows(region));
|
||||||
assertEquals("After compaction: mob rows", 0, countMobRows());
|
assertEquals("After compaction: mob rows", 0, countMobRows());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ public class TestMobStoreCompaction {
|
||||||
}
|
}
|
||||||
assertEquals("Before compaction: store files", compactionThreshold, countStoreFiles());
|
assertEquals("Before compaction: store files", compactionThreshold, countStoreFiles());
|
||||||
assertEquals("Before compaction: mob file count", compactionThreshold, countMobFiles());
|
assertEquals("Before compaction: mob file count", compactionThreshold, countMobFiles());
|
||||||
assertEquals("Before compaction: rows", compactionThreshold, countRows());
|
assertEquals("Before compaction: rows", compactionThreshold, UTIL.countRows(region));
|
||||||
assertEquals("Before compaction: mob rows", compactionThreshold, countMobRows());
|
assertEquals("Before compaction: mob rows", compactionThreshold, countMobRows());
|
||||||
assertEquals("Before compaction: number of mob cells", compactionThreshold,
|
assertEquals("Before compaction: number of mob cells", compactionThreshold,
|
||||||
countMobCellsInMetadata());
|
countMobCellsInMetadata());
|
||||||
|
@ -171,7 +171,7 @@ public class TestMobStoreCompaction {
|
||||||
assertEquals("After compaction: store files", 1, countStoreFiles());
|
assertEquals("After compaction: store files", 1, countStoreFiles());
|
||||||
assertEquals("After compaction: mob file count", compactionThreshold, countMobFiles());
|
assertEquals("After compaction: mob file count", compactionThreshold, countMobFiles());
|
||||||
assertEquals("After compaction: referenced mob file count", 0, countReferencedMobFiles());
|
assertEquals("After compaction: referenced mob file count", 0, countReferencedMobFiles());
|
||||||
assertEquals("After compaction: rows", compactionThreshold, countRows());
|
assertEquals("After compaction: rows", compactionThreshold, UTIL.countRows(region));
|
||||||
assertEquals("After compaction: mob rows", 0, countMobRows());
|
assertEquals("After compaction: mob rows", 0, countMobRows());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@ public class TestMobStoreCompaction {
|
||||||
assertTrue("Bulkload result:", result);
|
assertTrue("Bulkload result:", result);
|
||||||
assertEquals("Before compaction: store files", compactionThreshold, countStoreFiles());
|
assertEquals("Before compaction: store files", compactionThreshold, countStoreFiles());
|
||||||
assertEquals("Before compaction: mob file count", 0, countMobFiles());
|
assertEquals("Before compaction: mob file count", 0, countMobFiles());
|
||||||
assertEquals("Before compaction: rows", compactionThreshold, countRows());
|
assertEquals("Before compaction: rows", compactionThreshold, UTIL.countRows(region));
|
||||||
assertEquals("Before compaction: mob rows", 0, countMobRows());
|
assertEquals("Before compaction: mob rows", 0, countMobRows());
|
||||||
assertEquals("Before compaction: referenced mob file count", 0, countReferencedMobFiles());
|
assertEquals("Before compaction: referenced mob file count", 0, countReferencedMobFiles());
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ public class TestMobStoreCompaction {
|
||||||
|
|
||||||
assertEquals("After compaction: store files", 1, countStoreFiles());
|
assertEquals("After compaction: store files", 1, countStoreFiles());
|
||||||
assertEquals("After compaction: mob file count:", 1, countMobFiles());
|
assertEquals("After compaction: mob file count:", 1, countMobFiles());
|
||||||
assertEquals("After compaction: rows", compactionThreshold, countRows());
|
assertEquals("After compaction: rows", compactionThreshold, UTIL.countRows(region));
|
||||||
assertEquals("After compaction: mob rows", compactionThreshold, countMobRows());
|
assertEquals("After compaction: mob rows", compactionThreshold, countMobRows());
|
||||||
assertEquals("After compaction: referenced mob file count", 1, countReferencedMobFiles());
|
assertEquals("After compaction: referenced mob file count", 1, countReferencedMobFiles());
|
||||||
assertEquals("After compaction: number of mob cells", compactionThreshold,
|
assertEquals("After compaction: number of mob cells", compactionThreshold,
|
||||||
|
@ -230,7 +230,7 @@ public class TestMobStoreCompaction {
|
||||||
}
|
}
|
||||||
assertEquals("Before compaction: store files", numHfiles, countStoreFiles());
|
assertEquals("Before compaction: store files", numHfiles, countStoreFiles());
|
||||||
assertEquals("Before compaction: mob file count", numHfiles, countMobFiles());
|
assertEquals("Before compaction: mob file count", numHfiles, countMobFiles());
|
||||||
assertEquals("Before compaction: rows", numHfiles, countRows());
|
assertEquals("Before compaction: rows", numHfiles, UTIL.countRows(region));
|
||||||
assertEquals("Before compaction: mob rows", numHfiles, countMobRows());
|
assertEquals("Before compaction: mob rows", numHfiles, countMobRows());
|
||||||
assertEquals("Before compaction: number of mob cells", numHfiles, countMobCellsInMetadata());
|
assertEquals("Before compaction: number of mob cells", numHfiles, countMobCellsInMetadata());
|
||||||
// now let's delete some cells that contain mobs
|
// now let's delete some cells that contain mobs
|
||||||
|
@ -351,29 +351,6 @@ public class TestMobStoreCompaction {
|
||||||
return scannedCount;
|
return scannedCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int countRows() throws IOException {
|
|
||||||
Scan scan = new Scan();
|
|
||||||
InternalScanner scanner = region.getScanner(scan);
|
|
||||||
try {
|
|
||||||
return countRows(scanner);
|
|
||||||
} finally {
|
|
||||||
scanner.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private int countRows(InternalScanner scanner) throws IOException {
|
|
||||||
// Do not retrieve the mob data when scanning
|
|
||||||
int scannedCount = 0;
|
|
||||||
List<Cell> results = new ArrayList<Cell>();
|
|
||||||
boolean hasMore = true;
|
|
||||||
while (hasMore) {
|
|
||||||
hasMore = scanner.next(results);
|
|
||||||
scannedCount += results.size();
|
|
||||||
results.clear();
|
|
||||||
}
|
|
||||||
return scannedCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte[] makeDummyData(int size) {
|
private byte[] makeDummyData(int size) {
|
||||||
byte[] dummyData = new byte[size];
|
byte[] dummyData = new byte[size];
|
||||||
new Random().nextBytes(dummyData);
|
new Random().nextBytes(dummyData);
|
||||||
|
@ -448,7 +425,7 @@ public class TestMobStoreCompaction {
|
||||||
StoreScanner scanner = new StoreScanner(scan, scanInfo, ScanType.COMPACT_DROP_DELETES, null,
|
StoreScanner scanner = new StoreScanner(scan, scanInfo, ScanType.COMPACT_DROP_DELETES, null,
|
||||||
scanners, 0L, HConstants.LATEST_TIMESTAMP);
|
scanners, 0L, HConstants.LATEST_TIMESTAMP);
|
||||||
try {
|
try {
|
||||||
size += countRows(scanner);
|
size += UTIL.countRows(scanner);
|
||||||
} finally {
|
} finally {
|
||||||
scanner.close();
|
scanner.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -244,8 +244,8 @@ public class TestRegionMergeTransaction {
|
||||||
final int rowCountOfRegionA = loadRegion(this.region_a, CF, true);
|
final int rowCountOfRegionA = loadRegion(this.region_a, CF, true);
|
||||||
final int rowCountOfRegionB = loadRegion(this.region_b, CF, true);
|
final int rowCountOfRegionB = loadRegion(this.region_b, CF, true);
|
||||||
assertTrue(rowCountOfRegionA > 0 && rowCountOfRegionB > 0);
|
assertTrue(rowCountOfRegionA > 0 && rowCountOfRegionB > 0);
|
||||||
assertEquals(rowCountOfRegionA, countRows(this.region_a));
|
assertEquals(rowCountOfRegionA, TEST_UTIL.countRows(this.region_a));
|
||||||
assertEquals(rowCountOfRegionB, countRows(this.region_b));
|
assertEquals(rowCountOfRegionB, TEST_UTIL.countRows(this.region_b));
|
||||||
|
|
||||||
// Start transaction.
|
// Start transaction.
|
||||||
RegionMergeTransactionImpl mt = prepareOnGoodRegions();
|
RegionMergeTransactionImpl mt = prepareOnGoodRegions();
|
||||||
|
@ -272,7 +272,7 @@ public class TestRegionMergeTransaction {
|
||||||
mergedRegion.getRegionInfo().getEndKey()));
|
mergedRegion.getRegionInfo().getEndKey()));
|
||||||
// Count rows. merged region are already open
|
// Count rows. merged region are already open
|
||||||
try {
|
try {
|
||||||
int mergedRegionRowCount = countRows(mergedRegion);
|
int mergedRegionRowCount = TEST_UTIL.countRows(mergedRegion);
|
||||||
assertEquals((rowCountOfRegionA + rowCountOfRegionB),
|
assertEquals((rowCountOfRegionA + rowCountOfRegionB),
|
||||||
mergedRegionRowCount);
|
mergedRegionRowCount);
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -288,8 +288,8 @@ public class TestRegionMergeTransaction {
|
||||||
final int rowCountOfRegionA = loadRegion(this.region_a, CF, true);
|
final int rowCountOfRegionA = loadRegion(this.region_a, CF, true);
|
||||||
final int rowCountOfRegionB = loadRegion(this.region_b, CF, true);
|
final int rowCountOfRegionB = loadRegion(this.region_b, CF, true);
|
||||||
assertTrue(rowCountOfRegionA > 0 && rowCountOfRegionB > 0);
|
assertTrue(rowCountOfRegionA > 0 && rowCountOfRegionB > 0);
|
||||||
assertEquals(rowCountOfRegionA, countRows(this.region_a));
|
assertEquals(rowCountOfRegionA, TEST_UTIL.countRows(this.region_a));
|
||||||
assertEquals(rowCountOfRegionB, countRows(this.region_b));
|
assertEquals(rowCountOfRegionB, TEST_UTIL.countRows(this.region_b));
|
||||||
|
|
||||||
// Start transaction.
|
// Start transaction.
|
||||||
RegionMergeTransactionImpl mt = prepareOnGoodRegions();
|
RegionMergeTransactionImpl mt = prepareOnGoodRegions();
|
||||||
|
@ -314,9 +314,9 @@ public class TestRegionMergeTransaction {
|
||||||
assertTrue(mt.rollback(null, null));
|
assertTrue(mt.rollback(null, null));
|
||||||
|
|
||||||
// Assert I can scan region_a and region_b.
|
// Assert I can scan region_a and region_b.
|
||||||
int rowCountOfRegionA2 = countRows(this.region_a);
|
int rowCountOfRegionA2 = TEST_UTIL.countRows(this.region_a);
|
||||||
assertEquals(rowCountOfRegionA, rowCountOfRegionA2);
|
assertEquals(rowCountOfRegionA, rowCountOfRegionA2);
|
||||||
int rowCountOfRegionB2 = countRows(this.region_b);
|
int rowCountOfRegionB2 = TEST_UTIL.countRows(this.region_b);
|
||||||
assertEquals(rowCountOfRegionB, rowCountOfRegionB2);
|
assertEquals(rowCountOfRegionB, rowCountOfRegionB2);
|
||||||
|
|
||||||
// Assert rollback cleaned up stuff in fs
|
// Assert rollback cleaned up stuff in fs
|
||||||
|
@ -332,7 +332,7 @@ public class TestRegionMergeTransaction {
|
||||||
// Count rows. daughters are already open
|
// Count rows. daughters are already open
|
||||||
// Count rows. merged region are already open
|
// Count rows. merged region are already open
|
||||||
try {
|
try {
|
||||||
int mergedRegionRowCount = countRows(mergedRegion);
|
int mergedRegionRowCount = TEST_UTIL.countRows(mergedRegion);
|
||||||
assertEquals((rowCountOfRegionA + rowCountOfRegionB),
|
assertEquals((rowCountOfRegionA + rowCountOfRegionB),
|
||||||
mergedRegionRowCount);
|
mergedRegionRowCount);
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -348,8 +348,8 @@ public class TestRegionMergeTransaction {
|
||||||
final int rowCountOfRegionA = loadRegion(this.region_a, CF, true);
|
final int rowCountOfRegionA = loadRegion(this.region_a, CF, true);
|
||||||
final int rowCountOfRegionB = loadRegion(this.region_b, CF, true);
|
final int rowCountOfRegionB = loadRegion(this.region_b, CF, true);
|
||||||
assertTrue(rowCountOfRegionA > 0 && rowCountOfRegionB > 0);
|
assertTrue(rowCountOfRegionA > 0 && rowCountOfRegionB > 0);
|
||||||
assertEquals(rowCountOfRegionA, countRows(this.region_a));
|
assertEquals(rowCountOfRegionA, TEST_UTIL.countRows(this.region_a));
|
||||||
assertEquals(rowCountOfRegionB, countRows(this.region_b));
|
assertEquals(rowCountOfRegionB, TEST_UTIL.countRows(this.region_b));
|
||||||
|
|
||||||
// Start transaction.
|
// Start transaction.
|
||||||
RegionMergeTransactionImpl mt = prepareOnGoodRegions();
|
RegionMergeTransactionImpl mt = prepareOnGoodRegions();
|
||||||
|
@ -448,23 +448,6 @@ public class TestRegionMergeTransaction {
|
||||||
TEST_UTIL.getConfiguration());
|
TEST_UTIL.getConfiguration());
|
||||||
}
|
}
|
||||||
|
|
||||||
private int countRows(final HRegion r) throws IOException {
|
|
||||||
int rowcount = 0;
|
|
||||||
InternalScanner scanner = r.getScanner(new Scan());
|
|
||||||
try {
|
|
||||||
List<Cell> kvs = new ArrayList<Cell>();
|
|
||||||
boolean hasNext = true;
|
|
||||||
while (hasNext) {
|
|
||||||
hasNext = scanner.next(kvs);
|
|
||||||
if (!kvs.isEmpty())
|
|
||||||
rowcount++;
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
scanner.close();
|
|
||||||
}
|
|
||||||
return rowcount;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load region with rows from 'aaa' to 'zzz', skip the rows which are out of
|
* Load region with rows from 'aaa' to 'zzz', skip the rows which are out of
|
||||||
* range of the region
|
* range of the region
|
||||||
|
|
|
@ -80,10 +80,10 @@ public class TestSplitTransaction {
|
||||||
private static final byte [] ENDROW = new byte [] {'{', '{', '{'};
|
private static final byte [] ENDROW = new byte [] {'{', '{', '{'};
|
||||||
private static final byte [] GOOD_SPLIT_ROW = new byte [] {'d', 'd', 'd'};
|
private static final byte [] GOOD_SPLIT_ROW = new byte [] {'d', 'd', 'd'};
|
||||||
private static final byte [] CF = HConstants.CATALOG_FAMILY;
|
private static final byte [] CF = HConstants.CATALOG_FAMILY;
|
||||||
|
|
||||||
private static boolean preRollBackCalled = false;
|
private static boolean preRollBackCalled = false;
|
||||||
private static boolean postRollBackCalled = false;
|
private static boolean postRollBackCalled = false;
|
||||||
|
|
||||||
@Before public void setup() throws IOException {
|
@Before public void setup() throws IOException {
|
||||||
this.fs = FileSystem.get(TEST_UTIL.getConfiguration());
|
this.fs = FileSystem.get(TEST_UTIL.getConfiguration());
|
||||||
TEST_UTIL.getConfiguration().set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, CustomObserver.class.getName());
|
TEST_UTIL.getConfiguration().set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, CustomObserver.class.getName());
|
||||||
|
@ -91,7 +91,7 @@ public class TestSplitTransaction {
|
||||||
final Configuration walConf = new Configuration(TEST_UTIL.getConfiguration());
|
final Configuration walConf = new Configuration(TEST_UTIL.getConfiguration());
|
||||||
FSUtils.setRootDir(walConf, this.testdir);
|
FSUtils.setRootDir(walConf, this.testdir);
|
||||||
this.wals = new WALFactory(walConf, null, this.getClass().getName());
|
this.wals = new WALFactory(walConf, null, this.getClass().getName());
|
||||||
|
|
||||||
this.parent = createRegion(this.testdir, this.wals);
|
this.parent = createRegion(this.testdir, this.wals);
|
||||||
RegionCoprocessorHost host = new RegionCoprocessorHost(this.parent, null, TEST_UTIL.getConfiguration());
|
RegionCoprocessorHost host = new RegionCoprocessorHost(this.parent, null, TEST_UTIL.getConfiguration());
|
||||||
this.parent.setCoprocessorHost(host);
|
this.parent.setCoprocessorHost(host);
|
||||||
|
@ -113,7 +113,7 @@ public class TestSplitTransaction {
|
||||||
@Test public void testFailAfterPONR() throws IOException, KeeperException {
|
@Test public void testFailAfterPONR() throws IOException, KeeperException {
|
||||||
final int rowcount = TEST_UTIL.loadRegion(this.parent, CF);
|
final int rowcount = TEST_UTIL.loadRegion(this.parent, CF);
|
||||||
assertTrue(rowcount > 0);
|
assertTrue(rowcount > 0);
|
||||||
int parentRowCount = countRows(this.parent);
|
int parentRowCount = TEST_UTIL.countRows(this.parent);
|
||||||
assertEquals(rowcount, parentRowCount);
|
assertEquals(rowcount, parentRowCount);
|
||||||
|
|
||||||
// Start transaction.
|
// Start transaction.
|
||||||
|
@ -229,7 +229,7 @@ public class TestSplitTransaction {
|
||||||
@Test public void testWholesomeSplit() throws IOException {
|
@Test public void testWholesomeSplit() throws IOException {
|
||||||
final int rowcount = TEST_UTIL.loadRegion(this.parent, CF, true);
|
final int rowcount = TEST_UTIL.loadRegion(this.parent, CF, true);
|
||||||
assertTrue(rowcount > 0);
|
assertTrue(rowcount > 0);
|
||||||
int parentRowCount = countRows(this.parent);
|
int parentRowCount = TEST_UTIL.countRows(this.parent);
|
||||||
assertEquals(rowcount, parentRowCount);
|
assertEquals(rowcount, parentRowCount);
|
||||||
|
|
||||||
// Pretend region's blocks are not in the cache, used for
|
// Pretend region's blocks are not in the cache, used for
|
||||||
|
@ -263,7 +263,7 @@ public class TestSplitTransaction {
|
||||||
int daughtersRowCount = 0;
|
int daughtersRowCount = 0;
|
||||||
for (Region openRegion: daughters) {
|
for (Region openRegion: daughters) {
|
||||||
try {
|
try {
|
||||||
int count = countRows(openRegion);
|
int count = TEST_UTIL.countRows(openRegion);
|
||||||
assertTrue(count > 0 && count != rowcount);
|
assertTrue(count > 0 && count != rowcount);
|
||||||
daughtersRowCount += count;
|
daughtersRowCount += count;
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -279,7 +279,7 @@ public class TestSplitTransaction {
|
||||||
public void testCountReferencesFailsSplit() throws IOException {
|
public void testCountReferencesFailsSplit() throws IOException {
|
||||||
final int rowcount = TEST_UTIL.loadRegion(this.parent, CF);
|
final int rowcount = TEST_UTIL.loadRegion(this.parent, CF);
|
||||||
assertTrue(rowcount > 0);
|
assertTrue(rowcount > 0);
|
||||||
int parentRowCount = countRows(this.parent);
|
int parentRowCount = TEST_UTIL.countRows(this.parent);
|
||||||
assertEquals(rowcount, parentRowCount);
|
assertEquals(rowcount, parentRowCount);
|
||||||
|
|
||||||
// Start transaction.
|
// Start transaction.
|
||||||
|
@ -307,7 +307,7 @@ public class TestSplitTransaction {
|
||||||
@Test public void testRollback() throws IOException {
|
@Test public void testRollback() throws IOException {
|
||||||
final int rowcount = TEST_UTIL.loadRegion(this.parent, CF);
|
final int rowcount = TEST_UTIL.loadRegion(this.parent, CF);
|
||||||
assertTrue(rowcount > 0);
|
assertTrue(rowcount > 0);
|
||||||
int parentRowCount = countRows(this.parent);
|
int parentRowCount = TEST_UTIL.countRows(this.parent);
|
||||||
assertEquals(rowcount, parentRowCount);
|
assertEquals(rowcount, parentRowCount);
|
||||||
|
|
||||||
// Start transaction.
|
// Start transaction.
|
||||||
|
@ -332,7 +332,7 @@ public class TestSplitTransaction {
|
||||||
assertTrue(spiedUponSt.rollback(null, null));
|
assertTrue(spiedUponSt.rollback(null, null));
|
||||||
|
|
||||||
// Assert I can scan parent.
|
// Assert I can scan parent.
|
||||||
int parentRowCount2 = countRows(this.parent);
|
int parentRowCount2 = TEST_UTIL.countRows(this.parent);
|
||||||
assertEquals(parentRowCount, parentRowCount2);
|
assertEquals(parentRowCount, parentRowCount2);
|
||||||
|
|
||||||
// Assert rollback cleaned up stuff in fs
|
// Assert rollback cleaned up stuff in fs
|
||||||
|
@ -347,7 +347,7 @@ public class TestSplitTransaction {
|
||||||
int daughtersRowCount = 0;
|
int daughtersRowCount = 0;
|
||||||
for (Region openRegion: daughters) {
|
for (Region openRegion: daughters) {
|
||||||
try {
|
try {
|
||||||
int count = countRows(openRegion);
|
int count = TEST_UTIL.countRows(openRegion);
|
||||||
assertTrue(count > 0 && count != rowcount);
|
assertTrue(count > 0 && count != rowcount);
|
||||||
daughtersRowCount += count;
|
daughtersRowCount += count;
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -359,7 +359,7 @@ public class TestSplitTransaction {
|
||||||
assertTrue(!this.parent.lock.writeLock().isHeldByCurrentThread());
|
assertTrue(!this.parent.lock.writeLock().isHeldByCurrentThread());
|
||||||
assertTrue("Rollback hooks should be called.", wasRollBackHookCalled());
|
assertTrue("Rollback hooks should be called.", wasRollBackHookCalled());
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean wasRollBackHookCalled(){
|
private boolean wasRollBackHookCalled(){
|
||||||
return (preRollBackCalled && postRollBackCalled);
|
return (preRollBackCalled && postRollBackCalled);
|
||||||
}
|
}
|
||||||
|
@ -371,22 +371,6 @@ public class TestSplitTransaction {
|
||||||
private class MockedFailedDaughterCreation extends IOException {}
|
private class MockedFailedDaughterCreation extends IOException {}
|
||||||
private class MockedFailedDaughterOpen extends IOException {}
|
private class MockedFailedDaughterOpen extends IOException {}
|
||||||
|
|
||||||
private int countRows(final Region r) throws IOException {
|
|
||||||
int rowcount = 0;
|
|
||||||
InternalScanner scanner = r.getScanner(new Scan());
|
|
||||||
try {
|
|
||||||
List<Cell> kvs = new ArrayList<Cell>();
|
|
||||||
boolean hasNext = true;
|
|
||||||
while (hasNext) {
|
|
||||||
hasNext = scanner.next(kvs);
|
|
||||||
if (!kvs.isEmpty()) rowcount++;
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
scanner.close();
|
|
||||||
}
|
|
||||||
return rowcount;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRegion createRegion(final Path testdir, final WALFactory wals)
|
HRegion createRegion(final Path testdir, final WALFactory wals)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
// Make a region with start and end keys. Use 'aaa', to 'AAA'. The load
|
// Make a region with start and end keys. Use 'aaa', to 'AAA'. The load
|
||||||
|
@ -402,14 +386,14 @@ public class TestSplitTransaction {
|
||||||
wals.getWAL(hri.getEncodedNameAsBytes(), hri.getTable().getNamespace()),
|
wals.getWAL(hri.getEncodedNameAsBytes(), hri.getTable().getNamespace()),
|
||||||
TEST_UTIL.getConfiguration());
|
TEST_UTIL.getConfiguration());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class CustomObserver extends BaseRegionObserver{
|
public static class CustomObserver extends BaseRegionObserver{
|
||||||
@Override
|
@Override
|
||||||
public void preRollBackSplit(
|
public void preRollBackSplit(
|
||||||
ObserverContext<RegionCoprocessorEnvironment> ctx) throws IOException {
|
ObserverContext<RegionCoprocessorEnvironment> ctx) throws IOException {
|
||||||
preRollBackCalled = true;
|
preRollBackCalled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postRollBackSplit(
|
public void postRollBackSplit(
|
||||||
ObserverContext<RegionCoprocessorEnvironment> ctx) throws IOException {
|
ObserverContext<RegionCoprocessorEnvironment> ctx) throws IOException {
|
||||||
|
|
|
@ -296,28 +296,16 @@ public class BaseTestHBaseFsck {
|
||||||
* Counts the number of rows to verify data loss or non-dataloss.
|
* Counts the number of rows to verify data loss or non-dataloss.
|
||||||
*/
|
*/
|
||||||
int countRows() throws IOException {
|
int countRows() throws IOException {
|
||||||
Scan s = new Scan();
|
return TEST_UTIL.countRows(tbl);
|
||||||
ResultScanner rs = tbl.getScanner(s);
|
|
||||||
int i = 0;
|
|
||||||
while(rs.next() !=null) {
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Counts the number of rows to verify data loss or non-dataloss.
|
* Counts the number of rows to verify data loss or non-dataloss.
|
||||||
*/
|
*/
|
||||||
int countRows(byte[] start, byte[] end) throws IOException {
|
int countRows(byte[] start, byte[] end) throws IOException {
|
||||||
Scan s = new Scan(start, end);
|
return TEST_UTIL.countRows(tbl, new Scan(start, end));
|
||||||
ResultScanner rs = tbl.getScanner(s);
|
|
||||||
int i = 0;
|
|
||||||
while (rs.next() != null) {
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* delete table in preparation for next test
|
* delete table in preparation for next test
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue