You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2018/03/11 14:54:19 UTC

[19/25] hbase-site git commit: Published site at d5aaeee88b331e064830a2774f4fed238631457c.

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/89e23f78/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
index 2cc219b..4f006f4 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
@@ -220,30 +220,34 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.rsgroup">org.apache.hadoop.hbase.rsgroup</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.visibility">org.apache.hadoop.hbase.security.visibility</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.snapshot">org.apache.hadoop.hbase.snapshot</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.visibility">org.apache.hadoop.hbase.security.visibility</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.tool">org.apache.hadoop.hbase.tool</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.snapshot">org.apache.hadoop.hbase.snapshot</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.tool">org.apache.hadoop.hbase.tool</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.wal">org.apache.hadoop.hbase.wal</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.wal">org.apache.hadoop.hbase.wal</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.zookeeper">org.apache.hadoop.hbase.zookeeper</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -1553,6 +1557,24 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.rsgroup">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a> in <a href="../../../../../../org/apache/hadoop/hbase/rsgroup/package-summary.html">org.apache.hadoop.hbase.rsgroup</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/rsgroup/package-summary.html">org.apache.hadoop.hbase.rsgroup</a> that return <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&
 gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">RSGroupBasedLoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#correctAssignments-java.util.Map-">correctAssignments</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;existingAssignments)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.security.access">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/89e23f78/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index eaf05de..598e51f 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -533,13 +533,13 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/89e23f78/devapidocs/org/apache/hadoop/hbase/util/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-use.html b/devapidocs/org/apache/hadoop/hbase/util/package-use.html
index 25c93ba..f363d7f 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-use.html
@@ -281,36 +281,40 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.rsgroup">org.apache.hadoop.hbase.rsgroup</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.visibility">org.apache.hadoop.hbase.security.visibility</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.snapshot">org.apache.hadoop.hbase.snapshot</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.visibility">org.apache.hadoop.hbase.security.visibility</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.snapshot">org.apache.hadoop.hbase.snapshot</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.thrift">org.apache.hadoop.hbase.thrift</a></td>
 <td class="colLast">
 <div class="block">Provides an HBase <a href="http://incubator.apache.org/thrift/">Thrift</a>
 service.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.thrift2">org.apache.hadoop.hbase.thrift2</a></td>
 <td class="colLast">
 <div class="block">Provides an HBase <a href="http://thrift.apache.org/">Thrift</a>
 service.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.tool">org.apache.hadoop.hbase.tool</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.types">org.apache.hadoop.hbase.types</a></td>
 <td class="colLast">
 <div class="block">
