<!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.backup;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.io.FileNotFoundException;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.io.InterruptedIOException;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.Collection;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.Collections;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.concurrent.ExecutionException;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.util.concurrent.Future;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.util.concurrent.ThreadFactory;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.util.concurrent.TimeUnit;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.function.Function;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.stream.Collectors;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.stream.Stream;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.FileStatus;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileSystem;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.Path;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.PathFilter;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HConstants;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.regionserver.HStoreFile;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.apache.hadoop.io.MultipleIOException;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import org.slf4j.Logger;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.slf4j.LoggerFactory;<a name="line.53"></a>
<span class="sourceLineNo">054</span><a name="line.54"></a>
<span class="sourceLineNo">055</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.55"></a>
<span class="sourceLineNo">056</span><a name="line.56"></a>
<span class="sourceLineNo">057</span>/**<a name="line.57"></a>
<span class="sourceLineNo">058</span> * Utility class to handle the removal of HFiles (or the respective {@link HStoreFile StoreFiles})<a name="line.58"></a>
<span class="sourceLineNo">059</span> * for a HRegion from the {@link FileSystem}. The hfiles will be archived or deleted, depending on<a name="line.59"></a>
<span class="sourceLineNo">060</span> * the state of the system.<a name="line.60"></a>
<span class="sourceLineNo">061</span> */<a name="line.61"></a>
<span class="sourceLineNo">062</span>@InterfaceAudience.Private<a name="line.62"></a>
<span class="sourceLineNo">063</span>public class HFileArchiver {<a name="line.63"></a>
<span class="sourceLineNo">064</span>  private static final Logger LOG = LoggerFactory.getLogger(HFileArchiver.class);<a name="line.64"></a>
<span class="sourceLineNo">065</span>  private static final String SEPARATOR = ".";<a name="line.65"></a>
<span class="sourceLineNo">066</span><a name="line.66"></a>
<span class="sourceLineNo">067</span>  /** Number of retries in case of fs operation failure */<a name="line.67"></a>
<span class="sourceLineNo">068</span>  private static final int DEFAULT_RETRIES_NUMBER = 3;<a name="line.68"></a>
<span class="sourceLineNo">069</span><a name="line.69"></a>
<span class="sourceLineNo">070</span>  private static final Function&lt;File, Path&gt; FUNC_FILE_TO_PATH = new Function&lt;File, Path&gt;() {<a name="line.70"></a>
<span class="sourceLineNo">071</span>    @Override<a name="line.71"></a>
<span class="sourceLineNo">072</span>    public Path apply(File file) {<a name="line.72"></a>
<span class="sourceLineNo">073</span>      return file == null ? null : file.getPath();<a name="line.73"></a>
<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
<span class="sourceLineNo">075</span>  };<a name="line.75"></a>
<span class="sourceLineNo">076</span><a name="line.76"></a>
<span class="sourceLineNo">077</span>  private static ThreadPoolExecutor archiveExecutor;<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span>  private HFileArchiver() {<a name="line.79"></a>
<span class="sourceLineNo">080</span>    // hidden ctor since this is just a util<a name="line.80"></a>
<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
<span class="sourceLineNo">082</span><a name="line.82"></a>
<span class="sourceLineNo">083</span>  /** Returns True if the Region exits in the filesystem. */<a name="line.83"></a>
<span class="sourceLineNo">084</span>  public static boolean exists(Configuration conf, FileSystem fs, RegionInfo info)<a name="line.84"></a>
<span class="sourceLineNo">085</span>    throws IOException {<a name="line.85"></a>
<span class="sourceLineNo">086</span>    Path rootDir = CommonFSUtils.getRootDir(conf);<a name="line.86"></a>
<span class="sourceLineNo">087</span>    Path regionDir = FSUtils.getRegionDirFromRootDir(rootDir, info);<a name="line.87"></a>
<span class="sourceLineNo">088</span>    return fs.exists(regionDir);<a name="line.88"></a>
<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
<span class="sourceLineNo">090</span><a name="line.90"></a>
<span class="sourceLineNo">091</span>  /**<a name="line.91"></a>
<span class="sourceLineNo">092</span>   * Cleans up all the files for a HRegion by archiving the HFiles to the archive directory<a name="line.92"></a>
<span class="sourceLineNo">093</span>   * @param conf the configuration to use<a name="line.93"></a>
<span class="sourceLineNo">094</span>   * @param fs   the file system object<a name="line.94"></a>
<span class="sourceLineNo">095</span>   * @param info RegionInfo for region to be deleted<a name="line.95"></a>
<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
<span class="sourceLineNo">097</span>  public static void archiveRegion(Configuration conf, FileSystem fs, RegionInfo info)<a name="line.97"></a>
<span class="sourceLineNo">098</span>    throws IOException {<a name="line.98"></a>
<span class="sourceLineNo">099</span>    Path rootDir = CommonFSUtils.getRootDir(conf);<a name="line.99"></a>
<span class="sourceLineNo">100</span>    archiveRegion(fs, rootDir, CommonFSUtils.getTableDir(rootDir, info.getTable()),<a name="line.100"></a>
<span class="sourceLineNo">101</span>      FSUtils.getRegionDirFromRootDir(rootDir, info));<a name="line.101"></a>
<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
<span class="sourceLineNo">103</span><a name="line.103"></a>
<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
<span class="sourceLineNo">105</span>   * Remove an entire region from the table directory via archiving the region's hfiles.<a name="line.105"></a>
<span class="sourceLineNo">106</span>   * @param fs        {@link FileSystem} from which to remove the region<a name="line.106"></a>
<span class="sourceLineNo">107</span>   * @param rootdir   {@link Path} to the root directory where hbase files are stored (for building<a name="line.107"></a>
<span class="sourceLineNo">108</span>   *                  the archive path)<a name="line.108"></a>
<span class="sourceLineNo">109</span>   * @param tableDir  {@link Path} to where the table is being stored (for building the archive<a name="line.109"></a>
<span class="sourceLineNo">110</span>   *                  path)<a name="line.110"></a>
<span class="sourceLineNo">111</span>   * @param regionDir {@link Path} to where a region is being stored (for building the archive path)<a name="line.111"></a>
<span class="sourceLineNo">112</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the region was successfully deleted. &lt;tt&gt;false&lt;/tt&gt; if the filesystem<a name="line.112"></a>
<span class="sourceLineNo">113</span>   *         operations could not complete.<a name="line.113"></a>
<span class="sourceLineNo">114</span>   * @throws IOException if the request cannot be completed<a name="line.114"></a>
<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
<span class="sourceLineNo">116</span>  public static boolean archiveRegion(FileSystem fs, Path rootdir, Path tableDir, Path regionDir)<a name="line.116"></a>
<span class="sourceLineNo">117</span>    throws IOException {<a name="line.117"></a>
<span class="sourceLineNo">118</span>    // otherwise, we archive the files<a name="line.118"></a>
<span class="sourceLineNo">119</span>    // make sure we can archive<a name="line.119"></a>
<span class="sourceLineNo">120</span>    if (tableDir == null || regionDir == null) {<a name="line.120"></a>
<span class="sourceLineNo">121</span>      LOG.error("No archive directory could be found because tabledir (" + tableDir<a name="line.121"></a>
<span class="sourceLineNo">122</span>        + ") or regiondir (" + regionDir + "was null. Deleting files instead.");<a name="line.122"></a>
<span class="sourceLineNo">123</span>      if (regionDir != null) {<a name="line.123"></a>
<span class="sourceLineNo">124</span>        deleteRegionWithoutArchiving(fs, regionDir);<a name="line.124"></a>
<span class="sourceLineNo">125</span>      }<a name="line.125"></a>
<span class="sourceLineNo">126</span>      // we should have archived, but failed to. Doesn't matter if we deleted<a name="line.126"></a>
<span class="sourceLineNo">127</span>      // the archived files correctly or not.<a name="line.127"></a>
<span class="sourceLineNo">128</span>      return false;<a name="line.128"></a>
<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
<span class="sourceLineNo">130</span><a name="line.130"></a>
<span class="sourceLineNo">131</span>    LOG.debug("ARCHIVING {}", regionDir);<a name="line.131"></a>
<span class="sourceLineNo">132</span><a name="line.132"></a>
<span class="sourceLineNo">133</span>    // make sure the regiondir lives under the tabledir<a name="line.133"></a>
<span class="sourceLineNo">134</span>    Preconditions.checkArgument(regionDir.toString().startsWith(tableDir.toString()));<a name="line.134"></a>
<span class="sourceLineNo">135</span>    Path regionArchiveDir = HFileArchiveUtil.getRegionArchiveDir(rootdir,<a name="line.135"></a>
<span class="sourceLineNo">136</span>      CommonFSUtils.getTableName(tableDir), regionDir.getName());<a name="line.136"></a>
<span class="sourceLineNo">137</span><a name="line.137"></a>
<span class="sourceLineNo">138</span>    FileStatusConverter getAsFile = new FileStatusConverter(fs);<a name="line.138"></a>
<span class="sourceLineNo">139</span>    // otherwise, we attempt to archive the store files<a name="line.139"></a>
<span class="sourceLineNo">140</span><a name="line.140"></a>
<span class="sourceLineNo">141</span>    // build collection of just the store directories to archive<a name="line.141"></a>
<span class="sourceLineNo">142</span>    Collection&lt;File&gt; toArchive = new ArrayList&lt;&gt;();<a name="line.142"></a>
<span class="sourceLineNo">143</span>    final PathFilter dirFilter = new FSUtils.DirFilter(fs);<a name="line.143"></a>
<span class="sourceLineNo">144</span>    PathFilter nonHidden = new PathFilter() {<a name="line.144"></a>
<span class="sourceLineNo">145</span>      @Override<a name="line.145"></a>
<span class="sourceLineNo">146</span>      public boolean accept(Path file) {<a name="line.146"></a>
<span class="sourceLineNo">147</span>        return dirFilter.accept(file) &amp;&amp; !file.getName().startsWith(".");<a name="line.147"></a>
<span class="sourceLineNo">148</span>      }<a name="line.148"></a>
<span class="sourceLineNo">149</span>    };<a name="line.149"></a>
<span class="sourceLineNo">150</span>    FileStatus[] storeDirs = CommonFSUtils.listStatus(fs, regionDir, nonHidden);<a name="line.150"></a>
<span class="sourceLineNo">151</span>    // if there no files, we can just delete the directory and return;<a name="line.151"></a>
<span class="sourceLineNo">152</span>    if (storeDirs == null) {<a name="line.152"></a>
<span class="sourceLineNo">153</span>      LOG.debug("Directory {} empty.", regionDir);<a name="line.153"></a>
<span class="sourceLineNo">154</span>      return deleteRegionWithoutArchiving(fs, regionDir);<a name="line.154"></a>
<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span>    // convert the files in the region to a File<a name="line.157"></a>
<span class="sourceLineNo">158</span>    Stream.of(storeDirs).map(getAsFile).forEachOrdered(toArchive::add);<a name="line.158"></a>
<span class="sourceLineNo">159</span>    LOG.debug("Archiving " + toArchive);<a name="line.159"></a>
<span class="sourceLineNo">160</span>    List&lt;File&gt; failedArchive =<a name="line.160"></a>
<span class="sourceLineNo">161</span>      resolveAndArchive(fs, regionArchiveDir, toArchive, EnvironmentEdgeManager.currentTime());<a name="line.161"></a>
<span class="sourceLineNo">162</span>    if (!failedArchive.isEmpty()) {<a name="line.162"></a>
<span class="sourceLineNo">163</span>      throw new FailedArchiveException(<a name="line.163"></a>
<span class="sourceLineNo">164</span>        "Failed to archive/delete all the files for region:" + regionDir.getName() + " into "<a name="line.164"></a>
<span class="sourceLineNo">165</span>          + regionArchiveDir + ". Something is probably awry on the filesystem.",<a name="line.165"></a>
<span class="sourceLineNo">166</span>        failedArchive.stream().map(FUNC_FILE_TO_PATH).collect(Collectors.toList()));<a name="line.166"></a>
<span class="sourceLineNo">167</span>    }<a name="line.167"></a>
<span class="sourceLineNo">168</span>    // if that was successful, then we delete the region<a name="line.168"></a>
<span class="sourceLineNo">169</span>    return deleteRegionWithoutArchiving(fs, regionDir);<a name="line.169"></a>
<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
<span class="sourceLineNo">171</span><a name="line.171"></a>
<span class="sourceLineNo">172</span>  /**<a name="line.172"></a>
<span class="sourceLineNo">173</span>   * Archive the specified regions in parallel.<a name="line.173"></a>
<span class="sourceLineNo">174</span>   * @param conf          the configuration to use<a name="line.174"></a>
<span class="sourceLineNo">175</span>   * @param fs            {@link FileSystem} from which to remove the region<a name="line.175"></a>
<span class="sourceLineNo">176</span>   * @param rootDir       {@link Path} to the root directory where hbase files are stored (for<a name="line.176"></a>
<span class="sourceLineNo">177</span>   *                      building the archive path)<a name="line.177"></a>
<span class="sourceLineNo">178</span>   * @param tableDir      {@link Path} to where the table is being stored (for building the archive<a name="line.178"></a>
<span class="sourceLineNo">179</span>   *                      path)<a name="line.179"></a>
<span class="sourceLineNo">180</span>   * @param regionDirList {@link Path} to where regions are being stored (for building the archive<a name="line.180"></a>
<span class="sourceLineNo">181</span>   *                      path)<a name="line.181"></a>
<span class="sourceLineNo">182</span>   * @throws IOException if the request cannot be completed<a name="line.182"></a>
<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
<span class="sourceLineNo">184</span>  public static void archiveRegions(Configuration conf, FileSystem fs, Path rootDir, Path tableDir,<a name="line.184"></a>
<span class="sourceLineNo">185</span>    List&lt;Path&gt; regionDirList) throws IOException {<a name="line.185"></a>
<span class="sourceLineNo">186</span>    List&lt;Future&lt;Void&gt;&gt; futures = new ArrayList&lt;&gt;(regionDirList.size());<a name="line.186"></a>
<span class="sourceLineNo">187</span>    for (Path regionDir : regionDirList) {<a name="line.187"></a>
<span class="sourceLineNo">188</span>      Future&lt;Void&gt; future = getArchiveExecutor(conf).submit(() -&gt; {<a name="line.188"></a>
<span class="sourceLineNo">189</span>        archiveRegion(fs, rootDir, tableDir, regionDir);<a name="line.189"></a>
<span class="sourceLineNo">190</span>        return null;<a name="line.190"></a>
<span class="sourceLineNo">191</span>      });<a name="line.191"></a>
<span class="sourceLineNo">192</span>      futures.add(future);<a name="line.192"></a>
<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
<span class="sourceLineNo">194</span>    try {<a name="line.194"></a>
<span class="sourceLineNo">195</span>      for (Future&lt;Void&gt; future : futures) {<a name="line.195"></a>
<span class="sourceLineNo">196</span>        future.get();<a name="line.196"></a>
<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
<span class="sourceLineNo">198</span>    } catch (InterruptedException e) {<a name="line.198"></a>
<span class="sourceLineNo">199</span>      throw new InterruptedIOException(e.getMessage());<a name="line.199"></a>
<span class="sourceLineNo">200</span>    } catch (ExecutionException e) {<a name="line.200"></a>
<span class="sourceLineNo">201</span>      throw new IOException(e.getCause());<a name="line.201"></a>
<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
<span class="sourceLineNo">204</span><a name="line.204"></a>
<span class="sourceLineNo">205</span>  private static synchronized ThreadPoolExecutor getArchiveExecutor(final Configuration conf) {<a name="line.205"></a>
<span class="sourceLineNo">206</span>    if (archiveExecutor == null) {<a name="line.206"></a>
<span class="sourceLineNo">207</span>      int maxThreads = conf.getInt("hbase.hfilearchiver.thread.pool.max", 8);<a name="line.207"></a>
<span class="sourceLineNo">208</span>      archiveExecutor =<a name="line.208"></a>
<span class="sourceLineNo">209</span>        Threads.getBoundedCachedThreadPool(maxThreads, 30L, TimeUnit.SECONDS, getThreadFactory());<a name="line.209"></a>
<span class="sourceLineNo">210</span><a name="line.210"></a>
<span class="sourceLineNo">211</span>      // Shutdown this ThreadPool in a shutdown hook<a name="line.211"></a>
<span class="sourceLineNo">212</span>      Runtime.getRuntime().addShutdownHook(new Thread(() -&gt; archiveExecutor.shutdown()));<a name="line.212"></a>
<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
<span class="sourceLineNo">214</span>    return archiveExecutor;<a name="line.214"></a>
<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
<span class="sourceLineNo">216</span><a name="line.216"></a>
<span class="sourceLineNo">217</span>  // We need this method instead of Threads.getNamedThreadFactory() to pass some tests.<a name="line.217"></a>
<span class="sourceLineNo">218</span>  // The difference from Threads.getNamedThreadFactory() is that it doesn't fix ThreadGroup for<a name="line.218"></a>
<span class="sourceLineNo">219</span>  // new threads. If we use Threads.getNamedThreadFactory(), we will face ThreadGroup related<a name="line.219"></a>
<span class="sourceLineNo">220</span>  // issues in some tests.<a name="line.220"></a>
<span class="sourceLineNo">221</span>  private static ThreadFactory getThreadFactory() {<a name="line.221"></a>
<span class="sourceLineNo">222</span>    return new ThreadFactory() {<a name="line.222"></a>
<span class="sourceLineNo">223</span>      final AtomicInteger threadNumber = new AtomicInteger(1);<a name="line.223"></a>
<span class="sourceLineNo">224</span><a name="line.224"></a>
<span class="sourceLineNo">225</span>      @Override<a name="line.225"></a>
<span class="sourceLineNo">226</span>      public Thread newThread(Runnable r) {<a name="line.226"></a>
<span class="sourceLineNo">227</span>        final String name = "HFileArchiver-" + threadNumber.getAndIncrement();<a name="line.227"></a>
<span class="sourceLineNo">228</span>        Thread t = new Thread(r, name);<a name="line.228"></a>
<span class="sourceLineNo">229</span>        t.setDaemon(true);<a name="line.229"></a>
<span class="sourceLineNo">230</span>        return t;<a name="line.230"></a>
<span class="sourceLineNo">231</span>      }<a name="line.231"></a>
<span class="sourceLineNo">232</span>    };<a name="line.232"></a>
<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
<span class="sourceLineNo">234</span><a name="line.234"></a>
<span class="sourceLineNo">235</span>  /**<a name="line.235"></a>
<span class="sourceLineNo">236</span>   * Remove from the specified region the store files of the specified column family, either by<a name="line.236"></a>
<span class="sourceLineNo">237</span>   * archiving them or outright deletion<a name="line.237"></a>
<span class="sourceLineNo">238</span>   * @param fs       the filesystem where the store files live<a name="line.238"></a>
<span class="sourceLineNo">239</span>   * @param conf     {@link Configuration} to examine to determine the archive directory<a name="line.239"></a>
<span class="sourceLineNo">240</span>   * @param parent   Parent region hosting the store files<a name="line.240"></a>
<span class="sourceLineNo">241</span>   * @param tableDir {@link Path} to where the table is being stored (for building the archive path)<a name="line.241"></a>
<span class="sourceLineNo">242</span>   * @param family   the family hosting the store files<a name="line.242"></a>
<span class="sourceLineNo">243</span>   * @throws IOException if the files could not be correctly disposed.<a name="line.243"></a>
<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
<span class="sourceLineNo">245</span>  public static void archiveFamily(FileSystem fs, Configuration conf, RegionInfo parent,<a name="line.245"></a>
<span class="sourceLineNo">246</span>    Path tableDir, byte[] family) throws IOException {<a name="line.246"></a>
<span class="sourceLineNo">247</span>    Path familyDir = new Path(tableDir, new Path(parent.getEncodedName(), Bytes.toString(family)));<a name="line.247"></a>
<span class="sourceLineNo">248</span>    archiveFamilyByFamilyDir(fs, conf, parent, familyDir, family);<a name="line.248"></a>
<span class="sourceLineNo">249</span>  }<a name="line.249"></a>
<span class="sourceLineNo">250</span><a name="line.250"></a>
<span class="sourceLineNo">251</span>  /**<a name="line.251"></a>
<span class="sourceLineNo">252</span>   * Removes from the specified region the store files of the specified column family, either by<a name="line.252"></a>
<span class="sourceLineNo">253</span>   * archiving them or outright deletion<a name="line.253"></a>
<span class="sourceLineNo">254</span>   * @param fs        the filesystem where the store files live<a name="line.254"></a>
<span class="sourceLineNo">255</span>   * @param conf      {@link Configuration} to examine to determine the archive directory<a name="line.255"></a>
<span class="sourceLineNo">256</span>   * @param parent    Parent region hosting the store files<a name="line.256"></a>
<span class="sourceLineNo">257</span>   * @param familyDir {@link Path} to where the family is being stored<a name="line.257"></a>
<span class="sourceLineNo">258</span>   * @param family    the family hosting the store files<a name="line.258"></a>
<span class="sourceLineNo">259</span>   * @throws IOException if the files could not be correctly disposed.<a name="line.259"></a>
<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
<span class="sourceLineNo">261</span>  public static void archiveFamilyByFamilyDir(FileSystem fs, Configuration conf, RegionInfo parent,<a name="line.261"></a>
<span class="sourceLineNo">262</span>    Path familyDir, byte[] family) throws IOException {<a name="line.262"></a>
<span class="sourceLineNo">263</span>    FileStatus[] storeFiles = CommonFSUtils.listStatus(fs, familyDir);<a name="line.263"></a>
<span class="sourceLineNo">264</span>    if (storeFiles == null) {<a name="line.264"></a>
<span class="sourceLineNo">265</span>      LOG.debug("No files to dispose of in {}, family={}", parent.getRegionNameAsString(),<a name="line.265"></a>
<span class="sourceLineNo">266</span>        Bytes.toString(family));<a name="line.266"></a>
<span class="sourceLineNo">267</span>      return;<a name="line.267"></a>
<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
<span class="sourceLineNo">269</span><a name="line.269"></a>
<span class="sourceLineNo">270</span>    FileStatusConverter getAsFile = new FileStatusConverter(fs);<a name="line.270"></a>
<span class="sourceLineNo">271</span>    Collection&lt;File&gt; toArchive = Stream.of(storeFiles).map(getAsFile).collect(Collectors.toList());<a name="line.271"></a>
<span class="sourceLineNo">272</span>    Path storeArchiveDir = HFileArchiveUtil.getStoreArchivePath(conf, parent, family);<a name="line.272"></a>
<span class="sourceLineNo">273</span><a name="line.273"></a>
<span class="sourceLineNo">274</span>    // do the actual archive<a name="line.274"></a>
<span class="sourceLineNo">275</span>    List&lt;File&gt; failedArchive =<a name="line.275"></a>
<span class="sourceLineNo">276</span>      resolveAndArchive(fs, storeArchiveDir, toArchive, EnvironmentEdgeManager.currentTime());<a name="line.276"></a>
<span class="sourceLineNo">277</span>    if (!failedArchive.isEmpty()) {<a name="line.277"></a>
<span class="sourceLineNo">278</span>      throw new FailedArchiveException(<a name="line.278"></a>
<span class="sourceLineNo">279</span>        "Failed to archive/delete all the files for region:"<a name="line.279"></a>
<span class="sourceLineNo">280</span>          + Bytes.toString(parent.getRegionName()) + ", family:" + Bytes.toString(family) + " into "<a name="line.280"></a>
<span class="sourceLineNo">281</span>          + storeArchiveDir + ". Something is probably awry on the filesystem.",<a name="line.281"></a>
<span class="sourceLineNo">282</span>        failedArchive.stream().map(FUNC_FILE_TO_PATH).collect(Collectors.toList()));<a name="line.282"></a>
<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
<span class="sourceLineNo">284</span>  }<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>   * Remove the store files, either by archiving them or outright deletion<a name="line.287"></a>
<span class="sourceLineNo">288</span>   * @param conf           {@link Configuration} to examine to determine the archive directory<a name="line.288"></a>
<span class="sourceLineNo">289</span>   * @param fs             the filesystem where the store files live<a name="line.289"></a>
<span class="sourceLineNo">290</span>   * @param regionInfo     {@link RegionInfo} of the region hosting the store files<a name="line.290"></a>
<span class="sourceLineNo">291</span>   * @param family         the family hosting the store files<a name="line.291"></a>
<span class="sourceLineNo">292</span>   * @param compactedFiles files to be disposed of. No further reading of these files should be<a name="line.292"></a>
<span class="sourceLineNo">293</span>   *                       attempted; otherwise likely to cause an {@link IOException}<a name="line.293"></a>
<span class="sourceLineNo">294</span>   * @throws IOException if the files could not be correctly disposed.<a name="line.294"></a>
<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
<span class="sourceLineNo">296</span>  public static void archiveStoreFiles(Configuration conf, FileSystem fs, RegionInfo regionInfo,<a name="line.296"></a>
<span class="sourceLineNo">297</span>    Path tableDir, byte[] family, Collection&lt;HStoreFile&gt; compactedFiles) throws IOException {<a name="line.297"></a>
<span class="sourceLineNo">298</span>    Path storeArchiveDir = HFileArchiveUtil.getStoreArchivePath(conf, regionInfo, tableDir, family);<a name="line.298"></a>
<span class="sourceLineNo">299</span>    archive(fs, regionInfo, family, compactedFiles, storeArchiveDir);<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>   * Archive recovered edits using existing logic for archiving store files. This is currently only<a name="line.303"></a>
<span class="sourceLineNo">304</span>   * relevant when &lt;b&gt;hbase.region.archive.recovered.edits&lt;/b&gt; is true, as recovered edits shouldn't<a name="line.304"></a>
<span class="sourceLineNo">305</span>   * be kept after replay. In theory, we could use very same method available for archiving store<a name="line.305"></a>
<span class="sourceLineNo">306</span>   * files, but supporting WAL dir and store files on different FileSystems added the need for extra<a name="line.306"></a>
<span class="sourceLineNo">307</span>   * validation of the passed FileSystem instance and the path where the archiving edits should be<a name="line.307"></a>
<span class="sourceLineNo">308</span>   * placed.<a name="line.308"></a>
<span class="sourceLineNo">309</span>   * @param conf          {@link Configuration} to determine the archive directory.<a name="line.309"></a>
<span class="sourceLineNo">310</span>   * @param fs            the filesystem used for storing WAL files.<a name="line.310"></a>
<span class="sourceLineNo">311</span>   * @param regionInfo    {@link RegionInfo} a pseudo region representation for the archiving logic.<a name="line.311"></a>
<span class="sourceLineNo">312</span>   * @param family        a pseudo familiy representation for the archiving logic.<a name="line.312"></a>
<span class="sourceLineNo">313</span>   * @param replayedEdits the recovered edits to be archived.<a name="line.313"></a>
<span class="sourceLineNo">314</span>   * @throws IOException if files can't be achived due to some internal error.<a name="line.314"></a>
<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
<span class="sourceLineNo">316</span>  public static void archiveRecoveredEdits(Configuration conf, FileSystem fs, RegionInfo regionInfo,<a name="line.316"></a>
<span class="sourceLineNo">317</span>    byte[] family, Collection&lt;HStoreFile&gt; replayedEdits) throws IOException {<a name="line.317"></a>
<span class="sourceLineNo">318</span>    String workingDir = conf.get(CommonFSUtils.HBASE_WAL_DIR, conf.get(HConstants.HBASE_DIR));<a name="line.318"></a>
<span class="sourceLineNo">319</span>    // extra sanity checks for the right FS<a name="line.319"></a>
<span class="sourceLineNo">320</span>    Path path = new Path(workingDir);<a name="line.320"></a>
<span class="sourceLineNo">321</span>    if (path.isAbsoluteAndSchemeAuthorityNull()) {<a name="line.321"></a>
<span class="sourceLineNo">322</span>      // no schema specified on wal dir value, so it's on same FS as StoreFiles<a name="line.322"></a>
<span class="sourceLineNo">323</span>      path = new Path(conf.get(HConstants.HBASE_DIR));<a name="line.323"></a>
<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
<span class="sourceLineNo">325</span>    if (path.toUri().getScheme() != null &amp;&amp; !path.toUri().getScheme().equals(fs.getScheme())) {<a name="line.325"></a>
<span class="sourceLineNo">326</span>      throw new IOException(<a name="line.326"></a>
<span class="sourceLineNo">327</span>        "Wrong file system! Should be " + path.toUri().getScheme() + ", but got " + fs.getScheme());<a name="line.327"></a>
<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
<span class="sourceLineNo">329</span>    path = HFileArchiveUtil.getStoreArchivePathForRootDir(path, regionInfo, family);<a name="line.329"></a>
<span class="sourceLineNo">330</span>    archive(fs, regionInfo, family, replayedEdits, path);<a name="line.330"></a>
<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
<span class="sourceLineNo">332</span><a name="line.332"></a>
<span class="sourceLineNo">333</span>  private static void archive(FileSystem fs, RegionInfo regionInfo, byte[] family,<a name="line.333"></a>
<span class="sourceLineNo">334</span>    Collection&lt;HStoreFile&gt; compactedFiles, Path storeArchiveDir) throws IOException {<a name="line.334"></a>
<span class="sourceLineNo">335</span>    // sometimes in testing, we don't have rss, so we need to check for that<a name="line.335"></a>
<span class="sourceLineNo">336</span>    if (fs == null) {<a name="line.336"></a>
<span class="sourceLineNo">337</span>      LOG.warn(<a name="line.337"></a>
<span class="sourceLineNo">338</span>        "Passed filesystem is null, so just deleting files without archiving for {}," + "family={}",<a name="line.338"></a>
<span class="sourceLineNo">339</span>        Bytes.toString(regionInfo.getRegionName()), Bytes.toString(family));<a name="line.339"></a>
<span class="sourceLineNo">340</span>      deleteStoreFilesWithoutArchiving(compactedFiles);<a name="line.340"></a>
<span class="sourceLineNo">341</span>      return;<a name="line.341"></a>
<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
<span class="sourceLineNo">343</span><a name="line.343"></a>
<span class="sourceLineNo">344</span>    // short circuit if we don't have any files to delete<a name="line.344"></a>
<span class="sourceLineNo">345</span>    if (compactedFiles.isEmpty()) {<a name="line.345"></a>
<span class="sourceLineNo">346</span>      LOG.debug("No files to dispose of, done!");<a name="line.346"></a>
<span class="sourceLineNo">347</span>      return;<a name="line.347"></a>
<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
<span class="sourceLineNo">349</span><a name="line.349"></a>
<span class="sourceLineNo">350</span>    // build the archive path<a name="line.350"></a>
<span class="sourceLineNo">351</span>    if (regionInfo == null || family == null)<a name="line.351"></a>
<span class="sourceLineNo">352</span>      throw new IOException("Need to have a region and a family to archive from.");<a name="line.352"></a>
<span class="sourceLineNo">353</span>    // make sure we don't archive if we can't and that the archive dir exists<a name="line.353"></a>
<span class="sourceLineNo">354</span>    if (!fs.mkdirs(storeArchiveDir)) {<a name="line.354"></a>
<span class="sourceLineNo">355</span>      throw new IOException("Could not make archive directory (" + storeArchiveDir + ") for store:"<a name="line.355"></a>
<span class="sourceLineNo">356</span>        + Bytes.toString(family) + ", deleting compacted files instead.");<a name="line.356"></a>
<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
<span class="sourceLineNo">358</span><a name="line.358"></a>
<span class="sourceLineNo">359</span>    // otherwise we attempt to archive the store files<a name="line.359"></a>
<span class="sourceLineNo">360</span>    LOG.debug("Archiving compacted files.");<a name="line.360"></a>
<span class="sourceLineNo">361</span><a name="line.361"></a>
<span class="sourceLineNo">362</span>    // Wrap the storefile into a File<a name="line.362"></a>
<span class="sourceLineNo">363</span>    StoreToFile getStorePath = new StoreToFile(fs);<a name="line.363"></a>
<span class="sourceLineNo">364</span>    Collection&lt;File&gt; storeFiles =<a name="line.364"></a>
<span class="sourceLineNo">365</span>      compactedFiles.stream().map(getStorePath).collect(Collectors.toList());<a name="line.365"></a>
<span class="sourceLineNo">366</span><a name="line.366"></a>
<span class="sourceLineNo">367</span>    // do the actual archive<a name="line.367"></a>
<span class="sourceLineNo">368</span>    List&lt;File&gt; failedArchive =<a name="line.368"></a>
<span class="sourceLineNo">369</span>      resolveAndArchive(fs, storeArchiveDir, storeFiles, EnvironmentEdgeManager.currentTime());<a name="line.369"></a>
<span class="sourceLineNo">370</span><a name="line.370"></a>
<span class="sourceLineNo">371</span>    if (!failedArchive.isEmpty()) {<a name="line.371"></a>
<span class="sourceLineNo">372</span>      throw new FailedArchiveException(<a name="line.372"></a>
<span class="sourceLineNo">373</span>        "Failed to archive/delete all the files for region:"<a name="line.373"></a>
<span class="sourceLineNo">374</span>          + Bytes.toString(regionInfo.getRegionName()) + ", family:" + Bytes.toString(family)<a name="line.374"></a>
<span class="sourceLineNo">375</span>          + " into " + storeArchiveDir + ". Something is probably awry on the filesystem.",<a name="line.375"></a>
<span class="sourceLineNo">376</span>        failedArchive.stream().map(FUNC_FILE_TO_PATH).collect(Collectors.toList()));<a name="line.376"></a>
<span class="sourceLineNo">377</span>    }<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>
<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
<span class="sourceLineNo">381</span>   * Archive the store file<a name="line.381"></a>
<span class="sourceLineNo">382</span>   * @param fs         the filesystem where the store files live<a name="line.382"></a>
<span class="sourceLineNo">383</span>   * @param regionInfo region hosting the store files<a name="line.383"></a>
<span class="sourceLineNo">384</span>   * @param conf       {@link Configuration} to examine to determine the archive directory<a name="line.384"></a>
<span class="sourceLineNo">385</span>   * @param tableDir   {@link Path} to where the table is being stored (for building the archive<a name="line.385"></a>
<span class="sourceLineNo">386</span>   *                   path)<a name="line.386"></a>
<span class="sourceLineNo">387</span>   * @param family     the family hosting the store files<a name="line.387"></a>
<span class="sourceLineNo">388</span>   * @param storeFile  file to be archived<a name="line.388"></a>
<span class="sourceLineNo">389</span>   * @throws IOException if the files could not be correctly disposed.<a name="line.389"></a>
<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
<span class="sourceLineNo">391</span>  public static void archiveStoreFile(Configuration conf, FileSystem fs, RegionInfo regionInfo,<a name="line.391"></a>
<span class="sourceLineNo">392</span>    Path tableDir, byte[] family, Path storeFile) throws IOException {<a name="line.392"></a>
<span class="sourceLineNo">393</span>    Path storeArchiveDir = HFileArchiveUtil.getStoreArchivePath(conf, regionInfo, tableDir, family);<a name="line.393"></a>
<span class="sourceLineNo">394</span>    // make sure we don't archive if we can't and that the archive dir exists<a name="line.394"></a>
<span class="sourceLineNo">395</span>    if (!fs.mkdirs(storeArchiveDir)) {<a name="line.395"></a>
<span class="sourceLineNo">396</span>      throw new IOException("Could not make archive directory (" + storeArchiveDir + ") for store:"<a name="line.396"></a>
<span class="sourceLineNo">397</span>        + Bytes.toString(family) + ", deleting compacted files instead.");<a name="line.397"></a>
<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
<span class="sourceLineNo">399</span><a name="line.399"></a>
<span class="sourceLineNo">400</span>    // do the actual archive<a name="line.400"></a>
<span class="sourceLineNo">401</span>    long start = EnvironmentEdgeManager.currentTime();<a name="line.401"></a>
<span class="sourceLineNo">402</span>    File file = new FileablePath(fs, storeFile);<a name="line.402"></a>
<span class="sourceLineNo">403</span>    if (!resolveAndArchiveFile(storeArchiveDir, file, Long.toString(start))) {<a name="line.403"></a>
<span class="sourceLineNo">404</span>      throw new IOException("Failed to archive/delete the file for region:"<a name="line.404"></a>
<span class="sourceLineNo">405</span>        + regionInfo.getRegionNameAsString() + ", family:" + Bytes.toString(family) + " into "<a name="line.405"></a>
<span class="sourceLineNo">406</span>        + storeArchiveDir + ". Something is probably awry on the filesystem.");<a name="line.406"></a>
<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
<span class="sourceLineNo">408</span>  }<a name="line.408"></a>
<span class="sourceLineNo">409</span><a name="line.409"></a>
<span class="sourceLineNo">410</span>  /**<a name="line.410"></a>
<span class="sourceLineNo">411</span>   * Resolve any conflict with an existing archive file via timestamp-append renaming of the<a name="line.411"></a>
<span class="sourceLineNo">412</span>   * existing file and then archive the passed in files.<a name="line.412"></a>
<span class="sourceLineNo">413</span>   * @param fs             {@link FileSystem} on which to archive the files<a name="line.413"></a>
<span class="sourceLineNo">414</span>   * @param baseArchiveDir base archive directory to store the files. If any of the files to archive<a name="line.414"></a>
<span class="sourceLineNo">415</span>   *                       are directories, will append the name of the directory to the base<a name="line.415"></a>
<span class="sourceLineNo">416</span>   *                       archive directory name, creating a parallel structure.<a name="line.416"></a>
<span class="sourceLineNo">417</span>   * @param toArchive      files/directories that need to be archvied<a name="line.417"></a>
<span class="sourceLineNo">418</span>   * @param start          time the archiving started - used for resolving archive conflicts.<a name="line.418"></a>
<span class="sourceLineNo">419</span>   * @return the list of failed to archive files.<a name="line.419"></a>
<span class="sourceLineNo">420</span>   * @throws IOException if an unexpected file operation exception occurred<a name="line.420"></a>
<span class="sourceLineNo">421</span>   */<a name="line.421"></a>
<span class="sourceLineNo">422</span>  private static List&lt;File&gt; resolveAndArchive(FileSystem fs, Path baseArchiveDir,<a name="line.422"></a>
<span class="sourceLineNo">423</span>    Collection&lt;File&gt; toArchive, long start) throws IOException {<a name="line.423"></a>
<span class="sourceLineNo">424</span>    // short circuit if no files to move<a name="line.424"></a>
<span class="sourceLineNo">425</span>    if (toArchive.isEmpty()) {<a name="line.425"></a>
<span class="sourceLineNo">426</span>      return Collections.emptyList();<a name="line.426"></a>
<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
<span class="sourceLineNo">428</span><a name="line.428"></a>
<span class="sourceLineNo">429</span>    LOG.trace("Moving files to the archive directory {}", baseArchiveDir);<a name="line.429"></a>
<span class="sourceLineNo">430</span><a name="line.430"></a>
<span class="sourceLineNo">431</span>    // make sure the archive directory exists<a name="line.431"></a>
<span class="sourceLineNo">432</span>    if (!fs.exists(baseArchiveDir)) {<a name="line.432"></a>
<span class="sourceLineNo">433</span>      if (!fs.mkdirs(baseArchiveDir)) {<a name="line.433"></a>
<span class="sourceLineNo">434</span>        throw new IOException("Failed to create the archive directory:" + baseArchiveDir<a name="line.434"></a>
<span class="sourceLineNo">435</span>          + ", quitting archive attempt.");<a name="line.435"></a>
<span class="sourceLineNo">436</span>      }<a name="line.436"></a>
<span class="sourceLineNo">437</span>      LOG.trace("Created archive directory {}", baseArchiveDir);<a name="line.437"></a>
<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
<span class="sourceLineNo">439</span><a name="line.439"></a>
<span class="sourceLineNo">440</span>    List&lt;File&gt; failures = new ArrayList&lt;&gt;();<a name="line.440"></a>
<span class="sourceLineNo">441</span>    String startTime = Long.toString(start);<a name="line.441"></a>
<span class="sourceLineNo">442</span>    for (File file : toArchive) {<a name="line.442"></a>
<span class="sourceLineNo">443</span>      // if its a file archive it<a name="line.443"></a>
<span class="sourceLineNo">444</span>      try {<a name="line.444"></a>
<span class="sourceLineNo">445</span>        LOG.trace("Archiving {}", file);<a name="line.445"></a>
<span class="sourceLineNo">446</span>        if (file.isFile()) {<a name="line.446"></a>
<span class="sourceLineNo">447</span>          // attempt to archive the file<a name="line.447"></a>
<span class="sourceLineNo">448</span>          if (!resolveAndArchiveFile(baseArchiveDir, file, startTime)) {<a name="line.448"></a>
<span class="sourceLineNo">449</span>            LOG.warn("Couldn't archive " + file + " into backup directory: " + baseArchiveDir);<a name="line.449"></a>
<span class="sourceLineNo">450</span>            failures.add(file);<a name="line.450"></a>
<span class="sourceLineNo">451</span>          }<a name="line.451"></a>
<span class="sourceLineNo">452</span>        } else {<a name="line.452"></a>
<span class="sourceLineNo">453</span>          // otherwise its a directory and we need to archive all files<a name="line.453"></a>
<span class="sourceLineNo">454</span>          LOG.trace("{} is a directory, archiving children files", file);<a name="line.454"></a>
<span class="sourceLineNo">455</span>          // so we add the directory name to the one base archive<a name="line.455"></a>
<span class="sourceLineNo">456</span>          Path parentArchiveDir = new Path(baseArchiveDir, file.getName());<a name="line.456"></a>
<span class="sourceLineNo">457</span>          // and then get all the files from that directory and attempt to<a name="line.457"></a>
<span class="sourceLineNo">458</span>          // archive those too<a name="line.458"></a>
<span class="sourceLineNo">459</span>          Collection&lt;File&gt; children = file.getChildren();<a name="line.459"></a>
<span class="sourceLineNo">460</span>          failures.addAll(resolveAndArchive(fs, parentArchiveDir, children, start));<a name="line.460"></a>
<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
<span class="sourceLineNo">462</span>      } catch (IOException e) {<a name="line.462"></a>
<span class="sourceLineNo">463</span>        LOG.warn("Failed to archive {}", file, e);<a name="line.463"></a>
<span class="sourceLineNo">464</span>        failures.add(file);<a name="line.464"></a>
<span class="sourceLineNo">465</span>      }<a name="line.465"></a>
<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
<span class="sourceLineNo">467</span>    return failures;<a name="line.467"></a>
<span class="sourceLineNo">468</span>  }<a name="line.468"></a>
<span class="sourceLineNo">469</span><a name="line.469"></a>
<span class="sourceLineNo">470</span>  /**<a name="line.470"></a>
<span class="sourceLineNo">471</span>   * Attempt to archive the passed in file to the archive directory.<a name="line.471"></a>
<span class="sourceLineNo">472</span>   * &lt;p&gt;<a name="line.472"></a>
<span class="sourceLineNo">473</span>   * If the same file already exists in the archive, it is moved to a timestamped directory under<a name="line.473"></a>
<span class="sourceLineNo">474</span>   * the archive directory and the new file is put in its place.<a name="line.474"></a>
<span class="sourceLineNo">475</span>   * @param archiveDir       {@link Path} to the directory that stores the archives of the hfiles<a name="line.475"></a>
<span class="sourceLineNo">476</span>   * @param currentFile      {@link Path} to the original HFile that will be archived<a name="line.476"></a>
<span class="sourceLineNo">477</span>   * @param archiveStartTime time the archiving started, to resolve naming conflicts<a name="line.477"></a>
<span class="sourceLineNo">478</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the file is successfully archived. &lt;tt&gt;false&lt;/tt&gt; if there was a<a name="line.478"></a>
<span class="sourceLineNo">479</span>   *         problem, but the operation still completed.<a name="line.479"></a>
<span class="sourceLineNo">480</span>   * @throws IOException on failure to complete {@link FileSystem} operations.<a name="line.480"></a>
<span class="sourceLineNo">481</span>   */<a name="line.481"></a>
<span class="sourceLineNo">482</span>  private static boolean resolveAndArchiveFile(Path archiveDir, File currentFile,<a name="line.482"></a>
<span class="sourceLineNo">483</span>    String archiveStartTime) throws IOException {<a name="line.483"></a>
<span class="sourceLineNo">484</span>    // build path as it should be in the archive<a name="line.484"></a>
<span class="sourceLineNo">485</span>    String filename = currentFile.getName();<a name="line.485"></a>
<span class="sourceLineNo">486</span>    Path archiveFile = new Path(archiveDir, filename);<a name="line.486"></a>
<span class="sourceLineNo">487</span>    FileSystem fs = currentFile.getFileSystem();<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
<span class="sourceLineNo">489</span>    // An existing destination file in the archive is unexpected, but we handle it here.<a name="line.489"></a>
<span class="sourceLineNo">490</span>    if (fs.exists(archiveFile)) {<a name="line.490"></a>
<span class="sourceLineNo">491</span>      if (!fs.exists(currentFile.getPath())) {<a name="line.491"></a>
<span class="sourceLineNo">492</span>        // If the file already exists in the archive, and there is no current file to archive, then<a name="line.492"></a>
<span class="sourceLineNo">493</span>        // assume that the file in archive is correct. This is an unexpected situation, suggesting a<a name="line.493"></a>
<span class="sourceLineNo">494</span>        // race condition or split brain.<a name="line.494"></a>
<span class="sourceLineNo">495</span>        // In HBASE-26718 this was found when compaction incorrectly happened during warmupRegion.<a name="line.495"></a>
<span class="sourceLineNo">496</span>        LOG.warn("{} exists in archive. Attempted to archive nonexistent file {}.", archiveFile,<a name="line.496"></a>
<span class="sourceLineNo">497</span>          currentFile);<a name="line.497"></a>
<span class="sourceLineNo">498</span>        // We return success to match existing behavior in this method, where FileNotFoundException<a name="line.498"></a>
<span class="sourceLineNo">499</span>        // in moveAndClose is ignored.<a name="line.499"></a>
<span class="sourceLineNo">500</span>        return true;<a name="line.500"></a>
<span class="sourceLineNo">501</span>      }<a name="line.501"></a>
<span class="sourceLineNo">502</span>      // There is a conflict between the current file and the already existing archived file.<a name="line.502"></a>
<span class="sourceLineNo">503</span>      // Move the archived file to a timestamped backup. This is a really, really unlikely<a name="line.503"></a>
<span class="sourceLineNo">504</span>      // situation, where we get the same name for the existing file, but is included just for that<a name="line.504"></a>
<span class="sourceLineNo">505</span>      // 1 in trillion chance. We are potentially incurring data loss in the archive directory if<a name="line.505"></a>
<span class="sourceLineNo">506</span>      // the files are not identical. The timestamped backup will be cleaned by HFileCleaner as it<a name="line.506"></a>
<span class="sourceLineNo">507</span>      // has no references.<a name="line.507"></a>
<span class="sourceLineNo">508</span>      FileStatus curStatus = fs.getFileStatus(currentFile.getPath());<a name="line.508"></a>
<span class="sourceLineNo">509</span>      FileStatus archiveStatus = fs.getFileStatus(archiveFile);<a name="line.509"></a>
<span class="sourceLineNo">510</span>      long curLen = curStatus.getLen();<a name="line.510"></a>
<span class="sourceLineNo">511</span>      long archiveLen = archiveStatus.getLen();<a name="line.511"></a>
<span class="sourceLineNo">512</span>      long curMtime = curStatus.getModificationTime();<a name="line.512"></a>
<span class="sourceLineNo">513</span>      long archiveMtime = archiveStatus.getModificationTime();<a name="line.513"></a>
<span class="sourceLineNo">514</span>      if (curLen != archiveLen) {<a name="line.514"></a>
<span class="sourceLineNo">515</span>        LOG.error(<a name="line.515"></a>
<span class="sourceLineNo">516</span>          "{} already exists in archive with different size than current {}."<a name="line.516"></a>
<span class="sourceLineNo">517</span>            + " archiveLen: {} currentLen: {} archiveMtime: {} currentMtime: {}",<a name="line.517"></a>
<span class="sourceLineNo">518</span>          archiveFile, currentFile, archiveLen, curLen, archiveMtime, curMtime);<a name="line.518"></a>
<span class="sourceLineNo">519</span>        throw new IOException(<a name="line.519"></a>
<span class="sourceLineNo">520</span>          archiveFile + " already exists in archive with different size" + " than " + currentFile);<a name="line.520"></a>
<span class="sourceLineNo">521</span>      }<a name="line.521"></a>
<span class="sourceLineNo">522</span><a name="line.522"></a>
<span class="sourceLineNo">523</span>      LOG.error(<a name="line.523"></a>
<span class="sourceLineNo">524</span>        "{} already exists in archive, moving to timestamped backup and overwriting"<a name="line.524"></a>
<span class="sourceLineNo">525</span>          + " current {}. archiveLen: {} currentLen: {} archiveMtime: {} currentMtime: {}",<a name="line.525"></a>
<span class="sourceLineNo">526</span>        archiveFile, currentFile, archiveLen, curLen, archiveMtime, curMtime);<a name="line.526"></a>
<span class="sourceLineNo">527</span><a name="line.527"></a>
<span class="sourceLineNo">528</span>      // move the archive file to the stamped backup<a name="line.528"></a>
<span class="sourceLineNo">529</span>      Path backedupArchiveFile = new Path(archiveDir, filename + SEPARATOR + archiveStartTime);<a name="line.529"></a>
<span class="sourceLineNo">530</span>      if (!fs.rename(archiveFile, backedupArchiveFile)) {<a name="line.530"></a>
<span class="sourceLineNo">531</span>        LOG.error("Could not rename archive file to backup: " + backedupArchiveFile<a name="line.531"></a>
<span class="sourceLineNo">532</span>          + ", deleting existing file in favor of newer.");<a name="line.532"></a>
<span class="sourceLineNo">533</span>        // try to delete the existing file, if we can't rename it<a name="line.533"></a>
<span class="sourceLineNo">534</span>        if (!fs.delete(archiveFile, false)) {<a name="line.534"></a>
<span class="sourceLineNo">535</span>          throw new IOException("Couldn't delete existing archive file (" + archiveFile<a name="line.535"></a>
<span class="sourceLineNo">536</span>            + ") or rename it to the backup file (" + backedupArchiveFile<a name="line.536"></a>
<span class="sourceLineNo">537</span>            + ") to make room for similarly named file.");<a name="line.537"></a>
<span class="sourceLineNo">538</span>        }<a name="line.538"></a>
<span class="sourceLineNo">539</span>      } else {<a name="line.539"></a>
<span class="sourceLineNo">540</span>        LOG.info("Backed up archive file from {} to {}.", archiveFile, backedupArchiveFile);<a name="line.540"></a>
<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
<span class="sourceLineNo">542</span>    }<a name="line.542"></a>
<span class="sourceLineNo">543</span><a name="line.543"></a>
<span class="sourceLineNo">544</span>    LOG.trace("No existing file in archive for {}, free to archive original file.", archiveFile);<a name="line.544"></a>
<span class="sourceLineNo">545</span><a name="line.545"></a>
<span class="sourceLineNo">546</span>    // at this point, we should have a free spot for the archive file<a name="line.546"></a>
<span class="sourceLineNo">547</span>    boolean success = false;<a name="line.547"></a>
<span class="sourceLineNo">548</span>    for (int i = 0; !success &amp;&amp; i &lt; DEFAULT_RETRIES_NUMBER; ++i) {<a name="line.548"></a>
<span class="sourceLineNo">549</span>      if (i &gt; 0) {<a name="line.549"></a>
<span class="sourceLineNo">550</span>        // Ensure that the archive directory exists.<a name="line.550"></a>
<span class="sourceLineNo">551</span>        // The previous "move to archive" operation has failed probably because<a name="line.551"></a>
<span class="sourceLineNo">552</span>        // the cleaner has removed our archive directory (HBASE-7643).<a name="line.552"></a>
<span class="sourceLineNo">553</span>        // (we're in a retry loop, so don't worry too much about the exception)<a name="line.553"></a>
<span class="sourceLineNo">554</span>        try {<a name="line.554"></a>
<span class="sourceLineNo">555</span>          if (!fs.exists(archiveDir)) {<a name="line.555"></a>
<span class="sourceLineNo">556</span>            if (fs.mkdirs(archiveDir)) {<a name="line.556"></a>
<span class="sourceLineNo">557</span>              LOG.debug("Created archive directory {}", archiveDir);<a name="line.557"></a>
<span class="sourceLineNo">558</span>            }<a name="line.558"></a>
<span class="sourceLineNo">559</span>          }<a name="line.559"></a>
<span class="sourceLineNo">560</span>        } catch (IOException e) {<a name="line.560"></a>
<span class="sourceLineNo">561</span>          LOG.warn("Failed to create directory {}", archiveDir, e);<a name="line.561"></a>
<span class="sourceLineNo">562</span>        }<a name="line.562"></a>
<span class="sourceLineNo">563</span>      }<a name="line.563"></a>
<span class="sourceLineNo">564</span><a name="line.564"></a>
<span class="sourceLineNo">565</span>      try {<a name="line.565"></a>
<span class="sourceLineNo">566</span>        success = currentFile.moveAndClose(archiveFile);<a name="line.566"></a>
<span class="sourceLineNo">567</span>      } catch (FileNotFoundException fnfe) {<a name="line.567"></a>
<span class="sourceLineNo">568</span>        LOG.warn("Failed to archive " + currentFile<a name="line.568"></a>
<span class="sourceLineNo">569</span>          + " because it does not exist! Skipping and continuing on.", fnfe);<a name="line.569"></a>
<span class="sourceLineNo">570</span>        success = true;<a name="line.570"></a>
<span class="sourceLineNo">571</span>      } catch (IOException e) {<a name="line.571"></a>
<span class="sourceLineNo">572</span>        success = false;<a name="line.572"></a>
<span class="sourceLineNo">573</span>        // When HFiles are placed on a filesystem other than HDFS a rename operation can be a<a name="line.573"></a>
<span class="sourceLineNo">574</span>        // non-atomic file copy operation. It can take a long time to copy a large hfile and if<a name="line.574"></a>
<span class="sourceLineNo">575</span>        // interrupted there may be a partially copied file present at the destination. We must<a name="line.575"></a>
<span class="sourceLineNo">576</span>        // remove the partially copied file, if any, or otherwise the archive operation will fail<a name="line.576"></a>
<span class="sourceLineNo">577</span>        // indefinitely from this point.<a name="line.577"></a>
<span class="sourceLineNo">578</span>        LOG.warn("Failed to archive " + currentFile + " on try #" + i, e);<a name="line.578"></a>
<span class="sourceLineNo">579</span>        try {<a name="line.579"></a>
<span class="sourceLineNo">580</span>          fs.delete(archiveFile, false);<a name="line.580"></a>
<span class="sourceLineNo">581</span>        } catch (FileNotFoundException fnfe) {<a name="line.581"></a>
<span class="sourceLineNo">582</span>          // This case is fine.<a name="line.582"></a>
<span class="sourceLineNo">583</span>        } catch (IOException ee) {<a name="line.583"></a>
<span class="sourceLineNo">584</span>          // Complain about other IO exceptions<a name="line.584"></a>
<span class="sourceLineNo">585</span>          LOG.warn("Failed to clean up from failure to archive " + currentFile + " on try #" + i,<a name="line.585"></a>
<span class="sourceLineNo">586</span>            ee);<a name="line.586"></a>
<span class="sourceLineNo">587</span>        }<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><a name="line.590"></a>
<span class="sourceLineNo">591</span>    if (!success) {<a name="line.591"></a>
<span class="sourceLineNo">592</span>      LOG.error("Failed to archive " + currentFile);<a name="line.592"></a>
<span class="sourceLineNo">593</span>      return false;<a name="line.593"></a>
<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
<span class="sourceLineNo">595</span><a name="line.595"></a>
<span class="sourceLineNo">596</span>    LOG.debug("Archived from {} to {}", currentFile, archiveFile);<a name="line.596"></a>
<span class="sourceLineNo">597</span>    return true;<a name="line.597"></a>
<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
<span class="sourceLineNo">599</span><a name="line.599"></a>
<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
<span class="sourceLineNo">601</span>   * Without regard for backup, delete a region. Should be used with caution.<a name="line.601"></a>
<span class="sourceLineNo">602</span>   * @param regionDir {@link Path} to the region to be deleted.<a name="line.602"></a>
<span class="sourceLineNo">603</span>   * @param fs        FileSystem from which to delete the region<a name="line.603"></a>
<span class="sourceLineNo">604</span>   * @return &lt;tt&gt;true&lt;/tt&gt; on successful deletion, &lt;tt&gt;false&lt;/tt&gt; otherwise<a name="line.604"></a>
<span class="sourceLineNo">605</span>   * @throws IOException on filesystem operation failure<a name="line.605"></a>
<span class="sourceLineNo">606</span>   */<a name="line.606"></a>
<span class="sourceLineNo">607</span>  private static boolean deleteRegionWithoutArchiving(FileSystem fs, Path regionDir)<a name="line.607"></a>
<span class="sourceLineNo">608</span>    throws IOException {<a name="line.608"></a>
<span class="sourceLineNo">609</span>    if (fs.delete(regionDir, true)) {<a name="line.609"></a>
<span class="sourceLineNo">610</span>      LOG.debug("Deleted {}", regionDir);<a name="line.610"></a>
<span class="sourceLineNo">611</span>      return true;<a name="line.611"></a>
<span class="sourceLineNo">612</span>    }<a name="line.612"></a>
<span class="sourceLineNo">613</span>    LOG.debug("Failed to delete directory {}", regionDir);<a name="line.613"></a>
<span class="sourceLineNo">614</span>    return false;<a name="line.614"></a>
<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
<span class="sourceLineNo">616</span><a name="line.616"></a>
<span class="sourceLineNo">617</span>  /**<a name="line.617"></a>
<span class="sourceLineNo">618</span>   * Just do a simple delete of the given store files<a name="line.618"></a>
<span class="sourceLineNo">619</span>   * &lt;p&gt;<a name="line.619"></a>
<span class="sourceLineNo">620</span>   * A best effort is made to delete each of the files, rather than bailing on the first failure.<a name="line.620"></a>
<span class="sourceLineNo">621</span>   * &lt;p&gt;<a name="line.621"></a>
<span class="sourceLineNo">622</span>   * @param compactedFiles store files to delete from the file system.<a name="line.622"></a>
<span class="sourceLineNo">623</span>   * @throws IOException if a file cannot be deleted. All files will be attempted to deleted before<a name="line.623"></a>
<span class="sourceLineNo">624</span>   *                     throwing the exception, rather than failing at the first file.<a name="line.624"></a>
<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
<span class="sourceLineNo">626</span>  private static void deleteStoreFilesWithoutArchiving(Collection&lt;HStoreFile&gt; compactedFiles)<a name="line.626"></a>
<span class="sourceLineNo">627</span>    throws IOException {<a name="line.627"></a>
<span class="sourceLineNo">628</span>    LOG.debug("Deleting files without archiving.");<a name="line.628"></a>
<span class="sourceLineNo">629</span>    List&lt;IOException&gt; errors = new ArrayList&lt;&gt;(0);<a name="line.629"></a>
<span class="sourceLineNo">630</span>    for (HStoreFile hsf : compactedFiles) {<a name="line.630"></a>
<span class="sourceLineNo">631</span>      try {<a name="line.631"></a>
<span class="sourceLineNo">632</span>        hsf.deleteStoreFile();<a name="line.632"></a>
<span class="sourceLineNo">633</span>      } catch (IOException e) {<a name="line.633"></a>
<span class="sourceLineNo">634</span>        LOG.error("Failed to delete {}", hsf.getPath());<a name="line.634"></a>
<span class="sourceLineNo">635</span>        errors.add(e);<a name="line.635"></a>
<span class="sourceLineNo">636</span>      }<a name="line.636"></a>
<span class="sourceLineNo">637</span>    }<a name="line.637"></a>
<span class="sourceLineNo">638</span>    if (errors.size() &gt; 0) {<a name="line.638"></a>
<span class="sourceLineNo">639</span>      throw MultipleIOException.createIOException(errors);<a name="line.639"></a>
<span class="sourceLineNo">640</span>    }<a name="line.640"></a>
<span class="sourceLineNo">641</span>  }<a name="line.641"></a>
<span class="sourceLineNo">642</span><a name="line.642"></a>
<span class="sourceLineNo">643</span>  /**<a name="line.643"></a>
<span class="sourceLineNo">644</span>   * Adapt a type to match the {@link File} interface, which is used internally for handling<a name="line.644"></a>
<span class="sourceLineNo">645</span>   * archival/removal of files<a name="line.645"></a>
<span class="sourceLineNo">646</span>   * @param &lt;T&gt; type to adapt to the {@link File} interface<a name="line.646"></a>
<span class="sourceLineNo">647</span>   */<a name="line.647"></a>
<span class="sourceLineNo">648</span>  private static abstract class FileConverter&lt;T&gt; implements Function&lt;T, File&gt; {<a name="line.648"></a>
<span class="sourceLineNo">649</span>    protected final FileSystem fs;<a name="line.649"></a>
<span class="sourceLineNo">650</span><a name="line.650"></a>
<span class="sourceLineNo">651</span>    public FileConverter(FileSystem fs) {<a name="line.651"></a>
<span class="sourceLineNo">652</span>      this.fs = fs;<a name="line.652"></a>
<span class="sourceLineNo">653</span>    }<a name="line.653"></a>
<span class="sourceLineNo">654</span>  }<a name="line.654"></a>
<span class="sourceLineNo">655</span><a name="line.655"></a>
<span class="sourceLineNo">656</span>  /**<a name="line.656"></a>
<span class="sourceLineNo">657</span>   * Convert a FileStatus to something we can manage in the archiving<a name="line.657"></a>
<span class="sourceLineNo">658</span>   */<a name="line.658"></a>
<span class="sourceLineNo">659</span>  private static class FileStatusConverter extends FileConverter&lt;FileStatus&gt; {<a name="line.659"></a>
<span class="sourceLineNo">660</span>    public FileStatusConverter(FileSystem fs) {<a name="line.660"></a>
<span class="sourceLineNo">661</span>      super(fs);<a name="line.661"></a>
<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
<span class="sourceLineNo">663</span><a name="line.663"></a>
<span class="sourceLineNo">664</span>    @Override<a name="line.664"></a>
<span class="sourceLineNo">665</span>    public File apply(FileStatus input) {<a name="line.665"></a>
<span class="sourceLineNo">666</span>      return new FileablePath(fs, input.getPath());<a name="line.666"></a>
<span class="sourceLineNo">667</span>    }<a name="line.667"></a>
<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
<span class="sourceLineNo">669</span><a name="line.669"></a>
<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
<span class="sourceLineNo">671</span>   * Convert the {@link HStoreFile} into something we can manage in the archive methods<a name="line.671"></a>
<span class="sourceLineNo">672</span>   */<a name="line.672"></a>
<span class="sourceLineNo">673</span>  private static class StoreToFile extends FileConverter&lt;HStoreFile&gt; {<a name="line.673"></a>
<span class="sourceLineNo">674</span>    public StoreToFile(FileSystem fs) {<a name="line.674"></a>
<span class="sourceLineNo">675</span>      super(fs);<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>    @Override<a name="line.678"></a>
<span class="sourceLineNo">679</span>    public File apply(HStoreFile input) {<a name="line.679"></a>
<span class="sourceLineNo">680</span>      return new FileableStoreFile(fs, input);<a name="line.680"></a>
<span class="sourceLineNo">681</span>    }<a name="line.681"></a>
<span class="sourceLineNo">682</span>  }<a name="line.682"></a>
<span class="sourceLineNo">683</span><a name="line.683"></a>
<span class="sourceLineNo">684</span>  /**<a name="line.684"></a>
<span class="sourceLineNo">685</span>   * Wrapper to handle file operations uniformly<a name="line.685"></a>
<span class="sourceLineNo">686</span>   */<a name="line.686"></a>
<span class="sourceLineNo">687</span>  private static abstract class File {<a name="line.687"></a>
<span class="sourceLineNo">688</span>    protected final FileSystem fs;<a name="line.688"></a>
<span class="sourceLineNo">689</span><a name="line.689"></a>
<span class="sourceLineNo">690</span>    public File(FileSystem fs) {<a name="line.690"></a>
<span class="sourceLineNo">691</span>      this.fs = fs;<a name="line.691"></a>
<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
<span class="sourceLineNo">693</span><a name="line.693"></a>
<span class="sourceLineNo">694</span>    /**<a name="line.694"></a>
<span class="sourceLineNo">695</span>     * Delete the file<a name="line.695"></a>
<span class="sourceLineNo">696</span>     * @throws IOException on failure<a name="line.696"></a>
<span class="sourceLineNo">697</span>     */<a name="line.697"></a>
<span class="sourceLineNo">698</span>    abstract void delete() throws IOException;<a name="line.698"></a>
<span class="sourceLineNo">699</span><a name="line.699"></a>
<span class="sourceLineNo">700</span>    /**<a name="line.700"></a>
<span class="sourceLineNo">701</span>     * Check to see if this is a file or a directory<a name="line.701"></a>
<span class="sourceLineNo">702</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if it is a file, &lt;tt&gt;false&lt;/tt&gt; otherwise<a name="line.702"></a>
<span class="sourceLineNo">703</span>     * @throws IOException on {@link FileSystem} connection error<a name="line.703"></a>
<span class="sourceLineNo">704</span>     */<a name="line.704"></a>
<span class="sourceLineNo">705</span>    abstract boolean isFile() throws IOException;<a name="line.705"></a>
<span class="sourceLineNo">706</span><a name="line.706"></a>
<span class="sourceLineNo">707</span>    /**<a name="line.707"></a>
<span class="sourceLineNo">708</span>     * @return if this is a directory, returns all the children in the directory, otherwise returns<a name="line.708"></a>
<span class="sourceLineNo">709</span>     *         an empty list<a name="line.709"></a>
<span class="sourceLineNo">710</span>     */<a name="line.710"></a>
<span class="sourceLineNo">711</span>    abstract Collection&lt;File&gt; getChildren() throws IOException;<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>     * close any outside readers of the file<a name="line.714"></a>
<span class="sourceLineNo">715</span>     */<a name="line.715"></a>
<span class="sourceLineNo">716</span>    abstract void close() throws IOException;<a name="line.716"></a>
<span class="sourceLineNo">717</span><a name="line.717"></a>
<span class="sourceLineNo">718</span>    /** Returns the name of the file (not the full fs path, just the individual file name) */<a name="line.718"></a>
<span class="sourceLineNo">719</span>    abstract String getName();<a name="line.719"></a>
<span class="sourceLineNo">720</span><a name="line.720"></a>
<span class="sourceLineNo">721</span>    /** Returns the path to this file */<a name="line.721"></a>
<span class="sourceLineNo">722</span>    abstract Path getPath();<a name="line.722"></a>
<span class="sourceLineNo">723</span><a name="line.723"></a>
<span class="sourceLineNo">724</span>    /**<a name="line.724"></a>
<span class="sourceLineNo">725</span>     * Move the file to the given destination<a name="line.725"></a>
<span class="sourceLineNo">726</span>     * @return &lt;tt&gt;true&lt;/tt&gt; on success<a name="line.726"></a>
<span class="sourceLineNo">727</span>     */<a name="line.727"></a>
<span class="sourceLineNo">728</span>    public boolean moveAndClose(Path dest) throws IOException {<a name="line.728"></a>
<span class="sourceLineNo">729</span>      this.close();<a name="line.729"></a>
<span class="sourceLineNo">730</span>      Path p = this.getPath();<a name="line.730"></a>
<span class="sourceLineNo">731</span>      return CommonFSUtils.renameAndSetModifyTime(fs, p, dest);<a name="line.731"></a>
<span class="sourceLineNo">732</span>    }<a name="line.732"></a>
<span class="sourceLineNo">733</span><a name="line.733"></a>
<span class="sourceLineNo">734</span>    /** Returns the {@link FileSystem} on which this file resides */<a name="line.734"></a>
<span class="sourceLineNo">735</span>    public FileSystem getFileSystem() {<a name="line.735"></a>
<span class="sourceLineNo">736</span>      return this.fs;<a name="line.736"></a>
<span class="sourceLineNo">737</span>    }<a name="line.737"></a>
<span class="sourceLineNo">738</span><a name="line.738"></a>
<span class="sourceLineNo">739</span>    @Override<a name="line.739"></a>
<span class="sourceLineNo">740</span>    public String toString() {<a name="line.740"></a>
<span class="sourceLineNo">741</span>      return this.getClass().getSimpleName() + ", " + getPath().toString();<a name="line.741"></a>
<span class="sourceLineNo">742</span>    }<a name="line.742"></a>
<span class="sourceLineNo">743</span>  }<a name="line.743"></a>
<span class="sourceLineNo">744</span><a name="line.744"></a>
<span class="sourceLineNo">745</span>  /**<a name="line.745"></a>
<span class="sourceLineNo">746</span>   * A {@link File} that wraps a simple {@link Path} on a {@link FileSystem}.<a name="line.746"></a>
<span class="sourceLineNo">747</span>   */<a name="line.747"></a>
<span class="sourceLineNo">748</span>  private static class FileablePath extends File {<a name="line.748"></a>
<span class="sourceLineNo">749</span>    private final Path file;<a name="line.749"></a>
<span class="sourceLineNo">750</span>    private final FileStatusConverter getAsFile;<a name="line.750"></a>
<span class="sourceLineNo">751</span><a name="line.751"></a>
<span class="sourceLineNo">752</span>    public FileablePath(FileSystem fs, Path file) {<a name="line.752"></a>
<span class="sourceLineNo">753</span>      super(fs);<a name="line.753"></a>
<span class="sourceLineNo">754</span>      this.file = file;<a name="line.754"></a>
<span class="sourceLineNo">755</span>      this.getAsFile = new FileStatusConverter(fs);<a name="line.755"></a>
<span class="sourceLineNo">756</span>    }<a name="line.756"></a>
<span class="sourceLineNo">757</span><a name="line.757"></a>
<span class="sourceLineNo">758</span>    @Override<a name="line.758"></a>
<span class="sourceLineNo">759</span>    public void delete() throws IOException {<a name="line.759"></a>
<span class="sourceLineNo">760</span>      if (!fs.delete(file, true)) throw new IOException("Failed to delete:" + this.file);<a name="line.760"></a>
<span class="sourceLineNo">761</span>    }<a name="line.761"></a>
<span class="sourceLineNo">762</span><a name="line.762"></a>
<span class="sourceLineNo">763</span>    @Override<a name="line.763"></a>
<span class="sourceLineNo">764</span>    public String getName() {<a name="line.764"></a>
<span class="sourceLineNo">765</span>      return file.getName();<a name="line.765"></a>
<span class="sourceLineNo">766</span>    }<a name="line.766"></a>
<span class="sourceLineNo">767</span><a name="line.767"></a>
<span class="sourceLineNo">768</span>    @Override<a name="line.768"></a>
<span class="sourceLineNo">769</span>    public Collection&lt;File&gt; getChildren() throws IOException {<a name="line.769"></a>
<span class="sourceLineNo">770</span>      if (fs.isFile(file)) {<a name="line.770"></a>
<span class="sourceLineNo">771</span>        return Collections.emptyList();<a name="line.771"></a>
<span class="sourceLineNo">772</span>      }<a name="line.772"></a>
<span class="sourceLineNo">773</span>      return Stream.of(fs.listStatus(file)).map(getAsFile).collect(Collectors.toList());<a name="line.773"></a>
<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
<span class="sourceLineNo">775</span><a name="line.775"></a>
<span class="sourceLineNo">776</span>    @Override<a name="line.776"></a>
<span class="sourceLineNo">777</span>    public boolean isFile() throws IOException {<a name="line.777"></a>
<span class="sourceLineNo">778</span>      return fs.isFile(file);<a name="line.778"></a>
<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
<span class="sourceLineNo">780</span><a name="line.780"></a>
<span class="sourceLineNo">781</span>    @Override<a name="line.781"></a>
<span class="sourceLineNo">782</span>    public void close() throws IOException {<a name="line.782"></a>
<span class="sourceLineNo">783</span>      // NOOP - files are implicitly closed on removal<a name="line.783"></a>
<span class="sourceLineNo">784</span>    }<a name="line.784"></a>
<span class="sourceLineNo">785</span><a name="line.785"></a>
<span class="sourceLineNo">786</span>    @Override<a name="line.786"></a>
<span class="sourceLineNo">787</span>    Path getPath() {<a name="line.787"></a>
<span class="sourceLineNo">788</span>      return file;<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>  /**<a name="line.792"></a>
<span class="sourceLineNo">793</span>   * {@link File} adapter for a {@link HStoreFile} living on a {@link FileSystem} .<a name="line.793"></a>
<span class="sourceLineNo">794</span>   */<a name="line.794"></a>
<span class="sourceLineNo">795</span>  private static class FileableStoreFile extends File {<a name="line.795"></a>
<span class="sourceLineNo">796</span>    HStoreFile file;<a name="line.796"></a>
<span class="sourceLineNo">797</span><a name="line.797"></a>
<span class="sourceLineNo">798</span>    public FileableStoreFile(FileSystem fs, HStoreFile store) {<a name="line.798"></a>
<span class="sourceLineNo">799</span>      super(fs);<a name="line.799"></a>
<span class="sourceLineNo">800</span>      this.file = store;<a name="line.800"></a>
<span class="sourceLineNo">801</span>    }<a name="line.801"></a>
<span class="sourceLineNo">802</span><a name="line.802"></a>
<span class="sourceLineNo">803</span>    @Override<a name="line.803"></a>
<span class="sourceLineNo">804</span>    public void delete() throws IOException {<a name="line.804"></a>
<span class="sourceLineNo">805</span>      file.deleteStoreFile();<a name="line.805"></a>
<span class="sourceLineNo">806</span>    }<a name="line.806"></a>
<span class="sourceLineNo">807</span><a name="line.807"></a>
<span class="sourceLineNo">808</span>    @Override<a name="line.808"></a>
<span class="sourceLineNo">809</span>    public String getName() {<a name="line.809"></a>
<span class="sourceLineNo">810</span>      return file.getPath().getName();<a name="line.810"></a>
<span class="sourceLineNo">811</span>    }<a name="line.811"></a>
<span class="sourceLineNo">812</span><a name="line.812"></a>
<span class="sourceLineNo">813</span>    @Override<a name="line.813"></a>
<span class="sourceLineNo">814</span>    public boolean isFile() {<a name="line.814"></a>
<span class="sourceLineNo">815</span>      return true;<a name="line.815"></a>
<span class="sourceLineNo">816</span>    }<a name="line.816"></a>
<span class="sourceLineNo">817</span><a name="line.817"></a>
<span class="sourceLineNo">818</span>    @Override<a name="line.818"></a>
<span class="sourceLineNo">819</span>    public Collection&lt;File&gt; getChildren() throws IOException {<a name="line.819"></a>
<span class="sourceLineNo">820</span>      // storefiles don't have children<a name="line.820"></a>
<span class="sourceLineNo">821</span>      return Collections.emptyList();<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 close() throws IOException {<a name="line.825"></a>
<span class="sourceLineNo">826</span>      file.closeStoreFile(true);<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>    Path getPath() {<a name="line.830"></a>
<span class="sourceLineNo">831</span>      return file.getPath();<a name="line.831"></a>
<span class="sourceLineNo">832</span>    }<a name="line.832"></a>
<span class="sourceLineNo">833</span>  }<a name="line.833"></a>
<span class="sourceLineNo">834</span>}<a name="line.834"></a>




























































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