Index: hbase-server/src/test/java/org/apache/hadoop/hbase/procedure/TestZKProcedure.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/procedure/TestZKProcedure.java (revision 1595261) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/procedure/TestZKProcedure.java (working copy) @@ -231,7 +231,7 @@ final int[] elem = new int[1]; for (int i = 0; i < members.size(); i++) { ForeignExceptionDispatcher cohortMonitor = new ForeignExceptionDispatcher(); - ProcedureMember comms = members.get(i).getFirst(); + final ProcedureMember comms = members.get(i).getFirst(); Subprocedure commit = Mockito .spy(new SubprocedureImpl(comms, opName, cohortMonitor, WAKE_FREQUENCY, TIMEOUT)); // This nasty bit has one of the impls throw a TimeoutException @@ -245,7 +245,8 @@ new TimeoutException("subprocTimeout" , 1, 2, 0)); Subprocedure r = ((Subprocedure) invocation.getMock()); LOG.error("Remote commit failure, not propagating error:" + remoteCause); - r.monitor.receive(remoteCause); + comms.receiveAbortProcedure(r.getName(), remoteCause); + assertEquals(r.isComplete(), true); // don't complete the error phase until the coordinator has gotten the error // notification (which ensures that we never progress past prepare) try { Index: hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/Subprocedure.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/Subprocedure.java (revision 1595261) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/Subprocedure.java (working copy) @@ -265,6 +265,7 @@ */ public void cancel(String msg, Throwable cause) { LOG.error(msg, cause); + complete = true; if (cause instanceof ForeignException) { monitor.receive((ForeignException) cause); } else { Index: hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureMember.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureMember.java (revision 1595261) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureMember.java (working copy) @@ -246,7 +246,8 @@ ", ignoring it.", ee); return; // Procedure has already completed } - LOG.error("Propagating foreign exception to subprocedure " + sub.getName(), ee); - sub.monitor.receive(ee); + String msg = "Propagating foreign exception to subprocedure " + sub.getName(); + LOG.error(msg, ee); + sub.cancel(msg, ee); } } \ No newline at end of file