@@ -318,19 +322,19 @@ service.</div>
  extensible data type API.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.util.hbck">org.apache.hadoop.hbase.util.hbck</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.wal">org.apache.hadoop.hbase.wal</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.zookeeper">org.apache.hadoop.hbase.zookeeper</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -1371,6 +1375,23 @@ service.</div>
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.rsgroup">
+<!--   -->
+</a>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../../../org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a> used by <a href="../../../../../org/apache/hadoop/hbase/rsgroup/package-summary.html">org.apache.hadoop.hbase.rsgroup</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Pair.html#org.apache.hadoop.hbase.rsgroup">Pair</a>
+<div class="block">A generic class for pairs.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.security.access">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/89e23f78/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index c0e28b4..9ec5b35 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -189,8 +189,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/89e23f78/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 71b6351..50f82c5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span>  public static final String revision = "45bbee4905fb031259c935502444c729b32ddac8";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "d5aaeee88b331e064830a2774f4fed238631457c";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Sat Mar 10 14:41:51 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Sun Mar 11 14:41:48 UTC 2018";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://asf920.gq1.ygridcore.net/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "ab48fe70c3185997530bec793561bd68";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "ab69d3995cfa81a49b4fd72d718151b5";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/89e23f78/devapidocs/src-html/org/apache/hadoop/hbase/backup/HBackupFileSystem.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/HBackupFileSystem.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/HBackupFileSystem.html
index d7c91d0..9f493ef 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/HBackupFileSystem.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/HBackupFileSystem.html
@@ -71,85 +71,104 @@
 <span class="sourceLineNo">063</span>        + Path.SEPARATOR;<a name="line.63"></a>
 <span class="sourceLineNo">064</span>  }<a name="line.64"></a>
 <span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  public static String getTableBackupDataDir(String backupRootDir, String backupId,<a name="line.66"></a>
-<span class="sourceLineNo">067</span>      TableName tableName) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    return getTableBackupDir(backupRootDir, backupId, tableName) + Path.SEPARATOR + "data";<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public static Path getBackupPath(String backupRootDir, String backupId) {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    return new Path(backupRootDir + Path.SEPARATOR + backupId);<a name="line.72"></a>
+<span class="sourceLineNo">066</span>  /**<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   * Get backup temporary directory<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * @param backupRootDir backup root<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * @return backup tmp directory path<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   */<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  public static Path getBackupTmpDirPath(String backupRootDir) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    return new Path(backupRootDir, ".tmp");<a name="line.72"></a>
 <span class="sourceLineNo">073</span>  }<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>   * Given the backup root dir, backup id and the table name, return the backup image location,<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * which is also where the backup manifest file is. return value look like:<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * "hdfs://backup.hbase.org:9000/user/biadmin/backup/backup_1396650096738/default/t1_dn/", where<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * "hdfs://backup.hbase.org:9000/user/biadmin/backup" is a backup root directory<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * @param backupRootPath backup root path<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * @param tableName table name<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param backupId backup Id<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @return backupPath for the particular table<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   */<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static Path getTableBackupPath(TableName tableName, Path backupRootPath, String backupId) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    return new Path(getTableBackupDir(backupRootPath.toString(), backupId, tableName));<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  /**<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * Given the backup root dir and the backup id, return the log file location for an incremental<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * backup.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * @param backupRootDir backup root directory<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * @param backupId backup id<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @return logBackupDir: ".../user/biadmin/backup/WALs/backup_1396650096738"<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   */<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public static String getLogBackupDir(String backupRootDir, String backupId) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    return backupRootDir + Path.SEPARATOR + backupId + Path.SEPARATOR<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        + HConstants.HREGION_LOGDIR_NAME;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public static Path getLogBackupPath(String backupRootDir, String backupId) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    return new Path(getLogBackupDir(backupRootDir, backupId));<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>  // TODO we do not keep WAL files anymore<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  // Move manifest file to other place<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private static Path getManifestPath(Configuration conf, Path backupRootPath, String backupId)<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      throws IOException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    FileSystem fs = backupRootPath.getFileSystem(conf);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    Path manifestPath =<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        new Path(getBackupPath(backupRootPath.toString(), backupId) + Path.SEPARATOR<a name="line.111"></a>
