<!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.regionserver.wal;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.regionserver.wal.WALActionsListener.RollRequestReason.ERROR;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.regionserver.wal.WALActionsListener.RollRequestReason.LOW_REPLICATION;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.regionserver.wal.WALActionsListener.RollRequestReason.SIZE;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.regionserver.wal.WALActionsListener.RollRequestReason.SLOW_SYNC;<a name="line.23"></a>
<span class="sourceLineNo">024</span><a name="line.24"></a>
<span class="sourceLineNo">025</span>import com.lmax.disruptor.BlockingWaitStrategy;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import com.lmax.disruptor.EventHandler;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import com.lmax.disruptor.ExceptionHandler;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import com.lmax.disruptor.LifecycleAware;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import com.lmax.disruptor.TimeoutException;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import com.lmax.disruptor.dsl.Disruptor;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import com.lmax.disruptor.dsl.ProducerType;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.io.IOException;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.io.OutputStream;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.Arrays;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.List;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.util.concurrent.BlockingQueue;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import java.util.concurrent.CountDownLatch;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.util.concurrent.ExecutorService;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.util.concurrent.Executors;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import java.util.concurrent.LinkedBlockingQueue;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import java.util.concurrent.TimeUnit;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.hadoop.conf.Configuration;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.hadoop.fs.FileSystem;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.Path;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.HConstants;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.ClassSize;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.wal.FSHLogProvider;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.56"></a>
<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.wal.WALProvider.Writer;<a name="line.57"></a>
<span class="sourceLineNo">058</span>import org.apache.hadoop.hdfs.DFSOutputStream;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import org.apache.hadoop.hdfs.client.HdfsDataOutputStream;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import org.apache.hadoop.hdfs.protocol.DatanodeInfo;<a name="line.60"></a>
<span class="sourceLineNo">061</span>import org.apache.htrace.core.TraceScope;<a name="line.61"></a>
<span class="sourceLineNo">062</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.62"></a>
<span class="sourceLineNo">063</span>import org.slf4j.Logger;<a name="line.63"></a>
<span class="sourceLineNo">064</span>import org.slf4j.LoggerFactory;<a name="line.64"></a>
<span class="sourceLineNo">065</span><a name="line.65"></a>
<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.66"></a>
<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.67"></a>
<span class="sourceLineNo">068</span><a name="line.68"></a>
<span class="sourceLineNo">069</span>/**<a name="line.69"></a>
<span class="sourceLineNo">070</span> * The default implementation of FSWAL.<a name="line.70"></a>
<span class="sourceLineNo">071</span> */<a name="line.71"></a>
<span class="sourceLineNo">072</span>@InterfaceAudience.Private<a name="line.72"></a>
<span class="sourceLineNo">073</span>public class FSHLog extends AbstractFSWAL&lt;Writer&gt; {<a name="line.73"></a>
<span class="sourceLineNo">074</span>  // IMPLEMENTATION NOTES:<a name="line.74"></a>
<span class="sourceLineNo">075</span>  //<a name="line.75"></a>
<span class="sourceLineNo">076</span>  // At the core is a ring buffer. Our ring buffer is the LMAX Disruptor. It tries to<a name="line.76"></a>
<span class="sourceLineNo">077</span>  // minimize synchronizations and volatile writes when multiple contending threads as is the case<a name="line.77"></a>
<span class="sourceLineNo">078</span>  // here appending and syncing on a single WAL. The Disruptor is configured to handle multiple<a name="line.78"></a>
<span class="sourceLineNo">079</span>  // producers but it has one consumer only (the producers in HBase are IPC Handlers calling append<a name="line.79"></a>
<span class="sourceLineNo">080</span>  // and then sync). The single consumer/writer pulls the appends and syncs off the ring buffer.<a name="line.80"></a>
<span class="sourceLineNo">081</span>  // When a handler calls sync, it is given back a future. The producer 'blocks' on the future so<a name="line.81"></a>
<span class="sourceLineNo">082</span>  // it does not return until the sync completes. The future is passed over the ring buffer from<a name="line.82"></a>
<span class="sourceLineNo">083</span>  // the producer/handler to the consumer thread where it does its best to batch up the producer<a name="line.83"></a>
<span class="sourceLineNo">084</span>  // syncs so one WAL sync actually spans multiple producer sync invocations. How well the<a name="line.84"></a>
<span class="sourceLineNo">085</span>  // batching works depends on the write rate; i.e. we tend to batch more in times of<a name="line.85"></a>
<span class="sourceLineNo">086</span>  // high writes/syncs.<a name="line.86"></a>
<span class="sourceLineNo">087</span>  //<a name="line.87"></a>
<span class="sourceLineNo">088</span>  // Calls to append now also wait until the append has been done on the consumer side of the<a name="line.88"></a>
<span class="sourceLineNo">089</span>  // disruptor. We used to not wait but it makes the implementation easier to grok if we have<a name="line.89"></a>
<span class="sourceLineNo">090</span>  // the region edit/sequence id after the append returns.<a name="line.90"></a>
<span class="sourceLineNo">091</span>  //<a name="line.91"></a>
<span class="sourceLineNo">092</span>  // TODO: Handlers need to coordinate appending AND syncing. Can we have the threads contend<a name="line.92"></a>
<span class="sourceLineNo">093</span>  // once only? Probably hard given syncs take way longer than an append.<a name="line.93"></a>
<span class="sourceLineNo">094</span>  //<a name="line.94"></a>
<span class="sourceLineNo">095</span>  // The consumer threads pass the syncs off to multiple syncing threads in a round robin fashion<a name="line.95"></a>
<span class="sourceLineNo">096</span>  // to ensure we keep up back-to-back FS sync calls (FS sync calls are the long poll writing the<a name="line.96"></a>
<span class="sourceLineNo">097</span>  // WAL). The consumer thread passes the futures to the sync threads for it to complete<a name="line.97"></a>
<span class="sourceLineNo">098</span>  // the futures when done.<a name="line.98"></a>
<span class="sourceLineNo">099</span>  //<a name="line.99"></a>
<span class="sourceLineNo">100</span>  // The 'sequence' in the below is the sequence of the append/sync on the ringbuffer. It<a name="line.100"></a>
<span class="sourceLineNo">101</span>  // acts as a sort-of transaction id. It is always incrementing.<a name="line.101"></a>
<span class="sourceLineNo">102</span>  //<a name="line.102"></a>
<span class="sourceLineNo">103</span>  // The RingBufferEventHandler class hosts the ring buffer consuming code. The threads that<a name="line.103"></a>
<span class="sourceLineNo">104</span>  // do the actual FS sync are implementations of SyncRunner. SafePointZigZagLatch is a<a name="line.104"></a>
<span class="sourceLineNo">105</span>  // synchronization class used to halt the consumer at a safe point -- just after all outstanding<a name="line.105"></a>
<span class="sourceLineNo">106</span>  // syncs and appends have completed -- so the log roller can swap the WAL out under it.<a name="line.106"></a>
<span class="sourceLineNo">107</span>  //<a name="line.107"></a>
<span class="sourceLineNo">108</span>  // We use ring buffer sequence as txid of FSWALEntry and SyncFuture.<a name="line.108"></a>
<span class="sourceLineNo">109</span>  private static final Logger LOG = LoggerFactory.getLogger(FSHLog.class);<a name="line.109"></a>
<span class="sourceLineNo">110</span><a name="line.110"></a>
<span class="sourceLineNo">111</span>  private static final String TOLERABLE_LOW_REPLICATION = "hbase.regionserver.hlog.tolerable.lowreplication";<a name="line.111"></a>
<span class="sourceLineNo">112</span>  private static final String LOW_REPLICATION_ROLL_LIMIT = "hbase.regionserver.hlog.lowreplication.rolllimit";<a name="line.112"></a>
<span class="sourceLineNo">113</span>  private static final int DEFAULT_LOW_REPLICATION_ROLL_LIMIT = 5;<a name="line.113"></a>
<span class="sourceLineNo">114</span>  private static final String ROLL_ERRORS_TOLERATED = "hbase.regionserver.logroll.errors.tolerated";<a name="line.114"></a>
<span class="sourceLineNo">115</span>  private static final int DEFAULT_ROLL_ERRORS_TOLERATED = 2;<a name="line.115"></a>
<span class="sourceLineNo">116</span>  private static final String SYNCER_COUNT = "hbase.regionserver.hlog.syncer.count";<a name="line.116"></a>
<span class="sourceLineNo">117</span>  private static final int DEFAULT_SYNCER_COUNT = 5;<a name="line.117"></a>
<span class="sourceLineNo">118</span>  private static final String MAX_BATCH_COUNT = "hbase.regionserver.wal.sync.batch.count";<a name="line.118"></a>
<span class="sourceLineNo">119</span>  private static final int DEFAULT_MAX_BATCH_COUNT = 200;<a name="line.119"></a>
<span class="sourceLineNo">120</span><a name="line.120"></a>
<span class="sourceLineNo">121</span>  private static final String FSHLOG_WAIT_ON_SHUTDOWN_IN_SECONDS = "hbase.wal.fshlog.wait.on.shutdown.seconds";<a name="line.121"></a>
<span class="sourceLineNo">122</span>  private static final int DEFAULT_FSHLOG_WAIT_ON_SHUTDOWN_IN_SECONDS = 5;<a name="line.122"></a>
<span class="sourceLineNo">123</span><a name="line.123"></a>
<span class="sourceLineNo">124</span>  /**<a name="line.124"></a>
<span class="sourceLineNo">125</span>   * The nexus at which all incoming handlers meet. Does appends and sync with an ordering. Appends<a name="line.125"></a>
<span class="sourceLineNo">126</span>   * and syncs are each put on the ring which means handlers need to smash up against the ring twice<a name="line.126"></a>
<span class="sourceLineNo">127</span>   * (can we make it once only? ... maybe not since time to append is so different from time to sync<a name="line.127"></a>
<span class="sourceLineNo">128</span>   * and sometimes we don't want to sync or we want to async the sync). The ring is where we make<a name="line.128"></a>
<span class="sourceLineNo">129</span>   * sure of our ordering and it is also where we do batching up of handler sync calls.<a name="line.129"></a>
<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
<span class="sourceLineNo">131</span>  private final Disruptor&lt;RingBufferTruck&gt; disruptor;<a name="line.131"></a>
<span class="sourceLineNo">132</span><a name="line.132"></a>
<span class="sourceLineNo">133</span>  /**<a name="line.133"></a>
<span class="sourceLineNo">134</span>   * This fellow is run by the above appendExecutor service but it is all about batching up appends<a name="line.134"></a>
<span class="sourceLineNo">135</span>   * and syncs; it may shutdown without cleaning out the last few appends or syncs. To guard against<a name="line.135"></a>
<span class="sourceLineNo">136</span>   * this, keep a reference to this handler and do explicit close on way out to make sure all<a name="line.136"></a>
<span class="sourceLineNo">137</span>   * flushed out before we exit.<a name="line.137"></a>
<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
<span class="sourceLineNo">139</span>  private final RingBufferEventHandler ringBufferEventHandler;<a name="line.139"></a>
<span class="sourceLineNo">140</span><a name="line.140"></a>
<span class="sourceLineNo">141</span>  /**<a name="line.141"></a>
<span class="sourceLineNo">142</span>   * FSDataOutputStream associated with the current SequenceFile.writer<a name="line.142"></a>
<span class="sourceLineNo">143</span>   */<a name="line.143"></a>
<span class="sourceLineNo">144</span>  private FSDataOutputStream hdfs_out;<a name="line.144"></a>
<span class="sourceLineNo">145</span><a name="line.145"></a>
<span class="sourceLineNo">146</span>  // All about log rolling if not enough replicas outstanding.<a name="line.146"></a>
<span class="sourceLineNo">147</span><a name="line.147"></a>
<span class="sourceLineNo">148</span>  // Minimum tolerable replicas, if the actual value is lower than it, rollWriter will be triggered<a name="line.148"></a>
<span class="sourceLineNo">149</span>  private final int minTolerableReplication;<a name="line.149"></a>
<span class="sourceLineNo">150</span><a name="line.150"></a>
<span class="sourceLineNo">151</span>  // If live datanode count is lower than the default replicas value,<a name="line.151"></a>
<span class="sourceLineNo">152</span>  // RollWriter will be triggered in each sync(So the RollWriter will be<a name="line.152"></a>
<span class="sourceLineNo">153</span>  // triggered one by one in a short time). Using it as a workaround to slow<a name="line.153"></a>
<span class="sourceLineNo">154</span>  // down the roll frequency triggered by checkLowReplication().<a name="line.154"></a>
<span class="sourceLineNo">155</span>  private final AtomicInteger consecutiveLogRolls = new AtomicInteger(0);<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span>  private final int lowReplicationRollLimit;<a name="line.157"></a>
<span class="sourceLineNo">158</span><a name="line.158"></a>
<span class="sourceLineNo">159</span>  // If consecutiveLogRolls is larger than lowReplicationRollLimit,<a name="line.159"></a>
<span class="sourceLineNo">160</span>  // then disable the rolling in checkLowReplication().<a name="line.160"></a>
<span class="sourceLineNo">161</span>  // Enable it if the replications recover.<a name="line.161"></a>
<span class="sourceLineNo">162</span>  private volatile boolean lowReplicationRollEnabled = true;<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span>  /** Number of log close errors tolerated before we abort */<a name="line.164"></a>
<span class="sourceLineNo">165</span>  private final int closeErrorsTolerated;<a name="line.165"></a>
<span class="sourceLineNo">166</span><a name="line.166"></a>
<span class="sourceLineNo">167</span>  private final AtomicInteger closeErrorCount = new AtomicInteger();<a name="line.167"></a>
<span class="sourceLineNo">168</span><a name="line.168"></a>
<span class="sourceLineNo">169</span>  private final int waitOnShutdownInSeconds;<a name="line.169"></a>
<span class="sourceLineNo">170</span>  private final ExecutorService closeExecutor = Executors.newCachedThreadPool(<a name="line.170"></a>
<span class="sourceLineNo">171</span>      new ThreadFactoryBuilder().setDaemon(true).setNameFormat("Close-WAL-Writer-%d").build());<a name="line.171"></a>
<span class="sourceLineNo">172</span><a name="line.172"></a>
<span class="sourceLineNo">173</span>  /**<a name="line.173"></a>
<span class="sourceLineNo">174</span>   * Exception handler to pass the disruptor ringbuffer. Same as native implementation only it logs<a name="line.174"></a>
<span class="sourceLineNo">175</span>   * using our logger instead of java native logger.<a name="line.175"></a>
<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
<span class="sourceLineNo">177</span>  static class RingBufferExceptionHandler implements ExceptionHandler&lt;RingBufferTruck&gt; {<a name="line.177"></a>
<span class="sourceLineNo">178</span><a name="line.178"></a>
<span class="sourceLineNo">179</span>    @Override<a name="line.179"></a>
<span class="sourceLineNo">180</span>    public void handleEventException(Throwable ex, long sequence, RingBufferTruck event) {<a name="line.180"></a>
<span class="sourceLineNo">181</span>      LOG.error("Sequence=" + sequence + ", event=" + event, ex);<a name="line.181"></a>
<span class="sourceLineNo">182</span>      throw new RuntimeException(ex);<a name="line.182"></a>
<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
<span class="sourceLineNo">184</span><a name="line.184"></a>
<span class="sourceLineNo">185</span>    @Override<a name="line.185"></a>
<span class="sourceLineNo">186</span>    public void handleOnStartException(Throwable ex) {<a name="line.186"></a>
<span class="sourceLineNo">187</span>      LOG.error(ex.toString(), ex);<a name="line.187"></a>
<span class="sourceLineNo">188</span>      throw new RuntimeException(ex);<a name="line.188"></a>
<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
<span class="sourceLineNo">190</span><a name="line.190"></a>
<span class="sourceLineNo">191</span>    @Override<a name="line.191"></a>
<span class="sourceLineNo">192</span>    public void handleOnShutdownException(Throwable ex) {<a name="line.192"></a>
<span class="sourceLineNo">193</span>      LOG.error(ex.toString(), ex);<a name="line.193"></a>
<span class="sourceLineNo">194</span>      throw new RuntimeException(ex);<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><a name="line.197"></a>
<span class="sourceLineNo">198</span>  /**<a name="line.198"></a>
<span class="sourceLineNo">199</span>   * Constructor.<a name="line.199"></a>
<span class="sourceLineNo">200</span>   * @param fs filesystem handle<a name="line.200"></a>
<span class="sourceLineNo">201</span>   * @param root path for stored and archived wals<a name="line.201"></a>
<span class="sourceLineNo">202</span>   * @param logDir dir where wals are stored<a name="line.202"></a>
<span class="sourceLineNo">203</span>   * @param conf configuration to use<a name="line.203"></a>
<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
<span class="sourceLineNo">205</span>  @VisibleForTesting<a name="line.205"></a>
<span class="sourceLineNo">206</span>  public FSHLog(final FileSystem fs, final Path root, final String logDir, final Configuration conf)<a name="line.206"></a>
<span class="sourceLineNo">207</span>      throws IOException {<a name="line.207"></a>
<span class="sourceLineNo">208</span>    this(fs, root, logDir, HConstants.HREGION_OLDLOGDIR_NAME, conf, null, true, null, null);<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>  /**<a name="line.211"></a>
<span class="sourceLineNo">212</span>   * Create an edit log at the given &lt;code&gt;dir&lt;/code&gt; location. You should never have to load an<a name="line.212"></a>
<span class="sourceLineNo">213</span>   * existing log. If there is a log at startup, it should have already been processed and deleted<a name="line.213"></a>
<span class="sourceLineNo">214</span>   * by the time the WAL object is started up.<a name="line.214"></a>
<span class="sourceLineNo">215</span>   * @param fs filesystem handle<a name="line.215"></a>
<span class="sourceLineNo">216</span>   * @param rootDir path to where logs and oldlogs<a name="line.216"></a>
<span class="sourceLineNo">217</span>   * @param logDir dir where wals are stored<a name="line.217"></a>
<span class="sourceLineNo">218</span>   * @param archiveDir dir where wals are archived<a name="line.218"></a>
<span class="sourceLineNo">219</span>   * @param conf configuration to use<a name="line.219"></a>
<span class="sourceLineNo">220</span>   * @param listeners Listeners on WAL events. Listeners passed here will be registered before we do<a name="line.220"></a>
<span class="sourceLineNo">221</span>   *          anything else; e.g. the Constructor {@link #rollWriter()}.<a name="line.221"></a>
<span class="sourceLineNo">222</span>   * @param failIfWALExists If true IOException will be thrown if files related to this wal already<a name="line.222"></a>
<span class="sourceLineNo">223</span>   *          exist.<a name="line.223"></a>
<span class="sourceLineNo">224</span>   * @param prefix should always be hostname and port in distributed env and it will be URL encoded<a name="line.224"></a>
<span class="sourceLineNo">225</span>   *          before being used. If prefix is null, "wal" will be used<a name="line.225"></a>
<span class="sourceLineNo">226</span>   * @param suffix will be url encoded. null is treated as empty. non-empty must start with<a name="line.226"></a>
<span class="sourceLineNo">227</span>   *          {@link org.apache.hadoop.hbase.wal.AbstractFSWALProvider#WAL_FILE_NAME_DELIMITER}<a name="line.227"></a>
<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
<span class="sourceLineNo">229</span>  public FSHLog(final FileSystem fs, final Path rootDir, final String logDir,<a name="line.229"></a>
<span class="sourceLineNo">230</span>      final String archiveDir, final Configuration conf, final List&lt;WALActionsListener&gt; listeners,<a name="line.230"></a>
<span class="sourceLineNo">231</span>      final boolean failIfWALExists, final String prefix, final String suffix) throws IOException {<a name="line.231"></a>
<span class="sourceLineNo">232</span>    super(fs, rootDir, logDir, archiveDir, conf, listeners, failIfWALExists, prefix, suffix);<a name="line.232"></a>
<span class="sourceLineNo">233</span>    this.minTolerableReplication = conf.getInt(TOLERABLE_LOW_REPLICATION,<a name="line.233"></a>
<span class="sourceLineNo">234</span>      CommonFSUtils.getDefaultReplication(fs, this.walDir));<a name="line.234"></a>
<span class="sourceLineNo">235</span>    this.lowReplicationRollLimit = conf.getInt(LOW_REPLICATION_ROLL_LIMIT, DEFAULT_LOW_REPLICATION_ROLL_LIMIT);<a name="line.235"></a>
<span class="sourceLineNo">236</span>    this.closeErrorsTolerated = conf.getInt(ROLL_ERRORS_TOLERATED, DEFAULT_ROLL_ERRORS_TOLERATED);<a name="line.236"></a>
<span class="sourceLineNo">237</span>    this.waitOnShutdownInSeconds = conf.getInt(FSHLOG_WAIT_ON_SHUTDOWN_IN_SECONDS,<a name="line.237"></a>
<span class="sourceLineNo">238</span>        DEFAULT_FSHLOG_WAIT_ON_SHUTDOWN_IN_SECONDS);<a name="line.238"></a>
<span class="sourceLineNo">239</span>    // This is the 'writer' -- a single threaded executor. This single thread 'consumes' what is<a name="line.239"></a>
<span class="sourceLineNo">240</span>    // put on the ring buffer.<a name="line.240"></a>
<span class="sourceLineNo">241</span>    String hostingThreadName = Thread.currentThread().getName();<a name="line.241"></a>
<span class="sourceLineNo">242</span>    // Using BlockingWaitStrategy. Stuff that is going on here takes so long it makes no sense<a name="line.242"></a>
<span class="sourceLineNo">243</span>    // spinning as other strategies do.<a name="line.243"></a>
<span class="sourceLineNo">244</span>    this.disruptor = new Disruptor&lt;&gt;(RingBufferTruck::new, getPreallocatedEventCount(),<a name="line.244"></a>
<span class="sourceLineNo">245</span>      new ThreadFactoryBuilder().setNameFormat(hostingThreadName + ".append-pool-%d")<a name="line.245"></a>
<span class="sourceLineNo">246</span>        .setDaemon(true).setUncaughtExceptionHandler(Threads.LOGGING_EXCEPTION_HANDLER).build(),<a name="line.246"></a>
<span class="sourceLineNo">247</span>      ProducerType.MULTI, new BlockingWaitStrategy());<a name="line.247"></a>
<span class="sourceLineNo">248</span>    // Advance the ring buffer sequence so that it starts from 1 instead of 0,<a name="line.248"></a>
<span class="sourceLineNo">249</span>    // because SyncFuture.NOT_DONE = 0.<a name="line.249"></a>
<span class="sourceLineNo">250</span>    this.disruptor.getRingBuffer().next();<a name="line.250"></a>
<span class="sourceLineNo">251</span>    int syncerCount = conf.getInt(SYNCER_COUNT, DEFAULT_SYNCER_COUNT);<a name="line.251"></a>
<span class="sourceLineNo">252</span>    int maxBatchCount = conf.getInt(MAX_BATCH_COUNT,<a name="line.252"></a>
<span class="sourceLineNo">253</span>      conf.getInt(HConstants.REGION_SERVER_HANDLER_COUNT, DEFAULT_MAX_BATCH_COUNT));<a name="line.253"></a>
<span class="sourceLineNo">254</span>    this.ringBufferEventHandler = new RingBufferEventHandler(syncerCount, maxBatchCount);<a name="line.254"></a>
<span class="sourceLineNo">255</span>    this.disruptor.setDefaultExceptionHandler(new RingBufferExceptionHandler());<a name="line.255"></a>
<span class="sourceLineNo">256</span>    this.disruptor.handleEventsWith(new RingBufferEventHandler[] { this.ringBufferEventHandler });<a name="line.256"></a>
<span class="sourceLineNo">257</span>    // Starting up threads in constructor is a no no; Interface should have an init call.<a name="line.257"></a>
<span class="sourceLineNo">258</span>    this.disruptor.start();<a name="line.258"></a>
<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
<span class="sourceLineNo">260</span><a name="line.260"></a>
<span class="sourceLineNo">261</span>  /**<a name="line.261"></a>
<span class="sourceLineNo">262</span>   * Currently, we need to expose the writer's OutputStream to tests so that they can manipulate the<a name="line.262"></a>
<span class="sourceLineNo">263</span>   * default behavior (such as setting the maxRecoveryErrorCount value). This is<a name="line.263"></a>
<span class="sourceLineNo">264</span>   * done using reflection on the underlying HDFS OutputStream. NOTE: This could be removed once Hadoop1 support is<a name="line.264"></a>
<span class="sourceLineNo">265</span>   * removed.<a name="line.265"></a>
<span class="sourceLineNo">266</span>   * @return null if underlying stream is not ready.<a name="line.266"></a>
<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
<span class="sourceLineNo">268</span>  @VisibleForTesting<a name="line.268"></a>
<span class="sourceLineNo">269</span>  OutputStream getOutputStream() {<a name="line.269"></a>
<span class="sourceLineNo">270</span>    FSDataOutputStream fsdos = this.hdfs_out;<a name="line.270"></a>
<span class="sourceLineNo">271</span>    return fsdos != null ? fsdos.getWrappedStream() : null;<a name="line.271"></a>
<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
<span class="sourceLineNo">273</span><a name="line.273"></a>
<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
<span class="sourceLineNo">275</span>   * Run a sync after opening to set up the pipeline.<a name="line.275"></a>
<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
<span class="sourceLineNo">277</span>  private void preemptiveSync(final ProtobufLogWriter nextWriter) {<a name="line.277"></a>
<span class="sourceLineNo">278</span>    long startTimeNanos = System.nanoTime();<a name="line.278"></a>
<span class="sourceLineNo">279</span>    try {<a name="line.279"></a>
<span class="sourceLineNo">280</span>      nextWriter.sync(useHsync);<a name="line.280"></a>
<span class="sourceLineNo">281</span>      postSync(System.nanoTime() - startTimeNanos, 0);<a name="line.281"></a>
<span class="sourceLineNo">282</span>    } catch (IOException e) {<a name="line.282"></a>
<span class="sourceLineNo">283</span>      // optimization failed, no need to abort here.<a name="line.283"></a>
<span class="sourceLineNo">284</span>      LOG.warn("pre-sync failed but an optimization so keep going", e);<a name="line.284"></a>
<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
<span class="sourceLineNo">287</span><a name="line.287"></a>
<span class="sourceLineNo">288</span>  /**<a name="line.288"></a>
<span class="sourceLineNo">289</span>   * This method allows subclasses to inject different writers without having to extend other<a name="line.289"></a>
<span class="sourceLineNo">290</span>   * methods like rollWriter().<a name="line.290"></a>
<span class="sourceLineNo">291</span>   * @return Writer instance<a name="line.291"></a>
<span class="sourceLineNo">292</span>   */<a name="line.292"></a>
<span class="sourceLineNo">293</span>  @Override<a name="line.293"></a>
<span class="sourceLineNo">294</span>  protected Writer createWriterInstance(final Path path) throws IOException {<a name="line.294"></a>
<span class="sourceLineNo">295</span>    Writer writer = FSHLogProvider.createWriter(conf, fs, path, false, this.blocksize);<a name="line.295"></a>
<span class="sourceLineNo">296</span>    if (writer instanceof ProtobufLogWriter) {<a name="line.296"></a>
<span class="sourceLineNo">297</span>      preemptiveSync((ProtobufLogWriter) writer);<a name="line.297"></a>
<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
<span class="sourceLineNo">299</span>    return writer;<a name="line.299"></a>
<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
<span class="sourceLineNo">302</span>  /**<a name="line.302"></a>
<span class="sourceLineNo">303</span>   * Used to manufacture race condition reliably. For testing only.<a name="line.303"></a>
<span class="sourceLineNo">304</span>   * @see #beforeWaitOnSafePoint()<a name="line.304"></a>
<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
<span class="sourceLineNo">306</span>  @VisibleForTesting<a name="line.306"></a>
<span class="sourceLineNo">307</span>  protected void afterCreatingZigZagLatch() {<a name="line.307"></a>
<span class="sourceLineNo">308</span>  }<a name="line.308"></a>
<span class="sourceLineNo">309</span><a name="line.309"></a>
<span class="sourceLineNo">310</span>  /**<a name="line.310"></a>
<span class="sourceLineNo">311</span>   * @see #afterCreatingZigZagLatch()<a name="line.311"></a>
<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
<span class="sourceLineNo">313</span>  @VisibleForTesting<a name="line.313"></a>
<span class="sourceLineNo">314</span>  protected void beforeWaitOnSafePoint() {<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>  @Override<a name="line.317"></a>
<span class="sourceLineNo">318</span>  protected void doAppend(Writer writer, FSWALEntry entry) throws IOException {<a name="line.318"></a>
<span class="sourceLineNo">319</span>    writer.append(entry);<a name="line.319"></a>
<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
<span class="sourceLineNo">321</span><a name="line.321"></a>
<span class="sourceLineNo">322</span>  @Override<a name="line.322"></a>
<span class="sourceLineNo">323</span>  protected void doReplaceWriter(Path oldPath, Path newPath, Writer nextWriter) throws IOException {<a name="line.323"></a>
<span class="sourceLineNo">324</span>    // Ask the ring buffer writer to pause at a safe point. Once we do this, the writer<a name="line.324"></a>
<span class="sourceLineNo">325</span>    // thread will eventually pause. An error hereafter needs to release the writer thread<a name="line.325"></a>
<span class="sourceLineNo">326</span>    // regardless -- hence the finally block below. Note, this method is called from the FSHLog<a name="line.326"></a>
<span class="sourceLineNo">327</span>    // constructor BEFORE the ring buffer is set running so it is null on first time through<a name="line.327"></a>
<span class="sourceLineNo">328</span>    // here; allow for that.<a name="line.328"></a>
<span class="sourceLineNo">329</span>    SyncFuture syncFuture = null;<a name="line.329"></a>
<span class="sourceLineNo">330</span>    SafePointZigZagLatch zigzagLatch = null;<a name="line.330"></a>
<span class="sourceLineNo">331</span>    long sequence = -1L;<a name="line.331"></a>
<span class="sourceLineNo">332</span>    if (this.writer != null &amp;&amp; this.ringBufferEventHandler != null) {<a name="line.332"></a>
<span class="sourceLineNo">333</span>      // Get sequence first to avoid dead lock when ring buffer is full<a name="line.333"></a>
<span class="sourceLineNo">334</span>      // Considering below sequence<a name="line.334"></a>
<span class="sourceLineNo">335</span>      // 1. replaceWriter is called and zigzagLatch is initialized<a name="line.335"></a>
<span class="sourceLineNo">336</span>      // 2. ringBufferEventHandler#onEvent is called and arrives at #attainSafePoint(long) then wait<a name="line.336"></a>
<span class="sourceLineNo">337</span>      // on safePointReleasedLatch<a name="line.337"></a>
<span class="sourceLineNo">338</span>      // 3. Since ring buffer is full, if we get sequence when publish sync, the replaceWriter<a name="line.338"></a>
<span class="sourceLineNo">339</span>      // thread will wait for the ring buffer to be consumed, but the only consumer is waiting<a name="line.339"></a>
<span class="sourceLineNo">340</span>      // replaceWriter thread to release safePointReleasedLatch, which causes a deadlock<a name="line.340"></a>
<span class="sourceLineNo">341</span>      sequence = getSequenceOnRingBuffer();<a name="line.341"></a>
<span class="sourceLineNo">342</span>      zigzagLatch = this.ringBufferEventHandler.attainSafePoint();<a name="line.342"></a>
<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
<span class="sourceLineNo">344</span>    afterCreatingZigZagLatch();<a name="line.344"></a>
<span class="sourceLineNo">345</span>    try {<a name="line.345"></a>
<span class="sourceLineNo">346</span>      // Wait on the safe point to be achieved. Send in a sync in case nothing has hit the<a name="line.346"></a>
<span class="sourceLineNo">347</span>      // ring buffer between the above notification of writer that we want it to go to<a name="line.347"></a>
<span class="sourceLineNo">348</span>      // 'safe point' and then here where we are waiting on it to attain safe point. Use<a name="line.348"></a>
<span class="sourceLineNo">349</span>      // 'sendSync' instead of 'sync' because we do not want this thread to block waiting on it<a name="line.349"></a>
<span class="sourceLineNo">350</span>      // to come back. Cleanup this syncFuture down below after we are ready to run again.<a name="line.350"></a>
<span class="sourceLineNo">351</span>      try {<a name="line.351"></a>
<span class="sourceLineNo">352</span>        if (zigzagLatch != null) {<a name="line.352"></a>
<span class="sourceLineNo">353</span>          // use assert to make sure no change breaks the logic that<a name="line.353"></a>
<span class="sourceLineNo">354</span>          // sequence and zigzagLatch will be set together<a name="line.354"></a>
<span class="sourceLineNo">355</span>          assert sequence &gt; 0L : "Failed to get sequence from ring buffer";<a name="line.355"></a>
<span class="sourceLineNo">356</span>          TraceUtil.addTimelineAnnotation("awaiting safepoint");<a name="line.356"></a>
<span class="sourceLineNo">357</span>          syncFuture = zigzagLatch.waitSafePoint(publishSyncOnRingBuffer(sequence, false));<a name="line.357"></a>
<span class="sourceLineNo">358</span>        }<a name="line.358"></a>
<span class="sourceLineNo">359</span>      } catch (FailedSyncBeforeLogCloseException e) {<a name="line.359"></a>
<span class="sourceLineNo">360</span>        // If unflushed/unsynced entries on close, it is reason to abort.<a name="line.360"></a>
<span class="sourceLineNo">361</span>        if (isUnflushedEntries()) {<a name="line.361"></a>
<span class="sourceLineNo">362</span>          throw e;<a name="line.362"></a>
<span class="sourceLineNo">363</span>        }<a name="line.363"></a>
<span class="sourceLineNo">364</span>        LOG.warn(<a name="line.364"></a>
<span class="sourceLineNo">365</span>          "Failed sync-before-close but no outstanding appends; closing WAL" + e.getMessage());<a name="line.365"></a>
<span class="sourceLineNo">366</span>      }<a name="line.366"></a>
<span class="sourceLineNo">367</span>      long oldFileLen = 0L;<a name="line.367"></a>
<span class="sourceLineNo">368</span>      // It is at the safe point. Swap out writer from under the blocked writer thread.<a name="line.368"></a>
<span class="sourceLineNo">369</span>      if (this.writer != null) {<a name="line.369"></a>
<span class="sourceLineNo">370</span>        oldFileLen = this.writer.getLength();<a name="line.370"></a>
<span class="sourceLineNo">371</span>        // In case of having unflushed entries or we already reached the<a name="line.371"></a>
<span class="sourceLineNo">372</span>        // closeErrorsTolerated count, call the closeWriter inline rather than in async<a name="line.372"></a>
<span class="sourceLineNo">373</span>        // way so that in case of an IOE we will throw it back and abort RS.<a name="line.373"></a>
<span class="sourceLineNo">374</span>        if (isUnflushedEntries() || closeErrorCount.get() &gt;= this.closeErrorsTolerated) {<a name="line.374"></a>
<span class="sourceLineNo">375</span>          closeWriter(this.writer, oldPath, true);<a name="line.375"></a>
<span class="sourceLineNo">376</span>        } else {<a name="line.376"></a>
<span class="sourceLineNo">377</span>          Writer localWriter = this.writer;<a name="line.377"></a>
<span class="sourceLineNo">378</span>          closeExecutor.execute(() -&gt; {<a name="line.378"></a>
<span class="sourceLineNo">379</span>            try {<a name="line.379"></a>
<span class="sourceLineNo">380</span>              closeWriter(localWriter, oldPath, false);<a name="line.380"></a>
<span class="sourceLineNo">381</span>            } catch (IOException e) {<a name="line.381"></a>
<span class="sourceLineNo">382</span>              // We will never reach here.<a name="line.382"></a>
<span class="sourceLineNo">383</span>            }<a name="line.383"></a>
<span class="sourceLineNo">384</span>          });<a name="line.384"></a>
<span class="sourceLineNo">385</span>        }<a name="line.385"></a>
<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
<span class="sourceLineNo">387</span>      logRollAndSetupWalProps(oldPath, newPath, oldFileLen);<a name="line.387"></a>
<span class="sourceLineNo">388</span>      this.writer = nextWriter;<a name="line.388"></a>
<span class="sourceLineNo">389</span>      if (nextWriter != null &amp;&amp; nextWriter instanceof ProtobufLogWriter) {<a name="line.389"></a>
<span class="sourceLineNo">390</span>        this.hdfs_out = ((ProtobufLogWriter) nextWriter).getStream();<a name="line.390"></a>
<span class="sourceLineNo">391</span>      } else {<a name="line.391"></a>
<span class="sourceLineNo">392</span>        this.hdfs_out = null;<a name="line.392"></a>
<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
<span class="sourceLineNo">394</span>    } catch (InterruptedException ie) {<a name="line.394"></a>
<span class="sourceLineNo">395</span>      // Perpetuate the interrupt<a name="line.395"></a>
<span class="sourceLineNo">396</span>      Thread.currentThread().interrupt();<a name="line.396"></a>
<span class="sourceLineNo">397</span>    } catch (IOException e) {<a name="line.397"></a>
<span class="sourceLineNo">398</span>      long count = getUnflushedEntriesCount();<a name="line.398"></a>
<span class="sourceLineNo">399</span>      LOG.error("Failed close of WAL writer " + oldPath + ", unflushedEntries=" + count, e);<a name="line.399"></a>
<span class="sourceLineNo">400</span>      throw new FailedLogCloseException(oldPath + ", unflushedEntries=" + count, e);<a name="line.400"></a>
<span class="sourceLineNo">401</span>    } finally {<a name="line.401"></a>
<span class="sourceLineNo">402</span>      // Let the writer thread go regardless, whether error or not.<a name="line.402"></a>
<span class="sourceLineNo">403</span>      if (zigzagLatch != null) {<a name="line.403"></a>
<span class="sourceLineNo">404</span>        // Reset rollRequested status<a name="line.404"></a>
<span class="sourceLineNo">405</span>        rollRequested.set(false);<a name="line.405"></a>
<span class="sourceLineNo">406</span>        zigzagLatch.releaseSafePoint();<a name="line.406"></a>
<span class="sourceLineNo">407</span>        // syncFuture will be null if we failed our wait on safe point above. Otherwise, if<a name="line.407"></a>
<span class="sourceLineNo">408</span>        // latch was obtained successfully, the sync we threw in either trigger the latch or it<a name="line.408"></a>
<span class="sourceLineNo">409</span>        // got stamped with an exception because the WAL was damaged and we could not sync. Now<a name="line.409"></a>
<span class="sourceLineNo">410</span>        // the write pipeline has been opened up again by releasing the safe point, process the<a name="line.410"></a>
<span class="sourceLineNo">411</span>        // syncFuture we got above. This is probably a noop but it may be stale exception from<a name="line.411"></a>
<span class="sourceLineNo">412</span>        // when old WAL was in place. Catch it if so.<a name="line.412"></a>
<span class="sourceLineNo">413</span>        if (syncFuture != null) {<a name="line.413"></a>
<span class="sourceLineNo">414</span>          try {<a name="line.414"></a>
<span class="sourceLineNo">415</span>            blockOnSync(syncFuture);<a name="line.415"></a>
<span class="sourceLineNo">416</span>          } catch (IOException ioe) {<a name="line.416"></a>
<span class="sourceLineNo">417</span>            if (LOG.isTraceEnabled()) {<a name="line.417"></a>
<span class="sourceLineNo">418</span>              LOG.trace("Stale sync exception", ioe);<a name="line.418"></a>
<span class="sourceLineNo">419</span>            }<a name="line.419"></a>
<span class="sourceLineNo">420</span>          }<a name="line.420"></a>
<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
<span class="sourceLineNo">424</span>  }<a name="line.424"></a>
<span class="sourceLineNo">425</span><a name="line.425"></a>
<span class="sourceLineNo">426</span>  private void closeWriter(Writer writer, Path path, boolean syncCloseCall) throws IOException {<a name="line.426"></a>
<span class="sourceLineNo">427</span>    try {<a name="line.427"></a>
<span class="sourceLineNo">428</span>      TraceUtil.addTimelineAnnotation("closing writer");<a name="line.428"></a>
<span class="sourceLineNo">429</span>      writer.close();<a name="line.429"></a>
<span class="sourceLineNo">430</span>      TraceUtil.addTimelineAnnotation("writer closed");<a name="line.430"></a>
<span class="sourceLineNo">431</span>    } catch (IOException ioe) {<a name="line.431"></a>
<span class="sourceLineNo">432</span>      int errors = closeErrorCount.incrementAndGet();<a name="line.432"></a>
<span class="sourceLineNo">433</span>      boolean hasUnflushedEntries = isUnflushedEntries();<a name="line.433"></a>
<span class="sourceLineNo">434</span>      if (syncCloseCall &amp;&amp; (hasUnflushedEntries || (errors &gt; this.closeErrorsTolerated))) {<a name="line.434"></a>
<span class="sourceLineNo">435</span>        LOG.error("Close of WAL " + path + " failed. Cause=\"" + ioe.getMessage() + "\", errors="<a name="line.435"></a>
<span class="sourceLineNo">436</span>            + errors + ", hasUnflushedEntries=" + hasUnflushedEntries);<a name="line.436"></a>
<span class="sourceLineNo">437</span>        throw ioe;<a name="line.437"></a>
<span class="sourceLineNo">438</span>      }<a name="line.438"></a>
<span class="sourceLineNo">439</span>      LOG.warn("Riding over failed WAL close of " + path<a name="line.439"></a>
<span class="sourceLineNo">440</span>          + "; THIS FILE WAS NOT CLOSED BUT ALL EDITS SYNCED SO SHOULD BE OK", ioe);<a name="line.440"></a>
<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
<span class="sourceLineNo">443</span><a name="line.443"></a>
<span class="sourceLineNo">444</span>  @Override<a name="line.444"></a>
<span class="sourceLineNo">445</span>  protected void doShutdown() throws IOException {<a name="line.445"></a>
<span class="sourceLineNo">446</span>    // Shutdown the disruptor. Will stop after all entries have been processed. Make sure we<a name="line.446"></a>
<span class="sourceLineNo">447</span>    // have stopped incoming appends before calling this else it will not shutdown. We are<a name="line.447"></a>
<span class="sourceLineNo">448</span>    // conservative below waiting a long time and if not elapsed, then halting.<a name="line.448"></a>
<span class="sourceLineNo">449</span>    if (this.disruptor != null) {<a name="line.449"></a>
<span class="sourceLineNo">450</span>      long timeoutms = conf.getLong("hbase.wal.disruptor.shutdown.timeout.ms", 60000);<a name="line.450"></a>
<span class="sourceLineNo">451</span>      try {<a name="line.451"></a>
<span class="sourceLineNo">452</span>        this.disruptor.shutdown(timeoutms, TimeUnit.MILLISECONDS);<a name="line.452"></a>
<span class="sourceLineNo">453</span>      } catch (TimeoutException e) {<a name="line.453"></a>
<span class="sourceLineNo">454</span>        LOG.warn("Timed out bringing down disruptor after " + timeoutms + "ms; forcing halt "<a name="line.454"></a>
<span class="sourceLineNo">455</span>            + "(It is a problem if this is NOT an ABORT! -- DATALOSS!!!!)");<a name="line.455"></a>
<span class="sourceLineNo">456</span>        this.disruptor.halt();<a name="line.456"></a>
<span class="sourceLineNo">457</span>        this.disruptor.shutdown();<a name="line.457"></a>
<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
<span class="sourceLineNo">460</span><a name="line.460"></a>
<span class="sourceLineNo">461</span>    if (LOG.isDebugEnabled()) {<a name="line.461"></a>
<span class="sourceLineNo">462</span>      LOG.debug("Closing WAL writer in " + CommonFSUtils.getPath(walDir));<a name="line.462"></a>
<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
<span class="sourceLineNo">464</span>    if (this.writer != null) {<a name="line.464"></a>
<span class="sourceLineNo">465</span>      this.writer.close();<a name="line.465"></a>
<span class="sourceLineNo">466</span>      this.writer = null;<a name="line.466"></a>
<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
<span class="sourceLineNo">468</span>    closeExecutor.shutdown();<a name="line.468"></a>
<span class="sourceLineNo">469</span>    try {<a name="line.469"></a>
<span class="sourceLineNo">470</span>      if (!closeExecutor.awaitTermination(waitOnShutdownInSeconds, TimeUnit.SECONDS)) {<a name="line.470"></a>
<span class="sourceLineNo">471</span>        LOG.error("We have waited {} seconds but the close of writer(s) doesn't complete."<a name="line.471"></a>
<span class="sourceLineNo">472</span>            + "Please check the status of underlying filesystem"<a name="line.472"></a>
<span class="sourceLineNo">473</span>            + " or increase the wait time by the config \"{}\"", this.waitOnShutdownInSeconds,<a name="line.473"></a>
<span class="sourceLineNo">474</span>            FSHLOG_WAIT_ON_SHUTDOWN_IN_SECONDS);<a name="line.474"></a>
<span class="sourceLineNo">475</span>      }<a name="line.475"></a>
<span class="sourceLineNo">476</span>    } catch (InterruptedException e) {<a name="line.476"></a>
<span class="sourceLineNo">477</span>      LOG.error("The wait for termination of FSHLog writer(s) is interrupted");<a name="line.477"></a>
<span class="sourceLineNo">478</span>      Thread.currentThread().interrupt();<a name="line.478"></a>
<span class="sourceLineNo">479</span>    }<a name="line.479"></a>
<span class="sourceLineNo">480</span>  }<a name="line.480"></a>
<span class="sourceLineNo">481</span><a name="line.481"></a>
<span class="sourceLineNo">482</span>  @Override<a name="line.482"></a>
<span class="sourceLineNo">483</span>  protected long append(final RegionInfo hri, final WALKeyImpl key, final WALEdit edits,<a name="line.483"></a>
<span class="sourceLineNo">484</span>    final boolean inMemstore) throws IOException {<a name="line.484"></a>
<span class="sourceLineNo">485</span>    return stampSequenceIdAndPublishToRingBuffer(hri, key, edits, inMemstore,<a name="line.485"></a>
<span class="sourceLineNo">486</span>      disruptor.getRingBuffer());<a name="line.486"></a>
<span class="sourceLineNo">487</span>  }<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
<span class="sourceLineNo">489</span>  /**<a name="line.489"></a>
<span class="sourceLineNo">490</span>   * Thread to runs the hdfs sync call. This call takes a while to complete. This is the longest<a name="line.490"></a>
<span class="sourceLineNo">491</span>   * pole adding edits to the WAL and this must complete to be sure all edits persisted. We run<a name="line.491"></a>
<span class="sourceLineNo">492</span>   * multiple threads sync'ng rather than one that just syncs in series so we have better latencies;<a name="line.492"></a>
<span class="sourceLineNo">493</span>   * otherwise, an edit that arrived just after a sync started, might have to wait almost the length<a name="line.493"></a>
<span class="sourceLineNo">494</span>   * of two sync invocations before it is marked done.<a name="line.494"></a>
<span class="sourceLineNo">495</span>   * &lt;p&gt;<a name="line.495"></a>
<span class="sourceLineNo">496</span>   * When the sync completes, it marks all the passed in futures done. On the other end of the sync<a name="line.496"></a>
<span class="sourceLineNo">497</span>   * future is a blocked thread, usually a regionserver Handler. There may be more than one future<a name="line.497"></a>
<span class="sourceLineNo">498</span>   * passed in the case where a few threads arrive at about the same time and all invoke 'sync'. In<a name="line.498"></a>
<span class="sourceLineNo">499</span>   * this case we'll batch up the invocations and run one filesystem sync only for a batch of<a name="line.499"></a>
<span class="sourceLineNo">500</span>   * Handler sync invocations. Do not confuse these Handler SyncFutures with the futures an<a name="line.500"></a>
<span class="sourceLineNo">501</span>   * ExecutorService returns when you call submit. We have no use for these in this model. These<a name="line.501"></a>
<span class="sourceLineNo">502</span>   * SyncFutures are 'artificial', something to hold the Handler until the filesystem sync<a name="line.502"></a>
<span class="sourceLineNo">503</span>   * completes.<a name="line.503"></a>
<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
<span class="sourceLineNo">505</span>  private class SyncRunner extends Thread {<a name="line.505"></a>
<span class="sourceLineNo">506</span>    private volatile long sequence;<a name="line.506"></a>
<span class="sourceLineNo">507</span>    // Keep around last exception thrown. Clear on successful sync.<a name="line.507"></a>
<span class="sourceLineNo">508</span>    private final BlockingQueue&lt;SyncFuture&gt; syncFutures;<a name="line.508"></a>
<span class="sourceLineNo">509</span>    private volatile SyncFuture takeSyncFuture = null;<a name="line.509"></a>
<span class="sourceLineNo">510</span><a name="line.510"></a>
<span class="sourceLineNo">511</span>    SyncRunner(final String name, final int maxHandlersCount) {<a name="line.511"></a>
<span class="sourceLineNo">512</span>      super(name);<a name="line.512"></a>
<span class="sourceLineNo">513</span>      // LinkedBlockingQueue because of<a name="line.513"></a>
<span class="sourceLineNo">514</span>      // http://www.javacodegeeks.com/2010/09/java-best-practices-queue-battle-and.html<a name="line.514"></a>
<span class="sourceLineNo">515</span>      // Could use other blockingqueues here or concurrent queues.<a name="line.515"></a>
<span class="sourceLineNo">516</span>      //<a name="line.516"></a>
<span class="sourceLineNo">517</span>      // We could let the capacity be 'open' but bound it so we get alerted in pathological case<a name="line.517"></a>
<span class="sourceLineNo">518</span>      // where we cannot sync and we have a bunch of threads all backed up waiting on their syncs<a name="line.518"></a>
<span class="sourceLineNo">519</span>      // to come in. LinkedBlockingQueue actually shrinks when you remove elements so Q should<a name="line.519"></a>
<span class="sourceLineNo">520</span>      // stay neat and tidy in usual case. Let the max size be three times the maximum handlers.<a name="line.520"></a>
<span class="sourceLineNo">521</span>      // The passed in maxHandlerCount is the user-level handlers which is what we put up most of<a name="line.521"></a>
<span class="sourceLineNo">522</span>      // but HBase has other handlers running too -- opening region handlers which want to write<a name="line.522"></a>
<span class="sourceLineNo">523</span>      // the meta table when succesful (i.e. sync), closing handlers -- etc. These are usually<a name="line.523"></a>
<span class="sourceLineNo">524</span>      // much fewer in number than the user-space handlers so Q-size should be user handlers plus<a name="line.524"></a>
<span class="sourceLineNo">525</span>      // some space for these other handlers. Lets multiply by 3 for good-measure.<a name="line.525"></a>
<span class="sourceLineNo">526</span>      this.syncFutures = new LinkedBlockingQueue&lt;&gt;(maxHandlersCount * 3);<a name="line.526"></a>
<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
<span class="sourceLineNo">528</span><a name="line.528"></a>
<span class="sourceLineNo">529</span>    void offer(final long sequence, final SyncFuture[] syncFutures, final int syncFutureCount) {<a name="line.529"></a>
<span class="sourceLineNo">530</span>      // Set sequence first because the add to the queue will wake the thread if sleeping.<a name="line.530"></a>
<span class="sourceLineNo">531</span>      this.sequence = sequence;<a name="line.531"></a>
<span class="sourceLineNo">532</span>      for (int i = 0; i &lt; syncFutureCount; ++i) {<a name="line.532"></a>
<span class="sourceLineNo">533</span>        this.syncFutures.add(syncFutures[i]);<a name="line.533"></a>
<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
<span class="sourceLineNo">535</span>    }<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
<span class="sourceLineNo">537</span>    /**<a name="line.537"></a>
<span class="sourceLineNo">538</span>     * Release the passed &lt;code&gt;syncFuture&lt;/code&gt;<a name="line.538"></a>
<span class="sourceLineNo">539</span>     * @return Returns 1.<a name="line.539"></a>
<span class="sourceLineNo">540</span>     */<a name="line.540"></a>
<span class="sourceLineNo">541</span>    private int releaseSyncFuture(final SyncFuture syncFuture, final long currentSequence,<a name="line.541"></a>
<span class="sourceLineNo">542</span>        final Throwable t) {<a name="line.542"></a>
<span class="sourceLineNo">543</span>      if (!syncFuture.done(currentSequence, t)) {<a name="line.543"></a>
<span class="sourceLineNo">544</span>        throw new IllegalStateException();<a name="line.544"></a>
<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
<span class="sourceLineNo">546</span><a name="line.546"></a>
<span class="sourceLineNo">547</span>      // This function releases one sync future only.<a name="line.547"></a>
<span class="sourceLineNo">548</span>      return 1;<a name="line.548"></a>
<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
<span class="sourceLineNo">550</span><a name="line.550"></a>
<span class="sourceLineNo">551</span>    /**<a name="line.551"></a>
<span class="sourceLineNo">552</span>     * Release all SyncFutures whose sequence is &lt;= &lt;code&gt;currentSequence&lt;/code&gt;.<a name="line.552"></a>
<span class="sourceLineNo">553</span>     * @param t May be non-null if we are processing SyncFutures because an exception was thrown.<a name="line.553"></a>
<span class="sourceLineNo">554</span>     * @return Count of SyncFutures we let go.<a name="line.554"></a>
<span class="sourceLineNo">555</span>     */<a name="line.555"></a>
<span class="sourceLineNo">556</span>    private int releaseSyncFutures(final long currentSequence, final Throwable t) {<a name="line.556"></a>
<span class="sourceLineNo">557</span>      int syncCount = 0;<a name="line.557"></a>
<span class="sourceLineNo">558</span>      for (SyncFuture syncFuture; (syncFuture = this.syncFutures.peek()) != null;) {<a name="line.558"></a>
<span class="sourceLineNo">559</span>        if (syncFuture.getTxid() &gt; currentSequence) {<a name="line.559"></a>
<span class="sourceLineNo">560</span>          break;<a name="line.560"></a>
<span class="sourceLineNo">561</span>        }<a name="line.561"></a>
<span class="sourceLineNo">562</span>        releaseSyncFuture(syncFuture, currentSequence, t);<a name="line.562"></a>
<span class="sourceLineNo">563</span>        if (!this.syncFutures.remove(syncFuture)) {<a name="line.563"></a>
<span class="sourceLineNo">564</span>          throw new IllegalStateException(syncFuture.toString());<a name="line.564"></a>
<span class="sourceLineNo">565</span>        }<a name="line.565"></a>
<span class="sourceLineNo">566</span>        syncCount++;<a name="line.566"></a>
<span class="sourceLineNo">567</span>      }<a name="line.567"></a>
<span class="sourceLineNo">568</span>      return syncCount;<a name="line.568"></a>
<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
<span class="sourceLineNo">570</span><a name="line.570"></a>
<span class="sourceLineNo">571</span>    /**<a name="line.571"></a>
<span class="sourceLineNo">572</span>     * @param sequence The sequence we ran the filesystem sync against.<a name="line.572"></a>
<span class="sourceLineNo">573</span>     * @return Current highest synced sequence.<a name="line.573"></a>
<span class="sourceLineNo">574</span>     */<a name="line.574"></a>
<span class="sourceLineNo">575</span>    private long updateHighestSyncedSequence(long sequence) {<a name="line.575"></a>
<span class="sourceLineNo">576</span>      long currentHighestSyncedSequence;<a name="line.576"></a>
<span class="sourceLineNo">577</span>      // Set the highestSyncedSequence IFF our current sequence id is the 'highest'.<a name="line.577"></a>
<span class="sourceLineNo">578</span>      do {<a name="line.578"></a>
<span class="sourceLineNo">579</span>        currentHighestSyncedSequence = highestSyncedTxid.get();<a name="line.579"></a>
<span class="sourceLineNo">580</span>        if (currentHighestSyncedSequence &gt;= sequence) {<a name="line.580"></a>
<span class="sourceLineNo">581</span>          // Set the sync number to current highwater mark; might be able to let go more<a name="line.581"></a>
<span class="sourceLineNo">582</span>          // queued sync futures<a name="line.582"></a>
<span class="sourceLineNo">583</span>          sequence = currentHighestSyncedSequence;<a name="line.583"></a>
<span class="sourceLineNo">584</span>          break;<a name="line.584"></a>
<span class="sourceLineNo">585</span>        }<a name="line.585"></a>
<span class="sourceLineNo">586</span>      } while (!highestSyncedTxid.compareAndSet(currentHighestSyncedSequence, sequence));<a name="line.586"></a>
<span class="sourceLineNo">587</span>      return sequence;<a name="line.587"></a>
<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
<span class="sourceLineNo">589</span><a name="line.589"></a>
<span class="sourceLineNo">590</span>    boolean areSyncFuturesReleased() {<a name="line.590"></a>
<span class="sourceLineNo">591</span>      // check whether there is no sync futures offered, and no in-flight sync futures that is being<a name="line.591"></a>
<span class="sourceLineNo">592</span>      // processed.<a name="line.592"></a>
<span class="sourceLineNo">593</span>      return syncFutures.size() &lt;= 0<a name="line.593"></a>
<span class="sourceLineNo">594</span>          &amp;&amp; takeSyncFuture == null;<a name="line.594"></a>
<span class="sourceLineNo">595</span>    }<a name="line.595"></a>
<span class="sourceLineNo">596</span><a name="line.596"></a>
<span class="sourceLineNo">597</span>    @Override<a name="line.597"></a>
<span class="sourceLineNo">598</span>    public void run() {<a name="line.598"></a>
<span class="sourceLineNo">599</span>      long currentSequence;<a name="line.599"></a>
<span class="sourceLineNo">600</span>      while (!isInterrupted()) {<a name="line.600"></a>
<span class="sourceLineNo">601</span>        int syncCount = 0;<a name="line.601"></a>
<span class="sourceLineNo">602</span><a name="line.602"></a>
<span class="sourceLineNo">603</span>        try {<a name="line.603"></a>
<span class="sourceLineNo">604</span>          // Make a local copy of takeSyncFuture after we get it.  We've been running into NPEs<a name="line.604"></a>
<span class="sourceLineNo">605</span>          // 2020-03-22 16:54:32,180 WARN  [sync.1] wal.FSHLog$SyncRunner(589): UNEXPECTED<a name="line.605"></a>
<span class="sourceLineNo">606</span>          // java.lang.NullPointerException<a name="line.606"></a>
<span class="sourceLineNo">607</span>          // at org.apache.hadoop.hbase.regionserver.wal.FSHLog$SyncRunner.run(FSHLog.java:582)<a name="line.607"></a>
<span class="sourceLineNo">608</span>          // at java.lang.Thread.run(Thread.java:748)<a name="line.608"></a>
<span class="sourceLineNo">609</span>          SyncFuture sf;<a name="line.609"></a>
<span class="sourceLineNo">610</span>          while (true) {<a name="line.610"></a>
<span class="sourceLineNo">611</span>            takeSyncFuture = null;<a name="line.611"></a>
<span class="sourceLineNo">612</span>            // We have to process what we 'take' from the queue<a name="line.612"></a>
<span class="sourceLineNo">613</span>            takeSyncFuture = this.syncFutures.take();<a name="line.613"></a>
<span class="sourceLineNo">614</span>            // Make local copy.<a name="line.614"></a>
<span class="sourceLineNo">615</span>            sf = takeSyncFuture;<a name="line.615"></a>
<span class="sourceLineNo">616</span>            currentSequence = this.sequence;<a name="line.616"></a>
<span class="sourceLineNo">617</span>            long syncFutureSequence = sf.getTxid();<a name="line.617"></a>
<span class="sourceLineNo">618</span>            if (syncFutureSequence &gt; currentSequence) {<a name="line.618"></a>
<span class="sourceLineNo">619</span>              throw new IllegalStateException("currentSequence=" + currentSequence<a name="line.619"></a>
<span class="sourceLineNo">620</span>                  + ", syncFutureSequence=" + syncFutureSequence);<a name="line.620"></a>
<span class="sourceLineNo">621</span>            }<a name="line.621"></a>
<span class="sourceLineNo">622</span>            // See if we can process any syncfutures BEFORE we go sync.<a name="line.622"></a>
<span class="sourceLineNo">623</span>            long currentHighestSyncedSequence = highestSyncedTxid.get();<a name="line.623"></a>
<span class="sourceLineNo">624</span>            if (currentSequence &lt; currentHighestSyncedSequence) {<a name="line.624"></a>
<span class="sourceLineNo">625</span>              syncCount += releaseSyncFuture(sf, currentHighestSyncedSequence, null);<a name="line.625"></a>
<span class="sourceLineNo">626</span>              // Done with the 'take'. Go around again and do a new 'take'.<a name="line.626"></a>
<span class="sourceLineNo">627</span>              continue;<a name="line.627"></a>
<span class="sourceLineNo">628</span>            }<a name="line.628"></a>
<span class="sourceLineNo">629</span>            break;<a name="line.629"></a>
<span class="sourceLineNo">630</span>          }<a name="line.630"></a>
<span class="sourceLineNo">631</span>          // I got something. Lets run. Save off current sequence number in case it changes<a name="line.631"></a>
<span class="sourceLineNo">632</span>          // while we run.<a name="line.632"></a>
<span class="sourceLineNo">633</span>          //TODO handle htrace API change, see HBASE-18895<a name="line.633"></a>
<span class="sourceLineNo">634</span>          //TraceScope scope = Trace.continueSpan(takeSyncFuture.getSpan());<a name="line.634"></a>
<span class="sourceLineNo">635</span>          long start = System.nanoTime();<a name="line.635"></a>
<span class="sourceLineNo">636</span>          Throwable lastException = null;<a name="line.636"></a>
<span class="sourceLineNo">637</span>          try {<a name="line.637"></a>
<span class="sourceLineNo">638</span>            TraceUtil.addTimelineAnnotation("syncing writer");<a name="line.638"></a>
<span class="sourceLineNo">639</span>            long unSyncedFlushSeq = highestUnsyncedTxid;<a name="line.639"></a>
<span class="sourceLineNo">640</span>            writer.sync(sf.isForceSync());<a name="line.640"></a>
<span class="sourceLineNo">641</span>            TraceUtil.addTimelineAnnotation("writer synced");<a name="line.641"></a>
<span class="sourceLineNo">642</span>            if (unSyncedFlushSeq &gt; currentSequence) {<a name="line.642"></a>
<span class="sourceLineNo">643</span>              currentSequence = unSyncedFlushSeq;<a name="line.643"></a>
<span class="sourceLineNo">644</span>            }<a name="line.644"></a>
<span class="sourceLineNo">645</span>            currentSequence = updateHighestSyncedSequence(currentSequence);<a name="line.645"></a>
<span class="sourceLineNo">646</span>          } catch (IOException e) {<a name="line.646"></a>
<span class="sourceLineNo">647</span>            LOG.error("Error syncing, request close of WAL", e);<a name="line.647"></a>
<span class="sourceLineNo">648</span>            lastException = e;<a name="line.648"></a>
<span class="sourceLineNo">649</span>          } catch (Exception e) {<a name="line.649"></a>
<span class="sourceLineNo">650</span>            LOG.warn("UNEXPECTED", e);<a name="line.650"></a>
<span class="sourceLineNo">651</span>            lastException = e;<a name="line.651"></a>
<span class="sourceLineNo">652</span>          } finally {<a name="line.652"></a>
<span class="sourceLineNo">653</span>            // reattach the span to the future before releasing.<a name="line.653"></a>
<span class="sourceLineNo">654</span>            //TODO handle htrace API change, see HBASE-18895<a name="line.654"></a>
<span class="sourceLineNo">655</span>            // takeSyncFuture.setSpan(scope.getSpan());<a name="line.655"></a>
<span class="sourceLineNo">656</span>            // First release what we 'took' from the queue.<a name="line.656"></a>
<span class="sourceLineNo">657</span>            syncCount += releaseSyncFuture(takeSyncFuture, currentSequence, lastException);<a name="line.657"></a>
<span class="sourceLineNo">658</span>            // Can we release other syncs?<a name="line.658"></a>
<span class="sourceLineNo">659</span>            syncCount += releaseSyncFutures(currentSequence, lastException);<a name="line.659"></a>
<span class="sourceLineNo">660</span>            if (lastException != null) {<a name="line.660"></a>
<span class="sourceLineNo">661</span>              requestLogRoll(ERROR);<a name="line.661"></a>
<span class="sourceLineNo">662</span>            } else {<a name="line.662"></a>
<span class="sourceLineNo">663</span>              checkLogRoll();<a name="line.663"></a>
<span class="sourceLineNo">664</span>            }<a name="line.664"></a>
<span class="sourceLineNo">665</span>          }<a name="line.665"></a>
<span class="sourceLineNo">666</span>          postSync(System.nanoTime() - start, syncCount);<a name="line.666"></a>
<span class="sourceLineNo">667</span>        } catch (InterruptedException e) {<a name="line.667"></a>
<span class="sourceLineNo">668</span>          // Presume legit interrupt.<a name="line.668"></a>
<span class="sourceLineNo">669</span>          Thread.currentThread().interrupt();<a name="line.669"></a>
<span class="sourceLineNo">670</span>        } catch (Throwable t) {<a name="line.670"></a>
<span class="sourceLineNo">671</span>          LOG.warn("UNEXPECTED, continuing", t);<a name="line.671"></a>
<span class="sourceLineNo">672</span>        }<a name="line.672"></a>
<span class="sourceLineNo">673</span>      }<a name="line.673"></a>
<span class="sourceLineNo">674</span>    }<a name="line.674"></a>
<span class="sourceLineNo">675</span>  }<a name="line.675"></a>
<span class="sourceLineNo">676</span><a name="line.676"></a>
<span class="sourceLineNo">677</span>  /**<a name="line.677"></a>
<span class="sourceLineNo">678</span>   * Schedule a log roll if needed.<a name="line.678"></a>
<span class="sourceLineNo">679</span>   */<a name="line.679"></a>
<span class="sourceLineNo">680</span>  private boolean checkLogRoll() {<a name="line.680"></a>
<span class="sourceLineNo">681</span>    // If we have already requested a roll, do nothing<a name="line.681"></a>
<span class="sourceLineNo">682</span>    if (isLogRollRequested()) {<a name="line.682"></a>
<span class="sourceLineNo">683</span>      return false;<a name="line.683"></a>
<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
<span class="sourceLineNo">685</span>    // Will return immediately if we are in the middle of a WAL log roll currently.<a name="line.685"></a>
<span class="sourceLineNo">686</span>    if (!rollWriterLock.tryLock()) {<a name="line.686"></a>
<span class="sourceLineNo">687</span>      return false;<a name="line.687"></a>
<span class="sourceLineNo">688</span>    }<a name="line.688"></a>
<span class="sourceLineNo">689</span>    try {<a name="line.689"></a>
<span class="sourceLineNo">690</span>      if (doCheckLogLowReplication()) {<a name="line.690"></a>
<span class="sourceLineNo">691</span>        LOG.warn("Requesting log roll because of low replication, current pipeline: " +<a name="line.691"></a>
<span class="sourceLineNo">692</span>          Arrays.toString(getPipeline()));<a name="line.692"></a>
<span class="sourceLineNo">693</span>        requestLogRoll(LOW_REPLICATION);<a name="line.693"></a>
<span class="sourceLineNo">694</span>        return true;<a name="line.694"></a>
<span class="sourceLineNo">695</span>      } else if (writer != null &amp;&amp; writer.getLength() &gt; logrollsize) {<a name="line.695"></a>
<span class="sourceLineNo">696</span>        if (LOG.isDebugEnabled()) {<a name="line.696"></a>
<span class="sourceLineNo">697</span>          LOG.debug("Requesting log roll because of file size threshold; length=" +<a name="line.697"></a>
<span class="sourceLineNo">698</span>            writer.getLength() + ", logrollsize=" + logrollsize);<a name="line.698"></a>
<span class="sourceLineNo">699</span>        }<a name="line.699"></a>
<span class="sourceLineNo">700</span>        requestLogRoll(SIZE);<a name="line.700"></a>
<span class="sourceLineNo">701</span>        return true;<a name="line.701"></a>
<span class="sourceLineNo">702</span>      } else if (doCheckSlowSync()) {<a name="line.702"></a>
<span class="sourceLineNo">703</span>        // We log this already in checkSlowSync<a name="line.703"></a>
<span class="sourceLineNo">704</span>        requestLogRoll(SLOW_SYNC);<a name="line.704"></a>
<span class="sourceLineNo">705</span>        return true;<a name="line.705"></a>
<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
<span class="sourceLineNo">707</span>    } finally {<a name="line.707"></a>
<span class="sourceLineNo">708</span>      rollWriterLock.unlock();<a name="line.708"></a>
<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
<span class="sourceLineNo">710</span>    return false;<a name="line.710"></a>
<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
<span class="sourceLineNo">712</span><a name="line.712"></a>
<span class="sourceLineNo">713</span>  /**<a name="line.713"></a>
<span class="sourceLineNo">714</span>   * @return true if number of replicas for the WAL is lower than threshold<a name="line.714"></a>
<span class="sourceLineNo">715</span>   */<a name="line.715"></a>
<span class="sourceLineNo">716</span>  @Override<a name="line.716"></a>
<span class="sourceLineNo">717</span>  protected boolean doCheckLogLowReplication() {<a name="line.717"></a>
<span class="sourceLineNo">718</span>    boolean logRollNeeded = false;<a name="line.718"></a>
<span class="sourceLineNo">719</span>    // if the number of replicas in HDFS has fallen below the configured<a name="line.719"></a>
<span class="sourceLineNo">720</span>    // value, then roll logs.<a name="line.720"></a>
<span class="sourceLineNo">721</span>    try {<a name="line.721"></a>
<span class="sourceLineNo">722</span>      int numCurrentReplicas = getLogReplication();<a name="line.722"></a>
<span class="sourceLineNo">723</span>      if (numCurrentReplicas != 0 &amp;&amp; numCurrentReplicas &lt; this.minTolerableReplication) {<a name="line.723"></a>
<span class="sourceLineNo">724</span>        if (this.lowReplicationRollEnabled) {<a name="line.724"></a>
<span class="sourceLineNo">725</span>          if (this.consecutiveLogRolls.get() &lt; this.lowReplicationRollLimit) {<a name="line.725"></a>
<span class="sourceLineNo">726</span>            LOG.warn("HDFS pipeline error detected. " + "Found " + numCurrentReplicas<a name="line.726"></a>
<span class="sourceLineNo">727</span>                + " replicas but expecting no less than " + this.minTolerableReplication<a name="line.727"></a>
<span class="sourceLineNo">728</span>                + " replicas. " + " Requesting close of WAL. current pipeline: "<a name="line.728"></a>
<span class="sourceLineNo">729</span>                + Arrays.toString(getPipeline()));<a name="line.729"></a>
<span class="sourceLineNo">730</span>            logRollNeeded = true;<a name="line.730"></a>
<span class="sourceLineNo">731</span>            // If rollWriter is requested, increase consecutiveLogRolls. Once it<a name="line.731"></a>
<span class="sourceLineNo">732</span>            // is larger than lowReplicationRollLimit, disable the<a name="line.732"></a>
<span class="sourceLineNo">733</span>            // LowReplication-Roller<a name="line.733"></a>
<span class="sourceLineNo">734</span>            this.consecutiveLogRolls.getAndIncrement();<a name="line.734"></a>
<span class="sourceLineNo">735</span>          } else {<a name="line.735"></a>
<span class="sourceLineNo">736</span>            LOG.warn("Too many consecutive RollWriter requests, it's a sign of "<a name="line.736"></a>
<span class="sourceLineNo">737</span>                + "the total number of live datanodes is lower than the tolerable replicas.");<a name="line.737"></a>
<span class="sourceLineNo">738</span>            this.consecutiveLogRolls.set(0);<a name="line.738"></a>
<span class="sourceLineNo">739</span>            this.lowReplicationRollEnabled = false;<a name="line.739"></a>
<span class="sourceLineNo">740</span>          }<a name="line.740"></a>
<span class="sourceLineNo">741</span>        }<a name="line.741"></a>
<span class="sourceLineNo">742</span>      } else if (numCurrentReplicas &gt;= this.minTolerableReplication) {<a name="line.742"></a>
<span class="sourceLineNo">743</span>        if (!this.lowReplicationRollEnabled) {<a name="line.743"></a>
<span class="sourceLineNo">744</span>          // The new writer's log replicas is always the default value.<a name="line.744"></a>
<span class="sourceLineNo">745</span>          // So we should not enable LowReplication-Roller. If numEntries<a name="line.745"></a>
<span class="sourceLineNo">746</span>          // is lower than or equals 1, we consider it as a new writer.<a name="line.746"></a>
<span class="sourceLineNo">747</span>          if (this.numEntries.get() &lt;= 1) {<a name="line.747"></a>
<span class="sourceLineNo">748</span>            return logRollNeeded;<a name="line.748"></a>
<span class="sourceLineNo">749</span>          }<a name="line.749"></a>
<span class="sourceLineNo">750</span>          // Once the live datanode number and the replicas return to normal,<a name="line.750"></a>
<span class="sourceLineNo">751</span>          // enable the LowReplication-Roller.<a name="line.751"></a>
<span class="sourceLineNo">752</span>          this.lowReplicationRollEnabled = true;<a name="line.752"></a>
<span class="sourceLineNo">753</span>          LOG.info("LowReplication-Roller was enabled.");<a name="line.753"></a>
<span class="sourceLineNo">754</span>        }<a name="line.754"></a>
<span class="sourceLineNo">755</span>      }<a name="line.755"></a>
<span class="sourceLineNo">756</span>    } catch (Exception e) {<a name="line.756"></a>
<span class="sourceLineNo">757</span>      LOG.warn("DFSOutputStream.getNumCurrentReplicas failed because of " + e + ", continuing...");<a name="line.757"></a>
<span class="sourceLineNo">758</span>    }<a name="line.758"></a>
<span class="sourceLineNo">759</span>    return logRollNeeded;<a name="line.759"></a>
<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
<span class="sourceLineNo">761</span><a name="line.761"></a>
<span class="sourceLineNo">762</span>  @VisibleForTesting<a name="line.762"></a>
<span class="sourceLineNo">763</span>  protected long getSequenceOnRingBuffer() {<a name="line.763"></a>
<span class="sourceLineNo">764</span>    return this.disruptor.getRingBuffer().next();<a name="line.764"></a>
<span class="sourceLineNo">765</span>  }<a name="line.765"></a>
<span class="sourceLineNo">766</span><a name="line.766"></a>
<span class="sourceLineNo">767</span>  private SyncFuture publishSyncOnRingBuffer(boolean forceSync) {<a name="line.767"></a>
<span class="sourceLineNo">768</span>    long sequence = getSequenceOnRingBuffer();<a name="line.768"></a>
<span class="sourceLineNo">769</span>    return publishSyncOnRingBuffer(sequence, forceSync);<a name="line.769"></a>
<span class="sourceLineNo">770</span>  }<a name="line.770"></a>
<span class="sourceLineNo">771</span><a name="line.771"></a>
<span class="sourceLineNo">772</span>  @VisibleForTesting<a name="line.772"></a>
<span class="sourceLineNo">773</span>  protected SyncFuture publishSyncOnRingBuffer(long sequence, boolean forceSync) {<a name="line.773"></a>
<span class="sourceLineNo">774</span>    // here we use ring buffer sequence as transaction id<a name="line.774"></a>
<span class="sourceLineNo">775</span>    SyncFuture syncFuture = getSyncFuture(sequence, forceSync);<a name="line.775"></a>
<span class="sourceLineNo">776</span>    try {<a name="line.776"></a>
<span class="sourceLineNo">777</span>      RingBufferTruck truck = this.disruptor.getRingBuffer().get(sequence);<a name="line.777"></a>
<span class="sourceLineNo">778</span>      truck.load(syncFuture);<a name="line.778"></a>
<span class="sourceLineNo">779</span>    } finally {<a name="line.779"></a>
<span class="sourceLineNo">780</span>      this.disruptor.getRingBuffer().publish(sequence);<a name="line.780"></a>
<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
<span class="sourceLineNo">782</span>    return syncFuture;<a name="line.782"></a>
<span class="sourceLineNo">783</span>  }<a name="line.783"></a>
<span class="sourceLineNo">784</span><a name="line.784"></a>
<span class="sourceLineNo">785</span>  // Sync all known transactions<a name="line.785"></a>
<span class="sourceLineNo">786</span>  private void publishSyncThenBlockOnCompletion(TraceScope scope, boolean forceSync) throws IOException {<a name="line.786"></a>
<span class="sourceLineNo">787</span>    SyncFuture syncFuture = publishSyncOnRingBuffer(forceSync);<a name="line.787"></a>
<span class="sourceLineNo">788</span>    blockOnSync(syncFuture);<a name="line.788"></a>
<span class="sourceLineNo">789</span>  }<a name="line.789"></a>
<span class="sourceLineNo">790</span><a name="line.790"></a>
<span class="sourceLineNo">791</span>  /**<a name="line.791"></a>
<span class="sourceLineNo">792</span>   * {@inheritDoc}<a name="line.792"></a>
<span class="sourceLineNo">793</span>   * &lt;p&gt;<a name="line.793"></a>
<span class="sourceLineNo">794</span>   * If the pipeline isn't started yet or is empty, you will get the default replication factor.<a name="line.794"></a>
<span class="sourceLineNo">795</span>   * Therefore, if this function returns 0, it means you are not properly running with the HDFS-826<a name="line.795"></a>
<span class="sourceLineNo">796</span>   * patch.<a name="line.796"></a>
<span class="sourceLineNo">797</span>   */<a name="line.797"></a>
<span class="sourceLineNo">798</span>  @Override<a name="line.798"></a>
<span class="sourceLineNo">799</span>  @VisibleForTesting<a name="line.799"></a>
<span class="sourceLineNo">800</span>  int getLogReplication() {<a name="line.800"></a>
<span class="sourceLineNo">801</span>    try {<a name="line.801"></a>
<span class="sourceLineNo">802</span>      // in standalone mode, it will return 0<a name="line.802"></a>
<span class="sourceLineNo">803</span>      if (this.hdfs_out instanceof HdfsDataOutputStream) {<a name="line.803"></a>
<span class="sourceLineNo">804</span>        return ((HdfsDataOutputStream) this.hdfs_out).getCurrentBlockReplication();<a name="line.804"></a>
<span class="sourceLineNo">805</span>      }<a name="line.805"></a>
<span class="sourceLineNo">806</span>    } catch (IOException e) {<a name="line.806"></a>
<span class="sourceLineNo">807</span>      LOG.info("", e);<a name="line.807"></a>
<span class="sourceLineNo">808</span>    }<a name="line.808"></a>
<span class="sourceLineNo">809</span>    return 0;<a name="line.809"></a>
<span class="sourceLineNo">810</span>  }<a name="line.810"></a>
<span class="sourceLineNo">811</span><a name="line.811"></a>
<span class="sourceLineNo">812</span>  @Override<a name="line.812"></a>
<span class="sourceLineNo">813</span>  public void sync() throws IOException {<a name="line.813"></a>
<span class="sourceLineNo">814</span>    sync(useHsync);<a name="line.814"></a>
<span class="sourceLineNo">815</span>  }<a name="line.815"></a>
<span class="sourceLineNo">816</span><a name="line.816"></a>
<span class="sourceLineNo">817</span>  @Override<a name="line.817"></a>
<span class="sourceLineNo">818</span>  public void sync(boolean forceSync) throws IOException {<a name="line.818"></a>
<span class="sourceLineNo">819</span>    try (TraceScope scope = TraceUtil.createTrace("FSHLog.sync")) {<a name="line.819"></a>
<span class="sourceLineNo">820</span>      publishSyncThenBlockOnCompletion(scope, forceSync);<a name="line.820"></a>
<span class="sourceLineNo">821</span>    }<a name="line.821"></a>
<span class="sourceLineNo">822</span>  }<a name="line.822"></a>
<span class="sourceLineNo">823</span><a name="line.823"></a>
<span class="sourceLineNo">824</span>  @Override<a name="line.824"></a>
<span class="sourceLineNo">825</span>  public void sync(long txid) throws IOException {<a name="line.825"></a>
<span class="sourceLineNo">826</span>    sync(txid, useHsync);<a name="line.826"></a>
<span class="sourceLineNo">827</span>  }<a name="line.827"></a>
<span class="sourceLineNo">828</span><a name="line.828"></a>
<span class="sourceLineNo">829</span>  @Override<a name="line.829"></a>
<span class="sourceLineNo">830</span>  public void sync(long txid, boolean forceSync) throws IOException {<a name="line.830"></a>
<span class="sourceLineNo">831</span>    if (this.highestSyncedTxid.get() &gt;= txid) {<a name="line.831"></a>
<span class="sourceLineNo">832</span>      // Already sync'd.<a name="line.832"></a>
<span class="sourceLineNo">833</span>      return;<a name="line.833"></a>
<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
<span class="sourceLineNo">835</span>    try (TraceScope scope = TraceUtil.createTrace("FSHLog.sync")) {<a name="line.835"></a>
<span class="sourceLineNo">836</span>      publishSyncThenBlockOnCompletion(scope, forceSync);<a name="line.836"></a>
<span class="sourceLineNo">837</span>    }<a name="line.837"></a>
<span class="sourceLineNo">838</span>  }<a name="line.838"></a>
<span class="sourceLineNo">839</span><a name="line.839"></a>
<span class="sourceLineNo">840</span>  @VisibleForTesting<a name="line.840"></a>
<span class="sourceLineNo">841</span>  boolean isLowReplicationRollEnabled() {<a name="line.841"></a>
<span class="sourceLineNo">842</span>    return lowReplicationRollEnabled;<a name="line.842"></a>
<span class="sourceLineNo">843</span>  }<a name="line.843"></a>
<span class="sourceLineNo">844</span><a name="line.844"></a>
<span class="sourceLineNo">845</span>  public static final long FIXED_OVERHEAD = ClassSize<a name="line.845"></a>
<span class="sourceLineNo">846</span>      .align(ClassSize.OBJECT + (5 * ClassSize.REFERENCE) + (2 * ClassSize.ATOMIC_INTEGER)<a name="line.846"></a>
<span class="sourceLineNo">847</span>          + (3 * Bytes.SIZEOF_INT) + (4 * Bytes.SIZEOF_LONG));<a name="line.847"></a>
<span class="sourceLineNo">848</span><a name="line.848"></a>
<span class="sourceLineNo">849</span>  /**<a name="line.849"></a>
<span class="sourceLineNo">850</span>   * This class is used coordinating two threads holding one thread at a 'safe point' while the<a name="line.850"></a>
<span class="sourceLineNo">851</span>   * orchestrating thread does some work that requires the first thread paused: e.g. holding the WAL<a name="line.851"></a>
<span class="sourceLineNo">852</span>   * writer while its WAL is swapped out from under it by another thread.<a name="line.852"></a>
<span class="sourceLineNo">853</span>   * &lt;p&gt;<a name="line.853"></a>
<span class="sourceLineNo">854</span>   * Thread A signals Thread B to hold when it gets to a 'safe point'. Thread A wait until Thread B<a name="line.854"></a>
<span class="sourceLineNo">855</span>   * gets there. When the 'safe point' has been attained, Thread B signals Thread A. Thread B then<a name="line.855"></a>
<span class="sourceLineNo">856</span>   * holds at the 'safe point'. Thread A on notification that Thread B is paused, goes ahead and<a name="line.856"></a>
<span class="sourceLineNo">857</span>   * does the work it needs to do while Thread B is holding. When Thread A is done, it flags B and<a name="line.857"></a>
<span class="sourceLineNo">858</span>   * then Thread A and Thread B continue along on their merry way. Pause and signalling 'zigzags'<a name="line.858"></a>
<span class="sourceLineNo">859</span>   * between the two participating threads. We use two latches -- one the inverse of the other --<a name="line.859"></a>
<span class="sourceLineNo">860</span>   * pausing and signaling when states are achieved.<a name="line.860"></a>
<span class="sourceLineNo">861</span>   * &lt;p&gt;<a name="line.861"></a>
<span class="sourceLineNo">862</span>   * To start up the drama, Thread A creates an instance of this class each time it would do this<a name="line.862"></a>
<span class="sourceLineNo">863</span>   * zigzag dance and passes it to Thread B (these classes use Latches so it is one shot only).<a name="line.863"></a>
<span class="sourceLineNo">864</span>   * Thread B notices the new instance (via reading a volatile reference or how ever) and it starts<a name="line.864"></a>
<span class="sourceLineNo">865</span>   * to work toward the 'safe point'. Thread A calls {@link #waitSafePoint(SyncFuture)} when it cannot proceed<a name="line.865"></a>
<span class="sourceLineNo">866</span>   * until the Thread B 'safe point' is attained. Thread A will be held inside in<a name="line.866"></a>
<span class="sourceLineNo">867</span>   * {@link #waitSafePoint(SyncFuture)} until Thread B reaches the 'safe point'. Once there, Thread B frees<a name="line.867"></a>
<span class="sourceLineNo">868</span>   * Thread A by calling {@link #safePointAttained()}. Thread A now knows Thread B is at the 'safe<a name="line.868"></a>
<span class="sourceLineNo">869</span>   * point' and that it is holding there (When Thread B calls {@link #safePointAttained()} it blocks<a name="line.869"></a>
<span class="sourceLineNo">870</span>   * here until Thread A calls {@link #releaseSafePoint()}). Thread A proceeds to do what it needs<a name="line.870"></a>
<span class="sourceLineNo">871</span>   * to do while Thread B is paused. When finished, it lets Thread B lose by calling<a name="line.871"></a>
<span class="sourceLineNo">872</span>   * {@link #releaseSafePoint()} and away go both Threads again.<a name="line.872"></a>
<span class="sourceLineNo">873</span>   */<a name="line.873"></a>
<span class="sourceLineNo">874</span>  static class SafePointZigZagLatch {<a name="line.874"></a>
<span class="sourceLineNo">875</span>    /**<a name="line.875"></a>
<span class="sourceLineNo">876</span>     * Count down this latch when safe point attained.<a name="line.876"></a>
<span class="sourceLineNo">877</span>     */<a name="line.877"></a>
<span class="sourceLineNo">878</span>    private volatile CountDownLatch safePointAttainedLatch = new CountDownLatch(1);<a name="line.878"></a>
<span class="sourceLineNo">879</span>    /**<a name="line.879"></a>
<span class="sourceLineNo">880</span>     * Latch to wait on. Will be released when we can proceed.<a name="line.880"></a>
<span class="sourceLineNo">881</span>     */<a name="line.881"></a>
<span class="sourceLineNo">882</span>    private volatile CountDownLatch safePointReleasedLatch = new CountDownLatch(1);<a name="line.882"></a>
<span class="sourceLineNo">883</span><a name="line.883"></a>
<span class="sourceLineNo">884</span>    private void checkIfSyncFailed(SyncFuture syncFuture) throws FailedSyncBeforeLogCloseException {<a name="line.884"></a>
<span class="sourceLineNo">885</span>      if (syncFuture.isThrowable()) {<a name="line.885"></a>
<span class="sourceLineNo">886</span>        throw new FailedSyncBeforeLogCloseException(syncFuture.getThrowable());<a name="line.886"></a>
<span class="sourceLineNo">887</span>      }<a name="line.887"></a>
<span class="sourceLineNo">888</span>    }<a name="line.888"></a>
<span class="sourceLineNo">889</span><a name="line.889"></a>
<span class="sourceLineNo">890</span>    /**<a name="line.890"></a>
<span class="sourceLineNo">891</span>     * For Thread A to call when it is ready to wait on the 'safe point' to be attained. Thread A<a name="line.891"></a>
<span class="sourceLineNo">892</span>     * will be held in here until Thread B calls {@link #safePointAttained()}<a name="line.892"></a>
<span class="sourceLineNo">893</span>     * @param syncFuture We need this as barometer on outstanding syncs. If it comes home with an<a name="line.893"></a>
<span class="sourceLineNo">894</span>     *          exception, then something is up w/ our syncing.<a name="line.894"></a>
<span class="sourceLineNo">895</span>     * @return The passed &lt;code&gt;syncFuture&lt;/code&gt;<a name="line.895"></a>
<span class="sourceLineNo">896</span>     */<a name="line.896"></a>
<span class="sourceLineNo">897</span>    SyncFuture waitSafePoint(SyncFuture syncFuture) throws InterruptedException,<a name="line.897"></a>
<span class="sourceLineNo">898</span>        FailedSyncBeforeLogCloseException {<a name="line.898"></a>
<span class="sourceLineNo">899</span>      while (!this.safePointAttainedLatch.await(1, TimeUnit.MILLISECONDS)) {<a name="line.899"></a>
<span class="sourceLineNo">900</span>        checkIfSyncFailed(syncFuture);<a name="line.900"></a>
<span class="sourceLineNo">901</span>      }<a name="line.901"></a>
<span class="sourceLineNo">902</span>      checkIfSyncFailed(syncFuture);<a name="line.902"></a>
<span class="sourceLineNo">903</span>      return syncFuture;<a name="line.903"></a>
<span class="sourceLineNo">904</span>    }<a name="line.904"></a>
<span class="sourceLineNo">905</span><a name="line.905"></a>
<span class="sourceLineNo">906</span>    /**<a name="line.906"></a>
<span class="sourceLineNo">907</span>     * Called by Thread B when it attains the 'safe point'. In this method, Thread B signals Thread<a name="line.907"></a>
<span class="sourceLineNo">908</span>     * A it can proceed. Thread B will be held in here until {@link #releaseSafePoint()} is called<a name="line.908"></a>
<span class="sourceLineNo">909</span>     * by Thread A.<a name="line.909"></a>
<span class="sourceLineNo">910</span>     */<a name="line.910"></a>
<span class="sourceLineNo">911</span>    void safePointAttained() throws InterruptedException {<a name="line.911"></a>
<span class="sourceLineNo">912</span>      this.safePointAttainedLatch.countDown();<a name="line.912"></a>
<span class="sourceLineNo">913</span>      this.safePointReleasedLatch.await();<a name="line.913"></a>
<span class="sourceLineNo">914</span>    }<a name="line.914"></a>
<span class="sourceLineNo">915</span><a name="line.915"></a>
<span class="sourceLineNo">916</span>    /**<a name="line.916"></a>
<span class="sourceLineNo">917</span>     * Called by Thread A when it is done with the work it needs to do while Thread B is halted.<a name="line.917"></a>
<span class="sourceLineNo">918</span>     * This will release the Thread B held in a call to {@link #safePointAttained()}<a name="line.918"></a>
<span class="sourceLineNo">919</span>     */<a name="line.919"></a>
<span class="sourceLineNo">920</span>    void releaseSafePoint() {<a name="line.920"></a>
<span class="sourceLineNo">921</span>      this.safePointReleasedLatch.countDown();<a name="line.921"></a>
<span class="sourceLineNo">922</span>    }<a name="line.922"></a>
<span class="sourceLineNo">923</span><a name="line.923"></a>
<span class="sourceLineNo">924</span>    /**<a name="line.924"></a>
<span class="sourceLineNo">925</span>     * @return True is this is a 'cocked', fresh instance, and not one that has already fired.<a name="line.925"></a>
<span class="sourceLineNo">926</span>     */<a name="line.926"></a>
<span class="sourceLineNo">927</span>    boolean isCocked() {<a name="line.927"></a>
<span class="sourceLineNo">928</span>      return this.safePointAttainedLatch.getCount() &gt; 0<a name="line.928"></a>
<span class="sourceLineNo">929</span>          &amp;&amp; this.safePointReleasedLatch.getCount() &gt; 0;<a name="line.929"></a>
<span class="sourceLineNo">930</span>    }<a name="line.930"></a>
<span class="sourceLineNo">931</span>  }<a name="line.931"></a>
<span class="sourceLineNo">932</span><a name="line.932"></a>
<span class="sourceLineNo">933</span>  /**<a name="line.933"></a>
<span class="sourceLineNo">934</span>   * Handler that is run by the disruptor ringbuffer consumer. Consumer is a SINGLE<a name="line.934"></a>
<span class="sourceLineNo">935</span>   * 'writer/appender' thread. Appends edits and starts up sync runs. Tries its best to batch up<a name="line.935"></a>
<span class="sourceLineNo">936</span>   * syncs. There is no discernible benefit batching appends so we just append as they come in<a name="line.936"></a>
<span class="sourceLineNo">937</span>   * because it simplifies the below implementation. See metrics for batching effectiveness (In<a name="line.937"></a>
<span class="sourceLineNo">938</span>   * measurement, at 100 concurrent handlers writing 1k, we are batching &gt; 10 appends and 10 handler<a name="line.938"></a>
<span class="sourceLineNo">939</span>   * sync invocations for every actual dfsclient sync call; at 10 concurrent handlers, YMMV).<a name="line.939"></a>
<span class="sourceLineNo">940</span>   * &lt;p&gt;<a name="line.940"></a>
<span class="sourceLineNo">941</span>   * Herein, we have an array into which we store the sync futures as they come in. When we have a<a name="line.941"></a>
<span class="sourceLineNo">942</span>   * 'batch', we'll then pass what we have collected to a SyncRunner thread to do the filesystem<a name="line.942"></a>
<span class="sourceLineNo">943</span>   * sync. When it completes, it will then call {@link SyncFuture#done(long, Throwable)} on each of<a name="line.943"></a>
<span class="sourceLineNo">944</span>   * SyncFutures in the batch to release blocked Handler threads.<a name="line.944"></a>
<span class="sourceLineNo">945</span>   * &lt;p&gt;<a name="line.945"></a>
<span class="sourceLineNo">946</span>   * I've tried various effects to try and make latencies low while keeping throughput high. I've<a name="line.946"></a>
<span class="sourceLineNo">947</span>   * tried keeping a single Queue of SyncFutures in this class appending to its tail as the syncs<a name="line.947"></a>
<span class="sourceLineNo">948</span>   * coming and having sync runner threads poll off the head to 'finish' completed SyncFutures. I've<a name="line.948"></a>
<span class="sourceLineNo">949</span>   * tried linkedlist, and various from concurrent utils whether LinkedBlockingQueue or<a name="line.949"></a>
<span class="sourceLineNo">950</span>   * ArrayBlockingQueue, etc. The more points of synchronization, the more 'work' (according to<a name="line.950"></a>
<span class="sourceLineNo">951</span>   * 'perf stats') that has to be done; small increases in stall percentages seem to have a big<a name="line.951"></a>
<span class="sourceLineNo">952</span>   * impact on throughput/latencies. The below model where we have an array into which we stash the<a name="line.952"></a>
<span class="sourceLineNo">953</span>   * syncs and then hand them off to the sync thread seemed like a decent compromise. See HBASE-8755<a name="line.953"></a>
<span class="sourceLineNo">954</span>   * for more detail.<a name="line.954"></a>
<span class="sourceLineNo">955</span>   */<a name="line.955"></a>
<span class="sourceLineNo">956</span>  class RingBufferEventHandler implements EventHandler&lt;RingBufferTruck&gt;, LifecycleAware {<a name="line.956"></a>
<span class="sourceLineNo">957</span>    private final SyncRunner[] syncRunners;<a name="line.957"></a>
<span class="sourceLineNo">958</span>    private final SyncFuture[] syncFutures;<a name="line.958"></a>
<span class="sourceLineNo">959</span>    // Had 'interesting' issues when this was non-volatile. On occasion, we'd not pass all<a name="line.959"></a>
<span class="sourceLineNo">960</span>    // syncFutures to the next sync'ing thread.<a name="line.960"></a>
<span class="sourceLineNo">961</span>    private AtomicInteger syncFuturesCount = new AtomicInteger();<a name="line.961"></a>
<span class="sourceLineNo">962</span>    private volatile SafePointZigZagLatch zigzagLatch;<a name="line.962"></a>
<span class="sourceLineNo">963</span>    /**<a name="line.963"></a>
<span class="sourceLineNo">964</span>     * Set if we get an exception appending or syncing so that all subsequence appends and syncs on<a name="line.964"></a>
<span class="sourceLineNo">965</span>     * this WAL fail until WAL is replaced.<a name="line.965"></a>
<span class="sourceLineNo">966</span>     */<a name="line.966"></a>
<span class="sourceLineNo">967</span>    private Exception exception = null;<a name="line.967"></a>
<span class="sourceLineNo">968</span>    /**<a name="line.968"></a>
<span class="sourceLineNo">969</span>     * Object to block on while waiting on safe point.<a name="line.969"></a>
<span class="sourceLineNo">970</span>     */<a name="line.970"></a>
<span class="sourceLineNo">971</span>    private final Object safePointWaiter = new Object();<a name="line.971"></a>
<span class="sourceLineNo">972</span>    private volatile boolean shutdown = false;<a name="line.972"></a>
<span class="sourceLineNo">973</span><a name="line.973"></a>
<span class="sourceLineNo">974</span>    /**<a name="line.974"></a>
<span class="sourceLineNo">975</span>     * Which syncrunner to use next.<a name="line.975"></a>
<span class="sourceLineNo">976</span>     */<a name="line.976"></a>
<span class="sourceLineNo">977</span>    private int syncRunnerIndex;<a name="line.977"></a>
<span class="sourceLineNo">978</span><a name="line.978"></a>
<span class="sourceLineNo">979</span>    RingBufferEventHandler(final int syncRunnerCount, final int maxBatchCount) {<a name="line.979"></a>
<span class="sourceLineNo">980</span>      this.syncFutures = new SyncFuture[maxBatchCount];<a name="line.980"></a>
<span class="sourceLineNo">981</span>      this.syncRunners = new SyncRunner[syncRunnerCount];<a name="line.981"></a>
<span class="sourceLineNo">982</span>      for (int i = 0; i &lt; syncRunnerCount; i++) {<a name="line.982"></a>
<span class="sourceLineNo">983</span>        this.syncRunners[i] = new SyncRunner("sync." + i, maxBatchCount);<a name="line.983"></a>
<span class="sourceLineNo">984</span>      }<a name="line.984"></a>
<span class="sourceLineNo">985</span>    }<a name="line.985"></a>
<span class="sourceLineNo">986</span><a name="line.986"></a>
<span class="sourceLineNo">987</span>    private void cleanupOutstandingSyncsOnException(final long sequence, final Exception e) {<a name="line.987"></a>
<span class="sourceLineNo">988</span>      // There could be handler-count syncFutures outstanding.<a name="line.988"></a>
<span class="sourceLineNo">989</span>      for (int i = 0; i &lt; this.syncFuturesCount.get(); i++) {<a name="line.989"></a>
<span class="sourceLineNo">990</span>        this.syncFutures[i].done(sequence, e);<a name="line.990"></a>
<span class="sourceLineNo">991</span>      }<a name="line.991"></a>
<span class="sourceLineNo">992</span>      this.syncFuturesCount.set(0);<a name="line.992"></a>
<span class="sourceLineNo">993</span>    }<a name="line.993"></a>
<span class="sourceLineNo">994</span><a name="line.994"></a>
<span class="sourceLineNo">995</span>    /**<a name="line.995"></a>
<span class="sourceLineNo">996</span>     * @return True if outstanding sync futures still<a name="line.996"></a>
<span class="sourceLineNo">997</span>     */<a name="line.997"></a>
<span class="sourceLineNo">998</span>    private boolean isOutstandingSyncs() {<a name="line.998"></a>
<span class="sourceLineNo">999</span>      // Look at SyncFutures in the EventHandler<a name="line.999"></a>
<span class="sourceLineNo">1000</span>      for (int i = 0; i &lt; this.syncFuturesCount.get(); i++) {<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>        if (!this.syncFutures[i].isDone()) {<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>          return true;<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>        }<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>      }<a name="line.1004"></a>
<span class="sourceLineNo">1005</span><a name="line.1005"></a>
<span class="sourceLineNo">1006</span>      return false;<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>    }<a name="line.1007"></a>
<span class="sourceLineNo">1008</span><a name="line.1008"></a>
<span class="sourceLineNo">1009</span>    private boolean isOutstandingSyncsFromRunners() {<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>      // Look at SyncFutures in the SyncRunners<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>      for (SyncRunner syncRunner: syncRunners) {<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>        if(syncRunner.isAlive() &amp;&amp; !syncRunner.areSyncFuturesReleased()) {<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>          return true;<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>        }<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>      }<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>      return false;<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>    }<a name="line.1017"></a>
<span class="sourceLineNo">1018</span><a name="line.1018"></a>
<span class="sourceLineNo">1019</span>    @Override<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>    // We can set endOfBatch in the below method if at end of our this.syncFutures array<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>    public void onEvent(final RingBufferTruck truck, final long sequence, boolean endOfBatch)<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>        throws Exception {<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>      // Appends and syncs are coming in order off the ringbuffer. We depend on this fact. We'll<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>      // add appends to dfsclient as they come in. Batching appends doesn't give any significant<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>      // benefit on measurement. Handler sync calls we will batch up. If we get an exception<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>      // appending an edit, we fail all subsequent appends and syncs with the same exception until<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>      // the WAL is reset. It is important that we not short-circuit and exit early this method.<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>      // It is important that we always go through the attainSafePoint on the end. Another thread,<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>      // the log roller may be waiting on a signal from us here and will just hang without it.<a name="line.1029"></a>
<span class="sourceLineNo">1030</span><a name="line.1030"></a>
<span class="sourceLineNo">1031</span>      try {<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>        if (truck.type() == RingBufferTruck.Type.SYNC) {<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>          this.syncFutures[this.syncFuturesCount.getAndIncrement()] = truck.unloadSync();<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>          // Force flush of syncs if we are carrying a full complement of syncFutures.<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>          if (this.syncFuturesCount.get() == this.syncFutures.length) {<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>            endOfBatch = true;<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>          }<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>        } else if (truck.type() == RingBufferTruck.Type.APPEND) {<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>          FSWALEntry entry = truck.unloadAppend();<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>          //TODO handle htrace API change, see HBASE-18895<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>          //TraceScope scope = Trace.continueSpan(entry.detachSpan());<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>          try {<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>            if (this.exception != null) {<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>              // Return to keep processing events coming off the ringbuffer<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>              return;<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>            }<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>            append(entry);<a name="line.1047"></a>
<span class="sourceLineNo">1048</span>          } catch (Exception e) {<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>            // Failed append. Record the exception.<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>            this.exception = e;<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>            // invoking cleanupOutstandingSyncsOnException when append failed with exception,<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>            // it will cleanup existing sync requests recorded in syncFutures but not offered to SyncRunner yet,<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>            // so there won't be any sync future left over if no further truck published to disruptor.<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>            cleanupOutstandingSyncsOnException(sequence,<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>                this.exception instanceof DamagedWALException ? this.exception<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>                    : new DamagedWALException("On sync", this.exception));<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>            // Return to keep processing events coming off the ringbuffer<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>            return;<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>          } finally {<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>            entry.release();<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>          }<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>        } else {<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>          // What is this if not an append or sync. Fail all up to this!!!<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>          cleanupOutstandingSyncsOnException(sequence,<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>            new IllegalStateException("Neither append nor sync"));<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>          // Return to keep processing.<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>          return;<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>        }<a name="line.1068"></a>
<span class="sourceLineNo">1069</span><a name="line.1069"></a>
<span class="sourceLineNo">1070</span>        // TODO: Check size and if big go ahead and call a sync if we have enough data.<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>        // This is a sync. If existing exception, fall through. Else look to see if batch.<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>        if (this.exception == null) {<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>          // If not a batch, return to consume more events from the ring buffer before proceeding;<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>          // we want to get up a batch of syncs and appends before we go do a filesystem sync.<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>          if (!endOfBatch || this.syncFuturesCount.get() &lt;= 0) {<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>            return;<a name="line.1076"></a>
<span class="sourceLineNo">1077</span>          }<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>          // syncRunnerIndex is bound to the range [0, Integer.MAX_INT - 1] as follows:<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>          //   * The maximum value possible for syncRunners.length is Integer.MAX_INT<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>          //   * syncRunnerIndex starts at 0 and is incremented only here<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>          //   * after the increment, the value is bounded by the '%' operator to<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>          //     [0, syncRunners.length), presuming the value was positive prior to<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>          //     the '%' operator.<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>          //   * after being bound to [0, Integer.MAX_INT - 1], the new value is stored in<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>          //     syncRunnerIndex ensuring that it can't grow without bound and overflow.<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>          //   * note that the value after the increment must be positive, because the most it<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>          //     could have been prior was Integer.MAX_INT - 1 and we only increment by 1.<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>          this.syncRunnerIndex = (this.syncRunnerIndex + 1) % this.syncRunners.length;<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>          try {<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>            // Below expects that the offer 'transfers' responsibility for the outstanding syncs to<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>            // the syncRunner. We should never get an exception in here.<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>            this.syncRunners[this.syncRunnerIndex].offer(sequence, this.syncFutures,<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>              this.syncFuturesCount.get());<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>          } catch (Exception e) {<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>            // Should NEVER get here.<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>            requestLogRoll(ERROR);<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>            this.exception = new DamagedWALException("Failed offering sync", e);<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>          }<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>        }<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>        // We may have picked up an exception above trying to offer sync<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>        if (this.exception != null) {<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>          cleanupOutstandingSyncsOnException(sequence, this.exception instanceof DamagedWALException<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>              ? this.exception : new DamagedWALException("On sync", this.exception));<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>        }<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>        attainSafePoint(sequence);<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>        this.syncFuturesCount.set(0);<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>      } catch (Throwable t) {<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>        LOG.error("UNEXPECTED!!! syncFutures.length=" + this.syncFutures.length, t);<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>      }<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
<span class="sourceLineNo">1111</span><a name="line.1111"></a>
<span class="sourceLineNo">1112</span>    SafePointZigZagLatch attainSafePoint() {<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>      this.zigzagLatch = new SafePointZigZagLatch();<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>      return this.zigzagLatch;<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>    }<a name="line.1115"></a>
<span class="sourceLineNo">1116</span><a name="line.1116"></a>
<span class="sourceLineNo">1117</span>    /**<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>     * Check if we should attain safe point. If so, go there and then wait till signalled before we<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>     * proceeding.<a name="line.1119"></a>
<span class="sourceLineNo">1120</span>     */<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>    private void attainSafePoint(final long currentSequence) {<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>      if (this.zigzagLatch == null || !this.zigzagLatch.isCocked()) {<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>        return;<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>      }<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>      // If here, another thread is waiting on us to get to safe point. Don't leave it hanging.<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>      beforeWaitOnSafePoint();<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>      try {<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>        // Wait on outstanding syncers; wait for them to finish syncing (unless we've been<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>        // shutdown or unless our latch has been thrown because we have been aborted or unless<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>        // this WAL is broken and we can't get a sync/append to complete).<a name="line.1130"></a>
<span class="sourceLineNo">1131</span>        while ((!this.shutdown &amp;&amp; this.zigzagLatch.isCocked()<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>            &amp;&amp; highestSyncedTxid.get() &lt; currentSequence &amp;&amp;<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>            // We could be in here and all syncs are failing or failed. Check for this. Otherwise<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>            // we'll just be stuck here for ever. In other words, ensure there syncs running.<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>            isOutstandingSyncs())<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>            // Wait for all SyncRunners to finish their work so that we can replace the writer<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>            || isOutstandingSyncsFromRunners()) {<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>          synchronized (this.safePointWaiter) {<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>            this.safePointWaiter.wait(0, 1);<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>          }<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>        }<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>        // Tell waiting thread we've attained safe point. Can clear this.throwable if set here<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>        // because we know that next event through the ringbuffer will be going to a new WAL<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>        // after we do the zigzaglatch dance.<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>        this.exception = null;<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>        this.zigzagLatch.safePointAttained();<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>      } catch (InterruptedException e) {<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>        LOG.warn("Interrupted ", e);<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>        Thread.currentThread().interrupt();<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>      }<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>    }<a name="line.1151"></a>
<span class="sourceLineNo">1152</span><a name="line.1152"></a>
<span class="sourceLineNo">1153</span>    /**<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>     * Append to the WAL. Does all CP and WAL listener calls.<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>     */<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>    void append(final FSWALEntry entry) throws Exception {<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>      try {<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>        FSHLog.this.appendEntry(writer, entry);<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>      } catch (Exception e) {<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>        String msg = "Append sequenceId=" + entry.getKey().getSequenceId()<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>            + ", requesting roll of WAL";<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>        LOG.warn(msg, e);<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>        requestLogRoll(ERROR);<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>        throw new DamagedWALException(msg, e);<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>      }<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>    }<a name="line.1166"></a>
<span class="sourceLineNo">1167</span><a name="line.1167"></a>
<span class="sourceLineNo">1168</span>    @Override<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>    public void onStart() {<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>      for (SyncRunner syncRunner : this.syncRunners) {<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>        syncRunner.start();<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>      }<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>    }<a name="line.1173"></a>
<span class="sourceLineNo">1174</span><a name="line.1174"></a>
<span class="sourceLineNo">1175</span>    @Override<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>    public void onShutdown() {<a name="line.1176"></a>
<span class="sourceLineNo">1177</span>      for (SyncRunner syncRunner : this.syncRunners) {<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>        syncRunner.interrupt();<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>      }<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>    }<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>  }<a name="line.1181"></a>
<span class="sourceLineNo">1182</span><a name="line.1182"></a>
<span class="sourceLineNo">1183</span>  /**<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>   * This method gets the pipeline for the current WAL.<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>   */<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>  @Override<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>  DatanodeInfo[] getPipeline() {<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>    if (this.hdfs_out != null) {<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>      if (this.hdfs_out.getWrappedStream() instanceof DFSOutputStream) {<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>        return ((DFSOutputStream) this.hdfs_out.getWrappedStream()).getPipeline();<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>      }<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>    }<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>    return new DatanodeInfo[0];<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>  }<a name="line.1194"></a>
<span class="sourceLineNo">1195</span><a name="line.1195"></a>
<span class="sourceLineNo">1196</span>  @VisibleForTesting<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>  Writer getWriter() {<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>    return this.writer;<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>  }<a name="line.1199"></a>
<span class="sourceLineNo">1200</span><a name="line.1200"></a>
<span class="sourceLineNo">1201</span>  @VisibleForTesting<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>  void setWriter(Writer writer) {<a name="line.1202"></a>
<span class="sourceLineNo">1203</span>    this.writer = writer;<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>  }<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>}<a name="line.1205"></a>




























































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