<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
<span class="sourceLineNo">017</span> */<a name="line.17"></a>
<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import static org.junit.Assert.assertNull;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import static org.junit.Assert.assertTrue;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import static org.mockito.Matchers.any;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import static org.mockito.Matchers.anyListOf;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import static org.mockito.Matchers.anyString;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import static org.mockito.Matchers.eq;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import static org.mockito.Mockito.atLeastOnce;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import static org.mockito.Mockito.doAnswer;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import static org.mockito.Mockito.doThrow;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import static org.mockito.Mockito.inOrder;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import static org.mockito.Mockito.mock;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import static org.mockito.Mockito.never;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import static org.mockito.Mockito.reset;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import static org.mockito.Mockito.spy;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import static org.mockito.Mockito.times;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import static org.mockito.Mockito.verify;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import static org.mockito.Mockito.when;<a name="line.36"></a>
<span class="sourceLineNo">037</span><a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.io.IOException;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.util.Arrays;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import java.util.List;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import java.util.concurrent.TimeUnit;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.junit.After;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.junit.ClassRule;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.junit.Test;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.junit.experimental.categories.Category;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.mockito.InOrder;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import org.mockito.invocation.InvocationOnMock;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.mockito.stubbing.Answer;<a name="line.53"></a>
<span class="sourceLineNo">054</span><a name="line.54"></a>
<span class="sourceLineNo">055</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.55"></a>
<span class="sourceLineNo">056</span><a name="line.56"></a>
<span class="sourceLineNo">057</span>/**<a name="line.57"></a>
<span class="sourceLineNo">058</span> * Test Procedure coordinator operation.<a name="line.58"></a>
<span class="sourceLineNo">059</span> * &lt;p&gt;<a name="line.59"></a>
<span class="sourceLineNo">060</span> * This only works correctly when we do &lt;i&gt;class level parallelization&lt;/i&gt; of tests. If we do method<a name="line.60"></a>
<span class="sourceLineNo">061</span> * level serialization this class will likely throw all kinds of errors.<a name="line.61"></a>
<span class="sourceLineNo">062</span> */<a name="line.62"></a>
<span class="sourceLineNo">063</span>@Category({MasterTests.class, SmallTests.class})<a name="line.63"></a>
<span class="sourceLineNo">064</span>public class TestProcedureCoordinator {<a name="line.64"></a>
<span class="sourceLineNo">065</span><a name="line.65"></a>
<span class="sourceLineNo">066</span>  @ClassRule<a name="line.66"></a>
<span class="sourceLineNo">067</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.67"></a>
<span class="sourceLineNo">068</span>      HBaseClassTestRule.forClass(TestProcedureCoordinator.class);<a name="line.68"></a>
<span class="sourceLineNo">069</span><a name="line.69"></a>
<span class="sourceLineNo">070</span>  // general test constants<a name="line.70"></a>
<span class="sourceLineNo">071</span>  private static final long WAKE_FREQUENCY = 1000;<a name="line.71"></a>
<span class="sourceLineNo">072</span>  private static final long TIMEOUT = 100000;<a name="line.72"></a>
<span class="sourceLineNo">073</span>  private static final long POOL_KEEP_ALIVE = 1;<a name="line.73"></a>
<span class="sourceLineNo">074</span>  private static final String nodeName = "node";<a name="line.74"></a>
<span class="sourceLineNo">075</span>  private static final String procName = "some op";<a name="line.75"></a>
<span class="sourceLineNo">076</span>  private static final byte[] procData = new byte[0];<a name="line.76"></a>
<span class="sourceLineNo">077</span>  private static final List&lt;String&gt; expected = Lists.newArrayList("remote1", "remote2");<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span>  // setup the mocks<a name="line.79"></a>
<span class="sourceLineNo">080</span>  private final ProcedureCoordinatorRpcs controller = mock(ProcedureCoordinatorRpcs.class);<a name="line.80"></a>
<span class="sourceLineNo">081</span>  private final Procedure task = mock(Procedure.class);<a name="line.81"></a>
<span class="sourceLineNo">082</span>  private final ForeignExceptionDispatcher monitor = mock(ForeignExceptionDispatcher.class);<a name="line.82"></a>
<span class="sourceLineNo">083</span><a name="line.83"></a>
<span class="sourceLineNo">084</span>  // handle to the coordinator for each test<a name="line.84"></a>
<span class="sourceLineNo">085</span>  private ProcedureCoordinator coordinator;<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span>  @After<a name="line.87"></a>
<span class="sourceLineNo">088</span>  public void resetTest() throws IOException {<a name="line.88"></a>
<span class="sourceLineNo">089</span>    // reset all the mocks used for the tests<a name="line.89"></a>
<span class="sourceLineNo">090</span>    reset(controller, task, monitor);<a name="line.90"></a>
<span class="sourceLineNo">091</span>    // close the open coordinator, if it was used<a name="line.91"></a>
<span class="sourceLineNo">092</span>    if (coordinator != null) coordinator.close();<a name="line.92"></a>
<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
<span class="sourceLineNo">094</span><a name="line.94"></a>
<span class="sourceLineNo">095</span>  private ProcedureCoordinator buildNewCoordinator() {<a name="line.95"></a>
<span class="sourceLineNo">096</span>    ThreadPoolExecutor pool = ProcedureCoordinator.defaultPool(nodeName, 1, POOL_KEEP_ALIVE);<a name="line.96"></a>
<span class="sourceLineNo">097</span>    return spy(new ProcedureCoordinator(controller, pool));<a name="line.97"></a>
<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
<span class="sourceLineNo">099</span><a name="line.99"></a>
<span class="sourceLineNo">100</span>  /**<a name="line.100"></a>
<span class="sourceLineNo">101</span>   * Currently we can only handle one procedure at a time.  This makes sure we handle that and<a name="line.101"></a>
<span class="sourceLineNo">102</span>   * reject submitting more.<a name="line.102"></a>
<span class="sourceLineNo">103</span>   */<a name="line.103"></a>
<span class="sourceLineNo">104</span>  @Test<a name="line.104"></a>
<span class="sourceLineNo">105</span>  public void testThreadPoolSize() throws Exception {<a name="line.105"></a>
<span class="sourceLineNo">106</span>    ProcedureCoordinator coordinator = buildNewCoordinator();<a name="line.106"></a>
<span class="sourceLineNo">107</span>    Procedure proc = new Procedure(coordinator,  monitor,<a name="line.107"></a>
<span class="sourceLineNo">108</span>        WAKE_FREQUENCY, TIMEOUT, procName, procData, expected);<a name="line.108"></a>
<span class="sourceLineNo">109</span>    Procedure procSpy = spy(proc);<a name="line.109"></a>
<span class="sourceLineNo">110</span><a name="line.110"></a>
<span class="sourceLineNo">111</span>    Procedure proc2 = new Procedure(coordinator,  monitor,<a name="line.111"></a>
<span class="sourceLineNo">112</span>        WAKE_FREQUENCY, TIMEOUT, procName +"2", procData, expected);<a name="line.112"></a>
<span class="sourceLineNo">113</span>    Procedure procSpy2 = spy(proc2);<a name="line.113"></a>
<span class="sourceLineNo">114</span>    when(coordinator.createProcedure(any(), eq(procName), eq(procData), anyListOf(String.class)))<a name="line.114"></a>
<span class="sourceLineNo">115</span>    .thenReturn(procSpy, procSpy2);<a name="line.115"></a>
<span class="sourceLineNo">116</span><a name="line.116"></a>
<span class="sourceLineNo">117</span>    coordinator.startProcedure(procSpy.getErrorMonitor(), procName, procData, expected);<a name="line.117"></a>
<span class="sourceLineNo">118</span>    // null here means second procedure failed to start.<a name="line.118"></a>
<span class="sourceLineNo">119</span>    assertNull("Coordinator successfully ran two tasks at once with a single thread pool.",<a name="line.119"></a>
<span class="sourceLineNo">120</span>      coordinator.startProcedure(proc2.getErrorMonitor(), "another op", procData, expected));<a name="line.120"></a>
<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
<span class="sourceLineNo">122</span><a name="line.122"></a>
<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
<span class="sourceLineNo">124</span>   * Check handling a connection failure correctly if we get it during the acquiring phase<a name="line.124"></a>
<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
<span class="sourceLineNo">126</span>  @Test<a name="line.126"></a>
<span class="sourceLineNo">127</span>  public void testUnreachableControllerDuringPrepare() throws Exception {<a name="line.127"></a>
<span class="sourceLineNo">128</span>    coordinator = buildNewCoordinator();<a name="line.128"></a>
<span class="sourceLineNo">129</span>    // setup the proc<a name="line.129"></a>
<span class="sourceLineNo">130</span>    List&lt;String&gt; expected = Arrays.asList("cohort");<a name="line.130"></a>
<span class="sourceLineNo">131</span>    Procedure proc = new Procedure(coordinator, WAKE_FREQUENCY,<a name="line.131"></a>
<span class="sourceLineNo">132</span>        TIMEOUT, procName, procData, expected);<a name="line.132"></a>
<span class="sourceLineNo">133</span>    final Procedure procSpy = spy(proc);<a name="line.133"></a>
<span class="sourceLineNo">134</span><a name="line.134"></a>
<span class="sourceLineNo">135</span>    when(coordinator.createProcedure(any(), eq(procName), eq(procData), anyListOf(String.class)))<a name="line.135"></a>
<span class="sourceLineNo">136</span>        .thenReturn(procSpy);<a name="line.136"></a>
<span class="sourceLineNo">137</span><a name="line.137"></a>
<span class="sourceLineNo">138</span>    // use the passed controller responses<a name="line.138"></a>
<span class="sourceLineNo">139</span>    IOException cause = new IOException("Failed to reach comms during acquire");<a name="line.139"></a>
<span class="sourceLineNo">140</span>    doThrow(cause).when(controller)<a name="line.140"></a>
<span class="sourceLineNo">141</span>        .sendGlobalBarrierAcquire(eq(procSpy), eq(procData), anyListOf(String.class));<a name="line.141"></a>
<span class="sourceLineNo">142</span><a name="line.142"></a>
<span class="sourceLineNo">143</span>    // run the operation<a name="line.143"></a>
<span class="sourceLineNo">144</span>    proc = coordinator.startProcedure(proc.getErrorMonitor(), procName, procData, expected);<a name="line.144"></a>
<span class="sourceLineNo">145</span>    // and wait for it to finish<a name="line.145"></a>
<span class="sourceLineNo">146</span>    while(!proc.completedLatch.await(WAKE_FREQUENCY, TimeUnit.MILLISECONDS));<a name="line.146"></a>
<span class="sourceLineNo">147</span>    verify(procSpy, atLeastOnce()).receive(any());<a name="line.147"></a>
<span class="sourceLineNo">148</span>    verify(coordinator, times(1)).rpcConnectionFailure(anyString(), eq(cause));<a name="line.148"></a>
<span class="sourceLineNo">149</span>    verify(controller, times(1)).sendGlobalBarrierAcquire(procSpy, procData, expected);<a name="line.149"></a>
<span class="sourceLineNo">150</span>    verify(controller, never()).sendGlobalBarrierReached(any(),<a name="line.150"></a>
<span class="sourceLineNo">151</span>        anyListOf(String.class));<a name="line.151"></a>
<span class="sourceLineNo">152</span>  }<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
<span class="sourceLineNo">154</span>  /**<a name="line.154"></a>
<span class="sourceLineNo">155</span>   * Check handling a connection failure correctly if we get it during the barrier phase<a name="line.155"></a>
<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
<span class="sourceLineNo">157</span>  @Test<a name="line.157"></a>
<span class="sourceLineNo">158</span>  public void testUnreachableControllerDuringCommit() throws Exception {<a name="line.158"></a>
<span class="sourceLineNo">159</span>    coordinator = buildNewCoordinator();<a name="line.159"></a>
<span class="sourceLineNo">160</span><a name="line.160"></a>
<span class="sourceLineNo">161</span>    // setup the task and spy on it<a name="line.161"></a>
<span class="sourceLineNo">162</span>    List&lt;String&gt; expected = Arrays.asList("cohort");<a name="line.162"></a>
<span class="sourceLineNo">163</span>    final Procedure spy = spy(new Procedure(coordinator,<a name="line.163"></a>
<span class="sourceLineNo">164</span>        WAKE_FREQUENCY, TIMEOUT, procName, procData, expected));<a name="line.164"></a>
<span class="sourceLineNo">165</span><a name="line.165"></a>
<span class="sourceLineNo">166</span>    when(coordinator.createProcedure(any(), eq(procName), eq(procData), anyListOf(String.class)))<a name="line.166"></a>
<span class="sourceLineNo">167</span>    .thenReturn(spy);<a name="line.167"></a>
<span class="sourceLineNo">168</span><a name="line.168"></a>
<span class="sourceLineNo">169</span>    // use the passed controller responses<a name="line.169"></a>
<span class="sourceLineNo">170</span>    IOException cause = new IOException("Failed to reach controller during prepare");<a name="line.170"></a>
<span class="sourceLineNo">171</span>    doAnswer(new AcquireBarrierAnswer(procName, new String[] { "cohort" }))<a name="line.171"></a>
<span class="sourceLineNo">172</span>        .when(controller).sendGlobalBarrierAcquire(eq(spy), eq(procData), anyListOf(String.class));<a name="line.172"></a>
<span class="sourceLineNo">173</span>    doThrow(cause).when(controller).sendGlobalBarrierReached(eq(spy), anyListOf(String.class));<a name="line.173"></a>
<span class="sourceLineNo">174</span><a name="line.174"></a>
<span class="sourceLineNo">175</span>    // run the operation<a name="line.175"></a>
<span class="sourceLineNo">176</span>    Procedure task = coordinator.startProcedure(spy.getErrorMonitor(), procName, procData, expected);<a name="line.176"></a>
<span class="sourceLineNo">177</span>    // and wait for it to finish<a name="line.177"></a>
<span class="sourceLineNo">178</span>    while(!task.completedLatch.await(WAKE_FREQUENCY, TimeUnit.MILLISECONDS));<a name="line.178"></a>
<span class="sourceLineNo">179</span>    verify(spy, atLeastOnce()).receive(any());<a name="line.179"></a>
<span class="sourceLineNo">180</span>    verify(coordinator, times(1)).rpcConnectionFailure(anyString(), eq(cause));<a name="line.180"></a>
<span class="sourceLineNo">181</span>    verify(controller, times(1)).sendGlobalBarrierAcquire(eq(spy),<a name="line.181"></a>
<span class="sourceLineNo">182</span>        eq(procData), anyListOf(String.class));<a name="line.182"></a>
<span class="sourceLineNo">183</span>    verify(controller, times(1)).sendGlobalBarrierReached(any(),<a name="line.183"></a>
<span class="sourceLineNo">184</span>        anyListOf(String.class));<a name="line.184"></a>
<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
<span class="sourceLineNo">186</span><a name="line.186"></a>
<span class="sourceLineNo">187</span>  @Test<a name="line.187"></a>
<span class="sourceLineNo">188</span>  public void testNoCohort() throws Exception {<a name="line.188"></a>
<span class="sourceLineNo">189</span>    runSimpleProcedure();<a name="line.189"></a>
<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
<span class="sourceLineNo">191</span><a name="line.191"></a>
<span class="sourceLineNo">192</span>  @Test<a name="line.192"></a>
<span class="sourceLineNo">193</span>  public void testSingleCohortOrchestration() throws Exception {<a name="line.193"></a>
<span class="sourceLineNo">194</span>    runSimpleProcedure("one");<a name="line.194"></a>
<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
<span class="sourceLineNo">196</span><a name="line.196"></a>
<span class="sourceLineNo">197</span>  @Test<a name="line.197"></a>
<span class="sourceLineNo">198</span>  public void testMultipleCohortOrchestration() throws Exception {<a name="line.198"></a>
<span class="sourceLineNo">199</span>    runSimpleProcedure("one", "two", "three", "four");<a name="line.199"></a>
<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
<span class="sourceLineNo">201</span><a name="line.201"></a>
<span class="sourceLineNo">202</span>  public void runSimpleProcedure(String... members) throws Exception {<a name="line.202"></a>
<span class="sourceLineNo">203</span>    coordinator = buildNewCoordinator();<a name="line.203"></a>
<span class="sourceLineNo">204</span>    Procedure task = new Procedure(coordinator, monitor, WAKE_FREQUENCY,<a name="line.204"></a>
<span class="sourceLineNo">205</span>        TIMEOUT, procName, procData, Arrays.asList(members));<a name="line.205"></a>
<span class="sourceLineNo">206</span>    final Procedure spy = spy(task);<a name="line.206"></a>
<span class="sourceLineNo">207</span>    runCoordinatedProcedure(spy, members);<a name="line.207"></a>
<span class="sourceLineNo">208</span>  }<a name="line.208"></a>
<span class="sourceLineNo">209</span><a name="line.209"></a>
<span class="sourceLineNo">210</span>  /**<a name="line.210"></a>
<span class="sourceLineNo">211</span>   * Test that if nodes join the barrier early we still correctly handle the progress<a name="line.211"></a>
<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
<span class="sourceLineNo">213</span>  @Test<a name="line.213"></a>
<span class="sourceLineNo">214</span>  public void testEarlyJoiningBarrier() throws Exception {<a name="line.214"></a>
<span class="sourceLineNo">215</span>    final String[] cohort = new String[] { "one", "two", "three", "four" };<a name="line.215"></a>
<span class="sourceLineNo">216</span>    coordinator = buildNewCoordinator();<a name="line.216"></a>
<span class="sourceLineNo">217</span>    final ProcedureCoordinator ref = coordinator;<a name="line.217"></a>
<span class="sourceLineNo">218</span>    Procedure task = new Procedure(coordinator, monitor, WAKE_FREQUENCY,<a name="line.218"></a>
<span class="sourceLineNo">219</span>        TIMEOUT, procName, procData, Arrays.asList(cohort));<a name="line.219"></a>
<span class="sourceLineNo">220</span>    final Procedure spy = spy(task);<a name="line.220"></a>
<span class="sourceLineNo">221</span><a name="line.221"></a>
<span class="sourceLineNo">222</span>    AcquireBarrierAnswer prepare = new AcquireBarrierAnswer(procName, cohort) {<a name="line.222"></a>
<span class="sourceLineNo">223</span>      @Override<a name="line.223"></a>
<span class="sourceLineNo">224</span>      public void doWork() {<a name="line.224"></a>
<span class="sourceLineNo">225</span>        // then do some fun where we commit before all nodes have prepared<a name="line.225"></a>
<span class="sourceLineNo">226</span>        // "one" commits before anyone else is done<a name="line.226"></a>
<span class="sourceLineNo">227</span>        ref.memberAcquiredBarrier(this.opName, this.cohort[0]);<a name="line.227"></a>
<span class="sourceLineNo">228</span>        ref.memberFinishedBarrier(this.opName, this.cohort[0], new byte[0]);<a name="line.228"></a>
<span class="sourceLineNo">229</span>        // but "two" takes a while<a name="line.229"></a>
<span class="sourceLineNo">230</span>        ref.memberAcquiredBarrier(this.opName, this.cohort[1]);<a name="line.230"></a>
<span class="sourceLineNo">231</span>        // "three"jumps ahead<a name="line.231"></a>
<span class="sourceLineNo">232</span>        ref.memberAcquiredBarrier(this.opName, this.cohort[2]);<a name="line.232"></a>
<span class="sourceLineNo">233</span>        ref.memberFinishedBarrier(this.opName, this.cohort[2], new byte[0]);<a name="line.233"></a>
<span class="sourceLineNo">234</span>        // and "four" takes a while<a name="line.234"></a>
<span class="sourceLineNo">235</span>        ref.memberAcquiredBarrier(this.opName, this.cohort[3]);<a name="line.235"></a>
<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
<span class="sourceLineNo">237</span>    };<a name="line.237"></a>
<span class="sourceLineNo">238</span><a name="line.238"></a>
<span class="sourceLineNo">239</span>    BarrierAnswer commit = new BarrierAnswer(procName, cohort) {<a name="line.239"></a>
<span class="sourceLineNo">240</span>      @Override<a name="line.240"></a>
<span class="sourceLineNo">241</span>      public void doWork() {<a name="line.241"></a>
<span class="sourceLineNo">242</span>        ref.memberFinishedBarrier(opName, this.cohort[1], new byte[0]);<a name="line.242"></a>
<span class="sourceLineNo">243</span>        ref.memberFinishedBarrier(opName, this.cohort[3], new byte[0]);<a name="line.243"></a>
<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
<span class="sourceLineNo">245</span>    };<a name="line.245"></a>
<span class="sourceLineNo">246</span>    runCoordinatedOperation(spy, prepare, commit, cohort);<a name="line.246"></a>
<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
<span class="sourceLineNo">248</span><a name="line.248"></a>
<span class="sourceLineNo">249</span>  /**<a name="line.249"></a>
<span class="sourceLineNo">250</span>   * Just run a procedure with the standard name and data, with not special task for the mock<a name="line.250"></a>
<span class="sourceLineNo">251</span>   * coordinator (it works just like a regular coordinator). For custom behavior see<a name="line.251"></a>
<span class="sourceLineNo">252</span>   * {@link #runCoordinatedOperation(Procedure, AcquireBarrierAnswer, BarrierAnswer, String[])}<a name="line.252"></a>
<span class="sourceLineNo">253</span>   * .<a name="line.253"></a>
<span class="sourceLineNo">254</span>   * @param spy Spy on a real {@link Procedure}<a name="line.254"></a>
<span class="sourceLineNo">255</span>   * @param cohort expected cohort members<a name="line.255"></a>
<span class="sourceLineNo">256</span>   * @throws Exception on failure<a name="line.256"></a>
<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
<span class="sourceLineNo">258</span>  public void runCoordinatedProcedure(Procedure spy, String... cohort) throws Exception {<a name="line.258"></a>
<span class="sourceLineNo">259</span>    runCoordinatedOperation(spy, new AcquireBarrierAnswer(procName, cohort),<a name="line.259"></a>
<span class="sourceLineNo">260</span>      new BarrierAnswer(procName, cohort), cohort);<a name="line.260"></a>
<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
<span class="sourceLineNo">262</span><a name="line.262"></a>
<span class="sourceLineNo">263</span>  public void runCoordinatedOperation(Procedure spy, AcquireBarrierAnswer prepare,<a name="line.263"></a>
<span class="sourceLineNo">264</span>      String... cohort) throws Exception {<a name="line.264"></a>
<span class="sourceLineNo">265</span>    runCoordinatedOperation(spy, prepare, new BarrierAnswer(procName, cohort), cohort);<a name="line.265"></a>
<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
<span class="sourceLineNo">267</span><a name="line.267"></a>
<span class="sourceLineNo">268</span>  public void runCoordinatedOperation(Procedure spy, BarrierAnswer commit,<a name="line.268"></a>
<span class="sourceLineNo">269</span>      String... cohort) throws Exception {<a name="line.269"></a>
<span class="sourceLineNo">270</span>    runCoordinatedOperation(spy, new AcquireBarrierAnswer(procName, cohort), commit, cohort);<a name="line.270"></a>
<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
<span class="sourceLineNo">272</span><a name="line.272"></a>
<span class="sourceLineNo">273</span>  public void runCoordinatedOperation(Procedure spy, AcquireBarrierAnswer prepareOperation,<a name="line.273"></a>
<span class="sourceLineNo">274</span>      BarrierAnswer commitOperation, String... cohort) throws Exception {<a name="line.274"></a>
<span class="sourceLineNo">275</span>    List&lt;String&gt; expected = Arrays.asList(cohort);<a name="line.275"></a>
<span class="sourceLineNo">276</span>    when(coordinator.createProcedure(any(), eq(procName), eq(procData), anyListOf(String.class)))<a name="line.276"></a>
<span class="sourceLineNo">277</span>      .thenReturn(spy);<a name="line.277"></a>
<span class="sourceLineNo">278</span><a name="line.278"></a>
<span class="sourceLineNo">279</span>    // use the passed controller responses<a name="line.279"></a>
<span class="sourceLineNo">280</span>    doAnswer(prepareOperation).when(controller).sendGlobalBarrierAcquire(spy, procData, expected);<a name="line.280"></a>
<span class="sourceLineNo">281</span>    doAnswer(commitOperation).when(controller)<a name="line.281"></a>
<span class="sourceLineNo">282</span>        .sendGlobalBarrierReached(eq(spy), anyListOf(String.class));<a name="line.282"></a>
<span class="sourceLineNo">283</span><a name="line.283"></a>
<span class="sourceLineNo">284</span>    // run the operation<a name="line.284"></a>
<span class="sourceLineNo">285</span>    Procedure task = coordinator.startProcedure(spy.getErrorMonitor(), procName, procData, expected);<a name="line.285"></a>
<span class="sourceLineNo">286</span>    // and wait for it to finish<a name="line.286"></a>
<span class="sourceLineNo">287</span>    task.waitForCompleted();<a name="line.287"></a>
<span class="sourceLineNo">288</span><a name="line.288"></a>
<span class="sourceLineNo">289</span>    // make sure we mocked correctly<a name="line.289"></a>
<span class="sourceLineNo">290</span>    prepareOperation.ensureRan();<a name="line.290"></a>
<span class="sourceLineNo">291</span>    // we never got an exception<a name="line.291"></a>
<span class="sourceLineNo">292</span>    InOrder inorder = inOrder(spy, controller);<a name="line.292"></a>
<span class="sourceLineNo">293</span>    inorder.verify(spy).sendGlobalBarrierStart();<a name="line.293"></a>
<span class="sourceLineNo">294</span>    inorder.verify(controller).sendGlobalBarrierAcquire(task, procData, expected);<a name="line.294"></a>
<span class="sourceLineNo">295</span>    inorder.verify(spy).sendGlobalBarrierReached();<a name="line.295"></a>
<span class="sourceLineNo">296</span>    inorder.verify(controller).sendGlobalBarrierReached(eq(task), anyListOf(String.class));<a name="line.296"></a>
<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
<span class="sourceLineNo">298</span><a name="line.298"></a>
<span class="sourceLineNo">299</span>  private static abstract class OperationAnswer implements Answer&lt;Void&gt; {<a name="line.299"></a>
<span class="sourceLineNo">300</span>    private boolean ran = false;<a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
<span class="sourceLineNo">302</span>    public void ensureRan() {<a name="line.302"></a>
<span class="sourceLineNo">303</span>      assertTrue("Prepare mocking didn't actually run!", ran);<a name="line.303"></a>
<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
<span class="sourceLineNo">305</span><a name="line.305"></a>
<span class="sourceLineNo">306</span>    @Override<a name="line.306"></a>
<span class="sourceLineNo">307</span>    public final Void answer(InvocationOnMock invocation) throws Throwable {<a name="line.307"></a>
<span class="sourceLineNo">308</span>      this.ran = true;<a name="line.308"></a>
<span class="sourceLineNo">309</span>      doWork();<a name="line.309"></a>
<span class="sourceLineNo">310</span>      return null;<a name="line.310"></a>
<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
<span class="sourceLineNo">312</span><a name="line.312"></a>
<span class="sourceLineNo">313</span>    protected abstract void doWork() throws Throwable;<a name="line.313"></a>
<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
<span class="sourceLineNo">315</span><a name="line.315"></a>
<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
<span class="sourceLineNo">317</span>   * Just tell the current coordinator that each of the nodes has prepared<a name="line.317"></a>
<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
<span class="sourceLineNo">319</span>  private class AcquireBarrierAnswer extends OperationAnswer {<a name="line.319"></a>
<span class="sourceLineNo">320</span>    protected final String[] cohort;<a name="line.320"></a>
<span class="sourceLineNo">321</span>    protected final String opName;<a name="line.321"></a>
<span class="sourceLineNo">322</span><a name="line.322"></a>
<span class="sourceLineNo">323</span>    public AcquireBarrierAnswer(String opName, String... cohort) {<a name="line.323"></a>
<span class="sourceLineNo">324</span>      this.cohort = cohort;<a name="line.324"></a>
<span class="sourceLineNo">325</span>      this.opName = opName;<a name="line.325"></a>
<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
<span class="sourceLineNo">327</span><a name="line.327"></a>
<span class="sourceLineNo">328</span>    @Override<a name="line.328"></a>
<span class="sourceLineNo">329</span>    public void doWork() {<a name="line.329"></a>
<span class="sourceLineNo">330</span>      if (cohort == null) return;<a name="line.330"></a>
<span class="sourceLineNo">331</span>      for (String member : cohort) {<a name="line.331"></a>
<span class="sourceLineNo">332</span>        TestProcedureCoordinator.this.coordinator.memberAcquiredBarrier(opName, member);<a name="line.332"></a>
<span class="sourceLineNo">333</span>      }<a name="line.333"></a>
<span class="sourceLineNo">334</span>    }<a name="line.334"></a>
<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
<span class="sourceLineNo">336</span><a name="line.336"></a>
<span class="sourceLineNo">337</span>  /**<a name="line.337"></a>
<span class="sourceLineNo">338</span>   * Just tell the current coordinator that each of the nodes has committed<a name="line.338"></a>
<span class="sourceLineNo">339</span>   */<a name="line.339"></a>
<span class="sourceLineNo">340</span>  private class BarrierAnswer extends OperationAnswer {<a name="line.340"></a>
<span class="sourceLineNo">341</span>    protected final String[] cohort;<a name="line.341"></a>
<span class="sourceLineNo">342</span>    protected final String opName;<a name="line.342"></a>
<span class="sourceLineNo">343</span><a name="line.343"></a>
<span class="sourceLineNo">344</span>    public BarrierAnswer(String opName, String... cohort) {<a name="line.344"></a>
<span class="sourceLineNo">345</span>      this.cohort = cohort;<a name="line.345"></a>
<span class="sourceLineNo">346</span>      this.opName = opName;<a name="line.346"></a>
<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
<span class="sourceLineNo">348</span><a name="line.348"></a>
<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
<span class="sourceLineNo">350</span>    public void doWork() {<a name="line.350"></a>
<span class="sourceLineNo">351</span>      if (cohort == null) return;<a name="line.351"></a>
<span class="sourceLineNo">352</span>      for (String member : cohort) {<a name="line.352"></a>
<span class="sourceLineNo">353</span>        TestProcedureCoordinator.this.coordinator.memberFinishedBarrier(opName, member,<a name="line.353"></a>
<span class="sourceLineNo">354</span>          new byte[0]);<a name="line.354"></a>
<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
<span class="sourceLineNo">358</span>}<a name="line.358"></a>




























































</pre>
</div>
</body>
</html>