-<span class="sourceLineNo">112</span>            + BackupManifest.MANIFEST_FILE_NAME);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    if (!fs.exists(manifestPath)) {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      String errorMsg =<a name="line.114"></a>
-<span class="sourceLineNo">115</span>          "Could not find backup manifest " + BackupManifest.MANIFEST_FILE_NAME + " for "<a name="line.115"></a>
-<span class="sourceLineNo">116</span>              + backupId + ". File " + manifestPath + " does not exists. Did " + backupId<a name="line.116"></a>
-<span class="sourceLineNo">117</span>              + " correspond to previously taken backup ?";<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      throw new IOException(errorMsg);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    return manifestPath;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  public static BackupManifest<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      getManifest(Configuration conf, Path backupRootPath, String backupId) throws IOException {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    BackupManifest manifest =<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        new BackupManifest(conf, getManifestPath(conf, backupRootPath, backupId));<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    return manifest;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  }<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>   * Check whether the backup image path and there is manifest file in the path.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   * @param backupManifestMap If all the manifests are found, then they are put into this map<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * @param tableArray the tables involved<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * @throws IOException exception<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   */<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  public static void checkImageManifestExist(HashMap&lt;TableName, BackupManifest&gt; backupManifestMap,<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      TableName[] tableArray, Configuration conf, Path backupRootPath, String backupId)<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    for (TableName tableName : tableArray) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      BackupManifest manifest = getManifest(conf, backupRootPath, backupId);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      backupManifestMap.put(tableName, manifest);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>}<a name="line.144"></a>
+<span class="sourceLineNo">076</span>   * Get backup tmp directory for backupId<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param backupRoot backup root<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * @param backupId backup id<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * @return backup tmp directory path<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public static Path getBackupTmpDirPathForBackupId(String backupRoot, String backupId) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    return new Path(getBackupTmpDirPath(backupRoot), backupId);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public static String getTableBackupDataDir(String backupRootDir, String backupId,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      TableName tableName) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    return getTableBackupDir(backupRootDir, backupId, tableName) + Path.SEPARATOR + "data";<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public static Path getBackupPath(String backupRootDir, String backupId) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    return new Path(backupRootDir + Path.SEPARATOR + backupId);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  /**<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * Given the backup root dir, backup id and the table name, return the backup image location,<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * which is also where the backup manifest file is. return value look like:<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * "hdfs://backup.hbase.org:9000/user/biadmin/backup/backup_1396650096738/default/t1_dn/", where<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * "hdfs://backup.hbase.org:9000/user/biadmin/backup" is a backup root directory<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * @param backupRootPath backup root path<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * @param tableName table name<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * @param backupId backup Id<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * @return backupPath for the particular table<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   */<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public static Path getTableBackupPath(TableName tableName, Path backupRootPath, String backupId) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    return new Path(getTableBackupDir(backupRootPath.toString(), backupId, tableName));<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * Given the backup root dir and the backup id, return the log file location for an incremental<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * backup.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @param backupRootDir backup root directory<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * @param backupId backup id<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * @return logBackupDir: ".../user/biadmin/backup/WALs/backup_1396650096738"<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public static String getLogBackupDir(String backupRootDir, String backupId) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    return backupRootDir + Path.SEPARATOR + backupId + Path.SEPARATOR<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        + HConstants.HREGION_LOGDIR_NAME;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  public static Path getLogBackupPath(String backupRootDir, String backupId) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    return new Path(getLogBackupDir(backupRootDir, backupId));<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  }<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  // TODO we do not keep WAL files anymore<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  // Move manifest file to other place<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private static Path getManifestPath(Configuration conf, Path backupRootPath, String backupId)<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      throws IOException {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    FileSystem fs = backupRootPath.getFileSystem(conf);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    Path manifestPath =<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        new Path(getBackupPath(backupRootPath.toString(), backupId) + Path.SEPARATOR<a name="line.130"></a>
+<span class="sourceLineNo">131</span>            + BackupManifest.MANIFEST_FILE_NAME);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    if (!fs.exists(manifestPath)) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      String errorMsg =<a name="line.133"></a>
+<span class="sourceLineNo">134</span>          "Could not find backup manifest " + BackupManifest.MANIFEST_FILE_NAME + " for "<a name="line.134"></a>
+<span class="sourceLineNo">135</span>              + backupId + ". File " + manifestPath + " does not exists. Did " + backupId<a name="line.135"></a>
+<span class="sourceLineNo">136</span>              + " correspond to previously taken backup ?";<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      throw new IOException(errorMsg);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    return manifestPath;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  public static BackupManifest<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      getManifest(Configuration conf, Path backupRootPath, String backupId) throws IOException {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    BackupManifest manifest =<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        new BackupManifest(conf, getManifestPath(conf, backupRootPath, backupId));<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    return manifest;<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>  /**<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * Check whether the backup image path and there is manifest file in the path.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * @param backupManifestMap If all the manifests are found, then they are put into this map<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * @param tableArray the tables involved<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @throws IOException exception<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public static void checkImageManifestExist(HashMap&lt;TableName, BackupManifest&gt; backupManifestMap,<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      TableName[] tableArray, Configuration conf, Path backupRootPath, String backupId)<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      throws IOException {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    for (TableName tableName : tableArray) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      BackupManifest manifest = getManifest(conf, backupRootPath, backupId);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      backupManifestMap.put(tableName, manifest);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
+<span class="sourceLineNo">163</span>}<a name="line.163"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/89e23f78/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupAdminImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupAdminImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupAdminImpl.html
index 12f4f50..918c8a0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupAdminImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupAdminImpl.html
@@ -627,103 +627,104 @@
 <span class="sourceLineNo">619</span>  public void mergeBackups(String[] backupIds) throws IOException {<a name="line.619"></a>
 <span class="sourceLineNo">620</span>    try (final BackupSystemTable sysTable = new BackupSystemTable(conn)) {<a name="line.620"></a>
 <span class="sourceLineNo">621</span>      checkIfValidForMerge(backupIds, sysTable);<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      BackupMergeJob job = BackupRestoreFactory.getBackupMergeJob(conn.getConfiguration());<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      job.run(backupIds);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>  }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>  /**<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * Verifies that backup images are valid for merge.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   *<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * &lt;ul&gt;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * &lt;li&gt;All backups MUST be in the same destination<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * &lt;li&gt;No FULL backups are allowed - only INCREMENTAL<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   * &lt;li&gt;All backups must be in COMPLETE state<a name="line.633"></a>
-<span class="sourceLineNo">634</span>   * &lt;li&gt;No holes in backup list are allowed<a name="line.634"></a>
-<span class="sourceLineNo">635</span>   * &lt;/ul&gt;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>   * &lt;p&gt;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>   * @param backupIds list of backup ids<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * @param table backup system table<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * @throws IOException if the backup image is not valid for merge<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   */<a name="line.640"></a>
-<span class="sourceLineNo">641</span>  private void checkIfValidForMerge(String[] backupIds, BackupSystemTable table)<a name="line.641"></a>
-<span class="sourceLineNo">642</span>          throws IOException {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    String backupRoot = null;<a name="line.643"></a>
-<span class="sourceLineNo">644</span><a name="line.644"></a>
-<span class="sourceLineNo">645</span>    final Set&lt;TableName&gt; allTables = new HashSet&lt;&gt;();<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    final Set&lt;String&gt; allBackups = new HashSet&lt;&gt;();<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    long minTime = Long.MAX_VALUE, maxTime = Long.MIN_VALUE;<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    for (String backupId : backupIds) {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      BackupInfo bInfo = table.readBackupInfo(backupId);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      if (bInfo == null) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        String msg = "Backup session " + backupId + " not found";<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        throw new IOException(msg);<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      }<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      if (backupRoot == null) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        backupRoot = bInfo.getBackupRootDir();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      } else if (!bInfo.getBackupRootDir().equals(backupRoot)) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>        throw new IOException("Found different backup destinations in a list of a backup sessions "<a name="line.657"></a>
-<span class="sourceLineNo">658</span>                + "\n1. " + backupRoot + "\n" + "2. " + bInfo.getBackupRootDir());<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      }<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      if (bInfo.getType() == BackupType.FULL) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        throw new IOException("FULL backup image can not be merged for: \n" + bInfo);<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>      if (bInfo.getState() != BackupState.COMPLETE) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>        throw new IOException("Backup image " + backupId<a name="line.665"></a>
-<span class="sourceLineNo">666</span>            + " can not be merged becuase of its state: " + bInfo.getState());<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      }<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      allBackups.add(backupId);<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      allTables.addAll(bInfo.getTableNames());<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      long time = bInfo.getStartTs();<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      if (time &lt; minTime) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>        minTime = time;<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      }<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      if (time &gt; maxTime) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        maxTime = time;<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><a name="line.678"></a>
-<span class="sourceLineNo">679</span>    final long startRangeTime  = minTime;<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    final long endRangeTime = maxTime;<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    final String backupDest = backupRoot;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    // Check we have no 'holes' in backup id list<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    // Filter 1 : backupRoot<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    // Filter 2 : time range filter<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    // Filter 3 : table filter<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    BackupInfo.Filter destinationFilter = info -&gt; info.getBackupRootDir().equals(backupDest);<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>    BackupInfo.Filter timeRangeFilter = info -&gt; {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      long time = info.getStartTs();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      return time &gt;= startRangeTime &amp;&amp; time &lt;= endRangeTime ;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    };<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>    BackupInfo.Filter tableFilter = info -&gt; {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      List&lt;TableName&gt; tables = info.getTableNames();<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      return !Collections.disjoint(allTables, tables);<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    };<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>    BackupInfo.Filter typeFilter = info -&gt; info.getType() == BackupType.INCREMENTAL;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    BackupInfo.Filter stateFilter = info -&gt; info.getState() == BackupState.COMPLETE;<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>    List&lt;BackupInfo&gt; allInfos = table.getBackupHistory(-1, destinationFilter,<a name="line.701"></a>
-<span class="sourceLineNo">702</span>          timeRangeFilter, tableFilter, typeFilter, stateFilter);<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    if (allInfos.size() != allBackups.size()) {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      // Yes we have at least one  hole in backup image sequence<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      List&lt;String&gt; missingIds = new ArrayList&lt;&gt;();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      for(BackupInfo info: allInfos) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>        if(allBackups.contains(info.getBackupId())) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>          continue;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>        }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        missingIds.add(info.getBackupId());<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      }<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      String errMsg =<a name="line.712"></a>
-<span class="sourceLineNo">713</span>          "Sequence of backup ids has 'holes'. The following backup images must be added:" +<a name="line.713"></a>
-<span class="sourceLineNo">714</span>           org.apache.hadoop.util.StringUtils.join(",", missingIds);<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      throw new IOException(errMsg);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
-<span class="sourceLineNo">717</span>  }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>}<a name="line.718"></a>
+<span class="sourceLineNo">622</span>      //TODO run job on remote cluster<a name="line.622"></a>
+<span class="sourceLineNo">623</span>      BackupMergeJob job = BackupRestoreFactory.getBackupMergeJob(conn.getConfiguration());<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      job.run(backupIds);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    }<a name="line.625"></a>
+<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>  /**<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * Verifies that backup images are valid for merge.<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   *<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * &lt;ul&gt;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * &lt;li&gt;All backups MUST be in the same destination<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * &lt;li&gt;No FULL backups are allowed - only INCREMENTAL<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * &lt;li&gt;All backups must be in COMPLETE state<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * &lt;li&gt;No holes in backup list are allowed<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * &lt;/ul&gt;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   * &lt;p&gt;<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @param backupIds list of backup ids<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   * @param table backup system table<a name="line.639"></a>
+<span class="sourceLineNo">640</span>   * @throws IOException if the backup image is not valid for merge<a name="line.640"></a>
+<span class="sourceLineNo">641</span>   */<a name="line.641"></a>
+<span class="sourceLineNo">642</span>  private void checkIfValidForMerge(String[] backupIds, BackupSystemTable table)<a name="line.642"></a>
+<span class="sourceLineNo">643</span>          throws IOException {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    String backupRoot = null;<a name="line.644"></a>
+<span class="sourceLineNo">645</span><a name="line.645"></a>
+<span class="sourceLineNo">646</span>    final Set&lt;TableName&gt; allTables = new HashSet&lt;&gt;();<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    final Set&lt;String&gt; allBackups = new HashSet&lt;&gt;();<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    long minTime = Long.MAX_VALUE, maxTime = Long.MIN_VALUE;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>    for (String backupId : backupIds) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      BackupInfo bInfo = table.readBackupInfo(backupId);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      if (bInfo == null) {<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        String msg = "Backup session " + backupId + " not found";<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        throw new IOException(msg);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      if (backupRoot == null) {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>        backupRoot = bInfo.getBackupRootDir();<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      } else if (!bInfo.getBackupRootDir().equals(backupRoot)) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        throw new IOException("Found different backup destinations in a list of a backup sessions "<a name="line.658"></a>
+<span class="sourceLineNo">659</span>                + "\n1. " + backupRoot + "\n" + "2. " + bInfo.getBackupRootDir());<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      }<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      if (bInfo.getType() == BackupType.FULL) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        throw new IOException("FULL backup image can not be merged for: \n" + bInfo);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      }<a name="line.663"></a>
+<span class="sourceLineNo">664</span><a name="line.664"></a>
+<span class="sourceLineNo">665</span>      if (bInfo.getState() != BackupState.COMPLETE) {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>        throw new IOException("Backup image " + backupId<a name="line.666"></a>
+<span class="sourceLineNo">667</span>            + " can not be merged becuase of its state: " + bInfo.getState());<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      allBackups.add(backupId);<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      allTables.addAll(bInfo.getTableNames());<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      long time = bInfo.getStartTs();<a name="line.671"></a>
+<span class="sourceLineNo">672</span>      if (time &lt; minTime) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>        minTime = time;<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      }<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      if (time &gt; maxTime) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>        maxTime = time;<a name="line.676"></a>
+<span class="sourceLineNo">677</span>      }<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    }<a name="line.678"></a>
+<span class="sourceLineNo">679</span><a name="line.679"></a>
+<span class="sourceLineNo">680</span>    final long startRangeTime  = minTime;<a name="line.680"></a>
+<span class="sourceLineNo">681</span>    final long endRangeTime = maxTime;<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    final String backupDest = backupRoot;<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    // Check we have no 'holes' in backup id list<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    // Filter 1 : backupRoot<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    // Filter 2 : time range filter<a name="line.685"></a>
+<span class="sourceLineNo">686</span>    // Filter 3 : table filter<a name="line.686"></a>
+<span class="sourceLineNo">687</span>    BackupInfo.Filter destinationFilter = info -&gt; info.getBackupRootDir().equals(backupDest);<a name="line.687"></a>
+<span class="sourceLineNo">688</span><a name="line.688"></a>
+<span class="sourceLineNo">689</span>    BackupInfo.Filter timeRangeFilter = info -&gt; {<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      long time = info.getStartTs();<a name="line.690"></a>
+<span class="sourceLineNo">691</span>      return time &gt;= startRangeTime &amp;&amp; time &lt;= endRangeTime ;<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>    BackupInfo.Filter tableFilter = info -&gt; {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      List&lt;TableName&gt; tables = info.getTableNames();<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      return !Collections.disjoint(allTables, tables);<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    };<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>    BackupInfo.Filter typeFilter = info -&gt; info.getType() == BackupType.INCREMENTAL;<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    BackupInfo.Filter stateFilter = info -&gt; info.getState() == BackupState.COMPLETE;<a name="line.700"></a>
+<span class="sourceLineNo">701</span><a name="line.701"></a>
+<span class="sourceLineNo">702</span>    List&lt;BackupInfo&gt; allInfos = table.getBackupHistory(-1, destinationFilter,<a name="line.702"></a>
+<span class="sourceLineNo">703</span>          timeRangeFilter, tableFilter, typeFilter, stateFilter);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    if (allInfos.size() != allBackups.size()) {<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      // Yes we have at least one  hole in backup image sequence<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      List&lt;String&gt; missingIds = new ArrayList&lt;&gt;();<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      for(BackupInfo info: allInfos) {<a name="line.707"></a>
+<span class="sourceLineNo">708</span>        if(allBackups.contains(info.getBackupId())) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>          continue;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        }<a name="line.710"></a>
+<span class="sourceLineNo">711</span>        missingIds.add(info.getBackupId());<a name="line.711"></a>
+<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      String errMsg =<a name="line.713"></a>
+<span class="sourceLineNo">714</span>          "Sequence of backup ids has 'holes'. The following backup images must be added:" +<a name="line.714"></a>
+<span class="sourceLineNo">715</span>           org.apache.hadoop.util.StringUtils.join(",", missingIds);<a name="line.715"></a>
+<span class="sourceLineNo">716</span>      throw new IOException(errMsg);<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
+<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
+<span class="sourceLineNo">719</span>}<a name="line.719"></a>