From: <tho...@us...> - 2013-11-13 15:34:15
|
Revision: 7535 http://bigdata.svn.sourceforge.net/bigdata/?rev=7535&view=rev Author: thompsonbry Date: 2013-11-13 15:34:09 +0000 (Wed, 13 Nov 2013) Log Message: ----------- Modified the test harness to handle what appears to be a relatively common case on ci.bigdata.com where none of the services are running (serverA==serverB==serverC==null) but a proxy for a leader was discovered through a data race where zookeeper and/or the test harnesses local lookup service cache are not yet caught up with the service tear downs. Modified Paths: -------------- branches/BIGDATA_RELEASE_1_3_0/bigdata-jini/src/test/com/bigdata/journal/jini/ha/AbstractHA3JournalServerTestCase.java Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata-jini/src/test/com/bigdata/journal/jini/ha/AbstractHA3JournalServerTestCase.java =================================================================== --- branches/BIGDATA_RELEASE_1_3_0/bigdata-jini/src/test/com/bigdata/journal/jini/ha/AbstractHA3JournalServerTestCase.java 2013-11-12 20:28:53 UTC (rev 7534) +++ branches/BIGDATA_RELEASE_1_3_0/bigdata-jini/src/test/com/bigdata/journal/jini/ha/AbstractHA3JournalServerTestCase.java 2013-11-13 15:34:09 UTC (rev 7535) @@ -458,21 +458,35 @@ if (quorum.isQuorumMet()) { final long token = quorum.awaitQuorum(awaitQuorumTimeout, TimeUnit.MILLISECONDS); - leader = quorum.getClient().getLeader(token); - if (leader.equals(serverA)) { + /* + * Note: It is possible to resolve a proxy for a service that + * has been recently shutdown or destroyed. This is effectively + * a data race. + */ + final HAGlue t = quorum.getClient().getLeader(token); + if (t.equals(serverA)) { + leader = t; leaderServiceDir = getServiceDirA(); leaderListener = serviceListenerA; - } else if (leader.equals(serverB)) { + } else if (t.equals(serverB)) { + leader = t; leaderServiceDir = getServiceDirB(); leaderListener = serviceListenerB; - } else if (leader.equals(serverC)) { + } else if (t.equals(serverC)) { + leader = t; leaderServiceDir = getServiceDirC(); leaderListener = serviceListenerC; - } else {// log warning and fall through. + } else { + if (serverA == null && serverB == null && serverC == null) { + /* + * There are no services running and nothing to shutdown. We + * probably resolved a stale proxy to the leader above. + */ + return; + } throw new IllegalStateException( - "Leader is none of A, B, or C: leader=" + leader - + ", A=" + serverA + ", B=" + serverB + ", C=" - + serverC); + "Leader is none of A, B, or C: leader=" + t + ", A=" + + serverA + ", B=" + serverB + ", C=" + serverC); } } else { leader = null; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |