HBASE-16776 Remove duplicated versions of countRow() in tests

This commit is contained in:
Matteo Bertozzi 2016-10-05 19:45:50 -07:00
parent 06758bf630
commit b548d4978b
7 changed files with 72 additions and 147 deletions

View File

@ -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.
*/ */

View File

@ -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()));
} }
/* /*

View File

@ -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;
}
} }

View File

@ -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();
} }

View File

@ -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

View File

@ -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 {

View File

@ -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
* *