<!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.replication.regionserver;<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.replication.ReplicationUtils.getAdaptiveTimeout;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.replication.ReplicationUtils.sleepForRetries;<a name="line.21"></a>
<span class="sourceLineNo">022</span><a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.List;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.concurrent.PriorityBlockingQueue;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.concurrent.atomic.LongAccumulator;<a name="line.26"></a>
<span class="sourceLineNo">027</span><a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.hadoop.conf.Configuration;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.Path;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.Cell;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HConstants;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.ReplicationEndpoint;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.slf4j.Logger;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.slf4j.LoggerFactory;<a name="line.39"></a>
<span class="sourceLineNo">040</span><a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.StoreDescriptor;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>/**<a name="line.44"></a>
<span class="sourceLineNo">045</span> * This thread reads entries from a queue and ships them. Entries are placed onto the queue by<a name="line.45"></a>
<span class="sourceLineNo">046</span> * ReplicationSourceWALReaderThread<a name="line.46"></a>
<span class="sourceLineNo">047</span> */<a name="line.47"></a>
<span class="sourceLineNo">048</span>@InterfaceAudience.Private<a name="line.48"></a>
<span class="sourceLineNo">049</span>public class ReplicationSourceShipper extends Thread {<a name="line.49"></a>
<span class="sourceLineNo">050</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceShipper.class);<a name="line.50"></a>
<span class="sourceLineNo">051</span><a name="line.51"></a>
<span class="sourceLineNo">052</span>  // Hold the state of a replication worker thread<a name="line.52"></a>
<span class="sourceLineNo">053</span>  public enum WorkerState {<a name="line.53"></a>
<span class="sourceLineNo">054</span>    RUNNING,<a name="line.54"></a>
<span class="sourceLineNo">055</span>    STOPPED,<a name="line.55"></a>
<span class="sourceLineNo">056</span>    FINISHED,  // The worker is done processing a queue<a name="line.56"></a>
<span class="sourceLineNo">057</span>  }<a name="line.57"></a>
<span class="sourceLineNo">058</span><a name="line.58"></a>
<span class="sourceLineNo">059</span>  private final Configuration conf;<a name="line.59"></a>
<span class="sourceLineNo">060</span>  protected final String walGroupId;<a name="line.60"></a>
<span class="sourceLineNo">061</span>  protected final PriorityBlockingQueue&lt;Path&gt; queue;<a name="line.61"></a>
<span class="sourceLineNo">062</span>  private final ReplicationSource source;<a name="line.62"></a>
<span class="sourceLineNo">063</span><a name="line.63"></a>
<span class="sourceLineNo">064</span>  // Last position in the log that we sent to ZooKeeper<a name="line.64"></a>
<span class="sourceLineNo">065</span>  // It will be accessed by the stats thread so make it volatile<a name="line.65"></a>
<span class="sourceLineNo">066</span>  private volatile long currentPosition = -1;<a name="line.66"></a>
<span class="sourceLineNo">067</span>  // Path of the current log<a name="line.67"></a>
<span class="sourceLineNo">068</span>  private Path currentPath;<a name="line.68"></a>
<span class="sourceLineNo">069</span>  // Current state of the worker thread<a name="line.69"></a>
<span class="sourceLineNo">070</span>  private volatile WorkerState state;<a name="line.70"></a>
<span class="sourceLineNo">071</span>  protected ReplicationSourceWALReader entryReader;<a name="line.71"></a>
<span class="sourceLineNo">072</span><a name="line.72"></a>
<span class="sourceLineNo">073</span>  // How long should we sleep for each retry<a name="line.73"></a>
<span class="sourceLineNo">074</span>  protected final long sleepForRetries;<a name="line.74"></a>
<span class="sourceLineNo">075</span>  // Maximum number of retries before taking bold actions<a name="line.75"></a>
<span class="sourceLineNo">076</span>  protected final int maxRetriesMultiplier;<a name="line.76"></a>
<span class="sourceLineNo">077</span>  private final int DEFAULT_TIMEOUT = 20000;<a name="line.77"></a>
<span class="sourceLineNo">078</span>  private final int getEntriesTimeout;<a name="line.78"></a>
<span class="sourceLineNo">079</span>  private final int shipEditsTimeout;<a name="line.79"></a>
<span class="sourceLineNo">080</span><a name="line.80"></a>
<span class="sourceLineNo">081</span>  public ReplicationSourceShipper(Configuration conf, String walGroupId,<a name="line.81"></a>
<span class="sourceLineNo">082</span>      PriorityBlockingQueue&lt;Path&gt; queue, ReplicationSource source) {<a name="line.82"></a>
<span class="sourceLineNo">083</span>    this.conf = conf;<a name="line.83"></a>
<span class="sourceLineNo">084</span>    this.walGroupId = walGroupId;<a name="line.84"></a>
<span class="sourceLineNo">085</span>    this.queue = queue;<a name="line.85"></a>
<span class="sourceLineNo">086</span>    this.source = source;<a name="line.86"></a>
<span class="sourceLineNo">087</span>    this.sleepForRetries =<a name="line.87"></a>
<span class="sourceLineNo">088</span>        this.conf.getLong("replication.source.sleepforretries", 1000);    // 1 second<a name="line.88"></a>
<span class="sourceLineNo">089</span>    this.maxRetriesMultiplier =<a name="line.89"></a>
<span class="sourceLineNo">090</span>        this.conf.getInt("replication.source.maxretriesmultiplier", 300); // 5 minutes @ 1 sec per<a name="line.90"></a>
<span class="sourceLineNo">091</span>    this.getEntriesTimeout =<a name="line.91"></a>
<span class="sourceLineNo">092</span>        this.conf.getInt("replication.source.getEntries.timeout", DEFAULT_TIMEOUT); // 20 seconds<a name="line.92"></a>
<span class="sourceLineNo">093</span>    this.shipEditsTimeout = this.conf.getInt(HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT,<a name="line.93"></a>
<span class="sourceLineNo">094</span>        HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT);<a name="line.94"></a>
<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
<span class="sourceLineNo">096</span><a name="line.96"></a>
<span class="sourceLineNo">097</span>  @Override<a name="line.97"></a>
<span class="sourceLineNo">098</span>  public final void run() {<a name="line.98"></a>
<span class="sourceLineNo">099</span>    setWorkerState(WorkerState.RUNNING);<a name="line.99"></a>
<span class="sourceLineNo">100</span>    LOG.info("Running ReplicationSourceShipper Thread for wal group: {}", this.walGroupId);<a name="line.100"></a>
<span class="sourceLineNo">101</span>    // Loop until we close down<a name="line.101"></a>
<span class="sourceLineNo">102</span>    while (isActive()) {<a name="line.102"></a>
<span class="sourceLineNo">103</span>      // Sleep until replication is enabled again<a name="line.103"></a>
<span class="sourceLineNo">104</span>      if (!source.isPeerEnabled()) {<a name="line.104"></a>
<span class="sourceLineNo">105</span>        // The peer enabled check is in memory, not expensive, so do not need to increase the<a name="line.105"></a>
<span class="sourceLineNo">106</span>        // sleep interval as it may cause a long lag when we enable the peer.<a name="line.106"></a>
<span class="sourceLineNo">107</span>        sleepForRetries("Replication is disabled", sleepForRetries, 1, maxRetriesMultiplier);<a name="line.107"></a>
<span class="sourceLineNo">108</span>        continue;<a name="line.108"></a>
<span class="sourceLineNo">109</span>      }<a name="line.109"></a>
<span class="sourceLineNo">110</span>      try {<a name="line.110"></a>
<span class="sourceLineNo">111</span>        WALEntryBatch entryBatch = entryReader.poll(getEntriesTimeout);<a name="line.111"></a>
<span class="sourceLineNo">112</span>        LOG.debug("Shipper from source {} got entry batch from reader: {}",<a name="line.112"></a>
<span class="sourceLineNo">113</span>            source.getQueueId(), entryBatch);<a name="line.113"></a>
<span class="sourceLineNo">114</span>        if (entryBatch == null) {<a name="line.114"></a>
<span class="sourceLineNo">115</span>          continue;<a name="line.115"></a>
<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
<span class="sourceLineNo">117</span>        // the NO_MORE_DATA instance has no path so do not call shipEdits<a name="line.117"></a>
<span class="sourceLineNo">118</span>        if (entryBatch == WALEntryBatch.NO_MORE_DATA) {<a name="line.118"></a>
<span class="sourceLineNo">119</span>          noMoreData();<a name="line.119"></a>
<span class="sourceLineNo">120</span>        } else {<a name="line.120"></a>
<span class="sourceLineNo">121</span>          shipEdits(entryBatch);<a name="line.121"></a>
<span class="sourceLineNo">122</span>        }<a name="line.122"></a>
<span class="sourceLineNo">123</span>      } catch (InterruptedException | ReplicationRuntimeException e) {<a name="line.123"></a>
<span class="sourceLineNo">124</span>        // It is interrupted and needs to quit.<a name="line.124"></a>
<span class="sourceLineNo">125</span>        LOG.warn("Interrupted while waiting for next replication entry batch", e);<a name="line.125"></a>
<span class="sourceLineNo">126</span>        Thread.currentThread().interrupt();<a name="line.126"></a>
<span class="sourceLineNo">127</span>      }<a name="line.127"></a>
<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
<span class="sourceLineNo">129</span>    // If the worker exits run loop without finishing its task, mark it as stopped.<a name="line.129"></a>
<span class="sourceLineNo">130</span>    if (!isFinished()) {<a name="line.130"></a>
<span class="sourceLineNo">131</span>      setWorkerState(WorkerState.STOPPED);<a name="line.131"></a>
<span class="sourceLineNo">132</span>    } else {<a name="line.132"></a>
<span class="sourceLineNo">133</span>      source.removeWorker(this);<a name="line.133"></a>
<span class="sourceLineNo">134</span>      postFinish();<a name="line.134"></a>
<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
<span class="sourceLineNo">137</span><a name="line.137"></a>
<span class="sourceLineNo">138</span>  private void noMoreData() {<a name="line.138"></a>
<span class="sourceLineNo">139</span>    if (source.isRecovered()) {<a name="line.139"></a>
<span class="sourceLineNo">140</span>      LOG.debug("Finished recovering queue for group {} of peer {}", walGroupId,<a name="line.140"></a>
<span class="sourceLineNo">141</span>        source.getQueueId());<a name="line.141"></a>
<span class="sourceLineNo">142</span>      source.getSourceMetrics().incrCompletedRecoveryQueue();<a name="line.142"></a>
<span class="sourceLineNo">143</span>    } else {<a name="line.143"></a>
<span class="sourceLineNo">144</span>      LOG.debug("Finished queue for group {} of peer {}", walGroupId, source.getQueueId());<a name="line.144"></a>
<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
<span class="sourceLineNo">146</span>    setWorkerState(WorkerState.FINISHED);<a name="line.146"></a>
<span class="sourceLineNo">147</span>  }<a name="line.147"></a>
<span class="sourceLineNo">148</span><a name="line.148"></a>
<span class="sourceLineNo">149</span>  // To be implemented by recovered shipper<a name="line.149"></a>
<span class="sourceLineNo">150</span>  protected void postFinish() {<a name="line.150"></a>
<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
<span class="sourceLineNo">152</span><a name="line.152"></a>
<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
<span class="sourceLineNo">154</span>   * get batchEntry size excludes bulk load file sizes.<a name="line.154"></a>
<span class="sourceLineNo">155</span>   * Uses ReplicationSourceWALReader's static method.<a name="line.155"></a>
<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
<span class="sourceLineNo">157</span>  private int getBatchEntrySizeExcludeBulkLoad(WALEntryBatch entryBatch) {<a name="line.157"></a>
<span class="sourceLineNo">158</span>    int totalSize = 0;<a name="line.158"></a>
<span class="sourceLineNo">159</span>    for(Entry entry : entryBatch.getWalEntries()) {<a name="line.159"></a>
<span class="sourceLineNo">160</span>      totalSize += ReplicationSourceWALReader.getEntrySizeExcludeBulkLoad(entry);<a name="line.160"></a>
<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
<span class="sourceLineNo">162</span>    return  totalSize;<a name="line.162"></a>
<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
<span class="sourceLineNo">164</span><a name="line.164"></a>
<span class="sourceLineNo">165</span>  /**<a name="line.165"></a>
<span class="sourceLineNo">166</span>   * Do the shipping logic<a name="line.166"></a>
<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
<span class="sourceLineNo">168</span>  private void shipEdits(WALEntryBatch entryBatch) {<a name="line.168"></a>
<span class="sourceLineNo">169</span>    List&lt;Entry&gt; entries = entryBatch.getWalEntries();<a name="line.169"></a>
<span class="sourceLineNo">170</span>    int sleepMultiplier = 0;<a name="line.170"></a>
<span class="sourceLineNo">171</span>    if (entries.isEmpty()) {<a name="line.171"></a>
<span class="sourceLineNo">172</span>      updateLogPosition(entryBatch);<a name="line.172"></a>
<span class="sourceLineNo">173</span>      return;<a name="line.173"></a>
<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
<span class="sourceLineNo">175</span>    int currentSize = (int) entryBatch.getHeapSize();<a name="line.175"></a>
<span class="sourceLineNo">176</span>    int sizeExcludeBulkLoad = getBatchEntrySizeExcludeBulkLoad(entryBatch);<a name="line.176"></a>
<span class="sourceLineNo">177</span>    source.getSourceMetrics().setTimeStampNextToReplicate(entries.get(entries.size() - 1)<a name="line.177"></a>
<span class="sourceLineNo">178</span>        .getKey().getWriteTime());<a name="line.178"></a>
<span class="sourceLineNo">179</span>    while (isActive()) {<a name="line.179"></a>
<span class="sourceLineNo">180</span>      try {<a name="line.180"></a>
<span class="sourceLineNo">181</span>        try {<a name="line.181"></a>
<span class="sourceLineNo">182</span>          source.tryThrottle(currentSize);<a name="line.182"></a>
<span class="sourceLineNo">183</span>        } catch (InterruptedException e) {<a name="line.183"></a>
<span class="sourceLineNo">184</span>          LOG.debug("Interrupted while sleeping for throttling control");<a name="line.184"></a>
<span class="sourceLineNo">185</span>          Thread.currentThread().interrupt();<a name="line.185"></a>
<span class="sourceLineNo">186</span>          // current thread might be interrupted to terminate<a name="line.186"></a>
<span class="sourceLineNo">187</span>          // directly go back to while() for confirm this<a name="line.187"></a>
<span class="sourceLineNo">188</span>          continue;<a name="line.188"></a>
<span class="sourceLineNo">189</span>        }<a name="line.189"></a>
<span class="sourceLineNo">190</span>        // create replicateContext here, so the entries can be GC'd upon return from this call<a name="line.190"></a>
<span class="sourceLineNo">191</span>        // stack<a name="line.191"></a>
<span class="sourceLineNo">192</span>        ReplicationEndpoint.ReplicateContext replicateContext =<a name="line.192"></a>
<span class="sourceLineNo">193</span>            new ReplicationEndpoint.ReplicateContext();<a name="line.193"></a>
<span class="sourceLineNo">194</span>        replicateContext.setEntries(entries).setSize(currentSize);<a name="line.194"></a>
<span class="sourceLineNo">195</span>        replicateContext.setWalGroupId(walGroupId);<a name="line.195"></a>
<span class="sourceLineNo">196</span>        replicateContext.setTimeout(getAdaptiveTimeout(this.shipEditsTimeout, sleepMultiplier));<a name="line.196"></a>
<span class="sourceLineNo">197</span><a name="line.197"></a>
<span class="sourceLineNo">198</span>        long startTimeNs = System.nanoTime();<a name="line.198"></a>
<span class="sourceLineNo">199</span>        // send the edits to the endpoint. Will block until the edits are shipped and acknowledged<a name="line.199"></a>
<span class="sourceLineNo">200</span>        boolean replicated = source.getReplicationEndpoint().replicate(replicateContext);<a name="line.200"></a>
<span class="sourceLineNo">201</span>        long endTimeNs = System.nanoTime();<a name="line.201"></a>
<span class="sourceLineNo">202</span><a name="line.202"></a>
<span class="sourceLineNo">203</span>        if (!replicated) {<a name="line.203"></a>
<span class="sourceLineNo">204</span>          continue;<a name="line.204"></a>
<span class="sourceLineNo">205</span>        } else {<a name="line.205"></a>
<span class="sourceLineNo">206</span>          sleepMultiplier = Math.max(sleepMultiplier - 1, 0);<a name="line.206"></a>
<span class="sourceLineNo">207</span>        }<a name="line.207"></a>
<span class="sourceLineNo">208</span>        // Clean up hfile references<a name="line.208"></a>
<span class="sourceLineNo">209</span>        for (Entry entry : entries) {<a name="line.209"></a>
<span class="sourceLineNo">210</span>          cleanUpHFileRefs(entry.getEdit());<a name="line.210"></a>
<span class="sourceLineNo">211</span>          LOG.trace("shipped entry {}: ", entry);<a name="line.211"></a>
<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
<span class="sourceLineNo">213</span>        // Log and clean up WAL logs<a name="line.213"></a>
<span class="sourceLineNo">214</span>        updateLogPosition(entryBatch);<a name="line.214"></a>
<span class="sourceLineNo">215</span><a name="line.215"></a>
<span class="sourceLineNo">216</span>        //offsets totalBufferUsed by deducting shipped batchSize (excludes bulk load size)<a name="line.216"></a>
<span class="sourceLineNo">217</span>        //this sizeExcludeBulkLoad has to use same calculation that when calling<a name="line.217"></a>
<span class="sourceLineNo">218</span>        //acquireBufferQuota() in ReplicationSourceWALReader because they maintain<a name="line.218"></a>
<span class="sourceLineNo">219</span>        //same variable: totalBufferUsed<a name="line.219"></a>
<span class="sourceLineNo">220</span>        source.postShipEdits(entries, sizeExcludeBulkLoad);<a name="line.220"></a>
<span class="sourceLineNo">221</span>        // FIXME check relationship between wal group and overall<a name="line.221"></a>
<span class="sourceLineNo">222</span>        source.getSourceMetrics().shipBatch(entryBatch.getNbOperations(), currentSize,<a name="line.222"></a>
<span class="sourceLineNo">223</span>          entryBatch.getNbHFiles());<a name="line.223"></a>
<span class="sourceLineNo">224</span>        source.getSourceMetrics().setAgeOfLastShippedOp(<a name="line.224"></a>
<span class="sourceLineNo">225</span>          entries.get(entries.size() - 1).getKey().getWriteTime(), walGroupId);<a name="line.225"></a>
<span class="sourceLineNo">226</span>        source.getSourceMetrics().updateTableLevelMetrics(entryBatch.getWalEntriesWithSize());<a name="line.226"></a>
<span class="sourceLineNo">227</span><a name="line.227"></a>
<span class="sourceLineNo">228</span>        if (LOG.isTraceEnabled()) {<a name="line.228"></a>
<span class="sourceLineNo">229</span>          LOG.debug("Replicated {} entries or {} operations in {} ms",<a name="line.229"></a>
<span class="sourceLineNo">230</span>              entries.size(), entryBatch.getNbOperations(), (endTimeNs - startTimeNs) / 1000000);<a name="line.230"></a>
<span class="sourceLineNo">231</span>        }<a name="line.231"></a>
<span class="sourceLineNo">232</span>        break;<a name="line.232"></a>
<span class="sourceLineNo">233</span>      } catch (Exception ex) {<a name="line.233"></a>
<span class="sourceLineNo">234</span>        LOG.warn("{} threw unknown exception:",<a name="line.234"></a>
<span class="sourceLineNo">235</span>          source.getReplicationEndpoint().getClass().getName(), ex);<a name="line.235"></a>
<span class="sourceLineNo">236</span>        if (sleepForRetries("ReplicationEndpoint threw exception", sleepForRetries, sleepMultiplier,<a name="line.236"></a>
<span class="sourceLineNo">237</span>          maxRetriesMultiplier)) {<a name="line.237"></a>
<span class="sourceLineNo">238</span>          sleepMultiplier++;<a name="line.238"></a>
<span class="sourceLineNo">239</span>        }<a name="line.239"></a>
<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
<span class="sourceLineNo">243</span><a name="line.243"></a>
<span class="sourceLineNo">244</span>  private void cleanUpHFileRefs(WALEdit edit) throws IOException {<a name="line.244"></a>
<span class="sourceLineNo">245</span>    String peerId = source.getPeerId();<a name="line.245"></a>
<span class="sourceLineNo">246</span>    if (peerId.contains("-")) {<a name="line.246"></a>
<span class="sourceLineNo">247</span>      // peerClusterZnode will be in the form peerId + "-" + rsZNode.<a name="line.247"></a>
<span class="sourceLineNo">248</span>      // A peerId will not have "-" in its name, see HBASE-11394<a name="line.248"></a>
<span class="sourceLineNo">249</span>      peerId = peerId.split("-")[0];<a name="line.249"></a>
<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
<span class="sourceLineNo">251</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.251"></a>
<span class="sourceLineNo">252</span>    int totalCells = cells.size();<a name="line.252"></a>
<span class="sourceLineNo">253</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.253"></a>
<span class="sourceLineNo">254</span>      Cell cell = cells.get(i);<a name="line.254"></a>
<span class="sourceLineNo">255</span>      if (CellUtil.matchingQualifier(cell, WALEdit.BULK_LOAD)) {<a name="line.255"></a>
<span class="sourceLineNo">256</span>        BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cell);<a name="line.256"></a>
<span class="sourceLineNo">257</span>        List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.257"></a>
<span class="sourceLineNo">258</span>        int totalStores = stores.size();<a name="line.258"></a>
<span class="sourceLineNo">259</span>        for (int j = 0; j &lt; totalStores; j++) {<a name="line.259"></a>
<span class="sourceLineNo">260</span>          List&lt;String&gt; storeFileList = stores.get(j).getStoreFileList();<a name="line.260"></a>
<span class="sourceLineNo">261</span>          source.getSourceManager().cleanUpHFileRefs(peerId, storeFileList);<a name="line.261"></a>
<span class="sourceLineNo">262</span>          source.getSourceMetrics().decrSizeOfHFileRefsQueue(storeFileList.size());<a name="line.262"></a>
<span class="sourceLineNo">263</span>        }<a name="line.263"></a>
<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
<span class="sourceLineNo">267</span><a name="line.267"></a>
<span class="sourceLineNo">268</span>  private boolean updateLogPosition(WALEntryBatch batch) {<a name="line.268"></a>
<span class="sourceLineNo">269</span>    boolean updated = false;<a name="line.269"></a>
<span class="sourceLineNo">270</span>    // if end of file is true, then the logPositionAndCleanOldLogs method will remove the file<a name="line.270"></a>
<span class="sourceLineNo">271</span>    // record on zk, so let's call it. The last wal position maybe zero if end of file is true and<a name="line.271"></a>
<span class="sourceLineNo">272</span>    // there is no entry in the batch. It is OK because that the queue storage will ignore the zero<a name="line.272"></a>
<span class="sourceLineNo">273</span>    // position and the file will be removed soon in cleanOldLogs.<a name="line.273"></a>
<span class="sourceLineNo">274</span>    if (batch.isEndOfFile() || !batch.getLastWalPath().equals(currentPath) ||<a name="line.274"></a>
<span class="sourceLineNo">275</span>      batch.getLastWalPosition() != currentPosition) {<a name="line.275"></a>
<span class="sourceLineNo">276</span>      source.getSourceManager().logPositionAndCleanOldLogs(source, batch);<a name="line.276"></a>
<span class="sourceLineNo">277</span>      updated = true;<a name="line.277"></a>
<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
<span class="sourceLineNo">279</span>    // if end of file is true, then we can just skip to the next file in queue.<a name="line.279"></a>
<span class="sourceLineNo">280</span>    // the only exception is for recovered queue, if we reach the end of the queue, then there will<a name="line.280"></a>
<span class="sourceLineNo">281</span>    // no more files so here the currentPath may be null.<a name="line.281"></a>
<span class="sourceLineNo">282</span>    if (batch.isEndOfFile()) {<a name="line.282"></a>
<span class="sourceLineNo">283</span>      currentPath = entryReader.getCurrentPath();<a name="line.283"></a>
<span class="sourceLineNo">284</span>      currentPosition = 0L;<a name="line.284"></a>
<span class="sourceLineNo">285</span>    } else {<a name="line.285"></a>
<span class="sourceLineNo">286</span>      currentPath = batch.getLastWalPath();<a name="line.286"></a>
<span class="sourceLineNo">287</span>      currentPosition = batch.getLastWalPosition();<a name="line.287"></a>
<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
<span class="sourceLineNo">289</span>    return updated;<a name="line.289"></a>
<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
<span class="sourceLineNo">291</span><a name="line.291"></a>
<span class="sourceLineNo">292</span>  public void startup(UncaughtExceptionHandler handler) {<a name="line.292"></a>
<span class="sourceLineNo">293</span>    String name = Thread.currentThread().getName();<a name="line.293"></a>
<span class="sourceLineNo">294</span>    Threads.setDaemonThreadRunning(this,<a name="line.294"></a>
<span class="sourceLineNo">295</span>      name + ".replicationSource.shipper" + walGroupId + "," + source.getQueueId(),<a name="line.295"></a>
<span class="sourceLineNo">296</span>      handler::uncaughtException);<a name="line.296"></a>
<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
<span class="sourceLineNo">298</span><a name="line.298"></a>
<span class="sourceLineNo">299</span>  Path getCurrentPath() {<a name="line.299"></a>
<span class="sourceLineNo">300</span>    return entryReader.getCurrentPath();<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>  long getCurrentPosition() {<a name="line.303"></a>
<span class="sourceLineNo">304</span>    return currentPosition;<a name="line.304"></a>
<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
<span class="sourceLineNo">306</span><a name="line.306"></a>
<span class="sourceLineNo">307</span>  void setWALReader(ReplicationSourceWALReader entryReader) {<a name="line.307"></a>
<span class="sourceLineNo">308</span>    this.entryReader = entryReader;<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>  long getStartPosition() {<a name="line.311"></a>
<span class="sourceLineNo">312</span>    return 0;<a name="line.312"></a>
<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
<span class="sourceLineNo">314</span><a name="line.314"></a>
<span class="sourceLineNo">315</span>  protected boolean isActive() {<a name="line.315"></a>
<span class="sourceLineNo">316</span>    return source.isSourceActive() &amp;&amp; state == WorkerState.RUNNING &amp;&amp; !isInterrupted();<a name="line.316"></a>
<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
<span class="sourceLineNo">318</span><a name="line.318"></a>
<span class="sourceLineNo">319</span>  protected final void setWorkerState(WorkerState state) {<a name="line.319"></a>
<span class="sourceLineNo">320</span>    this.state = state;<a name="line.320"></a>
<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
<span class="sourceLineNo">322</span><a name="line.322"></a>
<span class="sourceLineNo">323</span>  void stopWorker() {<a name="line.323"></a>
<span class="sourceLineNo">324</span>    setWorkerState(WorkerState.STOPPED);<a name="line.324"></a>
<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
<span class="sourceLineNo">326</span><a name="line.326"></a>
<span class="sourceLineNo">327</span>  public boolean isFinished() {<a name="line.327"></a>
<span class="sourceLineNo">328</span>    return state == WorkerState.FINISHED;<a name="line.328"></a>
<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
<span class="sourceLineNo">332</span>   * Attempts to properly update &lt;code&gt;ReplicationSourceManager.totalBufferUser&lt;/code&gt;,<a name="line.332"></a>
<span class="sourceLineNo">333</span>   * in case there were unprocessed entries batched by the reader to the shipper,<a name="line.333"></a>
<span class="sourceLineNo">334</span>   * but the shipper didn't manage to ship those because the replication source is being terminated.<a name="line.334"></a>
<span class="sourceLineNo">335</span>   * In that case, it iterates through the batched entries and decrease the pending<a name="line.335"></a>
<span class="sourceLineNo">336</span>   * entries size from &lt;code&gt;ReplicationSourceManager.totalBufferUser&lt;/code&gt;<a name="line.336"></a>
<span class="sourceLineNo">337</span>   * &lt;p/&gt;<a name="line.337"></a>
<span class="sourceLineNo">338</span>   * &lt;b&gt;NOTES&lt;/b&gt;<a name="line.338"></a>
<span class="sourceLineNo">339</span>   * 1) This method should only be called upon replication source termination.<a name="line.339"></a>
<span class="sourceLineNo">340</span>   * It blocks waiting for both shipper and reader threads termination,<a name="line.340"></a>
<span class="sourceLineNo">341</span>   * to make sure no race conditions<a name="line.341"></a>
<span class="sourceLineNo">342</span>   * when updating &lt;code&gt;ReplicationSourceManager.totalBufferUser&lt;/code&gt;.<a name="line.342"></a>
<span class="sourceLineNo">343</span>   *<a name="line.343"></a>
<span class="sourceLineNo">344</span>   * 2) It &lt;b&gt;does not&lt;/b&gt; attempt to terminate reader and shipper threads. Those &lt;b&gt;must&lt;/b&gt;<a name="line.344"></a>
<span class="sourceLineNo">345</span>   * have been triggered interruption/termination prior to calling this method.<a name="line.345"></a>
<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
<span class="sourceLineNo">347</span>  void clearWALEntryBatch() {<a name="line.347"></a>
<span class="sourceLineNo">348</span>    long timeout = System.currentTimeMillis() + this.shipEditsTimeout;<a name="line.348"></a>
<span class="sourceLineNo">349</span>    while(this.isAlive() || this.entryReader.isAlive()){<a name="line.349"></a>
<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
<span class="sourceLineNo">351</span>        if (System.currentTimeMillis() &gt;= timeout) {<a name="line.351"></a>
<span class="sourceLineNo">352</span>          LOG.warn("Interrupting source thread for peer {} without cleaning buffer usage "<a name="line.352"></a>
<span class="sourceLineNo">353</span>            + "because clearWALEntryBatch method timed out whilst waiting reader/shipper "<a name="line.353"></a>
<span class="sourceLineNo">354</span>            + "thread to stop.", this.source.getPeerId());<a name="line.354"></a>
<span class="sourceLineNo">355</span>          Thread.currentThread().interrupt();<a name="line.355"></a>
<span class="sourceLineNo">356</span>        } else {<a name="line.356"></a>
<span class="sourceLineNo">357</span>          // Wait both shipper and reader threads to stop<a name="line.357"></a>
<span class="sourceLineNo">358</span>          Thread.sleep(this.sleepForRetries);<a name="line.358"></a>
<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
<span class="sourceLineNo">360</span>      } catch (InterruptedException e) {<a name="line.360"></a>
<span class="sourceLineNo">361</span>        LOG.warn("{} Interrupted while waiting {} to stop on clearWALEntryBatch: {}",<a name="line.361"></a>
<span class="sourceLineNo">362</span>          this.source.getPeerId(), this.getName(), e);<a name="line.362"></a>
<span class="sourceLineNo">363</span>        Thread.currentThread().interrupt();<a name="line.363"></a>
<span class="sourceLineNo">364</span>      }<a name="line.364"></a>
<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
<span class="sourceLineNo">366</span>    LongAccumulator totalToDecrement = new LongAccumulator((a,b) -&gt; a + b, 0);<a name="line.366"></a>
<span class="sourceLineNo">367</span>    entryReader.entryBatchQueue.forEach(w -&gt; {<a name="line.367"></a>
<span class="sourceLineNo">368</span>      entryReader.entryBatchQueue.remove(w);<a name="line.368"></a>
<span class="sourceLineNo">369</span>      w.getWalEntries().forEach(e -&gt; {<a name="line.369"></a>
<span class="sourceLineNo">370</span>        long entrySizeExcludeBulkLoad = entryReader.getEntrySizeExcludeBulkLoad(e);<a name="line.370"></a>
<span class="sourceLineNo">371</span>        totalToDecrement.accumulate(entrySizeExcludeBulkLoad);<a name="line.371"></a>
<span class="sourceLineNo">372</span>      });<a name="line.372"></a>
<span class="sourceLineNo">373</span>    });<a name="line.373"></a>
<span class="sourceLineNo">374</span><a name="line.374"></a>
<span class="sourceLineNo">375</span>    LOG.trace("Decrementing totalBufferUsed by {}B while stopping Replication WAL Readers.",<a name="line.375"></a>
<span class="sourceLineNo">376</span>      totalToDecrement.longValue());<a name="line.376"></a>
<span class="sourceLineNo">377</span>    source.getSourceManager().getTotalBufferUsed().addAndGet(-totalToDecrement.longValue());<a name="line.377"></a>
<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
<span class="sourceLineNo">379</span>}<a name="line.379"></a>




























































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