From: <mar...@us...> - 2013-12-13 11:01:43
|
Revision: 7641 http://bigdata.svn.sourceforge.net/bigdata/?rev=7641&view=rev Author: martyncutcher Date: 2013-12-13 11:01:37 +0000 (Fri, 13 Dec 2013) Log Message: ----------- Implement downstream PipelineException check to handle larger quorums than 3 services Modified Paths: -------------- branches/MGC_1_3_0/bigdata/src/java/com/bigdata/ha/QuorumPipelineImpl.java Modified: branches/MGC_1_3_0/bigdata/src/java/com/bigdata/ha/QuorumPipelineImpl.java =================================================================== --- branches/MGC_1_3_0/bigdata/src/java/com/bigdata/ha/QuorumPipelineImpl.java 2013-12-13 10:44:56 UTC (rev 7640) +++ branches/MGC_1_3_0/bigdata/src/java/com/bigdata/ha/QuorumPipelineImpl.java 2013-12-13 11:01:37 UTC (rev 7641) @@ -2091,15 +2091,23 @@ futSnd.cancel(true/* mayInterruptIfRunning */); } } catch (Throwable t) { - // determine next pipeline service id - // FIXME: should this check for problem from further downstream for - // quorums with > 3 services? - final UUID[] priorAndNext = member.getQuorum() - .getPipelinePriorAndNext(member.getServiceId()); - log.warn("Problem with downstream service: " + priorAndNext[1], + // determine the problem service, which may be further downstream + // if the Throwable contains a PipelineException innerCause + final PipelineException pe = (PipelineException) InnerCause + .getInnerCause(t, PipelineException.class); + final UUID problemService; + if (pe != null) { + problemService = pe.getProblemServiceId(); + } else { + final UUID[] priorAndNext = member.getQuorum() + .getPipelinePriorAndNext(member.getServiceId()); + problemService = priorAndNext[1]; + } + + log.warn("Problem with downstream service: " + problemService, t); - throw new PipelineException(priorAndNext[1], t); + throw new PipelineException(problemService, t); } // done This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |