Repository: hbase Updated Branches: refs/heads/0.98 9894497e7 -> 2f6ef83ad
HBASE-13561 ITBLL.Verify doesn't actually evaluate counters after job completes (Josh Elser) Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/2f6ef83a Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/2f6ef83a Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/2f6ef83a Branch: refs/heads/0.98 Commit: 2f6ef83adc203d6979e11f9527efe242d59ae04d Parents: 9894497 Author: stack <st...@apache.org> Authored: Tue Jul 7 16:29:18 2015 -0700 Committer: stack <st...@apache.org> Committed: Tue Jul 7 16:29:18 2015 -0700 ---------------------------------------------------------------------- .../test/IntegrationTestBigLinkedList.java | 74 ++++++++++++++++---- 1 file changed, 62 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/2f6ef83a/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.java ---------------------------------------------------------------------- diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.java index 10a2e71..d0df043 100644 --- a/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.java +++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.java @@ -707,7 +707,23 @@ public class IntegrationTestBigLinkedList extends IntegrationTestBase { boolean success = job.waitForCompletion(true); - return success ? 0 : 1; + if (success) { + Counters counters = job.getCounters(); + if (null == counters) { + LOG.warn("Counters were null, cannot verify Job completion"); + // We don't have access to the counters to know if we have "bad" counts + return 0; + } + + // If we find no unexpected values, the job didn't outright fail + if (verifyUnexpectedValues(counters)) { + // We didn't check referenced+unreferenced counts, leave that to visual inspection + return 0; + } + } + + // We failed + return 1; } @SuppressWarnings("deprecation") @@ -718,13 +734,34 @@ public class IntegrationTestBigLinkedList extends IntegrationTestBase { Counters counters = job.getCounters(); - Counter referenced = counters.findCounter(Counts.REFERENCED); - Counter unreferenced = counters.findCounter(Counts.UNREFERENCED); - Counter undefined = counters.findCounter(Counts.UNDEFINED); - Counter multiref = counters.findCounter(Counts.EXTRAREFERENCES); + // Run through each check, even if we fail one early + boolean success = verifyExpectedValues(expectedReferenced, counters); + + if (!verifyUnexpectedValues(counters)) { + // We found counter objects which imply failure + success = false; + } + + if (!success) { + handleFailure(counters); + } + return success; + } + /** + * Verify the values in the Counters against the expected number of entries written. + * + * @param expectedReferenced + * Expected number of referenced entrires + * @param counters + * The Job's Counters object + * @return True if the values match what's expected, false otherwise + */ + protected boolean verifyExpectedValues(long expectedReferenced, Counters counters) { + final Counter referenced = counters.findCounter(Counts.REFERENCED); + final Counter unreferenced = counters.findCounter(Counts.UNREFERENCED); boolean success = true; - //assert + if (expectedReferenced != referenced.getValue()) { LOG.error("Expected referenced count does not match with actual referenced count. " + "expected referenced=" + expectedReferenced + " ,actual=" + referenced.getValue()); @@ -732,20 +769,32 @@ public class IntegrationTestBigLinkedList extends IntegrationTestBase { } if (unreferenced.getValue() > 0) { + final Counter multiref = counters.findCounter(Counts.EXTRAREFERENCES); boolean couldBeMultiRef = (multiref.getValue() == unreferenced.getValue()); LOG.error("Unreferenced nodes were not expected. Unreferenced count=" + unreferenced.getValue() + (couldBeMultiRef ? "; could be due to duplicate random numbers" : "")); success = false; } + return success; + } + + /** + * Verify that the Counters don't contain values which indicate an outright failure from the Reducers. + * + * @param counters + * The Job's counters + * @return True if the "bad" counter objects are 0, false otherwise + */ + protected boolean verifyUnexpectedValues(Counters counters) { + final Counter undefined = counters.findCounter(Counts.UNDEFINED); + boolean success = true; + if (undefined.getValue() > 0) { LOG.error("Found an undefined node. Undefined count=" + undefined.getValue()); success = false; } - if (!success) { - handleFailure(counters); - } return success; } @@ -1132,9 +1181,10 @@ public class IntegrationTestBigLinkedList extends IntegrationTestBase { private void printCommands() { System.err.println("Commands:"); System.err.println(" Generator Map only job that generates data."); - System.err.println(" Verify A map reduce job that looks for holes. Look at the counts "); - System.err.println(" after running. See REFERENCED and UNREFERENCED are ok. Any "); - System.err.println(" UNDEFINED counts are bad. Do not run with the Generator."); + System.err.println(" Verify A map reduce job that looks for holes. Check return code and"); + System.err.println(" look at the counts after running. See REFERENCED and"); + System.err.println(" UNREFERENCED are ok. Any UNDEFINED counts are bad. Do not run"); + System.err.println(" with the Generator."); System.err.println(" Walker " + "Standalong program that starts following a linked list & emits timing info."); System.err.println(" Print Standalone program that prints nodes in the linked list.");