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/06/14 22:22:20 UTC
[01/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Repository: hbase-site
Updated Branches:
refs/heads/asf-site 436b0b15e -> e11cf2cba
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index f1c834c..5ba20c9 100644
--- a/downloads.html
+++ b/downloads.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180613" />
+ <meta name="Date-Revision-yyyymmdd" content="20180614" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Apache HBase Downloads</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -366,7 +366,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-13</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-14</li>
</p>
</div>
[33/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html
index f236300..513d2ad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html
@@ -26,1048 +26,1115 @@
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.backup.impl;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.io.IOException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.net.URI;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.List;<a name="line.42"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.lang3.StringUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configured;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<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> * General backup commands, options and usage messages<a name="line.71"></a>
-<span class="sourceLineNo">072</span> */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceAudience.Private<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public final class BackupCommands {<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.77"></a>
-<span class="sourceLineNo">078</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.80"></a>
-<span class="sourceLineNo">081</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.81"></a>
-<span class="sourceLineNo">082</span> + " delete delete an existing backup image\n"<a name="line.82"></a>
-<span class="sourceLineNo">083</span> + " describe show the detailed information of a backup image\n"<a name="line.83"></a>
-<span class="sourceLineNo">084</span> + " history show history of all successful backups\n"<a name="line.84"></a>
-<span class="sourceLineNo">085</span> + " progress show the progress of the latest backup request\n"<a name="line.85"></a>
-<span class="sourceLineNo">086</span> + " set backup set management\n"<a name="line.86"></a>
-<span class="sourceLineNo">087</span> + " repair repair backup system table\n"<a name="line.87"></a>
-<span class="sourceLineNo">088</span> + " merge merge backup images\n"<a name="line.88"></a>
-<span class="sourceLineNo">089</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> public static final String CREATE_CMD_USAGE =<a name="line.91"></a>
-<span class="sourceLineNo">092</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.92"></a>
-<span class="sourceLineNo">093</span> + " type \"full\" to create a full backup image\n"<a name="line.93"></a>
-<span class="sourceLineNo">094</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.94"></a>
-<span class="sourceLineNo">095</span> + " backup_path Full path to store the backup image\n";<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.97"></a>
-<span class="sourceLineNo">098</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.98"></a>
-<span class="sourceLineNo">099</span> + " progress for currently running backup session.";<a name="line.99"></a>
-<span class="sourceLineNo">100</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.100"></a>
-<span class="sourceLineNo">101</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.103"></a>
-<span class="sourceLineNo">104</span> + " backup_id Backup image id\n";<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete <backup_id>\n"<a name="line.108"></a>
-<span class="sourceLineNo">109</span> + " backup_id Backup image id\n";<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.113"></a>
-<span class="sourceLineNo">114</span> + " name Backup set name\n"<a name="line.114"></a>
-<span class="sourceLineNo">115</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.115"></a>
-<span class="sourceLineNo">116</span> + " add add tables to a set, create a set if needed\n"<a name="line.116"></a>
-<span class="sourceLineNo">117</span> + " remove remove tables from a set\n"<a name="line.117"></a>
-<span class="sourceLineNo">118</span> + " list list all backup sets in the system\n"<a name="line.118"></a>
-<span class="sourceLineNo">119</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.119"></a>
-<span class="sourceLineNo">120</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.120"></a>
-<span class="sourceLineNo">121</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span> public static final String USAGE_FOOTER = "";<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> public static abstract class Command extends Configured {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> CommandLine cmdline;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> Connection conn;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> Command(Configuration conf) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (conf == null) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> conf = HBaseConfiguration.create();<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span> setConf(conf);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span> public void execute() throws IOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> printUsage();<a name="line.138"></a>
-<span class="sourceLineNo">139</span> throw new IOException(INCORRECT_USAGE);<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> // Create connection<a name="line.142"></a>
-<span class="sourceLineNo">143</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.143"></a>
-<span class="sourceLineNo">144</span> if (requiresNoActiveSession()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> // Check active session<a name="line.145"></a>
-<span class="sourceLineNo">146</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span> if (sessions.size() > 0) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.150"></a>
-<span class="sourceLineNo">151</span> System.err.println(sessions.get(0));<a name="line.151"></a>
-<span class="sourceLineNo">152</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.152"></a>
-<span class="sourceLineNo">153</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.153"></a>
-<span class="sourceLineNo">154</span> throw new IOException("Active session found, aborted command execution");<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> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> if (requiresConsistentState()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span> // Check failed delete<a name="line.159"></a>
-<span class="sourceLineNo">160</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (ids != null && ids.length > 0) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> System.err.println("Backup system recovery is required.");<a name="line.165"></a>
-<span class="sourceLineNo">166</span> throw new IOException("Failed backup DELETE found, aborted command execution");<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.169"></a>
-<span class="sourceLineNo">170</span> if (ids != null && ids.length > 0) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.171"></a>
-<span class="sourceLineNo">172</span> System.err.println("Backup system recovery is required.");<a name="line.172"></a>
-<span class="sourceLineNo">173</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> }<a name="line.175"></a>
-<span class="sourceLineNo">176</span> }<a name="line.176"></a>
-<span class="sourceLineNo">177</span> }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span> public void finish() throws IOException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (conn != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> conn.close();<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> protected abstract void printUsage();<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * The command can't be run if active backup session is in progress<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * @return true if no active sessions are in progress<a name="line.189"></a>
-<span class="sourceLineNo">190</span> */<a name="line.190"></a>
-<span class="sourceLineNo">191</span> protected boolean requiresNoActiveSession() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span> return false;<a name="line.192"></a>
-<span class="sourceLineNo">193</span> }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * because of an abnormal termination of a backup session or delete command<a name="line.197"></a>
-<span class="sourceLineNo">198</span> * @return true, if yes<a name="line.198"></a>
-<span class="sourceLineNo">199</span> */<a name="line.199"></a>
-<span class="sourceLineNo">200</span> protected boolean requiresConsistentState() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> return false;<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 BackupCommands() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> throw new AssertionError("Instantiating utility class...");<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> Command cmd;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> switch (type) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> case CREATE:<a name="line.212"></a>
-<span class="sourceLineNo">213</span> cmd = new CreateCommand(conf, cmdline);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span> case DESCRIBE:<a name="line.215"></a>
-<span class="sourceLineNo">216</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.216"></a>
+<span class="sourceLineNo">044</span>import java.io.IOException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.net.URI;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.List;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.lang3.StringUtils;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.conf.Configured;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.FileSystem;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.fs.Path;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.TableName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.yetus.audience.InterfaceAudience;<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> * General backup commands, options and usage messages<a name="line.75"></a>
+<span class="sourceLineNo">076</span> */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceAudience.Private<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public final class BackupCommands {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.81"></a>
+<span class="sourceLineNo">082</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.84"></a>
+<span class="sourceLineNo">085</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.85"></a>
+<span class="sourceLineNo">086</span> + " delete delete an existing backup image\n"<a name="line.86"></a>
+<span class="sourceLineNo">087</span> + " describe show the detailed information of a backup image\n"<a name="line.87"></a>
+<span class="sourceLineNo">088</span> + " history show history of all successful backups\n"<a name="line.88"></a>
+<span class="sourceLineNo">089</span> + " progress show the progress of the latest backup request\n"<a name="line.89"></a>
+<span class="sourceLineNo">090</span> + " set backup set management\n"<a name="line.90"></a>
+<span class="sourceLineNo">091</span> + " repair repair backup system table\n"<a name="line.91"></a>
+<span class="sourceLineNo">092</span> + " merge merge backup images\n"<a name="line.92"></a>
+<span class="sourceLineNo">093</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span> public static final String CREATE_CMD_USAGE =<a name="line.95"></a>
+<span class="sourceLineNo">096</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.96"></a>
+<span class="sourceLineNo">097</span> + " type \"full\" to create a full backup image\n"<a name="line.97"></a>
+<span class="sourceLineNo">098</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.98"></a>
+<span class="sourceLineNo">099</span> + " backup_path Full path to store the backup image\n";<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.101"></a>
+<span class="sourceLineNo">102</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.102"></a>
+<span class="sourceLineNo">103</span> + " progress for currently running backup session.";<a name="line.103"></a>
+<span class="sourceLineNo">104</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.104"></a>
+<span class="sourceLineNo">105</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.107"></a>
+<span class="sourceLineNo">108</span> + " backup_id Backup image id\n";<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete [options]";<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.116"></a>
+<span class="sourceLineNo">117</span> + " name Backup set name\n"<a name="line.117"></a>
+<span class="sourceLineNo">118</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.118"></a>
+<span class="sourceLineNo">119</span> + " add add tables to a set, create a set if needed\n"<a name="line.119"></a>
+<span class="sourceLineNo">120</span> + " remove remove tables from a set\n"<a name="line.120"></a>
+<span class="sourceLineNo">121</span> + " list list all backup sets in the system\n"<a name="line.121"></a>
+<span class="sourceLineNo">122</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.122"></a>
+<span class="sourceLineNo">123</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.123"></a>
+<span class="sourceLineNo">124</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static final String USAGE_FOOTER = "";<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> public static abstract class Command extends Configured {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> CommandLine cmdline;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> Connection conn;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span> Command(Configuration conf) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span> if (conf == null) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> conf = HBaseConfiguration.create();<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> setConf(conf);<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> public void execute() throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> printUsage();<a name="line.141"></a>
+<span class="sourceLineNo">142</span> throw new IOException(INCORRECT_USAGE);<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">145</span> // Create connection<a name="line.145"></a>
+<span class="sourceLineNo">146</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (requiresNoActiveSession()) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // Check active session<a name="line.148"></a>
+<span class="sourceLineNo">149</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span> if (sessions.size() > 0) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.153"></a>
+<span class="sourceLineNo">154</span> System.err.println(sessions.get(0));<a name="line.154"></a>
+<span class="sourceLineNo">155</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.155"></a>
+<span class="sourceLineNo">156</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.156"></a>
+<span class="sourceLineNo">157</span> throw new IOException("Active session found, aborted command execution");<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span> }<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span> if (requiresConsistentState()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span> // Check failed delete<a name="line.162"></a>
+<span class="sourceLineNo">163</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span> if (ids != null && ids.length > 0) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.167"></a>
+<span class="sourceLineNo">168</span> System.err.println("Backup system recovery is required.");<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throw new IOException("Failed backup DELETE found, aborted command execution");<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> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> if (ids != null && ids.length > 0) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.174"></a>
+<span class="sourceLineNo">175</span> System.err.println("Backup system recovery is required.");<a name="line.175"></a>
+<span class="sourceLineNo">176</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> }<a name="line.179"></a>
+<span class="sourceLineNo">180</span> }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span> public void finish() throws IOException {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> if (conn != null) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> conn.close();<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> protected abstract void printUsage();<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * The command can't be run if active backup session is in progress<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * @return true if no active sessions are in progress<a name="line.192"></a>
+<span class="sourceLineNo">193</span> */<a name="line.193"></a>
+<span class="sourceLineNo">194</span> protected boolean requiresNoActiveSession() {<a name="line.194"></a>
+<span class="sourceLineNo">195</span> return false;<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * because of an abnormal termination of a backup session or delete command<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * @return true, if yes<a name="line.201"></a>
+<span class="sourceLineNo">202</span> */<a name="line.202"></a>
+<span class="sourceLineNo">203</span> protected boolean requiresConsistentState() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return false;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> private BackupCommands() {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new AssertionError("Instantiating utility class...");<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> Command cmd;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> switch (type) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> case CREATE:<a name="line.215"></a>
+<span class="sourceLineNo">216</span> cmd = new CreateCommand(conf, cmdline);<a name="line.216"></a>
<span class="sourceLineNo">217</span> break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span> case PROGRESS:<a name="line.218"></a>
-<span class="sourceLineNo">219</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.219"></a>
+<span class="sourceLineNo">218</span> case DESCRIBE:<a name="line.218"></a>
+<span class="sourceLineNo">219</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.219"></a>
<span class="sourceLineNo">220</span> break;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> case DELETE:<a name="line.221"></a>
-<span class="sourceLineNo">222</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.222"></a>
+<span class="sourceLineNo">221</span> case PROGRESS:<a name="line.221"></a>
+<span class="sourceLineNo">222</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.222"></a>
<span class="sourceLineNo">223</span> break;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> case HISTORY:<a name="line.224"></a>
-<span class="sourceLineNo">225</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.225"></a>
+<span class="sourceLineNo">224</span> case DELETE:<a name="line.224"></a>
+<span class="sourceLineNo">225</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.225"></a>
<span class="sourceLineNo">226</span> break;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> case SET:<a name="line.227"></a>
-<span class="sourceLineNo">228</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.228"></a>
+<span class="sourceLineNo">227</span> case HISTORY:<a name="line.227"></a>
+<span class="sourceLineNo">228</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.228"></a>
<span class="sourceLineNo">229</span> break;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> case REPAIR:<a name="line.230"></a>
-<span class="sourceLineNo">231</span> cmd = new RepairCommand(conf, cmdline);<a name="line.231"></a>
+<span class="sourceLineNo">230</span> case SET:<a name="line.230"></a>
+<span class="sourceLineNo">231</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.231"></a>
<span class="sourceLineNo">232</span> break;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> case MERGE:<a name="line.233"></a>
-<span class="sourceLineNo">234</span> cmd = new MergeCommand(conf, cmdline);<a name="line.234"></a>
+<span class="sourceLineNo">233</span> case REPAIR:<a name="line.233"></a>
+<span class="sourceLineNo">234</span> cmd = new RepairCommand(conf, cmdline);<a name="line.234"></a>
<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> case HELP:<a name="line.236"></a>
-<span class="sourceLineNo">237</span> default:<a name="line.237"></a>
-<span class="sourceLineNo">238</span> cmd = new HelpCommand(conf, cmdline);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> break;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return cmd;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> static int numOfArgs(String[] args) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> if (args == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> return 0;<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> return args.length;<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
+<span class="sourceLineNo">236</span> case MERGE:<a name="line.236"></a>
+<span class="sourceLineNo">237</span> cmd = new MergeCommand(conf, cmdline);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> break;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> case HELP:<a name="line.239"></a>
+<span class="sourceLineNo">240</span> default:<a name="line.240"></a>
+<span class="sourceLineNo">241</span> cmd = new HelpCommand(conf, cmdline);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> break;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> return cmd;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> static int numOfArgs(String[] args) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> if (args == null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span> return 0;<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> public static class CreateCommand extends Command {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span> super(conf);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> this.cmdline = cmdline;<a name="line.255"></a>
-<span class="sourceLineNo">256</span> }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span> @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span> protected boolean requiresNoActiveSession() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> return true;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span> protected boolean requiresConsistentState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> return true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span> }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span> @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span> public void execute() throws IOException {<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> printUsage();<a name="line.271"></a>
-<span class="sourceLineNo">272</span> throw new IOException(INCORRECT_USAGE);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span> String[] args = cmdline.getArgs();<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (args.length != 3) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> printUsage();<a name="line.276"></a>
-<span class="sourceLineNo">277</span> throw new IOException(INCORRECT_USAGE);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.280"></a>
-<span class="sourceLineNo">281</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> printUsage();<a name="line.283"></a>
-<span class="sourceLineNo">284</span> throw new IOException(INCORRECT_USAGE);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span> if (!verifyPath(args[2])) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> printUsage();<a name="line.288"></a>
-<span class="sourceLineNo">289</span> throw new IOException(INCORRECT_USAGE);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> String targetBackupDir = args[2];<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.292"></a>
-<span class="sourceLineNo">293</span> if (isRootFolder(targetBackupDir)) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> String tables;<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span> // Check if we have both: backup set and list of tables<a name="line.298"></a>
-<span class="sourceLineNo">299</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.300"></a>
-<span class="sourceLineNo">301</span> + " of tables, but not both");<a name="line.301"></a>
-<span class="sourceLineNo">302</span> printUsage();<a name="line.302"></a>
-<span class="sourceLineNo">303</span> throw new IOException(INCORRECT_USAGE);<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Creates connection<a name="line.305"></a>
-<span class="sourceLineNo">306</span> super.execute();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Check backup set<a name="line.307"></a>
-<span class="sourceLineNo">308</span> String setName = null;<a name="line.308"></a>
-<span class="sourceLineNo">309</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> tables = getTablesForSet(setName, getConf());<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> if (tables == null) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> System.out.println("ERROR: Backup set '" + setName<a name="line.314"></a>
-<span class="sourceLineNo">315</span> + "' is either empty or does not exist");<a name="line.315"></a>
-<span class="sourceLineNo">316</span> printUsage();<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException(INCORRECT_USAGE);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span> int bandwidth =<a name="line.322"></a>
-<span class="sourceLineNo">323</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.323"></a>
-<span class="sourceLineNo">324</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> int workers =<a name="line.325"></a>
-<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.326"></a>
-<span class="sourceLineNo">327</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // Set system property value for MR job<a name="line.331"></a>
-<span class="sourceLineNo">332</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> BackupRequest request =<a name="line.337"></a>
-<span class="sourceLineNo">338</span> builder<a name="line.338"></a>
-<span class="sourceLineNo">339</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.339"></a>
-<span class="sourceLineNo">340</span> .withTableList(<a name="line.340"></a>
-<span class="sourceLineNo">341</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.341"></a>
-<span class="sourceLineNo">342</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.342"></a>
-<span class="sourceLineNo">343</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> String backupId = admin.backupTables(request);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.345"></a>
-<span class="sourceLineNo">346</span> } catch (IOException e) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.347"></a>
-<span class="sourceLineNo">348</span> throw e;<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> Path p = new Path(targetBackupDir);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> return p.isRoot();<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> private boolean verifyPath(String path) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> Path p = new Path(path);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> URI uri = p.toUri();<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (uri.getScheme() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> return false;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> FileSystem.get(uri, conf);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> return true;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> } catch (Exception e) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> return false;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> }<a name="line.371"></a>
-<span class="sourceLineNo">372</span> }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (tables == null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> return null;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span> protected void printUsage() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> System.out.println(CREATE_CMD_USAGE);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> Options options = new Options();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.397"></a>
-<span class="sourceLineNo">398</span> helpFormatter.setLeftPadding(2);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> helpFormatter.setDescPadding(8);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> helpFormatter.setWidth(100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.401"></a>
-<span class="sourceLineNo">402</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> public static class HelpCommand extends Command {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span> super(conf);<a name="line.408"></a>
-<span class="sourceLineNo">409</span> this.cmdline = cmdline;<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void execute() throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> if (cmdline == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span> printUsage();<a name="line.415"></a>
-<span class="sourceLineNo">416</span> throw new IOException(INCORRECT_USAGE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span> }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span> String[] args = cmdline.getArgs();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> if (args == null || args.length == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span> printUsage();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> throw new IOException(INCORRECT_USAGE);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> if (args.length != 2) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.426"></a>
-<span class="sourceLineNo">427</span> printUsage();<a name="line.427"></a>
-<span class="sourceLineNo">428</span> throw new IOException(INCORRECT_USAGE);<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> String type = args[1];<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (BackupCommand.CREATE.name().equalsIgnoreCase(type)) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> System.out.println(CREATE_CMD_USAGE);<a name="line.434"></a>
-<span class="sourceLineNo">435</span> } else if (BackupCommand.DESCRIBE.name().equalsIgnoreCase(type)) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.436"></a>
-<span class="sourceLineNo">437</span> } else if (BackupCommand.HISTORY.name().equalsIgnoreCase(type)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> System.out.println(HISTORY_CMD_USAGE);<a name="line.438"></a>
-<span class="sourceLineNo">439</span> } else if (BackupCommand.PROGRESS.name().equalsIgnoreCase(type)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> System.out.println(PROGRESS_CMD_USAGE);<a name="line.440"></a>
-<span class="sourceLineNo">441</span> } else if (BackupCommand.DELETE.name().equalsIgnoreCase(type)) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> System.out.println(DELETE_CMD_USAGE);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> } else if (BackupCommand.SET.name().equalsIgnoreCase(type)) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> System.out.println(SET_CMD_USAGE);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> } else {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> System.out.println("Unknown command : " + type);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> printUsage();<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span> @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected void printUsage() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> System.out.println(USAGE);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> }<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span> public static class DescribeCommand extends Command {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> DescribeCommand(Configuration conf, CommandLine cmdline) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> super(conf);<a name="line.459"></a>
-<span class="sourceLineNo">460</span> this.cmdline = cmdline;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span> public void execute() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> printUsage();<a name="line.466"></a>
-<span class="sourceLineNo">467</span> throw new IOException(INCORRECT_USAGE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span> String[] args = cmdline.getArgs();<a name="line.469"></a>
-<span class="sourceLineNo">470</span> if (args.length != 2) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> printUsage();<a name="line.471"></a>
-<span class="sourceLineNo">472</span> throw new IOException(INCORRECT_USAGE);<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> super.execute();<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> String backupId = args[1];<a name="line.477"></a>
-<span class="sourceLineNo">478</span> try (final BackupSystemTable sysTable = new BackupSystemTable(conn)) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> BackupInfo info = sysTable.readBackupInfo(backupId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span> if (info == null) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> System.out.println("ERROR: " + backupId + " does not exist");<a name="line.481"></a>
-<span class="sourceLineNo">482</span> printUsage();<a name="line.482"></a>
-<span class="sourceLineNo">483</span> throw new IOException(INCORRECT_USAGE);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> System.out.println(info.getShortDescription());<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> @Override<a name="line.489"></a>
-<span class="sourceLineNo">490</span> protected void printUsage() {<a name="line.490"></a>
-<span class="sourceLineNo">491</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<a name="line.492"></a>
-<span class="sourceLineNo">493</span> }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span> public static class ProgressCommand extends Command {<a name="line.495"></a>
-<span class="sourceLineNo">496</span> ProgressCommand(Configuration conf, CommandLine cmdline) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span> super(conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> this.cmdline = cmdline;<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public void execute() throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">252</span> return args.length;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> public static class CreateCommand extends Command {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> super(conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.cmdline = cmdline;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span> @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span> protected boolean requiresNoActiveSession() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return true;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span> protected boolean requiresConsistentState() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return true;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span> public void execute() throws IOException {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> printUsage();<a name="line.274"></a>
+<span class="sourceLineNo">275</span> throw new IOException(INCORRECT_USAGE);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span> String[] args = cmdline.getArgs();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> if (args.length != 3) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> printUsage();<a name="line.279"></a>
+<span class="sourceLineNo">280</span> throw new IOException(INCORRECT_USAGE);<a name="line.280"></a>
+<span class="sourceLineNo">281</span> }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.283"></a>
+<span class="sourceLineNo">284</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> printUsage();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> throw new IOException(INCORRECT_USAGE);<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> if (!verifyPath(args[2])) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> printUsage();<a name="line.291"></a>
+<span class="sourceLineNo">292</span> throw new IOException(INCORRECT_USAGE);<a name="line.292"></a>
+<span class="sourceLineNo">293</span> }<a name="line.293"></a>
+<span class="sourceLineNo">294</span> String targetBackupDir = args[2];<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (isRootFolder(targetBackupDir)) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> String tables;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // Check if we have both: backup set and list of tables<a name="line.301"></a>
+<span class="sourceLineNo">302</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.303"></a>
+<span class="sourceLineNo">304</span> + " of tables, but not both");<a name="line.304"></a>
+<span class="sourceLineNo">305</span> printUsage();<a name="line.305"></a>
+<span class="sourceLineNo">306</span> throw new IOException(INCORRECT_USAGE);<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span> // Creates connection<a name="line.308"></a>
+<span class="sourceLineNo">309</span> super.execute();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Check backup set<a name="line.310"></a>
+<span class="sourceLineNo">311</span> String setName = null;<a name="line.311"></a>
+<span class="sourceLineNo">312</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> tables = getTablesForSet(setName, getConf());<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span> if (tables == null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> System.out.println("ERROR: Backup set '" + setName<a name="line.317"></a>
+<span class="sourceLineNo">318</span> + "' is either empty or does not exist");<a name="line.318"></a>
+<span class="sourceLineNo">319</span> printUsage();<a name="line.319"></a>
+<span class="sourceLineNo">320</span> throw new IOException(INCORRECT_USAGE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> } else {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span> int bandwidth =<a name="line.325"></a>
+<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.326"></a>
+<span class="sourceLineNo">327</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> int workers =<a name="line.328"></a>
+<span class="sourceLineNo">329</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.329"></a>
+<span class="sourceLineNo">330</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> // Set system property value for MR job<a name="line.334"></a>
+<span class="sourceLineNo">335</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.339"></a>
+<span class="sourceLineNo">340</span> BackupRequest request =<a name="line.340"></a>
+<span class="sourceLineNo">341</span> builder<a name="line.341"></a>
+<span class="sourceLineNo">342</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.342"></a>
+<span class="sourceLineNo">343</span> .withTableList(<a name="line.343"></a>
+<span class="sourceLineNo">344</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.345"></a>
+<span class="sourceLineNo">346</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String backupId = admin.backupTables(request);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> } catch (IOException e) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.350"></a>
+<span class="sourceLineNo">351</span> throw e;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> Path p = new Path(targetBackupDir);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return p.isRoot();<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span> private boolean verifyPath(String path) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> try {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> Path p = new Path(path);<a name="line.362"></a>
+<span class="sourceLineNo">363</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.363"></a>
+<span class="sourceLineNo">364</span> URI uri = p.toUri();<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> if (uri.getScheme() == null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span> return false;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> FileSystem.get(uri, conf);<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return true;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> } catch (Exception e) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return false;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.377"></a>
+<span class="sourceLineNo">378</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span> if (tables == null) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span> return null;<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> @Override<a name="line.389"></a>
+<span class="sourceLineNo">390</span> protected void printUsage() {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> System.out.println(CREATE_CMD_USAGE);<a name="line.391"></a>
+<span class="sourceLineNo">392</span> Options options = new Options();<a name="line.392"></a>
+<span class="sourceLineNo">393</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.400"></a>
+<span class="sourceLineNo">401</span> helpFormatter.setLeftPadding(2);<a name="line.401"></a>
+<span class="sourceLineNo">402</span> helpFormatter.setDescPadding(8);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> helpFormatter.setWidth(100);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.404"></a>
+<span class="sourceLineNo">405</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<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> public static class HelpCommand extends Command {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> super(conf);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> this.cmdline = cmdline;<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span> @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span> public void execute() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span> if (cmdline == null) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> printUsage();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> throw new IOException(INCORRECT_USAGE);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> String[] args = cmdline.getArgs();<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (args == null || args.length == 0) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> printUsage();<a name="line.424"></a>
+<span class="sourceLineNo">425</span> throw new IOException(INCORRECT_USAGE);<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> if (args.length != 2) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.429"></a>
+<span class="sourceLineNo">430</span> printUsage();<a name="line.430"></a>
+<span class="sourceLineNo">431</span> throw new IOException(INCORRECT_USAGE);<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a
<TRUNCATED>
[37/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/wal/WAL.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WAL.html b/devapidocs/org/apache/hadoop/hbase/wal/WAL.html
index aa07f0a..f0637de 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WAL.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WAL.html
@@ -111,7 +111,7 @@ var activeTableTab = "activeTableTab";
<br>
<pre>@InterfaceAudience.Private
@InterfaceStability.Evolving
-public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.45">WAL</a>
+public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.44">WAL</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a></pre>
<div class="block">A Write Ahead Log (WAL) provides service for reading, writing waledits. This interface provides
APIs for WAL users (such as RegionServer) to use the WAL (do append, sync, etc).
@@ -318,7 +318,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>registerWALActionsListener</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.50">registerWALActionsListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a> listener)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.49">registerWALActionsListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a> listener)</pre>
<div class="block">Registers WALActionsListener</div>
</li>
</ul>
@@ -328,7 +328,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>unregisterWALActionsListener</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.55">unregisterWALActionsListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a> listener)</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.54">unregisterWALActionsListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a> listener)</pre>
<div class="block">Unregisters WALActionsListener</div>
</li>
</ul>
@@ -338,7 +338,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>rollWriter</h4>
-<pre>byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.68">rollWriter</a>()
+<pre>byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.67">rollWriter</a>()
throws <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FailedLogCloseException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Roll the log writer. That is, start writing log messages to a new file.
@@ -363,7 +363,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>rollWriter</h4>
-<pre>byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.84">rollWriter</a>(boolean force)
+<pre>byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.83">rollWriter</a>(boolean force)
throws <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FailedLogCloseException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Roll the log writer. That is, start writing log messages to a new file.
@@ -391,7 +391,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>shutdown</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.90">shutdown</a>()
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.89">shutdown</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Stop accepting new writes. If we have unsynced writes still in buffer, sync them.
Extant edits are left in place in backing storage to be replayed later.</div>
@@ -407,7 +407,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>close</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.98">close</a>()
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.97">close</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Caller no longer needs any edits from this WAL. Implementers are free to reclaim
underlying resources after this call; i.e. filesystem based WALs can archive or
@@ -428,7 +428,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>append</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.115">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.114">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
<a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a> key,
<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a> edits,
boolean inMemstore)
@@ -460,7 +460,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>updateStore</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.126">updateStore</a>(byte[] encodedRegionName,
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.125">updateStore</a>(byte[] encodedRegionName,
byte[] familyName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a> sequenceid,
boolean onlyIfGreater)</pre>
@@ -482,7 +482,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>sync</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.133">sync</a>()
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.132">sync</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Sync what we have in the WAL.</div>
<dl>
@@ -497,7 +497,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>sync</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.140">sync</a>(long txid)
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.139">sync</a>(long txid)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Sync the WAL if the txId was not already sync'd.</div>
<dl>
@@ -514,7 +514,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>sync</h4>
-<pre>default void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.146">sync</a>(boolean forceSync)
+<pre>default void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.145">sync</a>(boolean forceSync)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -531,7 +531,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>sync</h4>
-<pre>default void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.155">sync</a>(long txid,
+<pre>default void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.154">sync</a>(long txid,
boolean forceSync)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
@@ -550,7 +550,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>startCacheFlush</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.176">startCacheFlush</a>(byte[] encodedRegionName,
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.175">startCacheFlush</a>(byte[] encodedRegionName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><byte[]> families)</pre>
<div class="block">WAL keeps track of the sequence numbers that are as yet not flushed im memstores
in order to be able to do accounting to figure which WALs can be let go. This method tells WAL
@@ -580,7 +580,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>startCacheFlush</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.178">startCacheFlush</a>(byte[] encodedRegionName,
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.177">startCacheFlush</a>(byte[] encodedRegionName,
<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><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>> familyToSeq)</pre>
</li>
</ul>
@@ -590,7 +590,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>completeCacheFlush</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.186">completeCacheFlush</a>(byte[] encodedRegionName)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.185">completeCacheFlush</a>(byte[] encodedRegionName)</pre>
<div class="block">Complete the cache flush.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -607,7 +607,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>abortCacheFlush</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.194">abortCacheFlush</a>(byte[] encodedRegionName)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.193">abortCacheFlush</a>(byte[] encodedRegionName)</pre>
<div class="block">Abort a cache flush. Call if the flush fails. Note that the only recovery
for an aborted flush currently is a restart of the regionserver so the
snapshot content dropped by the failure gets restored to the memstore.</div>
@@ -623,7 +623,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>getCoprocessorHost</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.199">getCoprocessorHost</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.198">getCoprocessorHost</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Coprocessor host.</dd>
@@ -637,7 +637,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<li class="blockList">
<h4>getEarliestMemStoreSeqNum</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.210">getEarliestMemStoreSeqNum</a>(byte[] encodedRegionName)</pre>
+long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.209">getEarliestMemStoreSeqNum</a>(byte[] encodedRegionName)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">Since version 1.2.0. Removing because not used and exposes subtle internal
workings. Use <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#getEarliestMemStoreSeqNum-byte:A-byte:A-"><code>getEarliestMemStoreSeqNum(byte[], byte[])</code></a></span></div>
<div class="block">Gets the earliest unflushed sequence id in the memstore for the region.</div>
@@ -655,7 +655,7 @@ long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#
<ul class="blockList">
<li class="blockList">
<h4>getEarliestMemStoreSeqNum</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.218">getEarliestMemStoreSeqNum</a>(byte[] encodedRegionName,
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.217">getEarliestMemStoreSeqNum</a>(byte[] encodedRegionName,
byte[] familyName)</pre>
<div class="block">Gets the earliest unflushed sequence id in the memstore for the store.</div>
<dl>
@@ -673,7 +673,7 @@ long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#
<ul class="blockListLast">
<li class="blockList">
<h4>toString</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.227">toString</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.226">toString</a>()</pre>
<div class="block">Human readable identifying information about the state of this WAL.
Implementors are encouraged to include information appropriate for debugging.
Consumers are advised not to rely on the details of the returned String; it does
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/wal/WALKeyImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALKeyImpl.html b/devapidocs/org/apache/hadoop/hbase/wal/WALKeyImpl.html
index 74d7fae..3525849 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALKeyImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALKeyImpl.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":42,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":42,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.LimitedPrivate(value="Replication")
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.61">WALKeyImpl</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.60">WALKeyImpl</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a></pre>
<div class="block">Default implementation of Key for an Entry in the WAL.
@@ -150,56 +150,52 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
</td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#compressionContext">compressionContext</a></span></code> </td>
-</tr>
-<tr class="altColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#EMPTY_WALKEYIMPL">EMPTY_WALKEYIMPL</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private byte[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#encodedRegionName">encodedRegionName</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#mvcc">mvcc</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#nonce">nonce</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#nonceGroup">nonceGroup</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#origLogSeqNum">origLogSeqNum</a></span></code>
<div class="block">Used during WAL replay; the sequenceId of the edit when it came into the system.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#replicationScope">replicationScope</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#sequenceId">sequenceId</a></span></code>
<div class="block">SequenceId for this edit.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#tablename">tablename</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#writeEntry">writeEntry</a></span></code>
<div class="block">Set in a way visible to multiple threads; e.g.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#writeTime">writeTime</a></span></code>
<div class="block">Time at which this edit was written.</div>
@@ -469,27 +465,23 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#setCompressionContext-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">setCompressionContext</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compressionContext)</code> </td>
-</tr>
-<tr id="i25" class="rowColor">
-<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#setOrigLogSeqNum-long-">setOrigLogSeqNum</a></span>(long sequenceId)</code>
<div class="block">Used to set original sequenceId for WALKeyImpl during WAL replay</div>
</td>
</tr>
-<tr id="i26" class="altColor">
+<tr id="i25" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#setReplicationScope-java.util.NavigableMap-">setReplicationScope</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> replicationScope)</code> </td>
</tr>
-<tr id="i27" class="rowColor">
+<tr id="i26" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#setSequenceId-long-">setSequenceId</a></span>(long sequenceId)</code> </td>
</tr>
-<tr id="i28" class="altColor">
+<tr id="i27" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#setWriteEntry-org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.WriteEntry-">setWriteEntry</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a> writeEntry)</code> </td>
</tr>
-<tr id="i29" class="rowColor">
+<tr id="i28" class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#toString--">toString</a></span>()</code> </td>
</tr>
@@ -528,7 +520,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>EMPTY_WALKEYIMPL</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.62">EMPTY_WALKEYIMPL</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.61">EMPTY_WALKEYIMPL</a></pre>
</li>
</ul>
<a name="encodedRegionName">
@@ -537,7 +529,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>encodedRegionName</h4>
-<pre>private byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.88">encodedRegionName</a></pre>
+<pre>private byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.87">encodedRegionName</a></pre>
</li>
</ul>
<a name="tablename">
@@ -546,7 +538,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>tablename</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.90">tablename</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.89">tablename</a></pre>
</li>
</ul>
<a name="sequenceId">
@@ -555,7 +547,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>sequenceId</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.96">sequenceId</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.95">sequenceId</a></pre>
<div class="block">SequenceId for this edit. Set post-construction at write-to-WAL time. Until then it is
NO_SEQUENCE_ID. Change it so multiple threads can read it -- e.g. access is synchronized.</div>
</li>
@@ -566,7 +558,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>origLogSeqNum</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.101">origLogSeqNum</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.100">origLogSeqNum</a></pre>
<div class="block">Used during WAL replay; the sequenceId of the edit when it came into the system.</div>
</li>
</ul>
@@ -576,7 +568,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>writeTime</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.104">writeTime</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.103">writeTime</a></pre>
<div class="block">Time at which this edit was written.</div>
</li>
</ul>
@@ -586,7 +578,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>clusterIds</h4>
-<pre>private <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><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.107">clusterIds</a></pre>
+<pre>private <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><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.106">clusterIds</a></pre>
<div class="block">The first element in the list is the cluster id on which the change has originated</div>
</li>
</ul>
@@ -596,7 +588,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>replicationScope</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.109">replicationScope</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.108">replicationScope</a></pre>
</li>
</ul>
<a name="nonceGroup">
@@ -605,7 +597,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>nonceGroup</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.111">nonceGroup</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.110">nonceGroup</a></pre>
</li>
</ul>
<a name="nonce">
@@ -614,7 +606,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>nonce</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.112">nonce</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.111">nonce</a></pre>
</li>
</ul>
<a name="mvcc">
@@ -623,28 +615,19 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>mvcc</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.113">mvcc</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.112">mvcc</a></pre>
</li>
</ul>
<a name="writeEntry">
<!-- -->
</a>
-<ul class="blockList">
+<ul class="blockListLast">
<li class="blockList">
<h4>writeEntry</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.118">writeEntry</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.117">writeEntry</a></pre>
<div class="block">Set in a way visible to multiple threads; e.g. synchronized getter/setters.</div>
</li>
</ul>
-<a name="compressionContext">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>compressionContext</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.120">compressionContext</a></pre>
-</li>
-</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -659,7 +642,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>WALKeyImpl</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.122">WALKeyImpl</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.119">WALKeyImpl</a>()</pre>
</li>
</ul>
<a name="WALKeyImpl-java.util.NavigableMap-">
@@ -668,7 +651,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>WALKeyImpl</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.127">WALKeyImpl</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> replicationScope)</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.124">WALKeyImpl</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> replicationScope)</pre>
</li>
</ul>
<a name="WALKeyImpl-byte:A-org.apache.hadoop.hbase.TableName-long-long-java.util.UUID-">
@@ -677,7 +660,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>WALKeyImpl</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.133">WALKeyImpl</a>(byte[] encodedRegionName,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.130">WALKeyImpl</a>(byte[] encodedRegionName,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tablename,
long logSeqNum,
long now,
@@ -690,7 +673,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>WALKeyImpl</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.143">WALKeyImpl</a>(byte[] encodedRegionName,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.140">WALKeyImpl</a>(byte[] encodedRegionName,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tablename,
long now)</pre>
</li>
@@ -701,7 +684,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>WALKeyImpl</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.155">WALKeyImpl</a>(byte[] encodedRegionName,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.152">WALKeyImpl</a>(byte[] encodedRegionName,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tablename,
long now,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> replicationScope)</pre>
@@ -713,7 +696,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>WALKeyImpl</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.161">WALKeyImpl</a>(byte[] encodedRegionName,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.158">WALKeyImpl</a>(byte[] encodedRegionName,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tablename,
long now,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl</a> mvcc,
@@ -726,7 +709,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>WALKeyImpl</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.167">WALKeyImpl</a>(byte[] encodedRegionName,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.164">WALKeyImpl</a>(byte[] encodedRegionName,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tablename,
long now,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl</a> mvcc)</pre>
@@ -738,7 +721,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>WALKeyImpl</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.200">WALKeyImpl</a>(byte[] encodedRegionName,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.197">WALKeyImpl</a>(byte[] encodedRegionName,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tablename,
long logSeqNum,
long now,
@@ -773,7 +756,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>WALKeyImpl</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.221">WALKeyImpl</a>(byte[] encodedRegionName,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.218">WALKeyImpl</a>(byte[] encodedRegionName,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tablename,
long logSeqNum,
long now,
@@ -802,7 +785,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>WALKeyImpl</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.246">WALKeyImpl</a>(byte[] encodedRegionName,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.243">WALKeyImpl</a>(byte[] encodedRegionName,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tablename,
long now,
<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><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>> clusterIds,
@@ -831,7 +814,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>WALKeyImpl</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.268">WALKeyImpl</a>(byte[] encodedRegionName,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.265">WALKeyImpl</a>(byte[] encodedRegionName,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tablename,
long now,
<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><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>> clusterIds,
@@ -862,7 +845,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockListLast">
<li class="blockList">
<h4>WALKeyImpl</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.289">WALKeyImpl</a>(byte[] encodedRegionName,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.286">WALKeyImpl</a>(byte[] encodedRegionName,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tablename,
long logSeqNum,
long nonceGroup,
@@ -896,7 +879,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>getMvcc</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.64">getMvcc</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.63">getMvcc</a>()</pre>
</li>
</ul>
<a name="getWriteEntry--">
@@ -905,7 +888,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>getWriteEntry</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.77">getWriteEntry</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.76">getWriteEntry</a>()</pre>
<div class="block">Use it to complete mvcc transaction. This WALKeyImpl was part of
(the transaction is started when you call append; see the comment on FSHLog#append). To
complete call
@@ -925,7 +908,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<ul class="blockList">
<li class="blockList">
<h4>setWriteEntry</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.81">setWriteEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a> writeEntry)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.80">setWriteEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a> writeEntry)</pre>
</li>
</ul>
<a name="init-byte:A-org.apache.hadoop.hbase.TableName-long-long-java.util.List-long-long-org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl-java.util.NavigableMap-">
@@ -935,7 +918,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" titl
<li class="blockList">
<h4>init</h4>
<pre>@InterfaceAudience.Private
-protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.306">init</a>(byte[] encodedRegionName,
+protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.303">init</a>(byte[] encodedRegionName,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tablename,
long logSeqNum,
long now,
@@ -953,20 +936,7 @@ protected void <a href="../../../../../src-html/org/apache/hadoop/hbas
<li class="blockList">
<h4>setSequenceId</h4>
<pre>@InterfaceAudience.Private
-protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.331">setSequenceId</a>(long sequenceId)</pre>
-</li>
-</ul>
-<a name="setCompressionContext-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setCompressionContext</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.338">setCompressionContext</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compressionContext)</pre>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>compressionContext</code> - Compression context to use</dd>
-</dl>
+protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.328">setSequenceId</a>(long sequenceId)</pre>
</li>
</ul>
<a name="getEncodedRegionName--">
@@ -975,7 +945,7 @@ protected void <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>getEncodedRegionName</h4>
-<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.344">getEncodedRegionName</a>()</pre>
+<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.334">getEncodedRegionName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html#getEncodedRegionName--">getEncodedRegionName</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a></code></dd>
@@ -990,7 +960,7 @@ protected void <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>getTableName</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.350">getTableName</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.340">getTableName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html#getTableName--">getTableName</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a></code></dd>
@@ -1006,7 +976,7 @@ protected void <a href="../../../../../src-html/org/apache/hadoop/hbas
<li class="blockList">
<h4>getLogSeqNum</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.358">getLogSeqNum</a>()</pre>
+public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.348">getLogSeqNum</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">Use <a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#getSequenceId--"><code>getSequenceId()</code></a></span></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1020,7 +990,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>setOrigLogSeqNum</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.365">setOrigLogSeqNum</a>(long sequenceId)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.355">setOrigLogSeqNum</a>(long sequenceId)</pre>
<div class="block">Used to set original sequenceId for WALKeyImpl during WAL replay</div>
</li>
</ul>
@@ -1030,7 +1000,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>getOrigLogSeqNum</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.375">getOrigLogSeqNum</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.365">getOrigLogSeqNum</a>()</pre>
<div class="block">Return a positive long if current WALKeyImpl is created from a replay edit; a replay edit is an
edit that came in when replaying WALs of a crashed server.</div>
<dl>
@@ -1047,7 +1017,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>getSequenceId</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.386">getSequenceId</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.376">getSequenceId</a>()</pre>
<div class="block">SequenceId is only available post WAL-assign. Calls before this will get you a
<a href="../../../../../org/apache/hadoop/hbase/regionserver/SequenceId.html#NO_SEQUENCE_ID"><code>SequenceId.NO_SEQUENCE_ID</code></a>. See the comment on FSHLog#append and #getWriteNumber in this
method for more on when this sequenceId comes available.</div>
@@ -1065,7 +1035,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>getWriteTime</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.394">getWriteTime</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.384">getWriteTime</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html#getWriteTime--">getWriteTime</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a></code></dd>
@@ -1080,7 +1050,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>getReplicationScopes</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.398">getReplicationScopes</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.388">getReplicationScopes</a>()</pre>
</li>
</ul>
<a name="getNonceGroup--">
@@ -1089,7 +1059,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>getNonceGroup</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.404">getNonceGroup</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.394">getNonceGroup</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html#getNonceGroup--">getNonceGroup</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a></code></dd>
@@ -1104,7 +1074,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>getNonce</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.410">getNonce</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.400">getNonce</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html#getNonce--">getNonce</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a></code></dd>
@@ -1119,7 +1089,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>setReplicationScope</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.414">setReplicationScope</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> replicationScope)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.404">setReplicationScope</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> replicationScope)</pre>
</li>
</ul>
<a name="clearReplicationScope--">
@@ -1128,7 +1098,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>clearReplicationScope</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.418">clearReplicationScope</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.408">clearReplicationScope</a>()</pre>
</li>
</ul>
<a name="addClusterId-java.util.UUID-">
@@ -1137,7 +1107,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>addClusterId</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.425">addClusterId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> clusterId)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.415">addClusterId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> clusterId)</pre>
<div class="block">Marks that the cluster with the given clusterId has consumed the change</div>
</li>
</ul>
@@ -1147,7 +1117,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>getClusterIds</h4>
-<pre>public <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><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.434">getClusterIds</a>()</pre>
+<pre>public <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><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.424">getClusterIds</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the set of cluster Ids that have consumed the change</dd>
@@ -1160,7 +1130,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>getOriginatingClusterId</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.443">getOriginatingClusterId</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.433">getOriginatingClusterId</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html#getOriginatingClusterId--">getOriginatingClusterId</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a></code></dd>
@@ -1176,7 +1146,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>toString</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.448">toString</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.438">toString</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code> in class <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -1189,7 +1159,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>equals</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.453">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> obj)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.443">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> obj)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a></code> in class <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -1202,7 +1172,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>hashCode</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.464">hashCode</a>()</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.454">hashCode</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a></code> in class <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -1215,7 +1185,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>compareTo</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.472">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a> o)</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.462">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a> o)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true#compareTo-T-" title="class or interface in java.lang">compareTo</a></code> in interface <code><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><<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a>></code></dd>
@@ -1228,7 +1198,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>internTableName</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.500">internTableName</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tablename)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.490">internTableName</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tablename)</pre>
<div class="block">Drop this instance's tablename byte array and instead
hold a reference to the provided tablename. This is not
meant to be a general purpose setter - it's only used
@@ -1241,7 +1211,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>internEncodedRegionName</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.513">internEncodedRegionName</a>(byte[] encodedRegionName)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.503">internEncodedRegionName</a>(byte[] encodedRegionName)</pre>
<div class="block">Drop this instance's region name byte array and instead
hold a reference to the provided region name. This is not
meant to be a general purpose setter - it's only used
@@ -1254,7 +1224,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>getBuilder</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALKey.Builder <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.520">getBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a> compressor)
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALKey.Builder <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.510">getBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a> compressor)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -1268,7 +1238,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockList">
<li class="blockList">
<h4>readFieldsFromPb</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.561">readFieldsFromPb</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALKey walKey,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.545">readFieldsFromPb</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALKey walKey,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a> uncompressor)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
@@ -1283,7 +1253,7 @@ public long <a href="../../../../../src-html/org/apache/hadoop/hbase/w
<ul class="blockListLast">
<li class="blockList">
<h4>estimatedSerializedSizeOf</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.601">estimatedSerializedSizeOf</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html#line.579">estimatedSerializedSizeOf</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html#estimatedSerializedSizeOf--">estimatedSerializedSizeOf</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZKListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZKListener.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZKListener.html
index 3103705..ed67b6d 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZKListener.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZKListener.html
@@ -229,7 +229,8 @@
<tr class="altColor">
<td class="colFirst"><code>class </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></span></code>
-<div class="block">Tracks the online region servers via ZK.</div>
+<div class="block">
+ Tracks the online region servers via ZK.</div>
</td>
</tr>
<tr class="rowColor">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index c2f57dc..9c79960 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -4135,6 +4135,9 @@
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">SecureWALCellCodec</span></a></li>
</ul>
</li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALCellCodec.NoneCompressor</span></a> (implements org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALCellCodec.NoneUncompressor</span></a> (implements org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALCellCodec.StatelessUncompressor</span></a> (implements org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a>)</li>
<li type="circle">org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALEdit</span></a> (implements org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>)</li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">WALEntryBatch</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">WALEntryStream</span></a> (implements java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>)</li>
@@ -5258,6 +5261,7 @@
<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.compactions.<a href="org/apache/hadoop/hbase/regionserver/compactions/CompactionRequestImpl.DisplayCompactionType.html" title="enum in org.apache.hadoop.hbase.regionserver.compactions"><span class="typeNameLink">CompactionRequestImpl.DisplayCompactionType</span></a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/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 45aaf8a..817fc3a 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 = "ec66434380aee62289ccf7b173d765bbe7083718";<a name="line.11"></a>
+<span class="sourceLineNo">011</span> public static final String revision = "0b28155d274910b4e667b949d51f78809a1eff0b";<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 = "Wed Jun 13 14:39:52 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span> public static final String date = "Thu Jun 14 22:13:02 UTC 2018";<a name="line.13"></a>
<span class="sourceLineNo">014</span> public static final String url = "git://jenkins-websites1.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span> public static final String srcChecksum = "f82b1195e42117413b37d2d6088772bd";<a name="line.15"></a>
+<span class="sourceLineNo">015</span> public static final String srcChecksum = "241d3c5d4e507f803723d87043bf1d28";<a name="line.15"></a>
<span class="sourceLineNo">016</span>}<a name="line.16"></a>
[03/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.html
index e31f5c6..f4d1eb0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.html
@@ -31,277 +31,266 @@
<span class="sourceLineNo">023</span>import java.util.Set;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HConstants;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.regionserver.wal.CompressionContext;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.regionserver.wal.WALCoprocessorHost;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.replication.regionserver.WALFileLengthProvider;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.32"></a>
-<span class="sourceLineNo">033</span><a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>/**<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * A Write Ahead Log (WAL) provides service for reading, writing waledits. This interface provides<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * APIs for WAL users (such as RegionServer) to use the WAL (do append, sync, etc).<a name="line.38"></a>
-<span class="sourceLineNo">039</span> *<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * Note that some internals, such as log rolling and performance evaluation tools, will use<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * WAL.equals to determine if they have already seen a given WAL.<a name="line.41"></a>
-<span class="sourceLineNo">042</span> */<a name="line.42"></a>
-<span class="sourceLineNo">043</span>@InterfaceAudience.Private<a name="line.43"></a>
-<span class="sourceLineNo">044</span>@InterfaceStability.Evolving<a name="line.44"></a>
-<span class="sourceLineNo">045</span>public interface WAL extends Closeable, WALFileLengthProvider {<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span> /**<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * Registers WALActionsListener<a name="line.48"></a>
-<span class="sourceLineNo">049</span> */<a name="line.49"></a>
-<span class="sourceLineNo">050</span> void registerWALActionsListener(final WALActionsListener listener);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span> /**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Unregisters WALActionsListener<a name="line.53"></a>
-<span class="sourceLineNo">054</span> */<a name="line.54"></a>
-<span class="sourceLineNo">055</span> boolean unregisterWALActionsListener(final WALActionsListener listener);<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> * Roll the log writer. That is, start writing log messages to a new file.<a name="line.58"></a>
-<span class="sourceLineNo">059</span> *<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * <p><a name="line.60"></a>
-<span class="sourceLineNo">061</span> * The implementation is synchronized in order to make sure there's one rollWriter<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * running at any given time.<a name="line.62"></a>
-<span class="sourceLineNo">063</span> *<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * @return If lots of logs, flush the returned regions so next time through we<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * can clean logs. Returns null if nothing to flush. Names are actual<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * region names as returned by {@link RegionInfo#getEncodedName()}<a name="line.66"></a>
-<span class="sourceLineNo">067</span> */<a name="line.67"></a>
-<span class="sourceLineNo">068</span> byte[][] rollWriter() throws FailedLogCloseException, IOException;<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> * Roll the log writer. That is, start writing log messages to a new file.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> *<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <p><a name="line.73"></a>
-<span class="sourceLineNo">074</span> * The implementation is synchronized in order to make sure there's one rollWriter<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * running at any given time.<a name="line.75"></a>
-<span class="sourceLineNo">076</span> *<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * @param force<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * If true, force creation of a new writer even if no entries have<a name="line.78"></a>
-<span class="sourceLineNo">079</span> * been written to the current writer<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * @return If lots of logs, flush the returned regions so next time through we<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * can clean logs. Returns null if nothing to flush. Names are actual<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * region names as returned by {@link RegionInfo#getEncodedName()}<a name="line.82"></a>
-<span class="sourceLineNo">083</span> */<a name="line.83"></a>
-<span class="sourceLineNo">084</span> byte[][] rollWriter(boolean force) throws FailedLogCloseException, IOException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span> /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span> * Stop accepting new writes. If we have unsynced writes still in buffer, sync them.<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * Extant edits are left in place in backing storage to be replayed later.<a name="line.88"></a>
-<span class="sourceLineNo">089</span> */<a name="line.89"></a>
-<span class="sourceLineNo">090</span> void shutdown() throws IOException;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span> /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * Caller no longer needs any edits from this WAL. Implementers are free to reclaim<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * underlying resources after this call; i.e. filesystem based WALs can archive or<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * delete files.<a name="line.95"></a>
-<span class="sourceLineNo">096</span> */<a name="line.96"></a>
-<span class="sourceLineNo">097</span> @Override<a name="line.97"></a>
-<span class="sourceLineNo">098</span> void close() throws IOException;<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> * Append a set of edits to the WAL. The WAL is not flushed/sync'd after this transaction<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * completes BUT on return this edit must have its region edit/sequence id assigned<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * else it messes up our unification of mvcc and sequenceid. On return <code>key</code> will<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * have the region edit/sequence id filled in.<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * @param info the regioninfo associated with append<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * @param key Modified by this call; we add to it this edits region edit/sequence id.<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * @param edits Edits to append. MAY CONTAIN NO EDITS for case where we want to get an edit<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * sequence id that is after all currently appended edits.<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * @param inMemstore Always true except for case where we are writing a compaction completion<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * record into the WAL; in this case the entry is just so we can finish an unfinished compaction<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * -- it is not an edit for memstore.<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * @return Returns a 'transaction id' and <code>key</code> will have the region edit/sequence id<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * in it.<a name="line.113"></a>
-<span class="sourceLineNo">114</span> */<a name="line.114"></a>
-<span class="sourceLineNo">115</span> long append(RegionInfo info, WALKeyImpl key, WALEdit edits, boolean inMemstore) throws IOException;<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span> /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * updates the seuence number of a specific store.<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * depending on the flag: replaces current seq number if the given seq id is bigger,<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * or even if it is lower than existing one<a name="line.120"></a>
-<span class="sourceLineNo">121</span> * @param encodedRegionName<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * @param familyName<a name="line.122"></a>
-<span class="sourceLineNo">123</span> * @param sequenceid<a name="line.123"></a>
-<span class="sourceLineNo">124</span> * @param onlyIfGreater<a name="line.124"></a>
-<span class="sourceLineNo">125</span> */<a name="line.125"></a>
-<span class="sourceLineNo">126</span> void updateStore(byte[] encodedRegionName, byte[] familyName, Long sequenceid,<a name="line.126"></a>
-<span class="sourceLineNo">127</span> boolean onlyIfGreater);<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> * Sync what we have in the WAL.<a name="line.130"></a>
-<span class="sourceLineNo">131</span> * @throws IOException<a name="line.131"></a>
-<span class="sourceLineNo">132</span> */<a name="line.132"></a>
-<span class="sourceLineNo">133</span> void sync() throws IOException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span> /**<a name="line.135"></a>
-<span class="sourceLineNo">136</span> * Sync the WAL if the txId was not already sync'd.<a name="line.136"></a>
-<span class="sourceLineNo">137</span> * @param txid Transaction id to sync to.<a name="line.137"></a>
-<span class="sourceLineNo">138</span> * @throws IOException<a name="line.138"></a>
-<span class="sourceLineNo">139</span> */<a name="line.139"></a>
-<span class="sourceLineNo">140</span> void sync(long txid) throws IOException;<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span> /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span> * @param forceSync Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush<a name="line.143"></a>
-<span class="sourceLineNo">144</span> * vs hsync.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> */<a name="line.145"></a>
-<span class="sourceLineNo">146</span> default void sync(boolean forceSync) throws IOException {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> sync();<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> /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span> * @param txid Transaction id to sync to.<a name="line.151"></a>
-<span class="sourceLineNo">152</span> * @param forceSync Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush<a name="line.152"></a>
-<span class="sourceLineNo">153</span> * vs hsync.<a name="line.153"></a>
-<span class="sourceLineNo">154</span> */<a name="line.154"></a>
-<span class="sourceLineNo">155</span> default void sync(long txid, boolean forceSync) throws IOException {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> sync(txid);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span> /**<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * WAL keeps track of the sequence numbers that are as yet not flushed im memstores<a name="line.160"></a>
-<span class="sourceLineNo">161</span> * in order to be able to do accounting to figure which WALs can be let go. This method tells WAL<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * that some region is about to flush. The flush can be the whole region or for a column family<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * of the region only.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> *<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * <p>Currently, it is expected that the update lock is held for the region; i.e. no<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * concurrent appends while we set up cache flush.<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * @param families Families to flush. May be a subset of all families in the region.<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * @return Returns {@link HConstants#NO_SEQNUM} if we are flushing the whole region OR if<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * we are flushing a subset of all families but there are no edits in those families not<a name="line.169"></a>
-<span class="sourceLineNo">170</span> * being flushed; in other words, this is effectively same as a flush of all of the region<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * though we were passed a subset of regions. Otherwise, it returns the sequence id of the<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * oldest/lowest outstanding edit.<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * @see #completeCacheFlush(byte[])<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * @see #abortCacheFlush(byte[])<a name="line.174"></a>
-<span class="sourceLineNo">175</span> */<a name="line.175"></a>
-<span class="sourceLineNo">176</span> Long startCacheFlush(final byte[] encodedRegionName, Set<byte[]> families);<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span> Long startCacheFlush(final byte[] encodedRegionName, Map<byte[], Long> familyToSeq);<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span> /**<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * Complete the cache flush.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * @param encodedRegionName Encoded region name.<a name="line.182"></a>
-<span class="sourceLineNo">183</span> * @see #startCacheFlush(byte[], Set)<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * @see #abortCacheFlush(byte[])<a name="line.184"></a>
-<span class="sourceLineNo">185</span> */<a name="line.185"></a>
-<span class="sourceLineNo">186</span> void completeCacheFlush(final byte[] encodedRegionName);<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span> /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * Abort a cache flush. Call if the flush fails. Note that the only recovery<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * for an aborted flush currently is a restart of the regionserver so the<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * snapshot content dropped by the failure gets restored to the memstore.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * @param encodedRegionName Encoded region name.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span> void abortCacheFlush(byte[] encodedRegionName);<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span> /**<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * @return Coprocessor host.<a name="line.197"></a>
-<span class="sourceLineNo">198</span> */<a name="line.198"></a>
-<span class="sourceLineNo">199</span> WALCoprocessorHost getCoprocessorHost();<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span> /**<a name="line.201"></a>
-<span class="sourceLineNo">202</span> * Gets the earliest unflushed sequence id in the memstore for the region.<a name="line.202"></a>
-<span class="sourceLineNo">203</span> * @param encodedRegionName The region to get the number for.<a name="line.203"></a>
-<span class="sourceLineNo">204</span> * @return The earliest/lowest/oldest sequence id if present, HConstants.NO_SEQNUM if absent.<a name="line.204"></a>
-<span class="sourceLineNo">205</span> * @deprecated Since version 1.2.0. Removing because not used and exposes subtle internal<a name="line.205"></a>
-<span class="sourceLineNo">206</span> * workings. Use {@link #getEarliestMemStoreSeqNum(byte[], byte[])}<a name="line.206"></a>
-<span class="sourceLineNo">207</span> */<a name="line.207"></a>
-<span class="sourceLineNo">208</span> @VisibleForTesting<a name="line.208"></a>
-<span class="sourceLineNo">209</span> @Deprecated<a name="line.209"></a>
-<span class="sourceLineNo">210</span> long getEarliestMemStoreSeqNum(byte[] encodedRegionName);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span> /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span> * Gets the earliest unflushed sequence id in the memstore for the store.<a name="line.213"></a>
-<span class="sourceLineNo">214</span> * @param encodedRegionName The region to get the number for.<a name="line.214"></a>
-<span class="sourceLineNo">215</span> * @param familyName The family to get the number for.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> * @return The earliest/lowest/oldest sequence id if present, HConstants.NO_SEQNUM if absent.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> */<a name="line.217"></a>
-<span class="sourceLineNo">218</span> long getEarliestMemStoreSeqNum(byte[] encodedRegionName, byte[] familyName);<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span> /**<a name="line.220"></a>
-<span class="sourceLineNo">221</span> * Human readable identifying information about the state of this WAL.<a name="line.221"></a>
-<span class="sourceLineNo">222</span> * Implementors are encouraged to include information appropriate for debugging.<a name="line.222"></a>
-<span class="sourceLineNo">223</span> * Consumers are advised not to rely on the details of the returned String; it does<a name="line.223"></a>
-<span class="sourceLineNo">224</span> * not have a defined structure.<a name="line.224"></a>
-<span class="sourceLineNo">225</span> */<a name="line.225"></a>
-<span class="sourceLineNo">226</span> @Override<a name="line.226"></a>
-<span class="sourceLineNo">227</span> String toString();<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span> /**<a name="line.229"></a>
-<span class="sourceLineNo">230</span> * When outside clients need to consume persisted WALs, they rely on a provided<a name="line.230"></a>
-<span class="sourceLineNo">231</span> * Reader.<a name="line.231"></a>
-<span class="sourceLineNo">232</span> */<a name="line.232"></a>
-<span class="sourceLineNo">233</span> interface Reader extends Closeable {<a name="line.233"></a>
-<span class="sourceLineNo">234</span> Entry next() throws IOException;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> Entry next(Entry reuse) throws IOException;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> void seek(long pos) throws IOException;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> long getPosition() throws IOException;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> void reset() throws IOException;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Utility class that lets us keep track of the edit with it's key.<a name="line.242"></a>
-<span class="sourceLineNo">243</span> */<a name="line.243"></a>
-<span class="sourceLineNo">244</span> class Entry {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> private final WALEdit edit;<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private final WALKeyImpl key;<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span> public Entry() {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> this(new WALKeyImpl(), new WALEdit());<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> /**<a name="line.252"></a>
-<span class="sourceLineNo">253</span> * Constructor for both params<a name="line.253"></a>
-<span class="sourceLineNo">254</span> *<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * @param edit log's edit<a name="line.255"></a>
-<span class="sourceLineNo">256</span> * @param key log's key<a name="line.256"></a>
-<span class="sourceLineNo">257</span> */<a name="line.257"></a>
-<span class="sourceLineNo">258</span> public Entry(WALKeyImpl key, WALEdit edit) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span> this.key = key;<a name="line.259"></a>
-<span class="sourceLineNo">260</span> this.edit = edit;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> /**<a name="line.263"></a>
-<span class="sourceLineNo">264</span> * Gets the edit<a name="line.264"></a>
-<span class="sourceLineNo">265</span> *<a name="line.265"></a>
-<span class="sourceLineNo">266</span> * @return edit<a name="line.266"></a>
-<span class="sourceLineNo">267</span> */<a name="line.267"></a>
-<span class="sourceLineNo">268</span> public WALEdit getEdit() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> return edit;<a name="line.269"></a>
-<span class="sourceLineNo">270</span> }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span> /**<a name="line.272"></a>
-<span class="sourceLineNo">273</span> * Gets the key<a name="line.273"></a>
-<span class="sourceLineNo">274</span> *<a name="line.274"></a>
-<span class="sourceLineNo">275</span> * @return key<a name="line.275"></a>
-<span class="sourceLineNo">276</span> */<a name="line.276"></a>
-<span class="sourceLineNo">277</span> public WALKeyImpl getKey() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> return key;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span> /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span> * Set compression context for this entry.<a name="line.282"></a>
-<span class="sourceLineNo">283</span> *<a name="line.283"></a>
-<span class="sourceLineNo">284</span> * @param compressionContext<a name="line.284"></a>
-<span class="sourceLineNo">285</span> * Compression context<a name="line.285"></a>
-<span class="sourceLineNo">286</span> */<a name="line.286"></a>
-<span class="sourceLineNo">287</span> public void setCompressionContext(CompressionContext compressionContext) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span> key.setCompressionContext(compressionContext);<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
-<span class="sourceLineNo">292</span> public String toString() {<a name="line.292"></a>
-<span class="sourceLineNo">293</span> return this.key + "=" + this.edit;<a name="line.293"></a>
-<span class="sourceLineNo">294</span> }<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span>}<a name="line.296"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.regionserver.wal.WALCoprocessorHost;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.replication.regionserver.WALFileLengthProvider;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>/**<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * A Write Ahead Log (WAL) provides service for reading, writing waledits. This interface provides<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * APIs for WAL users (such as RegionServer) to use the WAL (do append, sync, etc).<a name="line.37"></a>
+<span class="sourceLineNo">038</span> *<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * Note that some internals, such as log rolling and performance evaluation tools, will use<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * WAL.equals to determine if they have already seen a given WAL.<a name="line.40"></a>
+<span class="sourceLineNo">041</span> */<a name="line.41"></a>
+<span class="sourceLineNo">042</span>@InterfaceAudience.Private<a name="line.42"></a>
+<span class="sourceLineNo">043</span>@InterfaceStability.Evolving<a name="line.43"></a>
+<span class="sourceLineNo">044</span>public interface WAL extends Closeable, WALFileLengthProvider {<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span> /**<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * Registers WALActionsListener<a name="line.47"></a>
+<span class="sourceLineNo">048</span> */<a name="line.48"></a>
+<span class="sourceLineNo">049</span> void registerWALActionsListener(final WALActionsListener listener);<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span> /**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Unregisters WALActionsListener<a name="line.52"></a>
+<span class="sourceLineNo">053</span> */<a name="line.53"></a>
+<span class="sourceLineNo">054</span> boolean unregisterWALActionsListener(final WALActionsListener listener);<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span> /**<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * Roll the log writer. That is, start writing log messages to a new file.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * <p><a name="line.59"></a>
+<span class="sourceLineNo">060</span> * The implementation is synchronized in order to make sure there's one rollWriter<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * running at any given time.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> *<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * @return If lots of logs, flush the returned regions so next time through we<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * can clean logs. Returns null if nothing to flush. Names are actual<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * region names as returned by {@link RegionInfo#getEncodedName()}<a name="line.65"></a>
+<span class="sourceLineNo">066</span> */<a name="line.66"></a>
+<span class="sourceLineNo">067</span> byte[][] rollWriter() throws FailedLogCloseException, IOException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span> /**<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * Roll the log writer. That is, start writing log messages to a new file.<a name="line.70"></a>
+<span class="sourceLineNo">071</span> *<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * <p><a name="line.72"></a>
+<span class="sourceLineNo">073</span> * The implementation is synchronized in order to make sure there's one rollWriter<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * running at any given time.<a name="line.74"></a>
+<span class="sourceLineNo">075</span> *<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * @param force<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * If true, force creation of a new writer even if no entries have<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * been written to the current writer<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * @return If lots of logs, flush the returned regions so next time through we<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * can clean logs. Returns null if nothing to flush. Names are actual<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * region names as returned by {@link RegionInfo#getEncodedName()}<a name="line.81"></a>
+<span class="sourceLineNo">082</span> */<a name="line.82"></a>
+<span class="sourceLineNo">083</span> byte[][] rollWriter(boolean force) throws FailedLogCloseException, IOException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span> /**<a name="line.85"></a>
+<span class="sourceLineNo">086</span> * Stop accepting new writes. If we have unsynced writes still in buffer, sync them.<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * Extant edits are left in place in backing storage to be replayed later.<a name="line.87"></a>
+<span class="sourceLineNo">088</span> */<a name="line.88"></a>
+<span class="sourceLineNo">089</span> void shutdown() throws IOException;<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> * Caller no longer needs any edits from this WAL. Implementers are free to reclaim<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * underlying resources after this call; i.e. filesystem based WALs can archive or<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * delete files.<a name="line.94"></a>
+<span class="sourceLineNo">095</span> */<a name="line.95"></a>
+<span class="sourceLineNo">096</span> @Override<a name="line.96"></a>
+<span class="sourceLineNo">097</span> void close() throws IOException;<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span> /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * Append a set of edits to the WAL. The WAL is not flushed/sync'd after this transaction<a name="line.100"></a>
+<span class="sourceLineNo">101</span> * completes BUT on return this edit must have its region edit/sequence id assigned<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * else it messes up our unification of mvcc and sequenceid. On return <code>key</code> will<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * have the region edit/sequence id filled in.<a name="line.103"></a>
+<span class="sourceLineNo">104</span> * @param info the regioninfo associated with append<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * @param key Modified by this call; we add to it this edits region edit/sequence id.<a name="line.105"></a>
+<span class="sourceLineNo">106</span> * @param edits Edits to append. MAY CONTAIN NO EDITS for case where we want to get an edit<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * sequence id that is after all currently appended edits.<a name="line.107"></a>
+<span class="sourceLineNo">108</span> * @param inMemstore Always true except for case where we are writing a compaction completion<a name="line.108"></a>
+<span class="sourceLineNo">109</span> * record into the WAL; in this case the entry is just so we can finish an unfinished compaction<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * -- it is not an edit for memstore.<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * @return Returns a 'transaction id' and <code>key</code> will have the region edit/sequence id<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * in it.<a name="line.112"></a>
+<span class="sourceLineNo">113</span> */<a name="line.113"></a>
+<span class="sourceLineNo">114</span> long append(RegionInfo info, WALKeyImpl key, WALEdit edits, boolean inMemstore) throws IOException;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * updates the seuence number of a specific store.<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * depending on the flag: replaces current seq number if the given seq id is bigger,<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * or even if it is lower than existing one<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * @param encodedRegionName<a name="line.120"></a>
+<span class="sourceLineNo">121</span> * @param familyName<a name="line.121"></a>
+<span class="sourceLineNo">122</span> * @param sequenceid<a name="line.122"></a>
+<span class="sourceLineNo">123</span> * @param onlyIfGreater<a name="line.123"></a>
+<span class="sourceLineNo">124</span> */<a name="line.124"></a>
+<span class="sourceLineNo">125</span> void updateStore(byte[] encodedRegionName, byte[] familyName, Long sequenceid,<a name="line.125"></a>
+<span class="sourceLineNo">126</span> boolean onlyIfGreater);<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> /**<a name="line.128"></a>
+<span class="sourceLineNo">129</span> * Sync what we have in the WAL.<a name="line.129"></a>
+<span class="sourceLineNo">130</span> * @throws IOException<a name="line.130"></a>
+<span class="sourceLineNo">131</span> */<a name="line.131"></a>
+<span class="sourceLineNo">132</span> void sync() throws IOException;<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span> /**<a name="line.134"></a>
+<span class="sourceLineNo">135</span> * Sync the WAL if the txId was not already sync'd.<a name="line.135"></a>
+<span class="sourceLineNo">136</span> * @param txid Transaction id to sync to.<a name="line.136"></a>
+<span class="sourceLineNo">137</span> * @throws IOException<a name="line.137"></a>
+<span class="sourceLineNo">138</span> */<a name="line.138"></a>
+<span class="sourceLineNo">139</span> void sync(long txid) throws IOException;<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> * @param forceSync Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush<a name="line.142"></a>
+<span class="sourceLineNo">143</span> * vs hsync.<a name="line.143"></a>
+<span class="sourceLineNo">144</span> */<a name="line.144"></a>
+<span class="sourceLineNo">145</span> default void sync(boolean forceSync) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> sync();<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> * @param txid Transaction id to sync to.<a name="line.150"></a>
+<span class="sourceLineNo">151</span> * @param forceSync Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush<a name="line.151"></a>
+<span class="sourceLineNo">152</span> * vs hsync.<a name="line.152"></a>
+<span class="sourceLineNo">153</span> */<a name="line.153"></a>
+<span class="sourceLineNo">154</span> default void sync(long txid, boolean forceSync) throws IOException {<a name="line.154"></a>
+<span class="sourceLineNo">155</span> sync(txid);<a name="line.155"></a>
+<span class="sourceLineNo">156</span> }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span> /**<a name="line.158"></a>
+<span class="sourceLineNo">159</span> * WAL keeps track of the sequence numbers that are as yet not flushed im memstores<a name="line.159"></a>
+<span class="sourceLineNo">160</span> * in order to be able to do accounting to figure which WALs can be let go. This method tells WAL<a name="line.160"></a>
+<span class="sourceLineNo">161</span> * that some region is about to flush. The flush can be the whole region or for a column family<a name="line.161"></a>
+<span class="sourceLineNo">162</span> * of the region only.<a name="line.162"></a>
+<span class="sourceLineNo">163</span> *<a name="line.163"></a>
+<span class="sourceLineNo">164</span> * <p>Currently, it is expected that the update lock is held for the region; i.e. no<a name="line.164"></a>
+<span class="sourceLineNo">165</span> * concurrent appends while we set up cache flush.<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * @param families Families to flush. May be a subset of all families in the region.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * @return Returns {@link HConstants#NO_SEQNUM} if we are flushing the whole region OR if<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * we are flushing a subset of all families but there are no edits in those families not<a name="line.168"></a>
+<span class="sourceLineNo">169</span> * being flushed; in other words, this is effectively same as a flush of all of the region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * though we were passed a subset of regions. Otherwise, it returns the sequence id of the<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * oldest/lowest outstanding edit.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * @see #completeCacheFlush(byte[])<a name="line.172"></a>
+<span class="sourceLineNo">173</span> * @see #abortCacheFlush(byte[])<a name="line.173"></a>
+<span class="sourceLineNo">174</span> */<a name="line.174"></a>
+<span class="sourceLineNo">175</span> Long startCacheFlush(final byte[] encodedRegionName, Set<byte[]> families);<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span> Long startCacheFlush(final byte[] encodedRegionName, Map<byte[], Long> familyToSeq);<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span> /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * Complete the cache flush.<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * @param encodedRegionName Encoded region name.<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * @see #startCacheFlush(byte[], Set)<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * @see #abortCacheFlush(byte[])<a name="line.183"></a>
+<span class="sourceLineNo">184</span> */<a name="line.184"></a>
+<span class="sourceLineNo">185</span> void completeCacheFlush(final byte[] encodedRegionName);<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * Abort a cache flush. Call if the flush fails. Note that the only recovery<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * for an aborted flush currently is a restart of the regionserver so the<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * snapshot content dropped by the failure gets restored to the memstore.<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * @param encodedRegionName Encoded region name.<a name="line.191"></a>
+<span class="sourceLineNo">192</span> */<a name="line.192"></a>
+<span class="sourceLineNo">193</span> void abortCacheFlush(byte[] encodedRegionName);<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
+<span class="sourceLineNo">196</span> * @return Coprocessor host.<a name="line.196"></a>
+<span class="sourceLineNo">197</span> */<a name="line.197"></a>
+<span class="sourceLineNo">198</span> WALCoprocessorHost getCoprocessorHost();<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span> /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Gets the earliest unflushed sequence id in the memstore for the region.<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * @param encodedRegionName The region to get the number for.<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * @return The earliest/lowest/oldest sequence id if present, HConstants.NO_SEQNUM if absent.<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * @deprecated Since version 1.2.0. Removing because not used and exposes subtle internal<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * workings. Use {@link #getEarliestMemStoreSeqNum(byte[], byte[])}<a name="line.205"></a>
+<span class="sourceLineNo">206</span> */<a name="line.206"></a>
+<span class="sourceLineNo">207</span> @VisibleForTesting<a name="line.207"></a>
+<span class="sourceLineNo">208</span> @Deprecated<a name="line.208"></a>
+<span class="sourceLineNo">209</span> long getEarliestMemStoreSeqNum(byte[] encodedRegionName);<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span> /**<a name="line.211"></a>
+<span class="sourceLineNo">212</span> * Gets the earliest unflushed sequence id in the memstore for the store.<a name="line.212"></a>
+<span class="sourceLineNo">213</span> * @param encodedRegionName The region to get the number for.<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * @param familyName The family to get the number for.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> * @return The earliest/lowest/oldest sequence id if present, HConstants.NO_SEQNUM if absent.<a name="line.215"></a>
+<span class="sourceLineNo">216</span> */<a name="line.216"></a>
+<span class="sourceLineNo">217</span> long getEarliestMemStoreSeqNum(byte[] encodedRegionName, byte[] familyName);<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span> /**<a name="line.219"></a>
+<span class="sourceLineNo">220</span> * Human readable identifying information about the state of this WAL.<a name="line.220"></a>
+<span class="sourceLineNo">221</span> * Implementors are encouraged to include information appropriate for debugging.<a name="line.221"></a>
+<span class="sourceLineNo">222</span> * Consumers are advised not to rely on the details of the returned String; it does<a name="line.222"></a>
+<span class="sourceLineNo">223</span> * not have a defined structure.<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> String toString();<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span> /**<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * When outside clients need to consume persisted WALs, they rely on a provided<a name="line.229"></a>
+<span class="sourceLineNo">230</span> * Reader.<a name="line.230"></a>
+<span class="sourceLineNo">231</span> */<a name="line.231"></a>
+<span class="sourceLineNo">232</span> interface Reader extends Closeable {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> Entry next() throws IOException;<a name="line.233"></a>
+<span class="sourceLineNo">234</span> Entry next(Entry reuse) throws IOException;<a name="line.234"></a>
+<span class="sourceLineNo">235</span> void seek(long pos) throws IOException;<a name="line.235"></a>
+<span class="sourceLineNo">236</span> long getPosition() throws IOException;<a name="line.236"></a>
+<span class="sourceLineNo">237</span> void reset() throws IOException;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span> /**<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * Utility class that lets us keep track of the edit with it's key.<a name="line.241"></a>
+<span class="sourceLineNo">242</span> */<a name="line.242"></a>
+<span class="sourceLineNo">243</span> class Entry {<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private final WALEdit edit;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private final WALKeyImpl key;<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> public Entry() {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> this(new WALKeyImpl(), new WALEdit());<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> * Constructor for both params<a name="line.252"></a>
+<span class="sourceLineNo">253</span> *<a name="line.253"></a>
+<span class="sourceLineNo">254</span> * @param edit log's edit<a name="line.254"></a>
+<span class="sourceLineNo">255</span> * @param key log's key<a name="line.255"></a>
+<span class="sourceLineNo">256</span> */<a name="line.256"></a>
+<span class="sourceLineNo">257</span> public Entry(WALKeyImpl key, WALEdit edit) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.key = key;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> this.edit = edit;<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> /**<a name="line.262"></a>
+<span class="sourceLineNo">263</span> * Gets the edit<a name="line.263"></a>
+<span class="sourceLineNo">264</span> *<a name="line.264"></a>
+<span class="sourceLineNo">265</span> * @return edit<a name="line.265"></a>
+<span class="sourceLineNo">266</span> */<a name="line.266"></a>
+<span class="sourceLineNo">267</span> public WALEdit getEdit() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return edit;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> /**<a name="line.271"></a>
+<span class="sourceLineNo">272</span> * Gets the key<a name="line.272"></a>
+<span class="sourceLineNo">273</span> *<a name="line.273"></a>
+<span class="sourceLineNo">274</span> * @return key<a name="line.274"></a>
+<span class="sourceLineNo">275</span> */<a name="line.275"></a>
+<span class="sourceLineNo">276</span> public WALKeyImpl getKey() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> return key;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span> @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span> public String toString() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span> return this.key + "=" + this.edit;<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>
[26/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html
index f236300..513d2ad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html
@@ -26,1048 +26,1115 @@
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.backup.impl;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.io.IOException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.net.URI;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.List;<a name="line.42"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.lang3.StringUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configured;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<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> * General backup commands, options and usage messages<a name="line.71"></a>
-<span class="sourceLineNo">072</span> */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceAudience.Private<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public final class BackupCommands {<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.77"></a>
-<span class="sourceLineNo">078</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.80"></a>
-<span class="sourceLineNo">081</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.81"></a>
-<span class="sourceLineNo">082</span> + " delete delete an existing backup image\n"<a name="line.82"></a>
-<span class="sourceLineNo">083</span> + " describe show the detailed information of a backup image\n"<a name="line.83"></a>
-<span class="sourceLineNo">084</span> + " history show history of all successful backups\n"<a name="line.84"></a>
-<span class="sourceLineNo">085</span> + " progress show the progress of the latest backup request\n"<a name="line.85"></a>
-<span class="sourceLineNo">086</span> + " set backup set management\n"<a name="line.86"></a>
-<span class="sourceLineNo">087</span> + " repair repair backup system table\n"<a name="line.87"></a>
-<span class="sourceLineNo">088</span> + " merge merge backup images\n"<a name="line.88"></a>
-<span class="sourceLineNo">089</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> public static final String CREATE_CMD_USAGE =<a name="line.91"></a>
-<span class="sourceLineNo">092</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.92"></a>
-<span class="sourceLineNo">093</span> + " type \"full\" to create a full backup image\n"<a name="line.93"></a>
-<span class="sourceLineNo">094</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.94"></a>
-<span class="sourceLineNo">095</span> + " backup_path Full path to store the backup image\n";<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.97"></a>
-<span class="sourceLineNo">098</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.98"></a>
-<span class="sourceLineNo">099</span> + " progress for currently running backup session.";<a name="line.99"></a>
-<span class="sourceLineNo">100</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.100"></a>
-<span class="sourceLineNo">101</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.103"></a>
-<span class="sourceLineNo">104</span> + " backup_id Backup image id\n";<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete <backup_id>\n"<a name="line.108"></a>
-<span class="sourceLineNo">109</span> + " backup_id Backup image id\n";<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.113"></a>
-<span class="sourceLineNo">114</span> + " name Backup set name\n"<a name="line.114"></a>
-<span class="sourceLineNo">115</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.115"></a>
-<span class="sourceLineNo">116</span> + " add add tables to a set, create a set if needed\n"<a name="line.116"></a>
-<span class="sourceLineNo">117</span> + " remove remove tables from a set\n"<a name="line.117"></a>
-<span class="sourceLineNo">118</span> + " list list all backup sets in the system\n"<a name="line.118"></a>
-<span class="sourceLineNo">119</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.119"></a>
-<span class="sourceLineNo">120</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.120"></a>
-<span class="sourceLineNo">121</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span> public static final String USAGE_FOOTER = "";<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> public static abstract class Command extends Configured {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> CommandLine cmdline;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> Connection conn;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> Command(Configuration conf) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (conf == null) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> conf = HBaseConfiguration.create();<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span> setConf(conf);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span> public void execute() throws IOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> printUsage();<a name="line.138"></a>
-<span class="sourceLineNo">139</span> throw new IOException(INCORRECT_USAGE);<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> // Create connection<a name="line.142"></a>
-<span class="sourceLineNo">143</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.143"></a>
-<span class="sourceLineNo">144</span> if (requiresNoActiveSession()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> // Check active session<a name="line.145"></a>
-<span class="sourceLineNo">146</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span> if (sessions.size() > 0) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.150"></a>
-<span class="sourceLineNo">151</span> System.err.println(sessions.get(0));<a name="line.151"></a>
-<span class="sourceLineNo">152</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.152"></a>
-<span class="sourceLineNo">153</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.153"></a>
-<span class="sourceLineNo">154</span> throw new IOException("Active session found, aborted command execution");<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> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> if (requiresConsistentState()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span> // Check failed delete<a name="line.159"></a>
-<span class="sourceLineNo">160</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (ids != null && ids.length > 0) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> System.err.println("Backup system recovery is required.");<a name="line.165"></a>
-<span class="sourceLineNo">166</span> throw new IOException("Failed backup DELETE found, aborted command execution");<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.169"></a>
-<span class="sourceLineNo">170</span> if (ids != null && ids.length > 0) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.171"></a>
-<span class="sourceLineNo">172</span> System.err.println("Backup system recovery is required.");<a name="line.172"></a>
-<span class="sourceLineNo">173</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> }<a name="line.175"></a>
-<span class="sourceLineNo">176</span> }<a name="line.176"></a>
-<span class="sourceLineNo">177</span> }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span> public void finish() throws IOException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (conn != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> conn.close();<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> protected abstract void printUsage();<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * The command can't be run if active backup session is in progress<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * @return true if no active sessions are in progress<a name="line.189"></a>
-<span class="sourceLineNo">190</span> */<a name="line.190"></a>
-<span class="sourceLineNo">191</span> protected boolean requiresNoActiveSession() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span> return false;<a name="line.192"></a>
-<span class="sourceLineNo">193</span> }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * because of an abnormal termination of a backup session or delete command<a name="line.197"></a>
-<span class="sourceLineNo">198</span> * @return true, if yes<a name="line.198"></a>
-<span class="sourceLineNo">199</span> */<a name="line.199"></a>
-<span class="sourceLineNo">200</span> protected boolean requiresConsistentState() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> return false;<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 BackupCommands() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> throw new AssertionError("Instantiating utility class...");<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> Command cmd;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> switch (type) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> case CREATE:<a name="line.212"></a>
-<span class="sourceLineNo">213</span> cmd = new CreateCommand(conf, cmdline);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span> case DESCRIBE:<a name="line.215"></a>
-<span class="sourceLineNo">216</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.216"></a>
+<span class="sourceLineNo">044</span>import java.io.IOException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.net.URI;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.List;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.lang3.StringUtils;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.conf.Configured;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.FileSystem;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.fs.Path;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.TableName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.yetus.audience.InterfaceAudience;<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> * General backup commands, options and usage messages<a name="line.75"></a>
+<span class="sourceLineNo">076</span> */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceAudience.Private<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public final class BackupCommands {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.81"></a>
+<span class="sourceLineNo">082</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.84"></a>
+<span class="sourceLineNo">085</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.85"></a>
+<span class="sourceLineNo">086</span> + " delete delete an existing backup image\n"<a name="line.86"></a>
+<span class="sourceLineNo">087</span> + " describe show the detailed information of a backup image\n"<a name="line.87"></a>
+<span class="sourceLineNo">088</span> + " history show history of all successful backups\n"<a name="line.88"></a>
+<span class="sourceLineNo">089</span> + " progress show the progress of the latest backup request\n"<a name="line.89"></a>
+<span class="sourceLineNo">090</span> + " set backup set management\n"<a name="line.90"></a>
+<span class="sourceLineNo">091</span> + " repair repair backup system table\n"<a name="line.91"></a>
+<span class="sourceLineNo">092</span> + " merge merge backup images\n"<a name="line.92"></a>
+<span class="sourceLineNo">093</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span> public static final String CREATE_CMD_USAGE =<a name="line.95"></a>
+<span class="sourceLineNo">096</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.96"></a>
+<span class="sourceLineNo">097</span> + " type \"full\" to create a full backup image\n"<a name="line.97"></a>
+<span class="sourceLineNo">098</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.98"></a>
+<span class="sourceLineNo">099</span> + " backup_path Full path to store the backup image\n";<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.101"></a>
+<span class="sourceLineNo">102</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.102"></a>
+<span class="sourceLineNo">103</span> + " progress for currently running backup session.";<a name="line.103"></a>
+<span class="sourceLineNo">104</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.104"></a>
+<span class="sourceLineNo">105</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.107"></a>
+<span class="sourceLineNo">108</span> + " backup_id Backup image id\n";<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete [options]";<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.116"></a>
+<span class="sourceLineNo">117</span> + " name Backup set name\n"<a name="line.117"></a>
+<span class="sourceLineNo">118</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.118"></a>
+<span class="sourceLineNo">119</span> + " add add tables to a set, create a set if needed\n"<a name="line.119"></a>
+<span class="sourceLineNo">120</span> + " remove remove tables from a set\n"<a name="line.120"></a>
+<span class="sourceLineNo">121</span> + " list list all backup sets in the system\n"<a name="line.121"></a>
+<span class="sourceLineNo">122</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.122"></a>
+<span class="sourceLineNo">123</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.123"></a>
+<span class="sourceLineNo">124</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static final String USAGE_FOOTER = "";<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> public static abstract class Command extends Configured {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> CommandLine cmdline;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> Connection conn;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span> Command(Configuration conf) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span> if (conf == null) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> conf = HBaseConfiguration.create();<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> setConf(conf);<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> public void execute() throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> printUsage();<a name="line.141"></a>
+<span class="sourceLineNo">142</span> throw new IOException(INCORRECT_USAGE);<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">145</span> // Create connection<a name="line.145"></a>
+<span class="sourceLineNo">146</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (requiresNoActiveSession()) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // Check active session<a name="line.148"></a>
+<span class="sourceLineNo">149</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span> if (sessions.size() > 0) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.153"></a>
+<span class="sourceLineNo">154</span> System.err.println(sessions.get(0));<a name="line.154"></a>
+<span class="sourceLineNo">155</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.155"></a>
+<span class="sourceLineNo">156</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.156"></a>
+<span class="sourceLineNo">157</span> throw new IOException("Active session found, aborted command execution");<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span> }<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span> if (requiresConsistentState()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span> // Check failed delete<a name="line.162"></a>
+<span class="sourceLineNo">163</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span> if (ids != null && ids.length > 0) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.167"></a>
+<span class="sourceLineNo">168</span> System.err.println("Backup system recovery is required.");<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throw new IOException("Failed backup DELETE found, aborted command execution");<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> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> if (ids != null && ids.length > 0) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.174"></a>
+<span class="sourceLineNo">175</span> System.err.println("Backup system recovery is required.");<a name="line.175"></a>
+<span class="sourceLineNo">176</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> }<a name="line.179"></a>
+<span class="sourceLineNo">180</span> }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span> public void finish() throws IOException {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> if (conn != null) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> conn.close();<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> protected abstract void printUsage();<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * The command can't be run if active backup session is in progress<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * @return true if no active sessions are in progress<a name="line.192"></a>
+<span class="sourceLineNo">193</span> */<a name="line.193"></a>
+<span class="sourceLineNo">194</span> protected boolean requiresNoActiveSession() {<a name="line.194"></a>
+<span class="sourceLineNo">195</span> return false;<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * because of an abnormal termination of a backup session or delete command<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * @return true, if yes<a name="line.201"></a>
+<span class="sourceLineNo">202</span> */<a name="line.202"></a>
+<span class="sourceLineNo">203</span> protected boolean requiresConsistentState() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return false;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> private BackupCommands() {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new AssertionError("Instantiating utility class...");<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> Command cmd;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> switch (type) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> case CREATE:<a name="line.215"></a>
+<span class="sourceLineNo">216</span> cmd = new CreateCommand(conf, cmdline);<a name="line.216"></a>
<span class="sourceLineNo">217</span> break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span> case PROGRESS:<a name="line.218"></a>
-<span class="sourceLineNo">219</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.219"></a>
+<span class="sourceLineNo">218</span> case DESCRIBE:<a name="line.218"></a>
+<span class="sourceLineNo">219</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.219"></a>
<span class="sourceLineNo">220</span> break;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> case DELETE:<a name="line.221"></a>
-<span class="sourceLineNo">222</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.222"></a>
+<span class="sourceLineNo">221</span> case PROGRESS:<a name="line.221"></a>
+<span class="sourceLineNo">222</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.222"></a>
<span class="sourceLineNo">223</span> break;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> case HISTORY:<a name="line.224"></a>
-<span class="sourceLineNo">225</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.225"></a>
+<span class="sourceLineNo">224</span> case DELETE:<a name="line.224"></a>
+<span class="sourceLineNo">225</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.225"></a>
<span class="sourceLineNo">226</span> break;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> case SET:<a name="line.227"></a>
-<span class="sourceLineNo">228</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.228"></a>
+<span class="sourceLineNo">227</span> case HISTORY:<a name="line.227"></a>
+<span class="sourceLineNo">228</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.228"></a>
<span class="sourceLineNo">229</span> break;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> case REPAIR:<a name="line.230"></a>
-<span class="sourceLineNo">231</span> cmd = new RepairCommand(conf, cmdline);<a name="line.231"></a>
+<span class="sourceLineNo">230</span> case SET:<a name="line.230"></a>
+<span class="sourceLineNo">231</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.231"></a>
<span class="sourceLineNo">232</span> break;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> case MERGE:<a name="line.233"></a>
-<span class="sourceLineNo">234</span> cmd = new MergeCommand(conf, cmdline);<a name="line.234"></a>
+<span class="sourceLineNo">233</span> case REPAIR:<a name="line.233"></a>
+<span class="sourceLineNo">234</span> cmd = new RepairCommand(conf, cmdline);<a name="line.234"></a>
<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> case HELP:<a name="line.236"></a>
-<span class="sourceLineNo">237</span> default:<a name="line.237"></a>
-<span class="sourceLineNo">238</span> cmd = new HelpCommand(conf, cmdline);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> break;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return cmd;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> static int numOfArgs(String[] args) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> if (args == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> return 0;<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> return args.length;<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
+<span class="sourceLineNo">236</span> case MERGE:<a name="line.236"></a>
+<span class="sourceLineNo">237</span> cmd = new MergeCommand(conf, cmdline);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> break;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> case HELP:<a name="line.239"></a>
+<span class="sourceLineNo">240</span> default:<a name="line.240"></a>
+<span class="sourceLineNo">241</span> cmd = new HelpCommand(conf, cmdline);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> break;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> return cmd;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> static int numOfArgs(String[] args) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> if (args == null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span> return 0;<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> public static class CreateCommand extends Command {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span> super(conf);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> this.cmdline = cmdline;<a name="line.255"></a>
-<span class="sourceLineNo">256</span> }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span> @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span> protected boolean requiresNoActiveSession() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> return true;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span> protected boolean requiresConsistentState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> return true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span> }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span> @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span> public void execute() throws IOException {<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> printUsage();<a name="line.271"></a>
-<span class="sourceLineNo">272</span> throw new IOException(INCORRECT_USAGE);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span> String[] args = cmdline.getArgs();<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (args.length != 3) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> printUsage();<a name="line.276"></a>
-<span class="sourceLineNo">277</span> throw new IOException(INCORRECT_USAGE);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.280"></a>
-<span class="sourceLineNo">281</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> printUsage();<a name="line.283"></a>
-<span class="sourceLineNo">284</span> throw new IOException(INCORRECT_USAGE);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span> if (!verifyPath(args[2])) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> printUsage();<a name="line.288"></a>
-<span class="sourceLineNo">289</span> throw new IOException(INCORRECT_USAGE);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> String targetBackupDir = args[2];<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.292"></a>
-<span class="sourceLineNo">293</span> if (isRootFolder(targetBackupDir)) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> String tables;<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span> // Check if we have both: backup set and list of tables<a name="line.298"></a>
-<span class="sourceLineNo">299</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.300"></a>
-<span class="sourceLineNo">301</span> + " of tables, but not both");<a name="line.301"></a>
-<span class="sourceLineNo">302</span> printUsage();<a name="line.302"></a>
-<span class="sourceLineNo">303</span> throw new IOException(INCORRECT_USAGE);<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Creates connection<a name="line.305"></a>
-<span class="sourceLineNo">306</span> super.execute();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Check backup set<a name="line.307"></a>
-<span class="sourceLineNo">308</span> String setName = null;<a name="line.308"></a>
-<span class="sourceLineNo">309</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> tables = getTablesForSet(setName, getConf());<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> if (tables == null) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> System.out.println("ERROR: Backup set '" + setName<a name="line.314"></a>
-<span class="sourceLineNo">315</span> + "' is either empty or does not exist");<a name="line.315"></a>
-<span class="sourceLineNo">316</span> printUsage();<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException(INCORRECT_USAGE);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span> int bandwidth =<a name="line.322"></a>
-<span class="sourceLineNo">323</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.323"></a>
-<span class="sourceLineNo">324</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> int workers =<a name="line.325"></a>
-<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.326"></a>
-<span class="sourceLineNo">327</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // Set system property value for MR job<a name="line.331"></a>
-<span class="sourceLineNo">332</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> BackupRequest request =<a name="line.337"></a>
-<span class="sourceLineNo">338</span> builder<a name="line.338"></a>
-<span class="sourceLineNo">339</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.339"></a>
-<span class="sourceLineNo">340</span> .withTableList(<a name="line.340"></a>
-<span class="sourceLineNo">341</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.341"></a>
-<span class="sourceLineNo">342</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.342"></a>
-<span class="sourceLineNo">343</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> String backupId = admin.backupTables(request);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.345"></a>
-<span class="sourceLineNo">346</span> } catch (IOException e) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.347"></a>
-<span class="sourceLineNo">348</span> throw e;<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> Path p = new Path(targetBackupDir);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> return p.isRoot();<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> private boolean verifyPath(String path) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> Path p = new Path(path);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> URI uri = p.toUri();<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (uri.getScheme() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> return false;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> FileSystem.get(uri, conf);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> return true;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> } catch (Exception e) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> return false;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> }<a name="line.371"></a>
-<span class="sourceLineNo">372</span> }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (tables == null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> return null;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span> protected void printUsage() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> System.out.println(CREATE_CMD_USAGE);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> Options options = new Options();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.397"></a>
-<span class="sourceLineNo">398</span> helpFormatter.setLeftPadding(2);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> helpFormatter.setDescPadding(8);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> helpFormatter.setWidth(100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.401"></a>
-<span class="sourceLineNo">402</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> public static class HelpCommand extends Command {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span> super(conf);<a name="line.408"></a>
-<span class="sourceLineNo">409</span> this.cmdline = cmdline;<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void execute() throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> if (cmdline == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span> printUsage();<a name="line.415"></a>
-<span class="sourceLineNo">416</span> throw new IOException(INCORRECT_USAGE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span> }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span> String[] args = cmdline.getArgs();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> if (args == null || args.length == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span> printUsage();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> throw new IOException(INCORRECT_USAGE);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> if (args.length != 2) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.426"></a>
-<span class="sourceLineNo">427</span> printUsage();<a name="line.427"></a>
-<span class="sourceLineNo">428</span> throw new IOException(INCORRECT_USAGE);<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> String type = args[1];<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (BackupCommand.CREATE.name().equalsIgnoreCase(type)) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> System.out.println(CREATE_CMD_USAGE);<a name="line.434"></a>
-<span class="sourceLineNo">435</span> } else if (BackupCommand.DESCRIBE.name().equalsIgnoreCase(type)) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.436"></a>
-<span class="sourceLineNo">437</span> } else if (BackupCommand.HISTORY.name().equalsIgnoreCase(type)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> System.out.println(HISTORY_CMD_USAGE);<a name="line.438"></a>
-<span class="sourceLineNo">439</span> } else if (BackupCommand.PROGRESS.name().equalsIgnoreCase(type)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> System.out.println(PROGRESS_CMD_USAGE);<a name="line.440"></a>
-<span class="sourceLineNo">441</span> } else if (BackupCommand.DELETE.name().equalsIgnoreCase(type)) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> System.out.println(DELETE_CMD_USAGE);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> } else if (BackupCommand.SET.name().equalsIgnoreCase(type)) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> System.out.println(SET_CMD_USAGE);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> } else {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> System.out.println("Unknown command : " + type);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> printUsage();<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span> @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected void printUsage() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> System.out.println(USAGE);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> }<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span> public static class DescribeCommand extends Command {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> DescribeCommand(Configuration conf, CommandLine cmdline) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> super(conf);<a name="line.459"></a>
-<span class="sourceLineNo">460</span> this.cmdline = cmdline;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span> public void execute() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> printUsage();<a name="line.466"></a>
-<span class="sourceLineNo">467</span> throw new IOException(INCORRECT_USAGE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span> String[] args = cmdline.getArgs();<a name="line.469"></a>
-<span class="sourceLineNo">470</span> if (args.length != 2) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> printUsage();<a name="line.471"></a>
-<span class="sourceLineNo">472</span> throw new IOException(INCORRECT_USAGE);<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> super.execute();<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> String backupId = args[1];<a name="line.477"></a>
-<span class="sourceLineNo">478</span> try (final BackupSystemTable sysTable = new BackupSystemTable(conn)) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> BackupInfo info = sysTable.readBackupInfo(backupId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span> if (info == null) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> System.out.println("ERROR: " + backupId + " does not exist");<a name="line.481"></a>
-<span class="sourceLineNo">482</span> printUsage();<a name="line.482"></a>
-<span class="sourceLineNo">483</span> throw new IOException(INCORRECT_USAGE);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> System.out.println(info.getShortDescription());<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> @Override<a name="line.489"></a>
-<span class="sourceLineNo">490</span> protected void printUsage() {<a name="line.490"></a>
-<span class="sourceLineNo">491</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<a name="line.492"></a>
-<span class="sourceLineNo">493</span> }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span> public static class ProgressCommand extends Command {<a name="line.495"></a>
-<span class="sourceLineNo">496</span> ProgressCommand(Configuration conf, CommandLine cmdline) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span> super(conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> this.cmdline = cmdline;<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public void execute() throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">252</span> return args.length;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> public static class CreateCommand extends Command {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> super(conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.cmdline = cmdline;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span> @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span> protected boolean requiresNoActiveSession() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return true;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span> protected boolean requiresConsistentState() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return true;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span> public void execute() throws IOException {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> printUsage();<a name="line.274"></a>
+<span class="sourceLineNo">275</span> throw new IOException(INCORRECT_USAGE);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span> String[] args = cmdline.getArgs();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> if (args.length != 3) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> printUsage();<a name="line.279"></a>
+<span class="sourceLineNo">280</span> throw new IOException(INCORRECT_USAGE);<a name="line.280"></a>
+<span class="sourceLineNo">281</span> }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.283"></a>
+<span class="sourceLineNo">284</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> printUsage();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> throw new IOException(INCORRECT_USAGE);<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> if (!verifyPath(args[2])) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> printUsage();<a name="line.291"></a>
+<span class="sourceLineNo">292</span> throw new IOException(INCORRECT_USAGE);<a name="line.292"></a>
+<span class="sourceLineNo">293</span> }<a name="line.293"></a>
+<span class="sourceLineNo">294</span> String targetBackupDir = args[2];<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (isRootFolder(targetBackupDir)) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> String tables;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // Check if we have both: backup set and list of tables<a name="line.301"></a>
+<span class="sourceLineNo">302</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.303"></a>
+<span class="sourceLineNo">304</span> + " of tables, but not both");<a name="line.304"></a>
+<span class="sourceLineNo">305</span> printUsage();<a name="line.305"></a>
+<span class="sourceLineNo">306</span> throw new IOException(INCORRECT_USAGE);<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span> // Creates connection<a name="line.308"></a>
+<span class="sourceLineNo">309</span> super.execute();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Check backup set<a name="line.310"></a>
+<span class="sourceLineNo">311</span> String setName = null;<a name="line.311"></a>
+<span class="sourceLineNo">312</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> tables = getTablesForSet(setName, getConf());<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span> if (tables == null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> System.out.println("ERROR: Backup set '" + setName<a name="line.317"></a>
+<span class="sourceLineNo">318</span> + "' is either empty or does not exist");<a name="line.318"></a>
+<span class="sourceLineNo">319</span> printUsage();<a name="line.319"></a>
+<span class="sourceLineNo">320</span> throw new IOException(INCORRECT_USAGE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> } else {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span> int bandwidth =<a name="line.325"></a>
+<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.326"></a>
+<span class="sourceLineNo">327</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> int workers =<a name="line.328"></a>
+<span class="sourceLineNo">329</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.329"></a>
+<span class="sourceLineNo">330</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> // Set system property value for MR job<a name="line.334"></a>
+<span class="sourceLineNo">335</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.339"></a>
+<span class="sourceLineNo">340</span> BackupRequest request =<a name="line.340"></a>
+<span class="sourceLineNo">341</span> builder<a name="line.341"></a>
+<span class="sourceLineNo">342</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.342"></a>
+<span class="sourceLineNo">343</span> .withTableList(<a name="line.343"></a>
+<span class="sourceLineNo">344</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.345"></a>
+<span class="sourceLineNo">346</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String backupId = admin.backupTables(request);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> } catch (IOException e) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.350"></a>
+<span class="sourceLineNo">351</span> throw e;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> Path p = new Path(targetBackupDir);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return p.isRoot();<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span> private boolean verifyPath(String path) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> try {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> Path p = new Path(path);<a name="line.362"></a>
+<span class="sourceLineNo">363</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.363"></a>
+<span class="sourceLineNo">364</span> URI uri = p.toUri();<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> if (uri.getScheme() == null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span> return false;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> FileSystem.get(uri, conf);<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return true;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> } catch (Exception e) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return false;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.377"></a>
+<span class="sourceLineNo">378</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span> if (tables == null) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span> return null;<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> @Override<a name="line.389"></a>
+<span class="sourceLineNo">390</span> protected void printUsage() {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> System.out.println(CREATE_CMD_USAGE);<a name="line.391"></a>
+<span class="sourceLineNo">392</span> Options options = new Options();<a name="line.392"></a>
+<span class="sourceLineNo">393</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.400"></a>
+<span class="sourceLineNo">401</span> helpFormatter.setLeftPadding(2);<a name="line.401"></a>
+<span class="sourceLineNo">402</span> helpFormatter.setDescPadding(8);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> helpFormatter.setWidth(100);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.404"></a>
+<span class="sourceLineNo">405</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<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> public static class HelpCommand extends Command {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> super(conf);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> this.cmdline = cmdline;<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span> @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span> public void execute() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span> if (cmdline == null) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> printUsage();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> throw new IOException(INCORRECT_USAGE);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> String[] args = cmdline.getArgs();<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (args == null || args.length == 0) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> printUsage();<a name="line.424"></a>
+<span class="sourceLineNo">425</span> throw new IOException(INCORRECT_USAGE);<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> if (args.length != 2) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.429"></a>
+<span class="sourceLineNo">430</span> printUsage();<a name="line.430"></a>
+<span class="sourceLineNo">431</span> throw new IOException(INCORRECT_USAGE);<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a
<TRUNCATED>
[10/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
index 83c17c0..9df0225 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
@@ -54,323 +54,362 @@
<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> */<a name="line.57"></a>
-<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
-<span class="sourceLineNo">059</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
-<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
-<span class="sourceLineNo">061</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
-<span class="sourceLineNo">062</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span> protected final CompressionContext compression;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> protected final ByteStringUncompressor statelessUncompressor = new ByteStringUncompressor() {<a name="line.65"></a>
-<span class="sourceLineNo">066</span> @Override<a name="line.66"></a>
-<span class="sourceLineNo">067</span> public byte[] uncompress(ByteString data, Dictionary dict) throws IOException {<a name="line.67"></a>
-<span class="sourceLineNo">068</span> return WALCellCodec.uncompressByteString(data, dict);<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><a name="line.71"></a>
-<span class="sourceLineNo">072</span> /**<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.73"></a>
-<span class="sourceLineNo">074</span> */<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public WALCellCodec() {<a name="line.75"></a>
-<span class="sourceLineNo">076</span> this.compression = null;<a name="line.76"></a>
-<span class="sourceLineNo">077</span> }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span> /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.80"></a>
-<span class="sourceLineNo">081</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * @param conf configuration to configure <tt>this</tt><a name="line.82"></a>
-<span class="sourceLineNo">083</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * compression<a name="line.84"></a>
-<span class="sourceLineNo">085</span> */<a name="line.85"></a>
-<span class="sourceLineNo">086</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.86"></a>
-<span class="sourceLineNo">087</span> this.compression = compression;<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 String getWALCellCodecClass(Configuration conf) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * Fully prepares the codec for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * uses a {@link WALCellCodec}.<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * @param cellCodecClsName name of codec<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * @param compression compression the codec should use<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * @return a {@link WALCellCodec} ready for use.<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.104"></a>
-<span class="sourceLineNo">105</span> */<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.107"></a>
-<span class="sourceLineNo">108</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> if (cellCodecClsName == null) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.112"></a>
-<span class="sourceLineNo">113</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.113"></a>
-<span class="sourceLineNo">114</span> }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> /**<a name="line.116"></a>
-<span class="sourceLineNo">117</span> * Create and setup a {@link WALCellCodec} from the<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * CompressionContext.<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * Fully prepares the codec for use.<a name="line.120"></a>
-<span class="sourceLineNo">121</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * uses a {@link WALCellCodec}.<a name="line.122"></a>
-<span class="sourceLineNo">123</span> * @param compression compression the codec should use<a name="line.123"></a>
-<span class="sourceLineNo">124</span> * @return a {@link WALCellCodec} ready for use.<a name="line.124"></a>
-<span class="sourceLineNo">125</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.125"></a>
-<span class="sourceLineNo">126</span> */<a name="line.126"></a>
-<span class="sourceLineNo">127</span> public static WALCellCodec create(Configuration conf,<a name="line.127"></a>
-<span class="sourceLineNo">128</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.128"></a>
-<span class="sourceLineNo">129</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.129"></a>
-<span class="sourceLineNo">130</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.130"></a>
-<span class="sourceLineNo">131</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span> public interface ByteStringCompressor {<a name="line.134"></a>
-<span class="sourceLineNo">135</span> ByteString compress(byte[] data, Dictionary dict) throws IOException;<a name="line.135"></a>
-<span class="sourceLineNo">136</span> }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span> public interface ByteStringUncompressor {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> byte[] uncompress(ByteString data, Dictionary dict) throws IOException;<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> // TODO: it sucks that compression context is in WAL.Entry. It'd be nice if it was here.<a name="line.142"></a>
-<span class="sourceLineNo">143</span> // Dictionary could be gotten by enum; initially, based on enum, context would create<a name="line.143"></a>
-<span class="sourceLineNo">144</span> // an array of dictionaries.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> public ByteString toByteString() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.147"></a>
-<span class="sourceLineNo">148</span> // them.<a name="line.148"></a>
-<span class="sourceLineNo">149</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.149"></a>
-<span class="sourceLineNo">150</span> }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> @Override<a name="line.152"></a>
-<span class="sourceLineNo">153</span> public ByteString compress(byte[] data, Dictionary dict) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span> writeCompressed(data, dict);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.155"></a>
-<span class="sourceLineNo">156</span> // them.<a name="line.156"></a>
-<span class="sourceLineNo">157</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.157"></a>
-<span class="sourceLineNo">158</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.158"></a>
-<span class="sourceLineNo">159</span> return result;<a name="line.159"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
+<span class="sourceLineNo">060</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
+<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
+<span class="sourceLineNo">062</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
+<span class="sourceLineNo">063</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span> protected final CompressionContext compression;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.68"></a>
+<span class="sourceLineNo">069</span> */<a name="line.69"></a>
+<span class="sourceLineNo">070</span> public WALCellCodec() {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> this.compression = null;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<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> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.75"></a>
+<span class="sourceLineNo">076</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * @param conf configuration to configure <tt>this</tt><a name="line.77"></a>
+<span class="sourceLineNo">078</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * compression<a name="line.79"></a>
+<span class="sourceLineNo">080</span> */<a name="line.80"></a>
+<span class="sourceLineNo">081</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span> this.compression = compression;<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 getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * Fully prepares the codec for use.<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * uses a {@link WALCellCodec}.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * @param cellCodecClsName name of codec<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * @param compression compression the codec should use<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.99"></a>
+<span class="sourceLineNo">100</span> */<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
+<span class="sourceLineNo">103</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span> if (cellCodecClsName == null) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
+<span class="sourceLineNo">106</span> }<a name="line.106"></a>
+<span class="sourceLineNo">107</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
+<span class="sourceLineNo">108</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * CompressionContext.<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * Fully prepares the codec for use.<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * uses a {@link WALCellCodec}.<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * @param compression compression the codec should use<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
+<span class="sourceLineNo">121</span> */<a name="line.121"></a>
+<span class="sourceLineNo">122</span> public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
+<span class="sourceLineNo">123</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
+<span class="sourceLineNo">125</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
+<span class="sourceLineNo">126</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> public interface ByteStringCompressor {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> ByteString compress(byte[] data, Enum dictIndex) throws IOException;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> public interface ByteStringUncompressor {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span> static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> CompressionContext compressionContext;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> this.compressionContext = compressionContext;<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> @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span> public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> private CompressionContext compressionContext;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> this.compressionContext = compressionContext;<a name="line.154"></a>
+<span class="sourceLineNo">155</span> }<a name="line.155"></a>
+<span class="sourceLineNo">156</span> public ByteString toByteString() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
+<span class="sourceLineNo">158</span> // them.<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
<span class="sourceLineNo">160</span> }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span> private void writeCompressed(byte[] data, Dictionary dict) throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span> assert dict != null;<a name="line.163"></a>
-<span class="sourceLineNo">164</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.164"></a>
-<span class="sourceLineNo">165</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.166"></a>
-<span class="sourceLineNo">167</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> write(data, 0, data.length);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> } else {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> StreamUtils.writeShort(this, dictIdx);<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> }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.175"></a>
-<span class="sourceLineNo">176</span> InputStream in = bs.newInput();<a name="line.176"></a>
-<span class="sourceLineNo">177</span> byte status = (byte)in.read();<a name="line.177"></a>
-<span class="sourceLineNo">178</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.179"></a>
-<span class="sourceLineNo">180</span> int bytesRead = in.read(arr);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> if (bytesRead != arr.length) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.184"></a>
-<span class="sourceLineNo">185</span> return arr;<a name="line.185"></a>
-<span class="sourceLineNo">186</span> } else {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.187"></a>
-<span class="sourceLineNo">188</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.188"></a>
-<span class="sourceLineNo">189</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.189"></a>
-<span class="sourceLineNo">190</span> if (entry == null) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.191"></a>
-<span class="sourceLineNo">192</span> }<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return entry;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.197"></a>
-<span class="sourceLineNo">198</span> private final CompressionContext compression;<a name="line.198"></a>
-<span class="sourceLineNo">199</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> super(out);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> this.compression = compression;<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> @Override<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public void write(Cell cell) throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> // We first write the KeyValue infrastructure as VInts.<a name="line.206"></a>
-<span class="sourceLineNo">207</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.207"></a>
-<span class="sourceLineNo">208</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.208"></a>
-<span class="sourceLineNo">209</span> // To support tags<a name="line.209"></a>
-<span class="sourceLineNo">210</span> int tagsLength = cell.getTagsLength();<a name="line.210"></a>
-<span class="sourceLineNo">211</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.211"></a>
-<span class="sourceLineNo">212</span> PrivateCellUtil.compressRow(out, cell, compression.rowDict);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> PrivateCellUtil.compressFamily(out, cell, compression.familyDict);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> PrivateCellUtil.compressQualifier(out, cell, compression.qualifierDict);<a name="line.214"></a>
-<span class="sourceLineNo">215</span> // Write timestamp, type and value as uncompressed.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.216"></a>
-<span class="sourceLineNo">217</span> out.write(cell.getTypeByte());<a name="line.217"></a>
-<span class="sourceLineNo">218</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.218"></a>
-<span class="sourceLineNo">219</span> if (tagsLength > 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span> if (compression.tagCompressionContext != null) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span> // Write tags using Dictionary compression<a name="line.221"></a>
-<span class="sourceLineNo">222</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.222"></a>
-<span class="sourceLineNo">223</span> } else {<a name="line.223"></a>
-<span class="sourceLineNo">224</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.224"></a>
-<span class="sourceLineNo">225</span> // it is.<a name="line.225"></a>
-<span class="sourceLineNo">226</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.226"></a>
-<span class="sourceLineNo">227</span> }<a name="line.227"></a>
-<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span> public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> writeCompressed(data, dictIndex);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
+<span class="sourceLineNo">166</span> // them.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
+<span class="sourceLineNo">168</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> return result;<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> private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> assert dict != null;<a name="line.174"></a>
+<span class="sourceLineNo">175</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> write(data, 0, data.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> }<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> }<a name="line.191"></a>
+<span class="sourceLineNo">192</span> }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span> static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span> @Override<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> return data.toByteArray();<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span> }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> InputStream in = bs.newInput();<a name="line.203"></a>
+<span class="sourceLineNo">204</span> byte status = (byte)in.read();<a name="line.204"></a>
+<span class="sourceLineNo">205</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
+<span class="sourceLineNo">207</span> int bytesRead = in.read(arr);<a name="line.207"></a>
+<span class="sourceLineNo">208</span> if (bytesRead != arr.length) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
+<span class="sourceLineNo">212</span> return arr;<a name="line.212"></a>
+<span class="sourceLineNo">213</span> } else {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
+<span class="sourceLineNo">216</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
+<span class="sourceLineNo">217</span> if (entry == null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> }<a name="line.219"></a>
+<span class="sourceLineNo">220</span> return entry;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> private final CompressionContext compression;<a name="line.225"></a>
+<span class="sourceLineNo">226</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> super(out);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> this.compression = compression;<a name="line.228"></a>
<span class="sourceLineNo">229</span> }<a name="line.229"></a>
-<span class="sourceLineNo">230</span> }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.232"></a>
-<span class="sourceLineNo">233</span> private final CompressionContext compression;<a name="line.233"></a>
-<span class="sourceLineNo">234</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> super(in);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> this.compression = compression;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> }<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span> @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span> protected Cell parseCell() throws IOException {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.241"></a>
-<span class="sourceLineNo">242</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> int length = 0;<a name="line.245"></a>
-<span class="sourceLineNo">246</span> if(tagsLength == 0) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.247"></a>
-<span class="sourceLineNo">248</span> } else {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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> byte[] backingArray = new byte[length];<a name="line.252"></a>
-<span class="sourceLineNo">253</span> int pos = 0;<a name="line.253"></a>
-<span class="sourceLineNo">254</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span> // the row<a name="line.257"></a>
-<span class="sourceLineNo">258</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT, compression.rowDict);<a name="line.258"></a>
-<span class="sourceLineNo">259</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.259"></a>
-<span class="sourceLineNo">260</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.260"></a>
-<span class="sourceLineNo">261</span> pos += elemLen;<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> // family<a name="line.263"></a>
-<span class="sourceLineNo">264</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE, compression.familyDict);<a name="line.264"></a>
-<span class="sourceLineNo">265</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> pos += elemLen;<a name="line.267"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span> public void write(Cell cell) throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
+<span class="sourceLineNo">235</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
+<span class="sourceLineNo">236</span> // To support tags<a name="line.236"></a>
+<span class="sourceLineNo">237</span> int tagsLength = cell.getTagsLength();<a name="line.237"></a>
+<span class="sourceLineNo">238</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
+<span class="sourceLineNo">240</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
+<span class="sourceLineNo">241</span> PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
+<span class="sourceLineNo">242</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
+<span class="sourceLineNo">243</span> PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
+<span class="sourceLineNo">244</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
+<span class="sourceLineNo">245</span> // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
+<span class="sourceLineNo">246</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
+<span class="sourceLineNo">247</span> out.write(cell.getTypeByte());<a name="line.247"></a>
+<span class="sourceLineNo">248</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
+<span class="sourceLineNo">249</span> if (tagsLength > 0) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> if (compression.tagCompressionContext != null) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span> // Write tags using Dictionary compression<a name="line.251"></a>
+<span class="sourceLineNo">252</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> } else {<a name="line.253"></a>
+<span class="sourceLineNo">254</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
+<span class="sourceLineNo">255</span> // it is.<a name="line.255"></a>
+<span class="sourceLineNo">256</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
+<span class="sourceLineNo">257</span> }<a name="line.257"></a>
+<span class="sourceLineNo">258</span> }<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private final CompressionContext compression;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span> super(in);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.compression = compression;<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span> // qualifier<a name="line.269"></a>
-<span class="sourceLineNo">270</span> elemLen = readIntoArray(backingArray, pos, compression.qualifierDict);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> pos += elemLen;<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // timestamp, type and value<a name="line.273"></a>
-<span class="sourceLineNo">274</span> int tsTypeValLen = length - pos;<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (tagsLength > 0) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.276"></a>
-<span class="sourceLineNo">277</span> }<a name="line.277"></a>
-<span class="sourceLineNo">278</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.278"></a>
-<span class="sourceLineNo">279</span> pos += tsTypeValLen;<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span> // tags<a name="line.281"></a>
-<span class="sourceLineNo">282</span> if (tagsLength > 0) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.283"></a>
-<span class="sourceLineNo">284</span> if (compression.tagCompressionContext != null) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> } else {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span> return new KeyValue(backingArray, 0, length);<a name="line.290"></a>
-<span class="sourceLineNo">291</span> }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> byte status = (byte)in.read();<a name="line.294"></a>
-<span class="sourceLineNo">295</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span> // status byte indicating that data to be read is not in dictionary.<a name="line.296"></a>
-<span class="sourceLineNo">297</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> int length = StreamUtils.readRawVarint32(in);<a name="line.298"></a>
-<span class="sourceLineNo">299</span> IOUtils.readFully(in, to, offset, length);<a name="line.299"></a>
-<span class="sourceLineNo">300</span> dict.addEntry(to, offset, length);<a name="line.300"></a>
-<span class="sourceLineNo">301</span> return length;<a name="line.301"></a>
-<span class="sourceLineNo">302</span> } else {<a name="line.302"></a>
-<span class="sourceLineNo">303</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.303"></a>
-<span class="sourceLineNo">304</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.304"></a>
-<span class="sourceLineNo">305</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.305"></a>
-<span class="sourceLineNo">306</span> if (entry == null) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span> // now we write the uncompressed value.<a name="line.309"></a>
-<span class="sourceLineNo">310</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> return entry.length;<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span> }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private static void checkLength(int len, int max) throws IOException {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> if (len < 0 || len > max) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> }<a name="line.319"></a>
-<span class="sourceLineNo">320</span> }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.322"></a>
-<span class="sourceLineNo">323</span> public EnsureKvEncoder(OutputStream out) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> super(out);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> @Override<a name="line.326"></a>
-<span class="sourceLineNo">327</span> public void write(Cell cell) throws IOException {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> checkFlushed();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> // Make sure to write tags into WAL<a name="line.329"></a>
-<span class="sourceLineNo">330</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.330"></a>
-<span class="sourceLineNo">331</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> @Override<a name="line.335"></a>
-<span class="sourceLineNo">336</span> public Decoder getDecoder(InputStream is) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span> return (compression == null)<a name="line.337"></a>
-<span class="sourceLineNo">338</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.338"></a>
-<span class="sourceLineNo">339</span> }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span> @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> return getDecoder(new ByteBuffInputStream(buf));<a name="line.343"></a>
-<span class="sourceLineNo">344</span> }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span> public Encoder getEncoder(OutputStream os) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.348"></a>
-<span class="sourceLineNo">349</span> : new ByteBufferWriterOutputStream(os);<a name="line.349"></a>
-<span class="sourceLineNo">350</span> if (compression == null) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span> return new EnsureKvEncoder(os);<a name="line.351"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> protected Cell parseCell() throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
+<span class="sourceLineNo">275</span> int length = 0;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> if(tagsLength == 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span> byte[] backingArray = new byte[length];<a name="line.282"></a>
+<span class="sourceLineNo">283</span> int pos = 0;<a name="line.283"></a>
+<span class="sourceLineNo">284</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> // the row<a name="line.287"></a>
+<span class="sourceLineNo">288</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
+<span class="sourceLineNo">289</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
+<span class="sourceLineNo">290</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
+<span class="sourceLineNo">292</span> pos += elemLen;<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span> // family<a name="line.294"></a>
+<span class="sourceLineNo">295</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
+<span class="sourceLineNo">296</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
+<span class="sourceLineNo">297</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> pos += elemLen;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // qualifier<a name="line.301"></a>
+<span class="sourceLineNo">302</span> elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
+<span class="sourceLineNo">303</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
+<span class="sourceLineNo">304</span> pos += elemLen;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span> // timestamp, type and value<a name="line.306"></a>
+<span class="sourceLineNo">307</span> int tsTypeValLen = length - pos;<a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (tagsLength > 0) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
+<span class="sourceLineNo">310</span> }<a name="line.310"></a>
+<span class="sourceLineNo">311</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> pos += tsTypeValLen;<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span> // tags<a name="line.314"></a>
+<span class="sourceLineNo">315</span> if (tagsLength > 0) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> if (compression.tagCompressionContext != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> byte status = (byte)in.read();<a name="line.327"></a>
+<span class="sourceLineNo">328</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
+<span class="sourceLineNo">331</span> int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span> dict.addEntry(to, offset, length);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> return length;<a name="line.334"></a>
+<span class="sourceLineNo">335</span> } else {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
+<span class="sourceLineNo">337</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
+<span class="sourceLineNo">338</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (entry == null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> // now we write the uncompressed value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> return entry.length;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> }<a name="line.345"></a>
+<span class="sourceLineNo">346</span> }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span> private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> if (len < 0 || len > max) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span> }<a name="line.352"></a>
-<span class="sourceLineNo">353</span> return new CompressedKvEncoder(os, compression);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.357"></a>
-<span class="sourceLineNo">358</span> return new BaosAndCompressor();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.362"></a>
-<span class="sourceLineNo">363</span> return this.statelessUncompressor;<a name="line.363"></a>
-<span class="sourceLineNo">364</span> }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>}<a name="line.365"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span> super(out);<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span> @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span> public void write(Cell cell) throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> checkFlushed();<a name="line.361"></a>
+<span class="sourceLineNo">362</span> // Make sure to write tags into WAL<a name="line.362"></a>
+<span class="sourceLineNo">363</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
+<span class="sourceLineNo">364</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span> @Override<a name="line.368"></a>
+<span class="sourceLineNo">369</span> public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> return (compression == null)<a name="line.370"></a>
+<span class="sourceLineNo">371</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return getDecoder(new ByteBuffInputStream(buf));<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> @Override<a name="line.379"></a>
+<span class="sourceLineNo">380</span> public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
+<span class="sourceLineNo">382</span> : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
+<span class="sourceLineNo">383</span> if (compression == null) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> return new EnsureKvEncoder(os);<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span> return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> return new BaosAndCompressor(compression);<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span> return new StatelessUncompressor(compression);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span> public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return new NoneCompressor();<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> return new NoneUncompressor();<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>}<a name="line.404"></a>
[43/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html b/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html
index 100d999..2d56475 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html
@@ -191,7 +191,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" tit
<!-- -->
</a>
<h3>Fields inherited from class org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#catalogJanitorChore">catalogJanitorChore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#coprocessorServiceHandlers">coprocessorServiceHandlers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#cpHost">cpHost</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS">DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS">HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#loadBalancerTracker">loadBalancerTracker</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#MASTER">MASTER</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#masterAddressSyncer">masterAddressSyncer</a>, <a href="../../../../
../org/apache/hadoop/hbase/master/HMaster.html#metaLocationSyncer">metaLocationSyncer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#metricsMaster">metricsMaster</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#regionServerTracker">regionServerTracker</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#rsFatals">rsFatals</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#serviceStarted">serviceStarted</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#snapshotManager">snapshotManager</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#catalogJanitorChore">catalogJanitorChore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#coprocessorServiceHandlers">coprocessorServiceHandlers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#cpHost">cpHost</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS">DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS">HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#loadBalancerTracker">loadBalancerTracker</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#MASTER">MASTER</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#masterAddressSyncer">masterAddressSyncer</a>, <a href="../../../../
../org/apache/hadoop/hbase/master/HMaster.html#metaLocationSyncer">metaLocationSyncer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#metricsMaster">metricsMaster</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#rsFatals">rsFatals</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#serviceStarted">serviceStarted</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#snapshotManager">snapshotManager</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.regionserver.HRegionServer">
@@ -247,7 +247,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" tit
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#abortProcedure-long-boolean-">abortProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#addColumn-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-long-long-">addColumn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#addReplicationPeer-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-boolean-">addReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#balance--">balance</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#balance-boolean-">balance</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#balanceSwitch-boolean-">balanceSwitch</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMa
ster.html#canCreateBaseZNode--">canCreateBaseZNode</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#canUpdateTableDescriptor--">canUpdateTableDescriptor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkIfShouldMoveSystemRegionAsync--">checkIfShouldMoveSystemRegionAsync</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkInitialized--">checkInitialized</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkServiceStarted--">checkServiceStarted</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkTableModifiable-org.apache.hadoop.hbase.TableName-">checkTableModifiable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#configureInfoServer--">configureInfoServer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#constructMaster-java.lang.Class-org.apache.hadoop.conf.Configuration-">constructMaster</a>, <a href="../../.
./../../org/apache/hadoop/hbase/master/HMaster.html#createMetaBootstrap--">createMetaBootstrap</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-long-long-">createNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createQuotaSnapshotNotifier--">createQuotaSnapshotNotifier</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createRpcServices--">createRpcServices</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createServerManager-org.apache.hadoop.hbase.master.MasterServices-">createServerManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createSystemTable-org.apache.hadoop.hbase.client.TableDescriptor-">createSystemTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-long-long-">createTable</a>, <a href=
"../../../../../org/apache/hadoop/hbase/master/HMaster.html#decommissionRegionServers-java.util.List-boolean-">decommissionRegionServers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#decorateMasterConfiguration-org.apache.hadoop.conf.Configuration-">decorateMasterConfiguration</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#deleteColumn-org.apache.hadoop.hbase.TableName-byte:A-long-long-">deleteColumn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#deleteNamespace-java.lang.String-long-long-">deleteNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#deleteTable-org.apache.hadoop.hbase.TableName-long-long-">deleteTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#disableReplicationPeer-java.lang.String-">disableReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#disableTable-org.apache.hadoop.hbase.TableName-long-
long-">disableTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#enableReplicationPeer-java.lang.String-">enableReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#enableTable-org.apache.hadoop.hbase.TableName-long-long-">enableTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getAssignmentManager--">getAssignmentManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getAverageLoad--">getAverageLoad</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getCatalogJanitor--">getCatalogJanitor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClientIdAuditPrefix--">getClientIdAuditPrefix</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetrics--">getClusterMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetrics-java.util.EnumSet-">getClusterMetrics
</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetricsWithoutCoprocessor--">getClusterMetricsWithoutCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetricsWithoutCoprocessor-java.util.EnumSet-">getClusterMetricsWithoutCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterSchema--">getClusterSchema</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getDumpServlet--">getDumpServlet</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getFavoredNodesManager--">getFavoredNodesManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getHFileCleaner--">getHFileCleaner</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getInitializedEvent--">getInitializedEvent</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLastMajorCompactionTimestamp-org.apache.hadoo
p.hbase.TableName-">getLastMajorCompactionTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLastMajorCompactionTimestampForRegion-byte:A-">getLastMajorCompactionTimestampForRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLoadBalancer--">getLoadBalancer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLoadBalancerClassName--">getLoadBalancerClassName</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLoadedCoprocessors--">getLoadedCoprocessors</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLockManager--">getLockManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLocks--">getLocks</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLogCleaner--">getLogCleaner</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterActiveTime--">getMasterActiveTime</a>, <a
href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterCoprocessorHost--">getMasterCoprocessorHost</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterCoprocessors--">getMasterCoprocessors</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterFileSystem--">getMasterFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterFinishedInitializationTime--">getMasterFinishedInitializationTime</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterMetrics--">getMasterMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterProcedureExecutor--">getMasterProcedureExecutor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterProcedureManagerHost--">getMasterProcedureManagerHost</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterQuotaManager--">getMasterQuotaManage
r</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterRpcServices--">getMasterRpcServices</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterStartTime--">getMasterStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterWalManager--">getMasterWalManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMergePlanCount--">getMergePlanCount</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMetaTableObserver--">getMetaTableObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMobCompactionState-org.apache.hadoop.hbase.TableName-">getMobCompactionState</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getNamespace-java.lang.String-">getNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getNamespaces--">getNamespaces</a>, <a href="../../../../../org/apache/ha
doop/hbase/master/HMaster.html#getNumWALFiles--">getNumWALFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getProcedures--">getProcedures</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getProcessName--">getProcessName</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getQuotaObserverChore--">getQuotaObserverChore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionNormalizer--">getRegionNormalizer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionNormalizerTracker--">getRegionNormalizerTracker</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionServerFatalLogBuffer--">getRegionServerFatalLogBuffer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionServerInfoPort-org.apache.hadoop.hbase.ServerName-">getRegionServerInfoPort</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMa
ster.html#getRegionServerVersion-org.apache.hadoop.hbase.ServerName-">getRegionServerVersion</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRemoteInetAddress-int-long-">getRemoteInetAddress</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getReplicationPeerConfig-java.lang.String-">getReplicationPeerConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getReplicationPeerManager--">getReplicationPeerManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getServerCrashProcessingEnabledEvent--">getServerCrashProcessingEnabledEvent</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getServerManager--">getServerManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getServerName--">getServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSnapshotManager--">getSnapshotManager</a>, <a href="../../../../../o
rg/apache/hadoop/hbase/master/HMaster.html#getSnapshotQuotaObserverChore--">getSnapshotQuotaObserverChore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSpaceQuotaSnapshotNotifier--">getSpaceQuotaSnapshotNotifier</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSplitOrMergeTracker--">getSplitOrMergeTracker</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSplitPlanCount--">getSplitPlanCount</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableDescriptors--">getTableDescriptors</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableRegionForRow-org.apache.hadoop.hbase.TableName-byte:A-">getTableRegionForRow</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableStateManager--">getTableStateManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getUseThisHostnameInstead-org.apache.hadoop.conf.Configu
ration-">getUseThisHostnameInstead</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getWalProcedureStore--">getWalProcedureStore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getZooKeeper--">getZooKeeper</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initClusterSchemaService--">initClusterSchemaService</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initializeZKBasedSystemTrackers--">initializeZKBasedSystemTrackers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initQuotaManager--">initQuotaManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isActiveMaster--">isActiveMaster</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isBalancerOn--">isBalancerOn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isCatalogJanitorEnabled--">isCatalogJanitorEnabled</a>, <a href="../../../../../org/a
pache/hadoop/hbase/master/HMaster.html#isCleanerChoreEnabled--">isCleanerChoreEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isInitialized--">isInitialized</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isInMaintenanceMode--">isInMaintenanceMode</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isNormalizerOn--">isNormalizerOn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isServerCrashProcessingEnabled--">isServerCrashProcessingEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isSplitOrMergeEnabled-org.apache.hadoop.hbase.client.MasterSwitchType-">isSplitOrMergeEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listDecommissionedRegionServers--">listDecommissionedRegionServers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listReplicationPeers-java.lang.String-">listReplicationPeers</a>, <
a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableDescriptors-java.lang.String-java.lang.String-java.util.List-boolean-">listTableDescriptors</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableDescriptorsByNamespace-java.lang.String-">listTableDescriptorsByNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableNames-java.lang.String-java.lang.String-boolean-">listTableNames</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableNamesByNamespace-java.lang.String-">listTableNamesByNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#login-org.apache.hadoop.hbase.security.UserProvider-java.lang.String-">login</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#main-java.lang.String:A-">main</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#mergeRegions-org.apache.hadoop.hbase.client.RegionInfo:
A-boolean-long-long-">mergeRegions</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyColumn-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-long-long-">modifyColumn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-long-long-">modifyNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-long-long-">modifyTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#move-byte:A-byte:A-">move</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#normalizeRegions--">normalizeRegions</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#recommissionRegionServer-org.apache.hadoop.hbase.ServerName-java.util.List-">recommissionRegionServer</a>, <a href="../../../../..
/org/apache/hadoop/hbase/master/HMaster.html#recoverMeta--">recoverMeta</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#registerService-com.google.protobuf.Service-">registerService</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#remoteProcedureCompleted-long-">remoteProcedureCompleted</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#remoteProcedureFailed-long-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">remoteProcedureFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#removeReplicationPeer-java.lang.String-">removeReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#reportMobCompactionEnd-org.apache.hadoop.hbase.TableName-">reportMobCompactionEnd</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#reportMobCompactionStart-org.apache.hadoop.hbase.TableName-">reportMobCompactionStart</a>, <a href="../../../../
../org/apache/hadoop/hbase/master/HMaster.html#requestMobCompaction-org.apache.hadoop.hbase.TableName-java.util.List-boolean-">requestMobCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#restoreSnapshot-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-long-long-boolean-">restoreSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#setCatalogJanitorEnabled-boolean-">setCatalogJanitorEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#setInitialized-boolean-">setInitialized</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#setServerCrashProcessingEnabled-boolean-">setServerCrashProcessingEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#shutdown--">shutdown</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#splitRegion-org.apache.hadoop.hbase.client.RegionInfo-byte:A-long-long-">splitR
egion</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stop-java.lang.String-">stop</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stopMaster--">stopMaster</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stopServiceThreads--">stopServiceThreads</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#truncateTable-org.apache.hadoop.hbase.TableName-boolean-long-long-">truncateTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#updateConfigurationForSpaceQuotaObserver-org.apache.hadoop.conf.Configuration-">updateConfigurationForSpaceQuotaObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#updateReplicationPeerConfig-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">updateReplicationPeerConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#waitForMasterActive--">waitForMasterActive</a></c
ode></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#abortProcedure-long-boolean-">abortProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#addColumn-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-long-long-">addColumn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#addReplicationPeer-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-boolean-">addReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#balance--">balance</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#balance-boolean-">balance</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#balanceSwitch-boolean-">balanceSwitch</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMa
ster.html#canCreateBaseZNode--">canCreateBaseZNode</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#canUpdateTableDescriptor--">canUpdateTableDescriptor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkIfShouldMoveSystemRegionAsync--">checkIfShouldMoveSystemRegionAsync</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkInitialized--">checkInitialized</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkServiceStarted--">checkServiceStarted</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkTableModifiable-org.apache.hadoop.hbase.TableName-">checkTableModifiable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#configureInfoServer--">configureInfoServer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#constructMaster-java.lang.Class-org.apache.hadoop.conf.Configuration-">constructMaster</a>, <a href="../../.
./../../org/apache/hadoop/hbase/master/HMaster.html#createMetaBootstrap--">createMetaBootstrap</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-long-long-">createNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createRpcServices--">createRpcServices</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createServerManager-org.apache.hadoop.hbase.master.MasterServices-">createServerManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createSystemTable-org.apache.hadoop.hbase.client.TableDescriptor-">createSystemTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-long-long-">createTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#decommissionRegionServers-java.util.List-boolean-">decommissionRegionSer
vers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#decorateMasterConfiguration-org.apache.hadoop.conf.Configuration-">decorateMasterConfiguration</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#deleteColumn-org.apache.hadoop.hbase.TableName-byte:A-long-long-">deleteColumn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#deleteNamespace-java.lang.String-long-long-">deleteNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#deleteTable-org.apache.hadoop.hbase.TableName-long-long-">deleteTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#disableReplicationPeer-java.lang.String-">disableReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#disableTable-org.apache.hadoop.hbase.TableName-long-long-">disableTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#enableReplicationPeer-java.lang.String-
">enableReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#enableTable-org.apache.hadoop.hbase.TableName-long-long-">enableTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getAssignmentManager--">getAssignmentManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getAverageLoad--">getAverageLoad</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getCatalogJanitor--">getCatalogJanitor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClientIdAuditPrefix--">getClientIdAuditPrefix</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetrics--">getClusterMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetrics-java.util.EnumSet-">getClusterMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetricsWithoutCoprocessor--">getClusterMetricsWi
thoutCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetricsWithoutCoprocessor-java.util.EnumSet-">getClusterMetricsWithoutCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterSchema--">getClusterSchema</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getDumpServlet--">getDumpServlet</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getFavoredNodesManager--">getFavoredNodesManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getHFileCleaner--">getHFileCleaner</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getInitializedEvent--">getInitializedEvent</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLastMajorCompactionTimestamp-org.apache.hadoop.hbase.TableName-">getLastMajorCompactionTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLast
MajorCompactionTimestampForRegion-byte:A-">getLastMajorCompactionTimestampForRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLoadBalancer--">getLoadBalancer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLoadBalancerClassName--">getLoadBalancerClassName</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLoadedCoprocessors--">getLoadedCoprocessors</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLockManager--">getLockManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLocks--">getLocks</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLogCleaner--">getLogCleaner</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterActiveTime--">getMasterActiveTime</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterCoprocessorHost--">getMasterCoprocessorHost</a>, <a href=
"../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterCoprocessors--">getMasterCoprocessors</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterFileSystem--">getMasterFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterFinishedInitializationTime--">getMasterFinishedInitializationTime</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterMetrics--">getMasterMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterProcedureExecutor--">getMasterProcedureExecutor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterProcedureManagerHost--">getMasterProcedureManagerHost</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterQuotaManager--">getMasterQuotaManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterRpcServices--">getMasterRpcServices</a>, <a href
="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterStartTime--">getMasterStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterWalManager--">getMasterWalManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMergePlanCount--">getMergePlanCount</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMetaTableObserver--">getMetaTableObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMobCompactionState-org.apache.hadoop.hbase.TableName-">getMobCompactionState</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getNamespace-java.lang.String-">getNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getNamespaces--">getNamespaces</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getNumWALFiles--">getNumWALFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.
html#getProcedures--">getProcedures</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getProcessName--">getProcessName</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getQuotaObserverChore--">getQuotaObserverChore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionNormalizer--">getRegionNormalizer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionNormalizerTracker--">getRegionNormalizerTracker</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionServerFatalLogBuffer--">getRegionServerFatalLogBuffer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionServerInfoPort-org.apache.hadoop.hbase.ServerName-">getRegionServerInfoPort</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionServerVersion-org.apache.hadoop.hbase.ServerName-">getRegionServerVersion</a>, <a href="../../../../../org/apache
/hadoop/hbase/master/HMaster.html#getRemoteInetAddress-int-long-">getRemoteInetAddress</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getReplicationPeerConfig-java.lang.String-">getReplicationPeerConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getReplicationPeerManager--">getReplicationPeerManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getServerCrashProcessingEnabledEvent--">getServerCrashProcessingEnabledEvent</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getServerManager--">getServerManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getServerName--">getServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSnapshotManager--">getSnapshotManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSnapshotQuotaObserverChore--">getSnapshotQuotaObserverChore</a>, <a href="../../../../
../org/apache/hadoop/hbase/master/HMaster.html#getSpaceQuotaSnapshotNotifier--">getSpaceQuotaSnapshotNotifier</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSplitOrMergeTracker--">getSplitOrMergeTracker</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSplitPlanCount--">getSplitPlanCount</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableDescriptors--">getTableDescriptors</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableRegionForRow-org.apache.hadoop.hbase.TableName-byte:A-">getTableRegionForRow</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableStateManager--">getTableStateManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getUseThisHostnameInstead-org.apache.hadoop.conf.Configuration-">getUseThisHostnameInstead</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getWalProcedureStore--">
getWalProcedureStore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getZooKeeper--">getZooKeeper</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initClusterSchemaService--">initClusterSchemaService</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initializeZKBasedSystemTrackers--">initializeZKBasedSystemTrackers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isActiveMaster--">isActiveMaster</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isBalancerOn--">isBalancerOn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isCatalogJanitorEnabled--">isCatalogJanitorEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isCleanerChoreEnabled--">isCleanerChoreEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isInitialized--">isInitialized</a>, <a href="../../../../../org/apache/hadoop/hbase
/master/HMaster.html#isInMaintenanceMode--">isInMaintenanceMode</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isNormalizerOn--">isNormalizerOn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isServerCrashProcessingEnabled--">isServerCrashProcessingEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isSplitOrMergeEnabled-org.apache.hadoop.hbase.client.MasterSwitchType-">isSplitOrMergeEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listDecommissionedRegionServers--">listDecommissionedRegionServers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listReplicationPeers-java.lang.String-">listReplicationPeers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableDescriptors-java.lang.String-java.lang.String-java.util.List-boolean-">listTableDescriptors</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#l
istTableDescriptorsByNamespace-java.lang.String-">listTableDescriptorsByNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableNames-java.lang.String-java.lang.String-boolean-">listTableNames</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableNamesByNamespace-java.lang.String-">listTableNamesByNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#login-org.apache.hadoop.hbase.security.UserProvider-java.lang.String-">login</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#main-java.lang.String:A-">main</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#mergeRegions-org.apache.hadoop.hbase.client.RegionInfo:A-boolean-long-long-">mergeRegions</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyColumn-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-long-long-">modifyColumn</a>, <a
href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-long-long-">modifyNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-long-long-">modifyTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#move-byte:A-byte:A-">move</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#normalizeRegions--">normalizeRegions</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#recommissionRegionServer-org.apache.hadoop.hbase.ServerName-java.util.List-">recommissionRegionServer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#recoverMeta--">recoverMeta</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#registerService-com.google.protobuf.Service-">registerService</a>, <a href="../../../../../org/ap
ache/hadoop/hbase/master/HMaster.html#remoteProcedureCompleted-long-">remoteProcedureCompleted</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#remoteProcedureFailed-long-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">remoteProcedureFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#removeReplicationPeer-java.lang.String-">removeReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#reportMobCompactionEnd-org.apache.hadoop.hbase.TableName-">reportMobCompactionEnd</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#reportMobCompactionStart-org.apache.hadoop.hbase.TableName-">reportMobCompactionStart</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#requestMobCompaction-org.apache.hadoop.hbase.TableName-java.util.List-boolean-">requestMobCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#restoreSnapshot-org.a
pache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-long-long-boolean-">restoreSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#setCatalogJanitorEnabled-boolean-">setCatalogJanitorEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#setInitialized-boolean-">setInitialized</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#setServerCrashProcessingEnabled-boolean-">setServerCrashProcessingEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#shutdown--">shutdown</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#splitRegion-org.apache.hadoop.hbase.client.RegionInfo-byte:A-long-long-">splitRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stop-java.lang.String-">stop</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stopMaster--">stopMaster</a>, <a href="../../../../../org/apa
che/hadoop/hbase/master/HMaster.html#stopServiceThreads--">stopServiceThreads</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#truncateTable-org.apache.hadoop.hbase.TableName-boolean-long-long-">truncateTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#updateConfigurationForSpaceQuotaObserver-org.apache.hadoop.conf.Configuration-">updateConfigurationForSpaceQuotaObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#updateReplicationPeerConfig-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">updateReplicationPeerConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#waitForMasterActive--">waitForMasterActive</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.HRegionServer">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/RegionServerTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/RegionServerTracker.html b/devapidocs/org/apache/hadoop/hbase/master/RegionServerTracker.html
index e2c7a92..ca12692 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/RegionServerTracker.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/RegionServerTracker.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -115,16 +115,21 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.51">RegionServerTracker</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.64">RegionServerTracker</a>
extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKListener</a></pre>
-<div class="block">Tracks the online region servers via ZK.
-
- <p>Handling of new RSs checking in is done via RPC. This class
- is only responsible for watching for expired nodes. It handles
- listening for changes in the RS node list and watching each node.
-
- <p>If an RS node gets deleted, this automatically handles calling of
- <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#expireServer-org.apache.hadoop.hbase.ServerName-"><code>ServerManager.expireServer(ServerName)</code></a></div>
+<div class="block"><p>
+ Tracks the online region servers via ZK.
+ </p>
+ <p>
+ Handling of new RSs checking in is done via RPC. This class is only responsible for watching for
+ expired nodes. It handles listening for changes in the RS node list. The only exception is when
+ master restart, we will use the list fetched from zk to construct the initial set of live region
+ servers.
+ </p>
+ <p>
+ If an RS node gets deleted, this automatically handles calling of
+ <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#expireServer-org.apache.hadoop.hbase.ServerName-"><code>ServerManager.expireServer(ServerName)</code></a>
+ </p></div>
</li>
</ul>
</div>
@@ -144,18 +149,22 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#executor">executor</a></span></code> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#LOG">LOG</a></span></code> </td>
</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo></code></td>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#regionServers">regionServers</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#server">server</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#serverManager">serverManager</a></span></code> </td>
</tr>
@@ -201,46 +210,29 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
-<td class="colFirst"><code><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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#getOnlineServers--">getOnlineServers</a></span>()</code>
-<div class="block">Gets the online servers.</div>
-</td>
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#getServerInfo-java.lang.String-">getServerInfo</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</code> </td>
</tr>
<tr id="i1" class="rowColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#getRegionServerInfo-org.apache.hadoop.hbase.ServerName-">getRegionServerInfo</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</code> </td>
-</tr>
-<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#nodeChildrenChanged-java.lang.String-">nodeChildrenChanged</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> path)</code>
<div class="block">Called when an existing node has a child node added or removed.</div>
</td>
</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#refresh--">refresh</a></span>()</code> </td>
+</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#nodeCreated-java.lang.String-">nodeCreated</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> path)</code>
-<div class="block">Called when a new node has been created.</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#start--">start</a></span>()</code>
+<div class="block">
+ Starts the tracking of online RegionServers.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#nodeDeleted-java.lang.String-">nodeDeleted</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> path)</code>
-<div class="block">Called when a node has been deleted</div>
-</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#refresh-java.util.List-">refresh</a></span>(<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><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> servers)</code> </td>
-</tr>
-<tr id="i6" class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#remove-org.apache.hadoop.hbase.ServerName-">remove</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</code> </td>
-</tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#start--">start</a></span>()</code>
-<div class="block">Starts the tracking of online RegionServers.</div>
-</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#stop--">stop</a></span>()</code> </td>
</tr>
</table>
<ul class="blockList">
@@ -248,7 +240,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.zookeeper.<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKListener</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#getWatcher--">getWatcher</a>, <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeDataChanged-java.lang.String-">nodeDataChanged</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#getWatcher--">getWatcher</a>, <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeCreated-java.lang.String-">nodeCreated</a>, <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeDataChanged-java.lang.String-">nodeDataChanged</a>, <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeDeleted-java.lang.String-">nodeDeleted</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -277,7 +269,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.52">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.65">LOG</a></pre>
</li>
</ul>
<a name="regionServers">
@@ -286,7 +278,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
<ul class="blockList">
<li class="blockList">
<h4>regionServers</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.53">regionServers</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.66">regionServers</a></pre>
</li>
</ul>
<a name="serverManager">
@@ -295,16 +287,25 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
<ul class="blockList">
<li class="blockList">
<h4>serverManager</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.54">serverManager</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.67">serverManager</a></pre>
</li>
</ul>
<a name="server">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>server</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.55">server</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.68">server</a></pre>
+</li>
+</ul>
+<a name="executor">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>executor</h4>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.72">executor</a></pre>
</li>
</ul>
</li>
@@ -321,7 +322,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
<ul class="blockListLast">
<li class="blockList">
<h4>RegionServerTracker</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.57">RegionServerTracker</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a> watcher,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.74">RegionServerTracker</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a> watcher,
<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> server,
<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> serverManager)</pre>
</li>
@@ -334,18 +335,15 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
<!-- -->
</a>
<h3>Method Detail</h3>
-<a name="start--">
+<a name="getServerInfo-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>start</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.72">start</a>()
- throws org.apache.zookeeper.KeeperException,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<div class="block">Starts the tracking of online RegionServers.
-
- <p>All RSs will be tracked after this method is called.</div>
+<h4>getServerInfo</h4>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.83">getServerInfo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)
+ throws org.apache.zookeeper.KeeperException,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>org.apache.zookeeper.KeeperException</code></dd>
@@ -353,70 +351,53 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
</dl>
</li>
</ul>
-<a name="refresh-java.util.List-">
+<a name="start--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>refresh</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.79">refresh</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><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> servers)
- throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<h4>start</h4>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.119">start</a>()
+ throws org.apache.zookeeper.KeeperException,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><p>
+ Starts the tracking of online RegionServers.
+ </p>
+ <p>
+ All RSs will be tracked after this method is called.
+ </p></div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code>org.apache.zookeeper.KeeperException</code></dd>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
</dl>
</li>
</ul>
-<a name="remove-org.apache.hadoop.hbase.ServerName-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>remove</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.109">remove</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
-</li>
-</ul>
-<a name="nodeCreated-java.lang.String-">
+<a name="stop--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>nodeCreated</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.116">nodeCreated</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> path)</pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeCreated-java.lang.String-">ZKListener</a></code></span></div>
-<div class="block">Called when a new node has been created.</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeCreated-java.lang.String-">nodeCreated</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKListener</a></code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>path</code> - full path of the new node</dd>
-</dl>
+<h4>stop</h4>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.138">stop</a>()</pre>
</li>
</ul>
-<a name="nodeDeleted-java.lang.String-">
+<a name="refresh--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>nodeDeleted</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.129">nodeDeleted</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> path)</pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeDeleted-java.lang.String-">ZKListener</a></code></span></div>
-<div class="block">Called when a node has been deleted</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeDeleted-java.lang.String-">nodeDeleted</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKListener</a></code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>path</code> - full path of the deleted node</dd>
-</dl>
+<h4>refresh</h4>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.142">refresh</a>()</pre>
</li>
</ul>
<a name="nodeChildrenChanged-java.lang.String-">
<!-- -->
</a>
-<ul class="blockList">
+<ul class="blockListLast">
<li class="blockList">
<h4>nodeChildrenChanged</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.146">nodeChildrenChanged</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> path)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.179">nodeChildrenChanged</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> path)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeChildrenChanged-java.lang.String-">ZKListener</a></code></span></div>
<div class="block">Called when an existing node has a child node added or removed.</div>
<dl>
@@ -427,29 +408,6 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
</dl>
</li>
</ul>
-<a name="getRegionServerInfo-org.apache.hadoop.hbase.ServerName-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getRegionServerInfo</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.161">getRegionServerInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
-</li>
-</ul>
-<a name="getOnlineServers--">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>getOnlineServers</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html#line.169">getOnlineServers</a>()</pre>
-<div class="block">Gets the online servers.</div>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>list of online servers</dd>
-</dl>
-</li>
-</ul>
</li>
</ul>
</li>
[27/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html
index f236300..513d2ad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html
@@ -26,1048 +26,1115 @@
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.backup.impl;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.io.IOException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.net.URI;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.List;<a name="line.42"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.lang3.StringUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configured;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<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> * General backup commands, options and usage messages<a name="line.71"></a>
-<span class="sourceLineNo">072</span> */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceAudience.Private<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public final class BackupCommands {<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.77"></a>
-<span class="sourceLineNo">078</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.80"></a>
-<span class="sourceLineNo">081</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.81"></a>
-<span class="sourceLineNo">082</span> + " delete delete an existing backup image\n"<a name="line.82"></a>
-<span class="sourceLineNo">083</span> + " describe show the detailed information of a backup image\n"<a name="line.83"></a>
-<span class="sourceLineNo">084</span> + " history show history of all successful backups\n"<a name="line.84"></a>
-<span class="sourceLineNo">085</span> + " progress show the progress of the latest backup request\n"<a name="line.85"></a>
-<span class="sourceLineNo">086</span> + " set backup set management\n"<a name="line.86"></a>
-<span class="sourceLineNo">087</span> + " repair repair backup system table\n"<a name="line.87"></a>
-<span class="sourceLineNo">088</span> + " merge merge backup images\n"<a name="line.88"></a>
-<span class="sourceLineNo">089</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> public static final String CREATE_CMD_USAGE =<a name="line.91"></a>
-<span class="sourceLineNo">092</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.92"></a>
-<span class="sourceLineNo">093</span> + " type \"full\" to create a full backup image\n"<a name="line.93"></a>
-<span class="sourceLineNo">094</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.94"></a>
-<span class="sourceLineNo">095</span> + " backup_path Full path to store the backup image\n";<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.97"></a>
-<span class="sourceLineNo">098</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.98"></a>
-<span class="sourceLineNo">099</span> + " progress for currently running backup session.";<a name="line.99"></a>
-<span class="sourceLineNo">100</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.100"></a>
-<span class="sourceLineNo">101</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.103"></a>
-<span class="sourceLineNo">104</span> + " backup_id Backup image id\n";<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete <backup_id>\n"<a name="line.108"></a>
-<span class="sourceLineNo">109</span> + " backup_id Backup image id\n";<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.113"></a>
-<span class="sourceLineNo">114</span> + " name Backup set name\n"<a name="line.114"></a>
-<span class="sourceLineNo">115</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.115"></a>
-<span class="sourceLineNo">116</span> + " add add tables to a set, create a set if needed\n"<a name="line.116"></a>
-<span class="sourceLineNo">117</span> + " remove remove tables from a set\n"<a name="line.117"></a>
-<span class="sourceLineNo">118</span> + " list list all backup sets in the system\n"<a name="line.118"></a>
-<span class="sourceLineNo">119</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.119"></a>
-<span class="sourceLineNo">120</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.120"></a>
-<span class="sourceLineNo">121</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span> public static final String USAGE_FOOTER = "";<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> public static abstract class Command extends Configured {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> CommandLine cmdline;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> Connection conn;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> Command(Configuration conf) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (conf == null) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> conf = HBaseConfiguration.create();<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span> setConf(conf);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span> public void execute() throws IOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> printUsage();<a name="line.138"></a>
-<span class="sourceLineNo">139</span> throw new IOException(INCORRECT_USAGE);<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> // Create connection<a name="line.142"></a>
-<span class="sourceLineNo">143</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.143"></a>
-<span class="sourceLineNo">144</span> if (requiresNoActiveSession()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> // Check active session<a name="line.145"></a>
-<span class="sourceLineNo">146</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span> if (sessions.size() > 0) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.150"></a>
-<span class="sourceLineNo">151</span> System.err.println(sessions.get(0));<a name="line.151"></a>
-<span class="sourceLineNo">152</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.152"></a>
-<span class="sourceLineNo">153</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.153"></a>
-<span class="sourceLineNo">154</span> throw new IOException("Active session found, aborted command execution");<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> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> if (requiresConsistentState()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span> // Check failed delete<a name="line.159"></a>
-<span class="sourceLineNo">160</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (ids != null && ids.length > 0) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> System.err.println("Backup system recovery is required.");<a name="line.165"></a>
-<span class="sourceLineNo">166</span> throw new IOException("Failed backup DELETE found, aborted command execution");<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.169"></a>
-<span class="sourceLineNo">170</span> if (ids != null && ids.length > 0) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.171"></a>
-<span class="sourceLineNo">172</span> System.err.println("Backup system recovery is required.");<a name="line.172"></a>
-<span class="sourceLineNo">173</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> }<a name="line.175"></a>
-<span class="sourceLineNo">176</span> }<a name="line.176"></a>
-<span class="sourceLineNo">177</span> }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span> public void finish() throws IOException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (conn != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> conn.close();<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> protected abstract void printUsage();<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * The command can't be run if active backup session is in progress<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * @return true if no active sessions are in progress<a name="line.189"></a>
-<span class="sourceLineNo">190</span> */<a name="line.190"></a>
-<span class="sourceLineNo">191</span> protected boolean requiresNoActiveSession() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span> return false;<a name="line.192"></a>
-<span class="sourceLineNo">193</span> }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * because of an abnormal termination of a backup session or delete command<a name="line.197"></a>
-<span class="sourceLineNo">198</span> * @return true, if yes<a name="line.198"></a>
-<span class="sourceLineNo">199</span> */<a name="line.199"></a>
-<span class="sourceLineNo">200</span> protected boolean requiresConsistentState() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> return false;<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 BackupCommands() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> throw new AssertionError("Instantiating utility class...");<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> Command cmd;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> switch (type) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> case CREATE:<a name="line.212"></a>
-<span class="sourceLineNo">213</span> cmd = new CreateCommand(conf, cmdline);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span> case DESCRIBE:<a name="line.215"></a>
-<span class="sourceLineNo">216</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.216"></a>
+<span class="sourceLineNo">044</span>import java.io.IOException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.net.URI;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.List;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.lang3.StringUtils;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.conf.Configured;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.FileSystem;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.fs.Path;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.TableName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.yetus.audience.InterfaceAudience;<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> * General backup commands, options and usage messages<a name="line.75"></a>
+<span class="sourceLineNo">076</span> */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceAudience.Private<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public final class BackupCommands {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.81"></a>
+<span class="sourceLineNo">082</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.84"></a>
+<span class="sourceLineNo">085</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.85"></a>
+<span class="sourceLineNo">086</span> + " delete delete an existing backup image\n"<a name="line.86"></a>
+<span class="sourceLineNo">087</span> + " describe show the detailed information of a backup image\n"<a name="line.87"></a>
+<span class="sourceLineNo">088</span> + " history show history of all successful backups\n"<a name="line.88"></a>
+<span class="sourceLineNo">089</span> + " progress show the progress of the latest backup request\n"<a name="line.89"></a>
+<span class="sourceLineNo">090</span> + " set backup set management\n"<a name="line.90"></a>
+<span class="sourceLineNo">091</span> + " repair repair backup system table\n"<a name="line.91"></a>
+<span class="sourceLineNo">092</span> + " merge merge backup images\n"<a name="line.92"></a>
+<span class="sourceLineNo">093</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span> public static final String CREATE_CMD_USAGE =<a name="line.95"></a>
+<span class="sourceLineNo">096</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.96"></a>
+<span class="sourceLineNo">097</span> + " type \"full\" to create a full backup image\n"<a name="line.97"></a>
+<span class="sourceLineNo">098</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.98"></a>
+<span class="sourceLineNo">099</span> + " backup_path Full path to store the backup image\n";<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.101"></a>
+<span class="sourceLineNo">102</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.102"></a>
+<span class="sourceLineNo">103</span> + " progress for currently running backup session.";<a name="line.103"></a>
+<span class="sourceLineNo">104</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.104"></a>
+<span class="sourceLineNo">105</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.107"></a>
+<span class="sourceLineNo">108</span> + " backup_id Backup image id\n";<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete [options]";<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.116"></a>
+<span class="sourceLineNo">117</span> + " name Backup set name\n"<a name="line.117"></a>
+<span class="sourceLineNo">118</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.118"></a>
+<span class="sourceLineNo">119</span> + " add add tables to a set, create a set if needed\n"<a name="line.119"></a>
+<span class="sourceLineNo">120</span> + " remove remove tables from a set\n"<a name="line.120"></a>
+<span class="sourceLineNo">121</span> + " list list all backup sets in the system\n"<a name="line.121"></a>
+<span class="sourceLineNo">122</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.122"></a>
+<span class="sourceLineNo">123</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.123"></a>
+<span class="sourceLineNo">124</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static final String USAGE_FOOTER = "";<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> public static abstract class Command extends Configured {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> CommandLine cmdline;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> Connection conn;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span> Command(Configuration conf) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span> if (conf == null) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> conf = HBaseConfiguration.create();<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> setConf(conf);<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> public void execute() throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> printUsage();<a name="line.141"></a>
+<span class="sourceLineNo">142</span> throw new IOException(INCORRECT_USAGE);<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">145</span> // Create connection<a name="line.145"></a>
+<span class="sourceLineNo">146</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (requiresNoActiveSession()) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // Check active session<a name="line.148"></a>
+<span class="sourceLineNo">149</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span> if (sessions.size() > 0) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.153"></a>
+<span class="sourceLineNo">154</span> System.err.println(sessions.get(0));<a name="line.154"></a>
+<span class="sourceLineNo">155</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.155"></a>
+<span class="sourceLineNo">156</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.156"></a>
+<span class="sourceLineNo">157</span> throw new IOException("Active session found, aborted command execution");<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span> }<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span> if (requiresConsistentState()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span> // Check failed delete<a name="line.162"></a>
+<span class="sourceLineNo">163</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span> if (ids != null && ids.length > 0) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.167"></a>
+<span class="sourceLineNo">168</span> System.err.println("Backup system recovery is required.");<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throw new IOException("Failed backup DELETE found, aborted command execution");<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> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> if (ids != null && ids.length > 0) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.174"></a>
+<span class="sourceLineNo">175</span> System.err.println("Backup system recovery is required.");<a name="line.175"></a>
+<span class="sourceLineNo">176</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> }<a name="line.179"></a>
+<span class="sourceLineNo">180</span> }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span> public void finish() throws IOException {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> if (conn != null) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> conn.close();<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> protected abstract void printUsage();<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * The command can't be run if active backup session is in progress<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * @return true if no active sessions are in progress<a name="line.192"></a>
+<span class="sourceLineNo">193</span> */<a name="line.193"></a>
+<span class="sourceLineNo">194</span> protected boolean requiresNoActiveSession() {<a name="line.194"></a>
+<span class="sourceLineNo">195</span> return false;<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * because of an abnormal termination of a backup session or delete command<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * @return true, if yes<a name="line.201"></a>
+<span class="sourceLineNo">202</span> */<a name="line.202"></a>
+<span class="sourceLineNo">203</span> protected boolean requiresConsistentState() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return false;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> private BackupCommands() {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new AssertionError("Instantiating utility class...");<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> Command cmd;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> switch (type) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> case CREATE:<a name="line.215"></a>
+<span class="sourceLineNo">216</span> cmd = new CreateCommand(conf, cmdline);<a name="line.216"></a>
<span class="sourceLineNo">217</span> break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span> case PROGRESS:<a name="line.218"></a>
-<span class="sourceLineNo">219</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.219"></a>
+<span class="sourceLineNo">218</span> case DESCRIBE:<a name="line.218"></a>
+<span class="sourceLineNo">219</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.219"></a>
<span class="sourceLineNo">220</span> break;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> case DELETE:<a name="line.221"></a>
-<span class="sourceLineNo">222</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.222"></a>
+<span class="sourceLineNo">221</span> case PROGRESS:<a name="line.221"></a>
+<span class="sourceLineNo">222</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.222"></a>
<span class="sourceLineNo">223</span> break;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> case HISTORY:<a name="line.224"></a>
-<span class="sourceLineNo">225</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.225"></a>
+<span class="sourceLineNo">224</span> case DELETE:<a name="line.224"></a>
+<span class="sourceLineNo">225</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.225"></a>
<span class="sourceLineNo">226</span> break;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> case SET:<a name="line.227"></a>
-<span class="sourceLineNo">228</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.228"></a>
+<span class="sourceLineNo">227</span> case HISTORY:<a name="line.227"></a>
+<span class="sourceLineNo">228</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.228"></a>
<span class="sourceLineNo">229</span> break;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> case REPAIR:<a name="line.230"></a>
-<span class="sourceLineNo">231</span> cmd = new RepairCommand(conf, cmdline);<a name="line.231"></a>
+<span class="sourceLineNo">230</span> case SET:<a name="line.230"></a>
+<span class="sourceLineNo">231</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.231"></a>
<span class="sourceLineNo">232</span> break;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> case MERGE:<a name="line.233"></a>
-<span class="sourceLineNo">234</span> cmd = new MergeCommand(conf, cmdline);<a name="line.234"></a>
+<span class="sourceLineNo">233</span> case REPAIR:<a name="line.233"></a>
+<span class="sourceLineNo">234</span> cmd = new RepairCommand(conf, cmdline);<a name="line.234"></a>
<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> case HELP:<a name="line.236"></a>
-<span class="sourceLineNo">237</span> default:<a name="line.237"></a>
-<span class="sourceLineNo">238</span> cmd = new HelpCommand(conf, cmdline);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> break;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return cmd;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> static int numOfArgs(String[] args) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> if (args == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> return 0;<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> return args.length;<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
+<span class="sourceLineNo">236</span> case MERGE:<a name="line.236"></a>
+<span class="sourceLineNo">237</span> cmd = new MergeCommand(conf, cmdline);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> break;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> case HELP:<a name="line.239"></a>
+<span class="sourceLineNo">240</span> default:<a name="line.240"></a>
+<span class="sourceLineNo">241</span> cmd = new HelpCommand(conf, cmdline);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> break;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> return cmd;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> static int numOfArgs(String[] args) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> if (args == null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span> return 0;<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> public static class CreateCommand extends Command {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span> super(conf);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> this.cmdline = cmdline;<a name="line.255"></a>
-<span class="sourceLineNo">256</span> }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span> @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span> protected boolean requiresNoActiveSession() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> return true;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span> protected boolean requiresConsistentState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> return true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span> }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span> @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span> public void execute() throws IOException {<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> printUsage();<a name="line.271"></a>
-<span class="sourceLineNo">272</span> throw new IOException(INCORRECT_USAGE);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span> String[] args = cmdline.getArgs();<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (args.length != 3) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> printUsage();<a name="line.276"></a>
-<span class="sourceLineNo">277</span> throw new IOException(INCORRECT_USAGE);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.280"></a>
-<span class="sourceLineNo">281</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> printUsage();<a name="line.283"></a>
-<span class="sourceLineNo">284</span> throw new IOException(INCORRECT_USAGE);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span> if (!verifyPath(args[2])) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> printUsage();<a name="line.288"></a>
-<span class="sourceLineNo">289</span> throw new IOException(INCORRECT_USAGE);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> String targetBackupDir = args[2];<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.292"></a>
-<span class="sourceLineNo">293</span> if (isRootFolder(targetBackupDir)) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> String tables;<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span> // Check if we have both: backup set and list of tables<a name="line.298"></a>
-<span class="sourceLineNo">299</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.300"></a>
-<span class="sourceLineNo">301</span> + " of tables, but not both");<a name="line.301"></a>
-<span class="sourceLineNo">302</span> printUsage();<a name="line.302"></a>
-<span class="sourceLineNo">303</span> throw new IOException(INCORRECT_USAGE);<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Creates connection<a name="line.305"></a>
-<span class="sourceLineNo">306</span> super.execute();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Check backup set<a name="line.307"></a>
-<span class="sourceLineNo">308</span> String setName = null;<a name="line.308"></a>
-<span class="sourceLineNo">309</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> tables = getTablesForSet(setName, getConf());<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> if (tables == null) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> System.out.println("ERROR: Backup set '" + setName<a name="line.314"></a>
-<span class="sourceLineNo">315</span> + "' is either empty or does not exist");<a name="line.315"></a>
-<span class="sourceLineNo">316</span> printUsage();<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException(INCORRECT_USAGE);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span> int bandwidth =<a name="line.322"></a>
-<span class="sourceLineNo">323</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.323"></a>
-<span class="sourceLineNo">324</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> int workers =<a name="line.325"></a>
-<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.326"></a>
-<span class="sourceLineNo">327</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // Set system property value for MR job<a name="line.331"></a>
-<span class="sourceLineNo">332</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> BackupRequest request =<a name="line.337"></a>
-<span class="sourceLineNo">338</span> builder<a name="line.338"></a>
-<span class="sourceLineNo">339</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.339"></a>
-<span class="sourceLineNo">340</span> .withTableList(<a name="line.340"></a>
-<span class="sourceLineNo">341</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.341"></a>
-<span class="sourceLineNo">342</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.342"></a>
-<span class="sourceLineNo">343</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> String backupId = admin.backupTables(request);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.345"></a>
-<span class="sourceLineNo">346</span> } catch (IOException e) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.347"></a>
-<span class="sourceLineNo">348</span> throw e;<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> Path p = new Path(targetBackupDir);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> return p.isRoot();<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> private boolean verifyPath(String path) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> Path p = new Path(path);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> URI uri = p.toUri();<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (uri.getScheme() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> return false;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> FileSystem.get(uri, conf);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> return true;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> } catch (Exception e) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> return false;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> }<a name="line.371"></a>
-<span class="sourceLineNo">372</span> }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (tables == null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> return null;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span> protected void printUsage() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> System.out.println(CREATE_CMD_USAGE);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> Options options = new Options();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.397"></a>
-<span class="sourceLineNo">398</span> helpFormatter.setLeftPadding(2);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> helpFormatter.setDescPadding(8);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> helpFormatter.setWidth(100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.401"></a>
-<span class="sourceLineNo">402</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> public static class HelpCommand extends Command {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span> super(conf);<a name="line.408"></a>
-<span class="sourceLineNo">409</span> this.cmdline = cmdline;<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void execute() throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> if (cmdline == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span> printUsage();<a name="line.415"></a>
-<span class="sourceLineNo">416</span> throw new IOException(INCORRECT_USAGE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span> }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span> String[] args = cmdline.getArgs();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> if (args == null || args.length == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span> printUsage();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> throw new IOException(INCORRECT_USAGE);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> if (args.length != 2) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.426"></a>
-<span class="sourceLineNo">427</span> printUsage();<a name="line.427"></a>
-<span class="sourceLineNo">428</span> throw new IOException(INCORRECT_USAGE);<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> String type = args[1];<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (BackupCommand.CREATE.name().equalsIgnoreCase(type)) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> System.out.println(CREATE_CMD_USAGE);<a name="line.434"></a>
-<span class="sourceLineNo">435</span> } else if (BackupCommand.DESCRIBE.name().equalsIgnoreCase(type)) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.436"></a>
-<span class="sourceLineNo">437</span> } else if (BackupCommand.HISTORY.name().equalsIgnoreCase(type)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> System.out.println(HISTORY_CMD_USAGE);<a name="line.438"></a>
-<span class="sourceLineNo">439</span> } else if (BackupCommand.PROGRESS.name().equalsIgnoreCase(type)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> System.out.println(PROGRESS_CMD_USAGE);<a name="line.440"></a>
-<span class="sourceLineNo">441</span> } else if (BackupCommand.DELETE.name().equalsIgnoreCase(type)) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> System.out.println(DELETE_CMD_USAGE);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> } else if (BackupCommand.SET.name().equalsIgnoreCase(type)) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> System.out.println(SET_CMD_USAGE);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> } else {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> System.out.println("Unknown command : " + type);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> printUsage();<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span> @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected void printUsage() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> System.out.println(USAGE);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> }<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span> public static class DescribeCommand extends Command {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> DescribeCommand(Configuration conf, CommandLine cmdline) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> super(conf);<a name="line.459"></a>
-<span class="sourceLineNo">460</span> this.cmdline = cmdline;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span> public void execute() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> printUsage();<a name="line.466"></a>
-<span class="sourceLineNo">467</span> throw new IOException(INCORRECT_USAGE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span> String[] args = cmdline.getArgs();<a name="line.469"></a>
-<span class="sourceLineNo">470</span> if (args.length != 2) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> printUsage();<a name="line.471"></a>
-<span class="sourceLineNo">472</span> throw new IOException(INCORRECT_USAGE);<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> super.execute();<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> String backupId = args[1];<a name="line.477"></a>
-<span class="sourceLineNo">478</span> try (final BackupSystemTable sysTable = new BackupSystemTable(conn)) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> BackupInfo info = sysTable.readBackupInfo(backupId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span> if (info == null) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> System.out.println("ERROR: " + backupId + " does not exist");<a name="line.481"></a>
-<span class="sourceLineNo">482</span> printUsage();<a name="line.482"></a>
-<span class="sourceLineNo">483</span> throw new IOException(INCORRECT_USAGE);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> System.out.println(info.getShortDescription());<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> @Override<a name="line.489"></a>
-<span class="sourceLineNo">490</span> protected void printUsage() {<a name="line.490"></a>
-<span class="sourceLineNo">491</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<a name="line.492"></a>
-<span class="sourceLineNo">493</span> }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span> public static class ProgressCommand extends Command {<a name="line.495"></a>
-<span class="sourceLineNo">496</span> ProgressCommand(Configuration conf, CommandLine cmdline) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span> super(conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> this.cmdline = cmdline;<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public void execute() throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">252</span> return args.length;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> public static class CreateCommand extends Command {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> super(conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.cmdline = cmdline;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span> @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span> protected boolean requiresNoActiveSession() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return true;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span> protected boolean requiresConsistentState() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return true;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span> public void execute() throws IOException {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> printUsage();<a name="line.274"></a>
+<span class="sourceLineNo">275</span> throw new IOException(INCORRECT_USAGE);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span> String[] args = cmdline.getArgs();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> if (args.length != 3) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> printUsage();<a name="line.279"></a>
+<span class="sourceLineNo">280</span> throw new IOException(INCORRECT_USAGE);<a name="line.280"></a>
+<span class="sourceLineNo">281</span> }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.283"></a>
+<span class="sourceLineNo">284</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> printUsage();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> throw new IOException(INCORRECT_USAGE);<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> if (!verifyPath(args[2])) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> printUsage();<a name="line.291"></a>
+<span class="sourceLineNo">292</span> throw new IOException(INCORRECT_USAGE);<a name="line.292"></a>
+<span class="sourceLineNo">293</span> }<a name="line.293"></a>
+<span class="sourceLineNo">294</span> String targetBackupDir = args[2];<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (isRootFolder(targetBackupDir)) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> String tables;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // Check if we have both: backup set and list of tables<a name="line.301"></a>
+<span class="sourceLineNo">302</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.303"></a>
+<span class="sourceLineNo">304</span> + " of tables, but not both");<a name="line.304"></a>
+<span class="sourceLineNo">305</span> printUsage();<a name="line.305"></a>
+<span class="sourceLineNo">306</span> throw new IOException(INCORRECT_USAGE);<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span> // Creates connection<a name="line.308"></a>
+<span class="sourceLineNo">309</span> super.execute();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Check backup set<a name="line.310"></a>
+<span class="sourceLineNo">311</span> String setName = null;<a name="line.311"></a>
+<span class="sourceLineNo">312</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> tables = getTablesForSet(setName, getConf());<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span> if (tables == null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> System.out.println("ERROR: Backup set '" + setName<a name="line.317"></a>
+<span class="sourceLineNo">318</span> + "' is either empty or does not exist");<a name="line.318"></a>
+<span class="sourceLineNo">319</span> printUsage();<a name="line.319"></a>
+<span class="sourceLineNo">320</span> throw new IOException(INCORRECT_USAGE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> } else {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span> int bandwidth =<a name="line.325"></a>
+<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.326"></a>
+<span class="sourceLineNo">327</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> int workers =<a name="line.328"></a>
+<span class="sourceLineNo">329</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.329"></a>
+<span class="sourceLineNo">330</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> // Set system property value for MR job<a name="line.334"></a>
+<span class="sourceLineNo">335</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.339"></a>
+<span class="sourceLineNo">340</span> BackupRequest request =<a name="line.340"></a>
+<span class="sourceLineNo">341</span> builder<a name="line.341"></a>
+<span class="sourceLineNo">342</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.342"></a>
+<span class="sourceLineNo">343</span> .withTableList(<a name="line.343"></a>
+<span class="sourceLineNo">344</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.345"></a>
+<span class="sourceLineNo">346</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String backupId = admin.backupTables(request);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> } catch (IOException e) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.350"></a>
+<span class="sourceLineNo">351</span> throw e;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> Path p = new Path(targetBackupDir);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return p.isRoot();<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span> private boolean verifyPath(String path) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> try {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> Path p = new Path(path);<a name="line.362"></a>
+<span class="sourceLineNo">363</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.363"></a>
+<span class="sourceLineNo">364</span> URI uri = p.toUri();<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> if (uri.getScheme() == null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span> return false;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> FileSystem.get(uri, conf);<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return true;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> } catch (Exception e) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return false;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.377"></a>
+<span class="sourceLineNo">378</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span> if (tables == null) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span> return null;<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> @Override<a name="line.389"></a>
+<span class="sourceLineNo">390</span> protected void printUsage() {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> System.out.println(CREATE_CMD_USAGE);<a name="line.391"></a>
+<span class="sourceLineNo">392</span> Options options = new Options();<a name="line.392"></a>
+<span class="sourceLineNo">393</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.400"></a>
+<span class="sourceLineNo">401</span> helpFormatter.setLeftPadding(2);<a name="line.401"></a>
+<span class="sourceLineNo">402</span> helpFormatter.setDescPadding(8);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> helpFormatter.setWidth(100);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.404"></a>
+<span class="sourceLineNo">405</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<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> public static class HelpCommand extends Command {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> super(conf);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> this.cmdline = cmdline;<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span> @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span> public void execute() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span> if (cmdline == null) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> printUsage();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> throw new IOException(INCORRECT_USAGE);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> String[] args = cmdline.getArgs();<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (args == null || args.length == 0) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> printUsage();<a name="line.424"></a>
+<span class="sourceLineNo">425</span> throw new IOException(INCORRECT_USAGE);<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> if (args.length != 2) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.429"></a>
+<span class="sourceLineNo">430</span> printUsage();<a name="line.430"></a>
+<span class="sourceLineNo">431</span> throw new IOException(INCORRECT_USAGE);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>
<TRUNCATED>
[35/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html
index f236300..513d2ad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html
@@ -26,1048 +26,1115 @@
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.backup.impl;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.io.IOException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.net.URI;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.List;<a name="line.42"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.lang3.StringUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configured;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<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> * General backup commands, options and usage messages<a name="line.71"></a>
-<span class="sourceLineNo">072</span> */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceAudience.Private<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public final class BackupCommands {<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.77"></a>
-<span class="sourceLineNo">078</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.80"></a>
-<span class="sourceLineNo">081</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.81"></a>
-<span class="sourceLineNo">082</span> + " delete delete an existing backup image\n"<a name="line.82"></a>
-<span class="sourceLineNo">083</span> + " describe show the detailed information of a backup image\n"<a name="line.83"></a>
-<span class="sourceLineNo">084</span> + " history show history of all successful backups\n"<a name="line.84"></a>
-<span class="sourceLineNo">085</span> + " progress show the progress of the latest backup request\n"<a name="line.85"></a>
-<span class="sourceLineNo">086</span> + " set backup set management\n"<a name="line.86"></a>
-<span class="sourceLineNo">087</span> + " repair repair backup system table\n"<a name="line.87"></a>
-<span class="sourceLineNo">088</span> + " merge merge backup images\n"<a name="line.88"></a>
-<span class="sourceLineNo">089</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> public static final String CREATE_CMD_USAGE =<a name="line.91"></a>
-<span class="sourceLineNo">092</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.92"></a>
-<span class="sourceLineNo">093</span> + " type \"full\" to create a full backup image\n"<a name="line.93"></a>
-<span class="sourceLineNo">094</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.94"></a>
-<span class="sourceLineNo">095</span> + " backup_path Full path to store the backup image\n";<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.97"></a>
-<span class="sourceLineNo">098</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.98"></a>
-<span class="sourceLineNo">099</span> + " progress for currently running backup session.";<a name="line.99"></a>
-<span class="sourceLineNo">100</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.100"></a>
-<span class="sourceLineNo">101</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.103"></a>
-<span class="sourceLineNo">104</span> + " backup_id Backup image id\n";<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete <backup_id>\n"<a name="line.108"></a>
-<span class="sourceLineNo">109</span> + " backup_id Backup image id\n";<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.113"></a>
-<span class="sourceLineNo">114</span> + " name Backup set name\n"<a name="line.114"></a>
-<span class="sourceLineNo">115</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.115"></a>
-<span class="sourceLineNo">116</span> + " add add tables to a set, create a set if needed\n"<a name="line.116"></a>
-<span class="sourceLineNo">117</span> + " remove remove tables from a set\n"<a name="line.117"></a>
-<span class="sourceLineNo">118</span> + " list list all backup sets in the system\n"<a name="line.118"></a>
-<span class="sourceLineNo">119</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.119"></a>
-<span class="sourceLineNo">120</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.120"></a>
-<span class="sourceLineNo">121</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span> public static final String USAGE_FOOTER = "";<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> public static abstract class Command extends Configured {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> CommandLine cmdline;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> Connection conn;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> Command(Configuration conf) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (conf == null) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> conf = HBaseConfiguration.create();<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span> setConf(conf);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span> public void execute() throws IOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> printUsage();<a name="line.138"></a>
-<span class="sourceLineNo">139</span> throw new IOException(INCORRECT_USAGE);<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> // Create connection<a name="line.142"></a>
-<span class="sourceLineNo">143</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.143"></a>
-<span class="sourceLineNo">144</span> if (requiresNoActiveSession()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> // Check active session<a name="line.145"></a>
-<span class="sourceLineNo">146</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span> if (sessions.size() > 0) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.150"></a>
-<span class="sourceLineNo">151</span> System.err.println(sessions.get(0));<a name="line.151"></a>
-<span class="sourceLineNo">152</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.152"></a>
-<span class="sourceLineNo">153</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.153"></a>
-<span class="sourceLineNo">154</span> throw new IOException("Active session found, aborted command execution");<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> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> if (requiresConsistentState()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span> // Check failed delete<a name="line.159"></a>
-<span class="sourceLineNo">160</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (ids != null && ids.length > 0) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> System.err.println("Backup system recovery is required.");<a name="line.165"></a>
-<span class="sourceLineNo">166</span> throw new IOException("Failed backup DELETE found, aborted command execution");<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.169"></a>
-<span class="sourceLineNo">170</span> if (ids != null && ids.length > 0) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.171"></a>
-<span class="sourceLineNo">172</span> System.err.println("Backup system recovery is required.");<a name="line.172"></a>
-<span class="sourceLineNo">173</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> }<a name="line.175"></a>
-<span class="sourceLineNo">176</span> }<a name="line.176"></a>
-<span class="sourceLineNo">177</span> }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span> public void finish() throws IOException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (conn != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> conn.close();<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> protected abstract void printUsage();<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * The command can't be run if active backup session is in progress<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * @return true if no active sessions are in progress<a name="line.189"></a>
-<span class="sourceLineNo">190</span> */<a name="line.190"></a>
-<span class="sourceLineNo">191</span> protected boolean requiresNoActiveSession() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span> return false;<a name="line.192"></a>
-<span class="sourceLineNo">193</span> }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * because of an abnormal termination of a backup session or delete command<a name="line.197"></a>
-<span class="sourceLineNo">198</span> * @return true, if yes<a name="line.198"></a>
-<span class="sourceLineNo">199</span> */<a name="line.199"></a>
-<span class="sourceLineNo">200</span> protected boolean requiresConsistentState() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> return false;<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 BackupCommands() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> throw new AssertionError("Instantiating utility class...");<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> Command cmd;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> switch (type) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> case CREATE:<a name="line.212"></a>
-<span class="sourceLineNo">213</span> cmd = new CreateCommand(conf, cmdline);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span> case DESCRIBE:<a name="line.215"></a>
-<span class="sourceLineNo">216</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.216"></a>
+<span class="sourceLineNo">044</span>import java.io.IOException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.net.URI;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.List;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.lang3.StringUtils;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.conf.Configured;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.FileSystem;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.fs.Path;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.TableName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.yetus.audience.InterfaceAudience;<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> * General backup commands, options and usage messages<a name="line.75"></a>
+<span class="sourceLineNo">076</span> */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceAudience.Private<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public final class BackupCommands {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.81"></a>
+<span class="sourceLineNo">082</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.84"></a>
+<span class="sourceLineNo">085</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.85"></a>
+<span class="sourceLineNo">086</span> + " delete delete an existing backup image\n"<a name="line.86"></a>
+<span class="sourceLineNo">087</span> + " describe show the detailed information of a backup image\n"<a name="line.87"></a>
+<span class="sourceLineNo">088</span> + " history show history of all successful backups\n"<a name="line.88"></a>
+<span class="sourceLineNo">089</span> + " progress show the progress of the latest backup request\n"<a name="line.89"></a>
+<span class="sourceLineNo">090</span> + " set backup set management\n"<a name="line.90"></a>
+<span class="sourceLineNo">091</span> + " repair repair backup system table\n"<a name="line.91"></a>
+<span class="sourceLineNo">092</span> + " merge merge backup images\n"<a name="line.92"></a>
+<span class="sourceLineNo">093</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span> public static final String CREATE_CMD_USAGE =<a name="line.95"></a>
+<span class="sourceLineNo">096</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.96"></a>
+<span class="sourceLineNo">097</span> + " type \"full\" to create a full backup image\n"<a name="line.97"></a>
+<span class="sourceLineNo">098</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.98"></a>
+<span class="sourceLineNo">099</span> + " backup_path Full path to store the backup image\n";<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.101"></a>
+<span class="sourceLineNo">102</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.102"></a>
+<span class="sourceLineNo">103</span> + " progress for currently running backup session.";<a name="line.103"></a>
+<span class="sourceLineNo">104</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.104"></a>
+<span class="sourceLineNo">105</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.107"></a>
+<span class="sourceLineNo">108</span> + " backup_id Backup image id\n";<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete [options]";<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.116"></a>
+<span class="sourceLineNo">117</span> + " name Backup set name\n"<a name="line.117"></a>
+<span class="sourceLineNo">118</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.118"></a>
+<span class="sourceLineNo">119</span> + " add add tables to a set, create a set if needed\n"<a name="line.119"></a>
+<span class="sourceLineNo">120</span> + " remove remove tables from a set\n"<a name="line.120"></a>
+<span class="sourceLineNo">121</span> + " list list all backup sets in the system\n"<a name="line.121"></a>
+<span class="sourceLineNo">122</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.122"></a>
+<span class="sourceLineNo">123</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.123"></a>
+<span class="sourceLineNo">124</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static final String USAGE_FOOTER = "";<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> public static abstract class Command extends Configured {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> CommandLine cmdline;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> Connection conn;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span> Command(Configuration conf) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span> if (conf == null) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> conf = HBaseConfiguration.create();<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> setConf(conf);<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> public void execute() throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> printUsage();<a name="line.141"></a>
+<span class="sourceLineNo">142</span> throw new IOException(INCORRECT_USAGE);<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">145</span> // Create connection<a name="line.145"></a>
+<span class="sourceLineNo">146</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (requiresNoActiveSession()) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // Check active session<a name="line.148"></a>
+<span class="sourceLineNo">149</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span> if (sessions.size() > 0) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.153"></a>
+<span class="sourceLineNo">154</span> System.err.println(sessions.get(0));<a name="line.154"></a>
+<span class="sourceLineNo">155</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.155"></a>
+<span class="sourceLineNo">156</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.156"></a>
+<span class="sourceLineNo">157</span> throw new IOException("Active session found, aborted command execution");<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span> }<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span> if (requiresConsistentState()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span> // Check failed delete<a name="line.162"></a>
+<span class="sourceLineNo">163</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span> if (ids != null && ids.length > 0) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.167"></a>
+<span class="sourceLineNo">168</span> System.err.println("Backup system recovery is required.");<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throw new IOException("Failed backup DELETE found, aborted command execution");<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> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> if (ids != null && ids.length > 0) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.174"></a>
+<span class="sourceLineNo">175</span> System.err.println("Backup system recovery is required.");<a name="line.175"></a>
+<span class="sourceLineNo">176</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> }<a name="line.179"></a>
+<span class="sourceLineNo">180</span> }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span> public void finish() throws IOException {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> if (conn != null) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> conn.close();<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> protected abstract void printUsage();<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * The command can't be run if active backup session is in progress<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * @return true if no active sessions are in progress<a name="line.192"></a>
+<span class="sourceLineNo">193</span> */<a name="line.193"></a>
+<span class="sourceLineNo">194</span> protected boolean requiresNoActiveSession() {<a name="line.194"></a>
+<span class="sourceLineNo">195</span> return false;<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * because of an abnormal termination of a backup session or delete command<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * @return true, if yes<a name="line.201"></a>
+<span class="sourceLineNo">202</span> */<a name="line.202"></a>
+<span class="sourceLineNo">203</span> protected boolean requiresConsistentState() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return false;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> private BackupCommands() {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new AssertionError("Instantiating utility class...");<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> Command cmd;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> switch (type) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> case CREATE:<a name="line.215"></a>
+<span class="sourceLineNo">216</span> cmd = new CreateCommand(conf, cmdline);<a name="line.216"></a>
<span class="sourceLineNo">217</span> break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span> case PROGRESS:<a name="line.218"></a>
-<span class="sourceLineNo">219</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.219"></a>
+<span class="sourceLineNo">218</span> case DESCRIBE:<a name="line.218"></a>
+<span class="sourceLineNo">219</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.219"></a>
<span class="sourceLineNo">220</span> break;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> case DELETE:<a name="line.221"></a>
-<span class="sourceLineNo">222</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.222"></a>
+<span class="sourceLineNo">221</span> case PROGRESS:<a name="line.221"></a>
+<span class="sourceLineNo">222</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.222"></a>
<span class="sourceLineNo">223</span> break;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> case HISTORY:<a name="line.224"></a>
-<span class="sourceLineNo">225</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.225"></a>
+<span class="sourceLineNo">224</span> case DELETE:<a name="line.224"></a>
+<span class="sourceLineNo">225</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.225"></a>
<span class="sourceLineNo">226</span> break;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> case SET:<a name="line.227"></a>
-<span class="sourceLineNo">228</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.228"></a>
+<span class="sourceLineNo">227</span> case HISTORY:<a name="line.227"></a>
+<span class="sourceLineNo">228</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.228"></a>
<span class="sourceLineNo">229</span> break;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> case REPAIR:<a name="line.230"></a>
-<span class="sourceLineNo">231</span> cmd = new RepairCommand(conf, cmdline);<a name="line.231"></a>
+<span class="sourceLineNo">230</span> case SET:<a name="line.230"></a>
+<span class="sourceLineNo">231</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.231"></a>
<span class="sourceLineNo">232</span> break;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> case MERGE:<a name="line.233"></a>
-<span class="sourceLineNo">234</span> cmd = new MergeCommand(conf, cmdline);<a name="line.234"></a>
+<span class="sourceLineNo">233</span> case REPAIR:<a name="line.233"></a>
+<span class="sourceLineNo">234</span> cmd = new RepairCommand(conf, cmdline);<a name="line.234"></a>
<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> case HELP:<a name="line.236"></a>
-<span class="sourceLineNo">237</span> default:<a name="line.237"></a>
-<span class="sourceLineNo">238</span> cmd = new HelpCommand(conf, cmdline);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> break;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return cmd;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> static int numOfArgs(String[] args) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> if (args == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> return 0;<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> return args.length;<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
+<span class="sourceLineNo">236</span> case MERGE:<a name="line.236"></a>
+<span class="sourceLineNo">237</span> cmd = new MergeCommand(conf, cmdline);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> break;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> case HELP:<a name="line.239"></a>
+<span class="sourceLineNo">240</span> default:<a name="line.240"></a>
+<span class="sourceLineNo">241</span> cmd = new HelpCommand(conf, cmdline);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> break;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> return cmd;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> static int numOfArgs(String[] args) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> if (args == null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span> return 0;<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> public static class CreateCommand extends Command {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span> super(conf);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> this.cmdline = cmdline;<a name="line.255"></a>
-<span class="sourceLineNo">256</span> }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span> @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span> protected boolean requiresNoActiveSession() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> return true;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span> protected boolean requiresConsistentState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> return true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span> }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span> @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span> public void execute() throws IOException {<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> printUsage();<a name="line.271"></a>
-<span class="sourceLineNo">272</span> throw new IOException(INCORRECT_USAGE);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span> String[] args = cmdline.getArgs();<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (args.length != 3) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> printUsage();<a name="line.276"></a>
-<span class="sourceLineNo">277</span> throw new IOException(INCORRECT_USAGE);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.280"></a>
-<span class="sourceLineNo">281</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> printUsage();<a name="line.283"></a>
-<span class="sourceLineNo">284</span> throw new IOException(INCORRECT_USAGE);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span> if (!verifyPath(args[2])) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> printUsage();<a name="line.288"></a>
-<span class="sourceLineNo">289</span> throw new IOException(INCORRECT_USAGE);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> String targetBackupDir = args[2];<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.292"></a>
-<span class="sourceLineNo">293</span> if (isRootFolder(targetBackupDir)) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> String tables;<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span> // Check if we have both: backup set and list of tables<a name="line.298"></a>
-<span class="sourceLineNo">299</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.300"></a>
-<span class="sourceLineNo">301</span> + " of tables, but not both");<a name="line.301"></a>
-<span class="sourceLineNo">302</span> printUsage();<a name="line.302"></a>
-<span class="sourceLineNo">303</span> throw new IOException(INCORRECT_USAGE);<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Creates connection<a name="line.305"></a>
-<span class="sourceLineNo">306</span> super.execute();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Check backup set<a name="line.307"></a>
-<span class="sourceLineNo">308</span> String setName = null;<a name="line.308"></a>
-<span class="sourceLineNo">309</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> tables = getTablesForSet(setName, getConf());<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> if (tables == null) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> System.out.println("ERROR: Backup set '" + setName<a name="line.314"></a>
-<span class="sourceLineNo">315</span> + "' is either empty or does not exist");<a name="line.315"></a>
-<span class="sourceLineNo">316</span> printUsage();<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException(INCORRECT_USAGE);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span> int bandwidth =<a name="line.322"></a>
-<span class="sourceLineNo">323</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.323"></a>
-<span class="sourceLineNo">324</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> int workers =<a name="line.325"></a>
-<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.326"></a>
-<span class="sourceLineNo">327</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // Set system property value for MR job<a name="line.331"></a>
-<span class="sourceLineNo">332</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> BackupRequest request =<a name="line.337"></a>
-<span class="sourceLineNo">338</span> builder<a name="line.338"></a>
-<span class="sourceLineNo">339</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.339"></a>
-<span class="sourceLineNo">340</span> .withTableList(<a name="line.340"></a>
-<span class="sourceLineNo">341</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.341"></a>
-<span class="sourceLineNo">342</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.342"></a>
-<span class="sourceLineNo">343</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> String backupId = admin.backupTables(request);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.345"></a>
-<span class="sourceLineNo">346</span> } catch (IOException e) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.347"></a>
-<span class="sourceLineNo">348</span> throw e;<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> Path p = new Path(targetBackupDir);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> return p.isRoot();<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> private boolean verifyPath(String path) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> Path p = new Path(path);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> URI uri = p.toUri();<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (uri.getScheme() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> return false;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> FileSystem.get(uri, conf);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> return true;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> } catch (Exception e) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> return false;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> }<a name="line.371"></a>
-<span class="sourceLineNo">372</span> }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (tables == null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> return null;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span> protected void printUsage() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> System.out.println(CREATE_CMD_USAGE);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> Options options = new Options();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.397"></a>
-<span class="sourceLineNo">398</span> helpFormatter.setLeftPadding(2);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> helpFormatter.setDescPadding(8);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> helpFormatter.setWidth(100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.401"></a>
-<span class="sourceLineNo">402</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> public static class HelpCommand extends Command {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span> super(conf);<a name="line.408"></a>
-<span class="sourceLineNo">409</span> this.cmdline = cmdline;<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void execute() throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> if (cmdline == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span> printUsage();<a name="line.415"></a>
-<span class="sourceLineNo">416</span> throw new IOException(INCORRECT_USAGE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span> }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span> String[] args = cmdline.getArgs();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> if (args == null || args.length == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span> printUsage();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> throw new IOException(INCORRECT_USAGE);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> if (args.length != 2) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.426"></a>
-<span class="sourceLineNo">427</span> printUsage();<a name="line.427"></a>
-<span class="sourceLineNo">428</span> throw new IOException(INCORRECT_USAGE);<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> String type = args[1];<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (BackupCommand.CREATE.name().equalsIgnoreCase(type)) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> System.out.println(CREATE_CMD_USAGE);<a name="line.434"></a>
-<span class="sourceLineNo">435</span> } else if (BackupCommand.DESCRIBE.name().equalsIgnoreCase(type)) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.436"></a>
-<span class="sourceLineNo">437</span> } else if (BackupCommand.HISTORY.name().equalsIgnoreCase(type)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> System.out.println(HISTORY_CMD_USAGE);<a name="line.438"></a>
-<span class="sourceLineNo">439</span> } else if (BackupCommand.PROGRESS.name().equalsIgnoreCase(type)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> System.out.println(PROGRESS_CMD_USAGE);<a name="line.440"></a>
-<span class="sourceLineNo">441</span> } else if (BackupCommand.DELETE.name().equalsIgnoreCase(type)) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> System.out.println(DELETE_CMD_USAGE);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> } else if (BackupCommand.SET.name().equalsIgnoreCase(type)) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> System.out.println(SET_CMD_USAGE);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> } else {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> System.out.println("Unknown command : " + type);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> printUsage();<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span> @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected void printUsage() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> System.out.println(USAGE);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> }<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span> public static class DescribeCommand extends Command {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> DescribeCommand(Configuration conf, CommandLine cmdline) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> super(conf);<a name="line.459"></a>
-<span class="sourceLineNo">460</span> this.cmdline = cmdline;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span> public void execute() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> printUsage();<a name="line.466"></a>
-<span class="sourceLineNo">467</span> throw new IOException(INCORRECT_USAGE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span> String[] args = cmdline.getArgs();<a name="line.469"></a>
-<span class="sourceLineNo">470</span> if (args.length != 2) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> printUsage();<a name="line.471"></a>
-<span class="sourceLineNo">472</span> throw new IOException(INCORRECT_USAGE);<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> super.execute();<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> String backupId = args[1];<a name="line.477"></a>
-<span class="sourceLineNo">478</span> try (final BackupSystemTable sysTable = new BackupSystemTable(conn)) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> BackupInfo info = sysTable.readBackupInfo(backupId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span> if (info == null) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> System.out.println("ERROR: " + backupId + " does not exist");<a name="line.481"></a>
-<span class="sourceLineNo">482</span> printUsage();<a name="line.482"></a>
-<span class="sourceLineNo">483</span> throw new IOException(INCORRECT_USAGE);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> System.out.println(info.getShortDescription());<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> @Override<a name="line.489"></a>
-<span class="sourceLineNo">490</span> protected void printUsage() {<a name="line.490"></a>
-<span class="sourceLineNo">491</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<a name="line.492"></a>
-<span class="sourceLineNo">493</span> }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span> public static class ProgressCommand extends Command {<a name="line.495"></a>
-<span class="sourceLineNo">496</span> ProgressCommand(Configuration conf, CommandLine cmdline) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span> super(conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> this.cmdline = cmdline;<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public void execute() throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">252</span> return args.length;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> public static class CreateCommand extends Command {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> super(conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.cmdline = cmdline;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span> @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span> protected boolean requiresNoActiveSession() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return true;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span> protected boolean requiresConsistentState() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return true;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span> public void execute() throws IOException {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> printUsage();<a name="line.274"></a>
+<span class="sourceLineNo">275</span> throw new IOException(INCORRECT_USAGE);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span> String[] args = cmdline.getArgs();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> if (args.length != 3) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> printUsage();<a name="line.279"></a>
+<span class="sourceLineNo">280</span> throw new IOException(INCORRECT_USAGE);<a name="line.280"></a>
+<span class="sourceLineNo">281</span> }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.283"></a>
+<span class="sourceLineNo">284</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> printUsage();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> throw new IOException(INCORRECT_USAGE);<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> if (!verifyPath(args[2])) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> printUsage();<a name="line.291"></a>
+<span class="sourceLineNo">292</span> throw new IOException(INCORRECT_USAGE);<a name="line.292"></a>
+<span class="sourceLineNo">293</span> }<a name="line.293"></a>
+<span class="sourceLineNo">294</span> String targetBackupDir = args[2];<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (isRootFolder(targetBackupDir)) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> String tables;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // Check if we have both: backup set and list of tables<a name="line.301"></a>
+<span class="sourceLineNo">302</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.303"></a>
+<span class="sourceLineNo">304</span> + " of tables, but not both");<a name="line.304"></a>
+<span class="sourceLineNo">305</span> printUsage();<a name="line.305"></a>
+<span class="sourceLineNo">306</span> throw new IOException(INCORRECT_USAGE);<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span> // Creates connection<a name="line.308"></a>
+<span class="sourceLineNo">309</span> super.execute();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Check backup set<a name="line.310"></a>
+<span class="sourceLineNo">311</span> String setName = null;<a name="line.311"></a>
+<span class="sourceLineNo">312</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> tables = getTablesForSet(setName, getConf());<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span> if (tables == null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> System.out.println("ERROR: Backup set '" + setName<a name="line.317"></a>
+<span class="sourceLineNo">318</span> + "' is either empty or does not exist");<a name="line.318"></a>
+<span class="sourceLineNo">319</span> printUsage();<a name="line.319"></a>
+<span class="sourceLineNo">320</span> throw new IOException(INCORRECT_USAGE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> } else {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span> int bandwidth =<a name="line.325"></a>
+<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.326"></a>
+<span class="sourceLineNo">327</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> int workers =<a name="line.328"></a>
+<span class="sourceLineNo">329</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.329"></a>
+<span class="sourceLineNo">330</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> // Set system property value for MR job<a name="line.334"></a>
+<span class="sourceLineNo">335</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.339"></a>
+<span class="sourceLineNo">340</span> BackupRequest request =<a name="line.340"></a>
+<span class="sourceLineNo">341</span> builder<a name="line.341"></a>
+<span class="sourceLineNo">342</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.342"></a>
+<span class="sourceLineNo">343</span> .withTableList(<a name="line.343"></a>
+<span class="sourceLineNo">344</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.345"></a>
+<span class="sourceLineNo">346</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String backupId = admin.backupTables(request);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> } catch (IOException e) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.350"></a>
+<span class="sourceLineNo">351</span> throw e;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> Path p = new Path(targetBackupDir);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return p.isRoot();<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span> private boolean verifyPath(String path) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> try {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> Path p = new Path(path);<a name="line.362"></a>
+<span class="sourceLineNo">363</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.363"></a>
+<span class="sourceLineNo">364</span> URI uri = p.toUri();<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> if (uri.getScheme() == null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span> return false;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> FileSystem.get(uri, conf);<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return true;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> } catch (Exception e) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return false;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.377"></a>
+<span class="sourceLineNo">378</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span> if (tables == null) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span> return null;<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> @Override<a name="line.389"></a>
+<span class="sourceLineNo">390</span> protected void printUsage() {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> System.out.println(CREATE_CMD_USAGE);<a name="line.391"></a>
+<span class="sourceLineNo">392</span> Options options = new Options();<a name="line.392"></a>
+<span class="sourceLineNo">393</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.400"></a>
+<span class="sourceLineNo">401</span> helpFormatter.setLeftPadding(2);<a name="line.401"></a>
+<span class="sourceLineNo">402</span> helpFormatter.setDescPadding(8);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> helpFormatter.setWidth(100);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.404"></a>
+<span class="sourceLineNo">405</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<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> public static class HelpCommand extends Command {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> super(conf);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> this.cmdline = cmdline;<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span> @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span> public void execute() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span> if (cmdline == null) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> printUsage();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> throw new IOException(INCORRECT_USAGE);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> String[] args = cmdline.getArgs();<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (args == null || args.length == 0) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> printUsage();<a name="line.424"></a>
+<span class="sourceLineNo">425</span> throw new IOException(INCORRECT_USAGE);<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> if (args.length != 2) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.429"></a>
+<span class="sourceLineNo">430</span> printUsage();<a name="line.430"></a>
+<span class="sourceLineNo">431</span> throw new IOException(INCORRECT_USAGE);<a name="line.431"></a>
+<span class="sourceLineNo">432</
<TRUNCATED>
[07/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
new file mode 100644
index 0000000..9df0225
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
@@ -0,0 +1,476 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License. You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.regionserver.wal;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.ByteArrayOutputStream;<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.InputStream;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.ReflectionUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
+<span class="sourceLineNo">060</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
+<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
+<span class="sourceLineNo">062</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
+<span class="sourceLineNo">063</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span> protected final CompressionContext compression;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.68"></a>
+<span class="sourceLineNo">069</span> */<a name="line.69"></a>
+<span class="sourceLineNo">070</span> public WALCellCodec() {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> this.compression = null;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<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> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.75"></a>
+<span class="sourceLineNo">076</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * @param conf configuration to configure <tt>this</tt><a name="line.77"></a>
+<span class="sourceLineNo">078</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * compression<a name="line.79"></a>
+<span class="sourceLineNo">080</span> */<a name="line.80"></a>
+<span class="sourceLineNo">081</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span> this.compression = compression;<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 getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * Fully prepares the codec for use.<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * uses a {@link WALCellCodec}.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * @param cellCodecClsName name of codec<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * @param compression compression the codec should use<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.99"></a>
+<span class="sourceLineNo">100</span> */<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
+<span class="sourceLineNo">103</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span> if (cellCodecClsName == null) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
+<span class="sourceLineNo">106</span> }<a name="line.106"></a>
+<span class="sourceLineNo">107</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
+<span class="sourceLineNo">108</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * CompressionContext.<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * Fully prepares the codec for use.<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * uses a {@link WALCellCodec}.<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * @param compression compression the codec should use<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
+<span class="sourceLineNo">121</span> */<a name="line.121"></a>
+<span class="sourceLineNo">122</span> public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
+<span class="sourceLineNo">123</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
+<span class="sourceLineNo">125</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
+<span class="sourceLineNo">126</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> public interface ByteStringCompressor {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> ByteString compress(byte[] data, Enum dictIndex) throws IOException;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> public interface ByteStringUncompressor {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span> static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> CompressionContext compressionContext;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> this.compressionContext = compressionContext;<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> @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span> public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> private CompressionContext compressionContext;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> this.compressionContext = compressionContext;<a name="line.154"></a>
+<span class="sourceLineNo">155</span> }<a name="line.155"></a>
+<span class="sourceLineNo">156</span> public ByteString toByteString() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
+<span class="sourceLineNo">158</span> // them.<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span> public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> writeCompressed(data, dictIndex);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
+<span class="sourceLineNo">166</span> // them.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
+<span class="sourceLineNo">168</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> return result;<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> private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> assert dict != null;<a name="line.174"></a>
+<span class="sourceLineNo">175</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> write(data, 0, data.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> }<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> }<a name="line.191"></a>
+<span class="sourceLineNo">192</span> }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span> static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span> @Override<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> return data.toByteArray();<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span> }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> InputStream in = bs.newInput();<a name="line.203"></a>
+<span class="sourceLineNo">204</span> byte status = (byte)in.read();<a name="line.204"></a>
+<span class="sourceLineNo">205</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
+<span class="sourceLineNo">207</span> int bytesRead = in.read(arr);<a name="line.207"></a>
+<span class="sourceLineNo">208</span> if (bytesRead != arr.length) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
+<span class="sourceLineNo">212</span> return arr;<a name="line.212"></a>
+<span class="sourceLineNo">213</span> } else {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
+<span class="sourceLineNo">216</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
+<span class="sourceLineNo">217</span> if (entry == null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> }<a name="line.219"></a>
+<span class="sourceLineNo">220</span> return entry;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> private final CompressionContext compression;<a name="line.225"></a>
+<span class="sourceLineNo">226</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> super(out);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> this.compression = compression;<a name="line.228"></a>
+<span class="sourceLineNo">229</span> }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span> public void write(Cell cell) throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
+<span class="sourceLineNo">235</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
+<span class="sourceLineNo">236</span> // To support tags<a name="line.236"></a>
+<span class="sourceLineNo">237</span> int tagsLength = cell.getTagsLength();<a name="line.237"></a>
+<span class="sourceLineNo">238</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
+<span class="sourceLineNo">240</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
+<span class="sourceLineNo">241</span> PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
+<span class="sourceLineNo">242</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
+<span class="sourceLineNo">243</span> PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
+<span class="sourceLineNo">244</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
+<span class="sourceLineNo">245</span> // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
+<span class="sourceLineNo">246</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
+<span class="sourceLineNo">247</span> out.write(cell.getTypeByte());<a name="line.247"></a>
+<span class="sourceLineNo">248</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
+<span class="sourceLineNo">249</span> if (tagsLength > 0) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> if (compression.tagCompressionContext != null) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span> // Write tags using Dictionary compression<a name="line.251"></a>
+<span class="sourceLineNo">252</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> } else {<a name="line.253"></a>
+<span class="sourceLineNo">254</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
+<span class="sourceLineNo">255</span> // it is.<a name="line.255"></a>
+<span class="sourceLineNo">256</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
+<span class="sourceLineNo">257</span> }<a name="line.257"></a>
+<span class="sourceLineNo">258</span> }<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private final CompressionContext compression;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span> super(in);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.compression = compression;<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> protected Cell parseCell() throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
+<span class="sourceLineNo">275</span> int length = 0;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> if(tagsLength == 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span> byte[] backingArray = new byte[length];<a name="line.282"></a>
+<span class="sourceLineNo">283</span> int pos = 0;<a name="line.283"></a>
+<span class="sourceLineNo">284</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> // the row<a name="line.287"></a>
+<span class="sourceLineNo">288</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
+<span class="sourceLineNo">289</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
+<span class="sourceLineNo">290</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
+<span class="sourceLineNo">292</span> pos += elemLen;<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span> // family<a name="line.294"></a>
+<span class="sourceLineNo">295</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
+<span class="sourceLineNo">296</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
+<span class="sourceLineNo">297</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> pos += elemLen;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // qualifier<a name="line.301"></a>
+<span class="sourceLineNo">302</span> elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
+<span class="sourceLineNo">303</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
+<span class="sourceLineNo">304</span> pos += elemLen;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span> // timestamp, type and value<a name="line.306"></a>
+<span class="sourceLineNo">307</span> int tsTypeValLen = length - pos;<a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (tagsLength > 0) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
+<span class="sourceLineNo">310</span> }<a name="line.310"></a>
+<span class="sourceLineNo">311</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> pos += tsTypeValLen;<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span> // tags<a name="line.314"></a>
+<span class="sourceLineNo">315</span> if (tagsLength > 0) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> if (compression.tagCompressionContext != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> byte status = (byte)in.read();<a name="line.327"></a>
+<span class="sourceLineNo">328</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
+<span class="sourceLineNo">331</span> int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span> dict.addEntry(to, offset, length);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> return length;<a name="line.334"></a>
+<span class="sourceLineNo">335</span> } else {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
+<span class="sourceLineNo">337</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
+<span class="sourceLineNo">338</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (entry == null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> // now we write the uncompressed value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> return entry.length;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> }<a name="line.345"></a>
+<span class="sourceLineNo">346</span> }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span> private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> if (len < 0 || len > max) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> }<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span> super(out);<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span> @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span> public void write(Cell cell) throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> checkFlushed();<a name="line.361"></a>
+<span class="sourceLineNo">362</span> // Make sure to write tags into WAL<a name="line.362"></a>
+<span class="sourceLineNo">363</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
+<span class="sourceLineNo">364</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span> @Override<a name="line.368"></a>
+<span class="sourceLineNo">369</span> public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> return (compression == null)<a name="line.370"></a>
+<span class="sourceLineNo">371</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return getDecoder(new ByteBuffInputStream(buf));<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> @Override<a name="line.379"></a>
+<span class="sourceLineNo">380</span> public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
+<span class="sourceLineNo">382</span> : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
+<span class="sourceLineNo">383</span> if (compression == null) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> return new EnsureKvEncoder(os);<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span> return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> return new BaosAndCompressor(compression);<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span> return new StatelessUncompressor(compression);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span> public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return new NoneCompressor();<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> return new NoneUncompressor();<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>}<a name="line.404"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
[22/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
index 42d0637..eb16038 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
@@ -80,21 +80,21 @@
<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.72"></a>
<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.73"></a>
<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.ScheduledChore;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ServerName;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.Result;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.89"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ServerName;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableName;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.Result;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.89"></a>
<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.90"></a>
<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.91"></a>
<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.92"></a>
@@ -220,3477 +220,3481 @@
<span class="sourceLineNo">212</span><a name="line.212"></a>
<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.213"></a>
<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>/**<a name="line.221"></a>
-<span class="sourceLineNo">222</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.222"></a>
-<span class="sourceLineNo">223</span> * master. If many masters are started, all compete. Whichever wins goes on to<a name="line.223"></a>
-<span class="sourceLineNo">224</span> * run the cluster. All others park themselves in their constructor until<a name="line.224"></a>
-<span class="sourceLineNo">225</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * zookeeper. Thereafter, all running master jostle to take over master role.<a name="line.226"></a>
-<span class="sourceLineNo">227</span> *<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * <p>The Master can be asked shutdown the cluster. See {@link #shutdown()}. In<a name="line.228"></a>
-<span class="sourceLineNo">229</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.229"></a>
-<span class="sourceLineNo">230</span> * all reporting in that they are down. This master will then shut itself down.<a name="line.230"></a>
-<span class="sourceLineNo">231</span> *<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * <p>You can also shutdown just this master. Call {@link #stopMaster()}.<a name="line.232"></a>
-<span class="sourceLineNo">233</span> *<a name="line.233"></a>
-<span class="sourceLineNo">234</span> * @see org.apache.zookeeper.Watcher<a name="line.234"></a>
-<span class="sourceLineNo">235</span> */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.236"></a>
-<span class="sourceLineNo">237</span>@SuppressWarnings("deprecation")<a name="line.237"></a>
-<span class="sourceLineNo">238</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private static Logger LOG = LoggerFactory.getLogger(HMaster.class.getName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.243"></a>
-<span class="sourceLineNo">244</span> */<a name="line.244"></a>
-<span class="sourceLineNo">245</span> private static class InitializationMonitor extends HasThread {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.246"></a>
-<span class="sourceLineNo">247</span> public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.247"></a>
-<span class="sourceLineNo">248</span> public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<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> * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * true, do nothing otherwise.<a name="line.252"></a>
-<span class="sourceLineNo">253</span> */<a name="line.253"></a>
-<span class="sourceLineNo">254</span> public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.254"></a>
-<span class="sourceLineNo">255</span> public static final boolean HALT_DEFAULT = false;<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span> private final HMaster master;<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private final long timeout;<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private final boolean haltOnTimeout;<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span> /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.261"></a>
-<span class="sourceLineNo">262</span> InitializationMonitor(HMaster master) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span> super("MasterInitializationMonitor");<a name="line.263"></a>
-<span class="sourceLineNo">264</span> this.master = master;<a name="line.264"></a>
-<span class="sourceLineNo">265</span> this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.265"></a>
-<span class="sourceLineNo">266</span> this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> this.setDaemon(true);<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> @Override<a name="line.270"></a>
-<span class="sourceLineNo">271</span> public void run() {<a name="line.271"></a>
-<span class="sourceLineNo">272</span> try {<a name="line.272"></a>
-<span class="sourceLineNo">273</span> while (!master.isStopped() && master.isActiveMaster()) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span> Thread.sleep(timeout);<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (master.isInitialized()) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.276"></a>
-<span class="sourceLineNo">277</span> } else {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.278"></a>
-<span class="sourceLineNo">279</span> + " consider submitting a bug report including a thread dump of this process.");<a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (haltOnTimeout) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span> LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.281"></a>
-<span class="sourceLineNo">282</span> Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.282"></a>
-<span class="sourceLineNo">283</span> System.exit(-1);<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> } catch (InterruptedException ie) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span> LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span> // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.293"></a>
-<span class="sourceLineNo">294</span> //instance into web context.<a name="line.294"></a>
-<span class="sourceLineNo">295</span> public static final String MASTER = "master";<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span> // Manager and zk listener for master election<a name="line.297"></a>
-<span class="sourceLineNo">298</span> private final ActiveMasterManager activeMasterManager;<a name="line.298"></a>
-<span class="sourceLineNo">299</span> // Region server tracker<a name="line.299"></a>
-<span class="sourceLineNo">300</span> RegionServerTracker regionServerTracker;<a name="line.300"></a>
-<span class="sourceLineNo">301</span> // Draining region server tracker<a name="line.301"></a>
-<span class="sourceLineNo">302</span> private DrainingServerTracker drainingServerTracker;<a name="line.302"></a>
-<span class="sourceLineNo">303</span> // Tracker for load balancer state<a name="line.303"></a>
-<span class="sourceLineNo">304</span> LoadBalancerTracker loadBalancerTracker;<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Tracker for meta location, if any client ZK quorum specified<a name="line.305"></a>
-<span class="sourceLineNo">306</span> MetaLocationSyncer metaLocationSyncer;<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Tracker for active master location, if any client ZK quorum specified<a name="line.307"></a>
-<span class="sourceLineNo">308</span> MasterAddressSyncer masterAddressSyncer;<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span> // Tracker for split and merge state<a name="line.310"></a>
-<span class="sourceLineNo">311</span> private SplitOrMergeTracker splitOrMergeTracker;<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> // Tracker for region normalizer state<a name="line.313"></a>
-<span class="sourceLineNo">314</span> private RegionNormalizerTracker regionNormalizerTracker;<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span> //Tracker for master maintenance mode setting<a name="line.316"></a>
-<span class="sourceLineNo">317</span> private MasterMaintenanceModeTracker maintenanceModeTracker;<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span> private ClusterSchemaService clusterSchemaService;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.321"></a>
-<span class="sourceLineNo">322</span> "hbase.master.wait.on.service.seconds";<a name="line.322"></a>
-<span class="sourceLineNo">323</span> public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> // Metrics for the HMaster<a name="line.325"></a>
-<span class="sourceLineNo">326</span> final MetricsMaster metricsMaster;<a name="line.326"></a>
-<span class="sourceLineNo">327</span> // file system manager for the master FS operations<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private MasterFileSystem fileSystemManager;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private MasterWalManager walManager;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> // server manager to deal with region server info<a name="line.331"></a>
-<span class="sourceLineNo">332</span> private volatile ServerManager serverManager;<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span> // manager of assignment nodes in zookeeper<a name="line.334"></a>
-<span class="sourceLineNo">335</span> private AssignmentManager assignmentManager;<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span> // manager of replication<a name="line.337"></a>
-<span class="sourceLineNo">338</span> private ReplicationPeerManager replicationPeerManager;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span> // buffer for "fatal error" notices from region servers<a name="line.340"></a>
-<span class="sourceLineNo">341</span> // in the cluster. This is only used for assisting<a name="line.341"></a>
-<span class="sourceLineNo">342</span> // operations/debugging.<a name="line.342"></a>
-<span class="sourceLineNo">343</span> MemoryBoundedLogMessageBuffer rsFatals;<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span> // flag set after we become the active master (used for testing)<a name="line.345"></a>
-<span class="sourceLineNo">346</span> private volatile boolean activeMaster = false;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span> // flag set after we complete initialization once active<a name="line.348"></a>
-<span class="sourceLineNo">349</span> private final ProcedureEvent<?> initialized = new ProcedureEvent<>("master initialized");<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span> // flag set after master services are started,<a name="line.351"></a>
-<span class="sourceLineNo">352</span> // initialization may have not completed yet.<a name="line.352"></a>
-<span class="sourceLineNo">353</span> volatile boolean serviceStarted = false;<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span> // flag set after we complete assignMeta.<a name="line.355"></a>
-<span class="sourceLineNo">356</span> private final ProcedureEvent<?> serverCrashProcessingEnabled =<a name="line.356"></a>
-<span class="sourceLineNo">357</span> new ProcedureEvent<>("server crash processing");<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span> // Maximum time we should run balancer for<a name="line.359"></a>
-<span class="sourceLineNo">360</span> private final int maxBlancingTime;<a name="line.360"></a>
-<span class="sourceLineNo">361</span> // Maximum percent of regions in transition when balancing<a name="line.361"></a>
-<span class="sourceLineNo">362</span> private final double maxRitPercent;<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span> private final LockManager lockManager = new LockManager(this);<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span> private LoadBalancer balancer;<a name="line.366"></a>
-<span class="sourceLineNo">367</span> private RegionNormalizer normalizer;<a name="line.367"></a>
-<span class="sourceLineNo">368</span> private BalancerChore balancerChore;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> private RegionNormalizerChore normalizerChore;<a name="line.369"></a>
-<span class="sourceLineNo">370</span> private ClusterStatusChore clusterStatusChore;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span> CatalogJanitor catalogJanitorChore;<a name="line.373"></a>
-<span class="sourceLineNo">374</span> private LogCleaner logCleaner;<a name="line.374"></a>
-<span class="sourceLineNo">375</span> private HFileCleaner hfileCleaner;<a name="line.375"></a>
-<span class="sourceLineNo">376</span> private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.376"></a>
-<span class="sourceLineNo">377</span> private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.377"></a>
-<span class="sourceLineNo">378</span> private MobCompactionChore mobCompactChore;<a name="line.378"></a>
-<span class="sourceLineNo">379</span> private MasterMobCompactionThread mobCompactThread;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> // used to synchronize the mobCompactionStates<a name="line.380"></a>
-<span class="sourceLineNo">381</span> private final IdLock mobCompactionLock = new IdLock();<a name="line.381"></a>
-<span class="sourceLineNo">382</span> // save the information of mob compactions in tables.<a name="line.382"></a>
-<span class="sourceLineNo">383</span> // the key is table name, the value is the number of compactions in that table.<a name="line.383"></a>
-<span class="sourceLineNo">384</span> private Map<TableName, AtomicInteger> mobCompactionStates = Maps.newConcurrentMap();<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> MasterCoprocessorHost cpHost;<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span> private final boolean preLoadTableDescriptors;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> // Time stamps for when a hmaster became active<a name="line.390"></a>
-<span class="sourceLineNo">391</span> private long masterActiveTime;<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span> // Time stamp for when HMaster finishes becoming Active Master<a name="line.393"></a>
-<span class="sourceLineNo">394</span> private long masterFinishedInitializationTime;<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span> //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.396"></a>
-<span class="sourceLineNo">397</span> private final boolean masterCheckCompression;<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span> //should we check encryption settings at master side, default true<a name="line.399"></a>
-<span class="sourceLineNo">400</span> private final boolean masterCheckEncryption;<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> Map<String, Service> coprocessorServiceHandlers = Maps.newHashMap();<a name="line.402"></a>
-<span class="sourceLineNo">403</span><a name="line.403"></a>
-<span class="sourceLineNo">404</span> // monitor for snapshot of hbase tables<a name="line.404"></a>
-<span class="sourceLineNo">405</span> SnapshotManager snapshotManager;<a name="line.405"></a>
-<span class="sourceLineNo">406</span> // monitor for distributed procedures<a name="line.406"></a>
-<span class="sourceLineNo">407</span> private MasterProcedureManagerHost mpmHost;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span> // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.409"></a>
-<span class="sourceLineNo">410</span> private volatile MasterQuotaManager quotaManager;<a name="line.410"></a>
-<span class="sourceLineNo">411</span> private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> private QuotaObserverChore quotaObserverChore;<a name="line.412"></a>
-<span class="sourceLineNo">413</span> private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span> private ProcedureExecutor<MasterProcedureEnv> procedureExecutor;<a name="line.415"></a>
-<span class="sourceLineNo">416</span> private WALProcedureStore procedureStore;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span> // handle table states<a name="line.418"></a>
-<span class="sourceLineNo">419</span> private TableStateManager tableStateManager;<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> private long splitPlanCount;<a name="line.421"></a>
-<span class="sourceLineNo">422</span> private long mergePlanCount;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span> /* Handle favored nodes information */<a name="line.424"></a>
-<span class="sourceLineNo">425</span> private FavoredNodesManager favoredNodesManager;<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span> /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.427"></a>
-<span class="sourceLineNo">428</span> private Server masterJettyServer;<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span> public static class RedirectServlet extends HttpServlet {<a name="line.430"></a>
-<span class="sourceLineNo">431</span> private static final long serialVersionUID = 2894774810058302473L;<a name="line.431"></a>
-<span class="sourceLineNo">432</span> private final int regionServerInfoPort;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> private final String regionServerHostname;<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span> /**<a name="line.435"></a>
-<span class="sourceLineNo">436</span> * @param infoServer that we're trying to send all requests to<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.437"></a>
-<span class="sourceLineNo">438</span> */<a name="line.438"></a>
-<span class="sourceLineNo">439</span> public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> regionServerInfoPort = infoServer.getPort();<a name="line.440"></a>
-<span class="sourceLineNo">441</span> regionServerHostname = hostname;<a name="line.441"></a>
-<span class="sourceLineNo">442</span> }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span> @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span> public void doGet(HttpServletRequest request,<a name="line.445"></a>
-<span class="sourceLineNo">446</span> HttpServletResponse response) throws ServletException, IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span> String redirectHost = regionServerHostname;<a name="line.447"></a>
-<span class="sourceLineNo">448</span> if(redirectHost == null) {<a name="line.448"></a>
-<span class="sourceLineNo">449</span> redirectHost = request.getServerName();<a name="line.449"></a>
-<span class="sourceLineNo">450</span> if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.451"></a>
-<span class="sourceLineNo">452</span> MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.452"></a>
-<span class="sourceLineNo">453</span> "your HBase deployment relies on client accessible names that the region server process " +<a name="line.453"></a>
-<span class="sourceLineNo">454</span> "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.454"></a>
-<span class="sourceLineNo">455</span> "to an appropriate hostname.");<a name="line.455"></a>
-<span class="sourceLineNo">456</span> // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.456"></a>
-<span class="sourceLineNo">457</span> response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.457"></a>
-<span class="sourceLineNo">458</span> "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.458"></a>
-<span class="sourceLineNo">459</span> "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span> }<a name="line.462"></a>
-<span class="sourceLineNo">463</span> // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.463"></a>
-<span class="sourceLineNo">464</span> // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.464"></a>
-<span class="sourceLineNo">465</span> String redirectUrl = request.getScheme() + "://"<a name="line.465"></a>
-<span class="sourceLineNo">466</span> + redirectHost + ":" + regionServerInfoPort<a name="line.466"></a>
-<span class="sourceLineNo">467</span> + request.getRequestURI();<a name="line.467"></a>
-<span class="sourceLineNo">468</span> response.sendRedirect(redirectUrl);<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><a name="line.471"></a>
-<span class="sourceLineNo">472</span> /**<a name="line.472"></a>
-<span class="sourceLineNo">473</span> * Initializes the HMaster. The steps are as follows:<a name="line.473"></a>
-<span class="sourceLineNo">474</span> * <p><a name="line.474"></a>
-<span class="sourceLineNo">475</span> * <ol><a name="line.475"></a>
-<span class="sourceLineNo">476</span> * <li>Initialize the local HRegionServer<a name="line.476"></a>
-<span class="sourceLineNo">477</span> * <li>Start the ActiveMasterManager.<a name="line.477"></a>
-<span class="sourceLineNo">478</span> * </ol><a name="line.478"></a>
-<span class="sourceLineNo">479</span> * <p><a name="line.479"></a>
-<span class="sourceLineNo">480</span> * Remaining steps of initialization occur in<a name="line.480"></a>
-<span class="sourceLineNo">481</span> * #finishActiveMasterInitialization(MonitoredTask) after<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * the master becomes the active one.<a name="line.482"></a>
-<span class="sourceLineNo">483</span> */<a name="line.483"></a>
-<span class="sourceLineNo">484</span> public HMaster(final Configuration conf)<a name="line.484"></a>
-<span class="sourceLineNo">485</span> throws IOException, KeeperException {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> super(conf);<a name="line.486"></a>
-<span class="sourceLineNo">487</span> TraceUtil.initTracer(conf);<a name="line.487"></a>
-<span class="sourceLineNo">488</span> try {<a name="line.488"></a>
-<span class="sourceLineNo">489</span> this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.489"></a>
-<span class="sourceLineNo">490</span> conf.getLong("hbase.master.buffer.for.rs.fatals", 1 * 1024 * 1024));<a name="line.490"></a>
-<span class="sourceLineNo">491</span> LOG.info("hbase.rootdir=" + getRootDir() +<a name="line.491"></a>
-<span class="sourceLineNo">492</span> ", hbase.cluster.distributed=" + this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span> // Disable usage of meta replicas in the master<a name="line.494"></a>
-<span class="sourceLineNo">495</span> this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span> decorateMasterConfiguration(this.conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span> // Hack! Maps DFSClient => Master for logs. HDFS made this<a name="line.499"></a>
-<span class="sourceLineNo">500</span> // config param for task trackers, but we can piggyback off of it.<a name="line.500"></a>
-<span class="sourceLineNo">501</span> if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span> this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.502"></a>
-<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span> // should we check the compression codec type at master side, default true, HBASE-6370<a name="line.505"></a>
-<span class="sourceLineNo">506</span> this.masterCheckCompression = conf.getBoolean("hbase.master.check.compression", true);<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span> // should we check encryption settings at master side, default true<a name="line.508"></a>
-<span class="sourceLineNo">509</span> this.masterCheckEncryption = conf.getBoolean("hbase.master.check.encryption", true);<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // preload table descriptor at startup<a name="line.513"></a>
-<span class="sourceLineNo">514</span> this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span> this.maxBlancingTime = getMaxBalancingTime();<a name="line.516"></a>
-<span class="sourceLineNo">517</span> this.maxRitPercent = conf.getDouble(HConstants.HBASE_MASTER_BALANCER_MAX_RIT_PERCENT,<a name="line.517"></a>
-<span class="sourceLineNo">518</span> HConstants.DEFAULT_HBASE_MASTER_BALANCER_MAX_RIT_PERCENT);<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span> // Do we publish the status?<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span> boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.522"></a>
-<span class="sourceLineNo">523</span> HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> Class<? extends ClusterStatusPublisher.Publisher> publisherClass =<a name="line.524"></a>
-<span class="sourceLineNo">525</span> conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.525"></a>
-<span class="sourceLineNo">526</span> ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS,<a name="line.526"></a>
-<span class="sourceLineNo">527</span> ClusterStatusPublisher.Publisher.class);<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span> if (shouldPublish) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span> if (publisherClass == null) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.531"></a>
-<span class="sourceLineNo">532</span> ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS +<a name="line.532"></a>
-<span class="sourceLineNo">533</span> " is not set - not publishing status");<a name="line.533"></a>
-<span class="sourceLineNo">534</span> } else {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> clusterStatusPublisherChore = new ClusterStatusPublisher(this, conf, publisherClass);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> getChoreService().scheduleChore(clusterStatusPublisherChore);<a name="line.536"></a>
-<span class="sourceLineNo">537</span> }<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span> // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.540"></a>
-<span class="sourceLineNo">541</span> if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span> this.activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, this);<a name="line.542"></a>
-<span class="sourceLineNo">543</span> } else {<a name="line.543"></a>
-<span class="sourceLineNo">544</span> this.activeMasterManager = null;<a name="line.544"></a>
-<span class="sourceLineNo">545</span> }<a name="line.545"></a>
-<span class="sourceLineNo">546</span> } catch (Throwable t) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span> // Make sure we log the exception. HMaster is often started via reflection and the<a name="line.547"></a>
-<span class="sourceLineNo">548</span> // cause of failed startup is lost.<a name="line.548"></a>
-<span class="sourceLineNo">549</span> LOG.error("Failed construction of Master", t);<a name="line.549"></a>
-<span class="sourceLineNo">550</span> throw t;<a name="line.550"></a>
-<span class="sourceLineNo">551</span> }<a name="line.551"></a>
-<span class="sourceLineNo">552</span> }<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span> @Override<a name="line.554"></a>
-<span class="sourceLineNo">555</span> protected String getUseThisHostnameInstead(Configuration conf) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span> return conf.get(MASTER_HOSTNAME_KEY);<a name="line.556"></a>
-<span class="sourceLineNo">557</span> }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span> // Main run loop. Calls through to the regionserver run loop AFTER becoming active Master; will<a name="line.559"></a>
-<span class="sourceLineNo">560</span> // block in here until then.<a name="line.560"></a>
-<span class="sourceLineNo">561</span> @Override<a name="line.561"></a>
-<span class="sourceLineNo">562</span> public void run() {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> try {<a name="line.563"></a>
-<span class="sourceLineNo">564</span> if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span> Threads.setDaemonThreadRunning(new Thread(() -> {<a name="line.565"></a>
-<span class="sourceLineNo">566</span> try {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> int infoPort = putUpJettyServer();<a name="line.567"></a>
-<span class="sourceLineNo">568</span> startActiveMasterManager(infoPort);<a name="line.568"></a>
-<span class="sourceLineNo">569</span> } catch (Throwable t) {<a name="line.569"></a>
-<span class="sourceLineNo">570</span> // Make sure we log the exception.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> String error = "Failed to become Active Master";<a name="line.571"></a>
-<span class="sourceLineNo">572</span> LOG.error(error, t);<a name="line.572"></a>
-<span class="sourceLineNo">573</span> // Abort should have been called already.<a name="line.573"></a>
-<span class="sourceLineNo">574</span> if (!isAborted()) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span> abort(error, t);<a name="line.575"></a>
-<span class="sourceLineNo">576</span> }<a name="line.576"></a>
-<span class="sourceLineNo">577</span> }<a name="line.577"></a>
-<span class="sourceLineNo">578</span> }));<a name="line.578"></a>
-<span class="sourceLineNo">579</span> }<a name="line.579"></a>
-<span class="sourceLineNo">580</span> // Fall in here even if we have been aborted. Need to run the shutdown services and<a name="line.580"></a>
-<span class="sourceLineNo">581</span> // the super run call will do this for us.<a name="line.581"></a>
-<span class="sourceLineNo">582</span> super.run();<a name="line.582"></a>
-<span class="sourceLineNo">583</span> } finally {<a name="line.583"></a>
-<span class="sourceLineNo">584</span> if (this.clusterSchemaService != null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> // If on way out, then we are no longer active master.<a name="line.585"></a>
-<span class="sourceLineNo">586</span> this.clusterSchemaService.stopAsync();<a name="line.586"></a>
-<span class="sourceLineNo">587</span> try {<a name="line.587"></a>
-<span class="sourceLineNo">588</span> this.clusterSchemaService.awaitTerminated(<a name="line.588"></a>
-<span class="sourceLineNo">589</span> getConfiguration().getInt(HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.589"></a>
-<span class="sourceLineNo">590</span> DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.590"></a>
-<span class="sourceLineNo">591</span> } catch (TimeoutException te) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span> LOG.warn("Failed shutdown of clusterSchemaService", te);<a name="line.592"></a>
-<span class="sourceLineNo">593</span> }<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> this.activeMaster = false;<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span> }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span> // return the actual infoPort, -1 means disable info server.<a name="line.599"></a>
-<span class="sourceLineNo">600</span> private int putUpJettyServer() throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> if (!conf.getBoolean("hbase.master.infoserver.redirect", true)) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span> return -1;<a name="line.602"></a>
-<span class="sourceLineNo">603</span> }<a name="line.603"></a>
-<span class="sourceLineNo">604</span> final int infoPort = conf.getInt("hbase.master.info.port.orig",<a name="line.604"></a>
-<span class="sourceLineNo">605</span> HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.605"></a>
-<span class="sourceLineNo">606</span> // -1 is for disabling info server, so no redirecting<a name="line.606"></a>
-<span class="sourceLineNo">607</span> if (infoPort < 0 || infoServer == null) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span> return -1;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span> if(infoPort == infoServer.getPort()) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span> return infoPort;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span> final String addr = conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.613"></a>
-<span class="sourceLineNo">614</span> if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span> String msg =<a name="line.615"></a>
-<span class="sourceLineNo">616</span> "Failed to start redirecting jetty server. Address " + addr<a name="line.616"></a>
-<span class="sourceLineNo">617</span> + " does not belong to this host. Correct configuration parameter: "<a name="line.617"></a>
-<span class="sourceLineNo">618</span> + "hbase.master.info.bindAddress";<a name="line.618"></a>
-<span class="sourceLineNo">619</span> LOG.error(msg);<a name="line.619"></a>
-<span class="sourceLineNo">620</span> throw new IOException(msg);<a name="line.620"></a>
-<span class="sourceLineNo">621</span> }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span> // TODO I'm pretty sure we could just add another binding to the InfoServer run by<a name="line.623"></a>
-<span class="sourceLineNo">624</span> // the RegionServer and have it run the RedirectServlet instead of standing up<a name="line.624"></a>
-<span class="sourceLineNo">625</span> // a second entire stack here.<a name="line.625"></a>
-<span class="sourceLineNo">626</span> masterJettyServer = new Server();<a name="line.626"></a>
-<span class="sourceLineNo">627</span> final ServerConnector connector = new ServerConnector(masterJettyServer);<a name="line.627"></a>
-<span class="sourceLineNo">628</span> connector.setHost(addr);<a name="line.628"></a>
-<span class="sourceLineNo">629</span> connector.setPort(infoPort);<a name="line.629"></a>
-<span class="sourceLineNo">630</span> masterJettyServer.addConnector(connector);<a name="line.630"></a>
-<span class="sourceLineNo">631</span> masterJettyServer.setStopAtShutdown(true);<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span> final String redirectHostname =<a name="line.633"></a>
-<span class="sourceLineNo">634</span> StringUtils.isBlank(useThisHostnameInstead) ? null : useThisHostnameInstead;<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span> final RedirectServlet redirect = new RedirectServlet(infoServer, redirectHostname);<a name="line.636"></a>
-<span class="sourceLineNo">637</span> final WebAppContext context = new WebAppContext(null, "/", null, null, null, null, WebAppContext.NO_SESSIONS);<a name="line.637"></a>
-<span class="sourceLineNo">638</span> context.addServlet(new ServletHolder(redirect), "/*");<a name="line.638"></a>
-<span class="sourceLineNo">639</span> context.setServer(masterJettyServer);<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span> try {<a name="line.641"></a>
-<span class="sourceLineNo">642</span> masterJettyServer.start();<a name="line.642"></a>
-<span class="sourceLineNo">643</span> } catch (Exception e) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span> throw new IOException("Failed to start redirecting jetty server", e);<a name="line.644"></a>
-<span class="sourceLineNo">645</span> }<a name="line.645"></a>
-<span class="sourceLineNo">646</span> return connector.getLocalPort();<a name="line.646"></a>
-<span class="sourceLineNo">647</span> }<a name="line.647"></a>
-<span class="sourceLineNo">648</span><a name="line.648"></a>
-<span class="sourceLineNo">649</span> @Override<a name="line.649"></a>
-<span class="sourceLineNo">650</span> protected Function<TableDescriptorBuilder, TableDescriptorBuilder> getMetaTableObserver() {<a name="line.650"></a>
-<span class="sourceLineNo">651</span> return builder -> builder.setRegionReplication(conf.getInt(HConstants.META_REPLICAS_NUM, HConstants.DEFAULT_META_REPLICA_NUM));<a name="line.651"></a>
-<span class="sourceLineNo">652</span> }<a name="line.652"></a>
-<span class="sourceLineNo">653</span> /**<a name="line.653"></a>
-<span class="sourceLineNo">654</span> * For compatibility, if failed with regionserver credentials, try the master one<a name="line.654"></a>
-<span class="sourceLineNo">655</span> */<a name="line.655"></a>
-<span class="sourceLineNo">656</span> @Override<a name="line.656"></a>
-<span class="sourceLineNo">657</span> protected void login(UserProvider user, String host) throws IOException {<a name="line.657"></a>
-<span class="sourceLineNo">658</span> try {<a name="line.658"></a>
-<span class="sourceLineNo">659</span> super.login(user, host);<a name="line.659"></a>
-<span class="sourceLineNo">660</span> } catch (IOException ie) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span> user.login("hbase.master.keytab.file",<a name="line.661"></a>
-<span class="sourceLineNo">662</span> "hbase.master.kerberos.principal", host);<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><a name="line.665"></a>
-<span class="sourceLineNo">666</span> /**<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * If configured to put regions on active master,<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * wait till a backup master becomes active.<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * Otherwise, loop till the server is stopped or aborted.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> @Override<a name="line.671"></a>
-<span class="sourceLineNo">672</span> protected void waitForMasterActive(){<a name="line.672"></a>
-<span class="sourceLineNo">673</span> boolean tablesOnMaster = LoadBalancer.isTablesOnMaster(conf);<a name="line.673"></a>
-<span class="sourceLineNo">674</span> while (!(tablesOnMaster && activeMaster) && !isStopped() && !isAborted()) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span> sleeper.sleep();<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> @VisibleForTesting<a name="line.679"></a>
-<span class="sourceLineNo">680</span> public MasterRpcServices getMasterRpcServices() {<a name="line.680"></a>
-<span class="sourceLineNo">681</span> return (MasterRpcServices)rpcServices;<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> public boolean balanceSwitch(final boolean b) throws IOException {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> return getMasterRpcServices().switchBalancer(b, BalanceSwitchMode.ASYNC);<a name="line.685"></a>
-<span class="sourceLineNo">686</span> }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span> @Override<a name="line.688"></a>
-<span class="sourceLineNo">689</span> protected String getProcessName() {<a name="line.689"></a>
-<span class="sourceLineNo">690</span> return MASTER;<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> @Override<a name="line.693"></a>
-<span class="sourceLineNo">694</span> protected boolean canCreateBaseZNode() {<a name="line.694"></a>
-<span class="sourceLineNo">695</span> return true;<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> @Override<a name="line.698"></a>
-<span class="sourceLineNo">699</span> protected boolean canUpdateTableDescriptor() {<a name="line.699"></a>
-<span class="sourceLineNo">700</span> return true;<a name="line.700"></a>
-<span class="sourceLineNo">701</span> }<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span> @Override<a name="line.703"></a>
-<span class="sourceLineNo">704</span> protected RSRpcServices createRpcServices() throws IOException {<a name="line.704"></a>
-<span class="sourceLineNo">705</span> return new MasterRpcServices(this);<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> @Override<a name="line.708"></a>
-<span class="sourceLineNo">709</span> protected void configureInfoServer() {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> infoServer.addServlet("master-status", "/master-status", MasterStatusServlet.class);<a name="line.710"></a>
-<span class="sourceLineNo">711</span> infoServer.setAttribute(MASTER, this);<a name="line.711"></a>
-<span class="sourceLineNo">712</span> if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span> super.configureInfoServer();<a name="line.713"></a>
-<span class="sourceLineNo">714</span> }<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
-<span class="sourceLineNo">716</span><a name="line.716"></a>
-<span class="sourceLineNo">717</span> @Override<a name="line.717"></a>
-<span class="sourceLineNo">718</span> protected Class<? extends HttpServlet> getDumpServlet() {<a name="line.718"></a>
-<span class="sourceLineNo">719</span> return MasterDumpServlet.class;<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span><a name="line.721"></a>
-<span class="sourceLineNo">722</span> @Override<a name="line.722"></a>
-<span class="sourceLineNo">723</span> public MetricsMaster getMasterMetrics() {<a name="line.723"></a>
-<span class="sourceLineNo">724</span> return metricsMaster;<a name="line.724"></a>
-<span class="sourceLineNo">725</span> }<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span> /**<a name="line.727"></a>
+<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>/**<a name="line.220"></a>
+<span class="sourceLineNo">221</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.221"></a>
+<span class="sourceLineNo">222</span> * master. If many masters are started, all compete. Whichever wins goes on to<a name="line.222"></a>
+<span class="sourceLineNo">223</span> * run the cluster. All others park themselves in their constructor until<a name="line.223"></a>
+<span class="sourceLineNo">224</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.224"></a>
+<span class="sourceLineNo">225</span> * zookeeper. Thereafter, all running master jostle to take over master role.<a name="line.225"></a>
+<span class="sourceLineNo">226</span> *<a name="line.226"></a>
+<span class="sourceLineNo">227</span> * <p>The Master can be asked shutdown the cluster. See {@link #shutdown()}. In<a name="line.227"></a>
+<span class="sourceLineNo">228</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * all reporting in that they are down. This master will then shut itself down.<a name="line.229"></a>
+<span class="sourceLineNo">230</span> *<a name="line.230"></a>
+<span class="sourceLineNo">231</span> * <p>You can also shutdown just this master. Call {@link #stopMaster()}.<a name="line.231"></a>
+<span class="sourceLineNo">232</span> *<a name="line.232"></a>
+<span class="sourceLineNo">233</span> * @see org.apache.zookeeper.Watcher<a name="line.233"></a>
+<span class="sourceLineNo">234</span> */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.235"></a>
+<span class="sourceLineNo">236</span>@SuppressWarnings("deprecation")<a name="line.236"></a>
+<span class="sourceLineNo">237</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private static Logger LOG = LoggerFactory.getLogger(HMaster.class.getName());<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span> /**<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.241"></a>
+<span class="sourceLineNo">242</span> * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.242"></a>
+<span class="sourceLineNo">243</span> */<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private static class InitializationMonitor extends HasThread {<a name="line.244"></a>
+<span class="sourceLineNo">245</span> /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.245"></a>
+<span class="sourceLineNo">246</span> public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.246"></a>
+<span class="sourceLineNo">247</span> public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span> /**<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.250"></a>
+<span class="sourceLineNo">251</span> * true, do nothing otherwise.<a name="line.251"></a>
+<span class="sourceLineNo">252</span> */<a name="line.252"></a>
+<span class="sourceLineNo">253</span> public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.253"></a>
+<span class="sourceLineNo">254</span> public static final boolean HALT_DEFAULT = false;<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span> private final HMaster master;<a name="line.256"></a>
+<span class="sourceLineNo">257</span> private final long timeout;<a name="line.257"></a>
+<span class="sourceLineNo">258</span> private final boolean haltOnTimeout;<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span> /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.260"></a>
+<span class="sourceLineNo">261</span> InitializationMonitor(HMaster master) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span> super("MasterInitializationMonitor");<a name="line.262"></a>
+<span class="sourceLineNo">263</span> this.master = master;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.264"></a>
+<span class="sourceLineNo">265</span> this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.setDaemon(true);<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> public void run() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> try {<a name="line.271"></a>
+<span class="sourceLineNo">272</span> while (!master.isStopped() && master.isActiveMaster()) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> Thread.sleep(timeout);<a name="line.273"></a>
+<span class="sourceLineNo">274</span> if (master.isInitialized()) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span> LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.275"></a>
+<span class="sourceLineNo">276</span> } else {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.277"></a>
+<span class="sourceLineNo">278</span> + " consider submitting a bug report including a thread dump of this process.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span> if (haltOnTimeout) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span> LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.280"></a>
+<span class="sourceLineNo">281</span> Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.281"></a>
+<span class="sourceLineNo">282</span> System.exit(-1);<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> } catch (InterruptedException ie) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span> LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span> }<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.292"></a>
+<span class="sourceLineNo">293</span> //instance into web context.<a name="line.293"></a>
+<span class="sourceLineNo">294</span> public static final String MASTER = "master";<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span> // Manager and zk listener for master election<a name="line.296"></a>
+<span class="sourceLineNo">297</span> private final ActiveMasterManager activeMasterManager;<a name="line.297"></a>
+<span class="sourceLineNo">298</span> // Region server tracker<a name="line.298"></a>
+<span class="sourceLineNo">299</span> private RegionServerTracker regionServerTracker;<a name="line.299"></a>
+<span class="sourceLineNo">300</span> // Draining region server tracker<a name="line.300"></a>
+<span class="sourceLineNo">301</span> private DrainingServerTracker drainingServerTracker;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> // Tracker for load balancer state<a name="line.302"></a>
+<span class="sourceLineNo">303</span> LoadBalancerTracker loadBalancerTracker;<a name="line.303"></a>
+<span class="sourceLineNo">304</span> // Tracker for meta location, if any client ZK quorum specified<a name="line.304"></a>
+<span class="sourceLineNo">305</span> MetaLocationSyncer metaLocationSyncer;<a name="line.305"></a>
+<span class="sourceLineNo">306</span> // Tracker for active master location, if any client ZK quorum specified<a name="line.306"></a>
+<span class="sourceLineNo">307</span> MasterAddressSyncer masterAddressSyncer;<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span> // Tracker for split and merge state<a name="line.309"></a>
+<span class="sourceLineNo">310</span> private SplitOrMergeTracker splitOrMergeTracker;<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span> // Tracker for region normalizer state<a name="line.312"></a>
+<span class="sourceLineNo">313</span> private RegionNormalizerTracker regionNormalizerTracker;<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span> //Tracker for master maintenance mode setting<a name="line.315"></a>
+<span class="sourceLineNo">316</span> private MasterMaintenanceModeTracker maintenanceModeTracker;<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span> private ClusterSchemaService clusterSchemaService;<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.320"></a>
+<span class="sourceLineNo">321</span> "hbase.master.wait.on.service.seconds";<a name="line.321"></a>
+<span class="sourceLineNo">322</span> public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span> // Metrics for the HMaster<a name="line.324"></a>
+<span class="sourceLineNo">325</span> final MetricsMaster metricsMaster;<a name="line.325"></a>
+<span class="sourceLineNo">326</span> // file system manager for the master FS operations<a name="line.326"></a>
+<span class="sourceLineNo">327</span> private MasterFileSystem fileSystemManager;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private MasterWalManager walManager;<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> // server manager to deal with region server info<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private volatile ServerManager serverManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span> // manager of assignment nodes in zookeeper<a name="line.333"></a>
+<span class="sourceLineNo">334</span> private AssignmentManager assignmentManager;<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> // manager of replication<a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ReplicationPeerManager replicationPeerManager;<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span> // buffer for "fatal error" notices from region servers<a name="line.339"></a>
+<span class="sourceLineNo">340</span> // in the cluster. This is only used for assisting<a name="line.340"></a>
+<span class="sourceLineNo">341</span> // operations/debugging.<a name="line.341"></a>
+<span class="sourceLineNo">342</span> MemoryBoundedLogMessageBuffer rsFatals;<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span> // flag set after we become the active master (used for testing)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> private volatile boolean activeMaster = false;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span> // flag set after we complete initialization once active<a name="line.347"></a>
+<span class="sourceLineNo">348</span> private final ProcedureEvent<?> initialized = new ProcedureEvent<>("master initialized");<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span> // flag set after master services are started,<a name="line.350"></a>
+<span class="sourceLineNo">351</span> // initialization may have not completed yet.<a name="line.351"></a>
+<span class="sourceLineNo">352</span> volatile boolean serviceStarted = false;<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span> // flag set after we complete assignMeta.<a name="line.354"></a>
+<span class="sourceLineNo">355</span> private final ProcedureEvent<?> serverCrashProcessingEnabled =<a name="line.355"></a>
+<span class="sourceLineNo">356</span> new ProcedureEvent<>("server crash processing");<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> // Maximum time we should run balancer for<a name="line.358"></a>
+<span class="sourceLineNo">359</span> private final int maxBlancingTime;<a name="line.359"></a>
+<span class="sourceLineNo">360</span> // Maximum percent of regions in transition when balancing<a name="line.360"></a>
+<span class="sourceLineNo">361</span> private final double maxRitPercent;<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span> private final LockManager lockManager = new LockManager(this);<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span> private LoadBalancer balancer;<a name="line.365"></a>
+<span class="sourceLineNo">366</span> private RegionNormalizer normalizer;<a name="line.366"></a>
+<span class="sourceLineNo">367</span> private BalancerChore balancerChore;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> private RegionNormalizerChore normalizerChore;<a name="line.368"></a>
+<span class="sourceLineNo">369</span> private ClusterStatusChore clusterStatusChore;<a name="line.369"></a>
+<span class="sourceLineNo">370</span> private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span> CatalogJanitor catalogJanitorChore;<a name="line.372"></a>
+<span class="sourceLineNo">373</span> private LogCleaner logCleaner;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> private HFileCleaner hfileCleaner;<a name="line.374"></a>
+<span class="sourceLineNo">375</span> private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.375"></a>
+<span class="sourceLineNo">376</span> private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.376"></a>
+<span class="sourceLineNo">377</span> private MobCompactionChore mobCompactChore;<a name="line.377"></a>
+<span class="sourceLineNo">378</span> private MasterMobCompactionThread mobCompactThread;<a name="line.378"></a>
+<span class="sourceLineNo">379</span> // used to synchronize the mobCompactionStates<a name="line.379"></a>
+<span class="sourceLineNo">380</span> private final IdLock mobCompactionLock = new IdLock();<a name="line.380"></a>
+<span class="sourceLineNo">381</span> // save the information of mob compactions in tables.<a name="line.381"></a>
+<span class="sourceLineNo">382</span> // the key is table name, the value is the number of compactions in that table.<a name="line.382"></a>
+<span class="sourceLineNo">383</span> private Map<TableName, AtomicInteger> mobCompactionStates = Maps.newConcurrentMap();<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> MasterCoprocessorHost cpHost;<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span> private final boolean preLoadTableDescriptors;<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> // Time stamps for when a hmaster became active<a name="line.389"></a>
+<span class="sourceLineNo">390</span> private long masterActiveTime;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> // Time stamp for when HMaster finishes becoming Active Master<a name="line.392"></a>
+<span class="sourceLineNo">393</span> private long masterFinishedInitializationTime;<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span> //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.395"></a>
+<span class="sourceLineNo">396</span> private final boolean masterCheckCompression;<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span> //should we check encryption settings at master side, default true<a name="line.398"></a>
+<span class="sourceLineNo">399</span> private final boolean masterCheckEncryption;<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> Map<String, Service> coprocessorServiceHandlers = Maps.newHashMap();<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span> // monitor for snapshot of hbase tables<a name="line.403"></a>
+<span class="sourceLineNo">404</span> SnapshotManager snapshotManager;<a name="line.404"></a>
+<span class="sourceLineNo">405</span> // monitor for distributed procedures<a name="line.405"></a>
+<span class="sourceLineNo">406</span> private MasterProcedureManagerHost mpmHost;<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span> // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.408"></a>
+<span class="sourceLineNo">409</span> private volatile MasterQuotaManager quotaManager;<a name="line.409"></a>
+<span class="sourceLineNo">410</span> private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.410"></a>
+<span class="sourceLineNo">411</span> private QuotaObserverChore quotaObserverChore;<a name="line.411"></a>
+<span class="sourceLineNo">412</span> private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span> private ProcedureExecutor<MasterProcedureEnv> procedureExecutor;<a name="line.414"></a>
+<span class="sourceLineNo">415</span> private WALProcedureStore procedureStore;<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span> // handle table states<a name="line.417"></a>
+<span class="sourceLineNo">418</span> private TableStateManager tableStateManager;<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span> private long splitPlanCount;<a name="line.420"></a>
+<span class="sourceLineNo">421</span> private long mergePlanCount;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span> /* Handle favored nodes information */<a name="line.423"></a>
+<span class="sourceLineNo">424</span> private FavoredNodesManager favoredNodesManager;<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span> /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.426"></a>
+<span class="sourceLineNo">427</span> private Server masterJettyServer;<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span> public static class RedirectServlet extends HttpServlet {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> private static final long serialVersionUID = 2894774810058302473L;<a name="line.430"></a>
+<span class="sourceLineNo">431</span> private final int regionServerInfoPort;<a name="line.431"></a>
+<span class="sourceLineNo">432</span> private final String regionServerHostname;<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span> /**<a name="line.434"></a>
+<span class="sourceLineNo">435</span> * @param infoServer that we're trying to send all requests to<a name="line.435"></a>
+<span class="sourceLineNo">436</span> * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.436"></a>
+<span class="sourceLineNo">437</span> */<a name="line.437"></a>
+<span class="sourceLineNo">438</span> public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span> regionServerInfoPort = infoServer.getPort();<a name="line.439"></a>
+<span class="sourceLineNo">440</span> regionServerHostname = hostname;<a name="line.440"></a>
+<span class="sourceLineNo">441</span> }<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span> @Override<a name="line.443"></a>
+<span class="sourceLineNo">444</span> public void doGet(HttpServletRequest request,<a name="line.444"></a>
+<span class="sourceLineNo">445</span> HttpServletResponse response) throws ServletException, IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span> String redirectHost = regionServerHostname;<a name="line.446"></a>
+<span class="sourceLineNo">447</span> if(redirectHost == null) {<a name="line.447"></a>
+<span class="sourceLineNo">448</span> redirectHost = request.getServerName();<a name="line.448"></a>
+<span class="sourceLineNo">449</span> if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.449"></a>
+<span class="sourceLineNo">450</span> LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.450"></a>
+<span class="sourceLineNo">451</span> MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.451"></a>
+<span class="sourceLineNo">452</span> "your HBase deployment relies on client accessible names that the region server process " +<a name="line.452"></a>
+<span class="sourceLineNo">453</span> "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.453"></a>
+<span class="sourceLineNo">454</span> "to an appropriate hostname.");<a name="line.454"></a>
+<span class="sourceLineNo">455</span> // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.455"></a>
+<span class="sourceLineNo">456</span> response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.456"></a>
+<span class="sourceLineNo">457</span> "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.457"></a>
+<span class="sourceLineNo">458</span> "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.458"></a>
+<span class="sourceLineNo">459</span> return;<a name="line.459"></a>
+<span class="sourceLineNo">460</span> }<a name="line.460"></a>
+<span class="sourceLineNo">461</span> }<a name="line.461"></a>
+<span class="sourceLineNo">462</span> // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.462"></a>
+<span class="sourceLineNo">463</span> // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.463"></a>
+<span class="sourceLineNo">464</span> String redirectUrl = request.getScheme() + "://"<a name="line.464"></a>
+<span class="sourceLineNo">465</span> + redirectHost + ":" + regionServerInfoPort<a name="line.465"></a>
+<span class="sourceLineNo">466</span> + request.getRequestURI();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> response.sendRedirect(redirectUrl);<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> /**<a name="line.471"></a>
+<span class="sourceLineNo">472</span> * Initializes the HMaster. The steps are as follows:<a name="line.472"></a>
+<span class="sourceLineNo">473</span> * <p><a name="line.473"></a>
+<span class="sourceLineNo">474</span> * <ol><a name="line.474"></a>
+<span class="sourceLineNo">475</span> * <li>Initialize the local HRegionServer<a name="line.475"></a>
+<span class="sourceLineNo">476</span> * <li>Start the ActiveMasterManager.<a name="line.476"></a>
+<span class="sourceLineNo">477</span> * </ol><a name="line.477"></a>
+<span class="sourceLineNo">478</span> * <p><a name="line.478"></a>
+<span class="sourceLineNo">479</span> * Remaining steps of initialization occur in<a name="line.479"></a>
+<span class="sourceLineNo">480</span> * #finishActiveMasterInitialization(MonitoredTask) after<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * the master becomes the active one.<a name="line.481"></a>
+<span class="sourceLineNo">482</span> */<a name="line.482"></a>
+<span class="sourceLineNo">483</span> public HMaster(final Configuration conf)<a name="line.483"></a>
+<span class="sourceLineNo">484</span> throws IOException, KeeperException {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> super(conf);<a name="line.485"></a>
+<span class="sourceLineNo">486</span> TraceUtil.initTracer(conf);<a name="line.486"></a>
+<span class="sourceLineNo">487</span> try {<a name="line.487"></a>
+<span class="sourceLineNo">488</span> this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.488"></a>
+<span class="sourceLineNo">489</span> conf.getLong("hbase.master.buffer.for.rs.fatals", 1 * 1024 * 1024));<a name="line.489"></a>
+<span class="sourceLineNo">490</span> LOG.info("hbase.rootdir=" + getRootDir() +<a name="line.490"></a>
+<span class="sourceLineNo">491</span> ", hbase.cluster.distributed=" + this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span> // Disable usage of meta replicas in the master<a name="line.493"></a>
+<span class="sourceLineNo">494</span> this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span> decorateMasterConfiguration(this.conf);<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span> // Hack! Maps DFSClient => Master for logs. HDFS made this<a name="line.498"></a>
+<span class="sourceLineNo">499</span> // config param for task trackers, but we can piggyback off of it.<a name="line.499"></a>
+<span class="sourceLineNo">500</span> if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span> this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.501"></a>
+<span class="sourceLineNo">502</span> }<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span> // should we check the compression codec type at master side, default true, HBASE-6370<a name="line.504"></a>
+<span class="sourceLineNo">505</span> this.masterCheckCompression = conf.getBoolean("hbase.master.check.compression", true);<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span> // should we check encryption settings at master side, default true<a name="line.507"></a>
+<span class="sourceLineNo">508</span> this.masterCheckEncryption = conf.getBoolean("hbase.master.check.encryption", true);<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span> this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span> // preload table descriptor at startup<a name="line.512"></a>
+<span class="sourceLineNo">513</span> this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span> this.maxBlancingTime = getMaxBalancingTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span> this.maxRitPercent = conf.getDouble(HConstants.HBASE_MASTER_BALANCER_MAX_RIT_PERCENT,<a name="line.516"></a>
+<span class="sourceLineNo">517</span> HConstants.DEFAULT_HBASE_MASTER_BALANCER_MAX_RIT_PERCENT);<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span> // Do we publish the status?<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span> boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.521"></a>
+<span class="sourceLineNo">522</span> HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.522"></a>
+<span class="sourceLineNo">523</span> Class<? extends ClusterStatusPublisher.Publisher> publisherClass =<a name="line.523"></a>
+<span class="sourceLineNo">524</span> conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.524"></a>
+<span class="sourceLineNo">52
<TRUNCATED>
[06/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
index 83c17c0..9df0225 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
@@ -54,323 +54,362 @@
<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> */<a name="line.57"></a>
-<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
-<span class="sourceLineNo">059</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
-<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
-<span class="sourceLineNo">061</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
-<span class="sourceLineNo">062</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span> protected final CompressionContext compression;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> protected final ByteStringUncompressor statelessUncompressor = new ByteStringUncompressor() {<a name="line.65"></a>
-<span class="sourceLineNo">066</span> @Override<a name="line.66"></a>
-<span class="sourceLineNo">067</span> public byte[] uncompress(ByteString data, Dictionary dict) throws IOException {<a name="line.67"></a>
-<span class="sourceLineNo">068</span> return WALCellCodec.uncompressByteString(data, dict);<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><a name="line.71"></a>
-<span class="sourceLineNo">072</span> /**<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.73"></a>
-<span class="sourceLineNo">074</span> */<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public WALCellCodec() {<a name="line.75"></a>
-<span class="sourceLineNo">076</span> this.compression = null;<a name="line.76"></a>
-<span class="sourceLineNo">077</span> }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span> /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.80"></a>
-<span class="sourceLineNo">081</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * @param conf configuration to configure <tt>this</tt><a name="line.82"></a>
-<span class="sourceLineNo">083</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * compression<a name="line.84"></a>
-<span class="sourceLineNo">085</span> */<a name="line.85"></a>
-<span class="sourceLineNo">086</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.86"></a>
-<span class="sourceLineNo">087</span> this.compression = compression;<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 String getWALCellCodecClass(Configuration conf) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * Fully prepares the codec for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * uses a {@link WALCellCodec}.<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * @param cellCodecClsName name of codec<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * @param compression compression the codec should use<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * @return a {@link WALCellCodec} ready for use.<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.104"></a>
-<span class="sourceLineNo">105</span> */<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.107"></a>
-<span class="sourceLineNo">108</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> if (cellCodecClsName == null) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.112"></a>
-<span class="sourceLineNo">113</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.113"></a>
-<span class="sourceLineNo">114</span> }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> /**<a name="line.116"></a>
-<span class="sourceLineNo">117</span> * Create and setup a {@link WALCellCodec} from the<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * CompressionContext.<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * Fully prepares the codec for use.<a name="line.120"></a>
-<span class="sourceLineNo">121</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * uses a {@link WALCellCodec}.<a name="line.122"></a>
-<span class="sourceLineNo">123</span> * @param compression compression the codec should use<a name="line.123"></a>
-<span class="sourceLineNo">124</span> * @return a {@link WALCellCodec} ready for use.<a name="line.124"></a>
-<span class="sourceLineNo">125</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.125"></a>
-<span class="sourceLineNo">126</span> */<a name="line.126"></a>
-<span class="sourceLineNo">127</span> public static WALCellCodec create(Configuration conf,<a name="line.127"></a>
-<span class="sourceLineNo">128</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.128"></a>
-<span class="sourceLineNo">129</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.129"></a>
-<span class="sourceLineNo">130</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.130"></a>
-<span class="sourceLineNo">131</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span> public interface ByteStringCompressor {<a name="line.134"></a>
-<span class="sourceLineNo">135</span> ByteString compress(byte[] data, Dictionary dict) throws IOException;<a name="line.135"></a>
-<span class="sourceLineNo">136</span> }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span> public interface ByteStringUncompressor {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> byte[] uncompress(ByteString data, Dictionary dict) throws IOException;<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> // TODO: it sucks that compression context is in WAL.Entry. It'd be nice if it was here.<a name="line.142"></a>
-<span class="sourceLineNo">143</span> // Dictionary could be gotten by enum; initially, based on enum, context would create<a name="line.143"></a>
-<span class="sourceLineNo">144</span> // an array of dictionaries.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> public ByteString toByteString() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.147"></a>
-<span class="sourceLineNo">148</span> // them.<a name="line.148"></a>
-<span class="sourceLineNo">149</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.149"></a>
-<span class="sourceLineNo">150</span> }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> @Override<a name="line.152"></a>
-<span class="sourceLineNo">153</span> public ByteString compress(byte[] data, Dictionary dict) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span> writeCompressed(data, dict);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.155"></a>
-<span class="sourceLineNo">156</span> // them.<a name="line.156"></a>
-<span class="sourceLineNo">157</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.157"></a>
-<span class="sourceLineNo">158</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.158"></a>
-<span class="sourceLineNo">159</span> return result;<a name="line.159"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
+<span class="sourceLineNo">060</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
+<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
+<span class="sourceLineNo">062</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
+<span class="sourceLineNo">063</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span> protected final CompressionContext compression;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.68"></a>
+<span class="sourceLineNo">069</span> */<a name="line.69"></a>
+<span class="sourceLineNo">070</span> public WALCellCodec() {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> this.compression = null;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<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> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.75"></a>
+<span class="sourceLineNo">076</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * @param conf configuration to configure <tt>this</tt><a name="line.77"></a>
+<span class="sourceLineNo">078</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * compression<a name="line.79"></a>
+<span class="sourceLineNo">080</span> */<a name="line.80"></a>
+<span class="sourceLineNo">081</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span> this.compression = compression;<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 getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * Fully prepares the codec for use.<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * uses a {@link WALCellCodec}.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * @param cellCodecClsName name of codec<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * @param compression compression the codec should use<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.99"></a>
+<span class="sourceLineNo">100</span> */<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
+<span class="sourceLineNo">103</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span> if (cellCodecClsName == null) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
+<span class="sourceLineNo">106</span> }<a name="line.106"></a>
+<span class="sourceLineNo">107</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
+<span class="sourceLineNo">108</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * CompressionContext.<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * Fully prepares the codec for use.<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * uses a {@link WALCellCodec}.<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * @param compression compression the codec should use<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
+<span class="sourceLineNo">121</span> */<a name="line.121"></a>
+<span class="sourceLineNo">122</span> public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
+<span class="sourceLineNo">123</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
+<span class="sourceLineNo">125</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
+<span class="sourceLineNo">126</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> public interface ByteStringCompressor {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> ByteString compress(byte[] data, Enum dictIndex) throws IOException;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> public interface ByteStringUncompressor {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span> static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> CompressionContext compressionContext;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> this.compressionContext = compressionContext;<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> @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span> public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> private CompressionContext compressionContext;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> this.compressionContext = compressionContext;<a name="line.154"></a>
+<span class="sourceLineNo">155</span> }<a name="line.155"></a>
+<span class="sourceLineNo">156</span> public ByteString toByteString() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
+<span class="sourceLineNo">158</span> // them.<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
<span class="sourceLineNo">160</span> }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span> private void writeCompressed(byte[] data, Dictionary dict) throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span> assert dict != null;<a name="line.163"></a>
-<span class="sourceLineNo">164</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.164"></a>
-<span class="sourceLineNo">165</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.166"></a>
-<span class="sourceLineNo">167</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> write(data, 0, data.length);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> } else {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> StreamUtils.writeShort(this, dictIdx);<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> }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.175"></a>
-<span class="sourceLineNo">176</span> InputStream in = bs.newInput();<a name="line.176"></a>
-<span class="sourceLineNo">177</span> byte status = (byte)in.read();<a name="line.177"></a>
-<span class="sourceLineNo">178</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.179"></a>
-<span class="sourceLineNo">180</span> int bytesRead = in.read(arr);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> if (bytesRead != arr.length) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.184"></a>
-<span class="sourceLineNo">185</span> return arr;<a name="line.185"></a>
-<span class="sourceLineNo">186</span> } else {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.187"></a>
-<span class="sourceLineNo">188</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.188"></a>
-<span class="sourceLineNo">189</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.189"></a>
-<span class="sourceLineNo">190</span> if (entry == null) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.191"></a>
-<span class="sourceLineNo">192</span> }<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return entry;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.197"></a>
-<span class="sourceLineNo">198</span> private final CompressionContext compression;<a name="line.198"></a>
-<span class="sourceLineNo">199</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> super(out);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> this.compression = compression;<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> @Override<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public void write(Cell cell) throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> // We first write the KeyValue infrastructure as VInts.<a name="line.206"></a>
-<span class="sourceLineNo">207</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.207"></a>
-<span class="sourceLineNo">208</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.208"></a>
-<span class="sourceLineNo">209</span> // To support tags<a name="line.209"></a>
-<span class="sourceLineNo">210</span> int tagsLength = cell.getTagsLength();<a name="line.210"></a>
-<span class="sourceLineNo">211</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.211"></a>
-<span class="sourceLineNo">212</span> PrivateCellUtil.compressRow(out, cell, compression.rowDict);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> PrivateCellUtil.compressFamily(out, cell, compression.familyDict);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> PrivateCellUtil.compressQualifier(out, cell, compression.qualifierDict);<a name="line.214"></a>
-<span class="sourceLineNo">215</span> // Write timestamp, type and value as uncompressed.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.216"></a>
-<span class="sourceLineNo">217</span> out.write(cell.getTypeByte());<a name="line.217"></a>
-<span class="sourceLineNo">218</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.218"></a>
-<span class="sourceLineNo">219</span> if (tagsLength > 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span> if (compression.tagCompressionContext != null) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span> // Write tags using Dictionary compression<a name="line.221"></a>
-<span class="sourceLineNo">222</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.222"></a>
-<span class="sourceLineNo">223</span> } else {<a name="line.223"></a>
-<span class="sourceLineNo">224</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.224"></a>
-<span class="sourceLineNo">225</span> // it is.<a name="line.225"></a>
-<span class="sourceLineNo">226</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.226"></a>
-<span class="sourceLineNo">227</span> }<a name="line.227"></a>
-<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span> public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> writeCompressed(data, dictIndex);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
+<span class="sourceLineNo">166</span> // them.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
+<span class="sourceLineNo">168</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> return result;<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> private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> assert dict != null;<a name="line.174"></a>
+<span class="sourceLineNo">175</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> write(data, 0, data.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> }<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> }<a name="line.191"></a>
+<span class="sourceLineNo">192</span> }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span> static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span> @Override<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> return data.toByteArray();<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span> }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> InputStream in = bs.newInput();<a name="line.203"></a>
+<span class="sourceLineNo">204</span> byte status = (byte)in.read();<a name="line.204"></a>
+<span class="sourceLineNo">205</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
+<span class="sourceLineNo">207</span> int bytesRead = in.read(arr);<a name="line.207"></a>
+<span class="sourceLineNo">208</span> if (bytesRead != arr.length) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
+<span class="sourceLineNo">212</span> return arr;<a name="line.212"></a>
+<span class="sourceLineNo">213</span> } else {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
+<span class="sourceLineNo">216</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
+<span class="sourceLineNo">217</span> if (entry == null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> }<a name="line.219"></a>
+<span class="sourceLineNo">220</span> return entry;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> private final CompressionContext compression;<a name="line.225"></a>
+<span class="sourceLineNo">226</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> super(out);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> this.compression = compression;<a name="line.228"></a>
<span class="sourceLineNo">229</span> }<a name="line.229"></a>
-<span class="sourceLineNo">230</span> }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.232"></a>
-<span class="sourceLineNo">233</span> private final CompressionContext compression;<a name="line.233"></a>
-<span class="sourceLineNo">234</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> super(in);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> this.compression = compression;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> }<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span> @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span> protected Cell parseCell() throws IOException {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.241"></a>
-<span class="sourceLineNo">242</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> int length = 0;<a name="line.245"></a>
-<span class="sourceLineNo">246</span> if(tagsLength == 0) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.247"></a>
-<span class="sourceLineNo">248</span> } else {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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> byte[] backingArray = new byte[length];<a name="line.252"></a>
-<span class="sourceLineNo">253</span> int pos = 0;<a name="line.253"></a>
-<span class="sourceLineNo">254</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span> // the row<a name="line.257"></a>
-<span class="sourceLineNo">258</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT, compression.rowDict);<a name="line.258"></a>
-<span class="sourceLineNo">259</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.259"></a>
-<span class="sourceLineNo">260</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.260"></a>
-<span class="sourceLineNo">261</span> pos += elemLen;<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> // family<a name="line.263"></a>
-<span class="sourceLineNo">264</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE, compression.familyDict);<a name="line.264"></a>
-<span class="sourceLineNo">265</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> pos += elemLen;<a name="line.267"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span> public void write(Cell cell) throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
+<span class="sourceLineNo">235</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
+<span class="sourceLineNo">236</span> // To support tags<a name="line.236"></a>
+<span class="sourceLineNo">237</span> int tagsLength = cell.getTagsLength();<a name="line.237"></a>
+<span class="sourceLineNo">238</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
+<span class="sourceLineNo">240</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
+<span class="sourceLineNo">241</span> PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
+<span class="sourceLineNo">242</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
+<span class="sourceLineNo">243</span> PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
+<span class="sourceLineNo">244</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
+<span class="sourceLineNo">245</span> // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
+<span class="sourceLineNo">246</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
+<span class="sourceLineNo">247</span> out.write(cell.getTypeByte());<a name="line.247"></a>
+<span class="sourceLineNo">248</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
+<span class="sourceLineNo">249</span> if (tagsLength > 0) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> if (compression.tagCompressionContext != null) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span> // Write tags using Dictionary compression<a name="line.251"></a>
+<span class="sourceLineNo">252</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> } else {<a name="line.253"></a>
+<span class="sourceLineNo">254</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
+<span class="sourceLineNo">255</span> // it is.<a name="line.255"></a>
+<span class="sourceLineNo">256</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
+<span class="sourceLineNo">257</span> }<a name="line.257"></a>
+<span class="sourceLineNo">258</span> }<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private final CompressionContext compression;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span> super(in);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.compression = compression;<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span> // qualifier<a name="line.269"></a>
-<span class="sourceLineNo">270</span> elemLen = readIntoArray(backingArray, pos, compression.qualifierDict);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> pos += elemLen;<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // timestamp, type and value<a name="line.273"></a>
-<span class="sourceLineNo">274</span> int tsTypeValLen = length - pos;<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (tagsLength > 0) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.276"></a>
-<span class="sourceLineNo">277</span> }<a name="line.277"></a>
-<span class="sourceLineNo">278</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.278"></a>
-<span class="sourceLineNo">279</span> pos += tsTypeValLen;<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span> // tags<a name="line.281"></a>
-<span class="sourceLineNo">282</span> if (tagsLength > 0) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.283"></a>
-<span class="sourceLineNo">284</span> if (compression.tagCompressionContext != null) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> } else {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span> return new KeyValue(backingArray, 0, length);<a name="line.290"></a>
-<span class="sourceLineNo">291</span> }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> byte status = (byte)in.read();<a name="line.294"></a>
-<span class="sourceLineNo">295</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span> // status byte indicating that data to be read is not in dictionary.<a name="line.296"></a>
-<span class="sourceLineNo">297</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> int length = StreamUtils.readRawVarint32(in);<a name="line.298"></a>
-<span class="sourceLineNo">299</span> IOUtils.readFully(in, to, offset, length);<a name="line.299"></a>
-<span class="sourceLineNo">300</span> dict.addEntry(to, offset, length);<a name="line.300"></a>
-<span class="sourceLineNo">301</span> return length;<a name="line.301"></a>
-<span class="sourceLineNo">302</span> } else {<a name="line.302"></a>
-<span class="sourceLineNo">303</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.303"></a>
-<span class="sourceLineNo">304</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.304"></a>
-<span class="sourceLineNo">305</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.305"></a>
-<span class="sourceLineNo">306</span> if (entry == null) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span> // now we write the uncompressed value.<a name="line.309"></a>
-<span class="sourceLineNo">310</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> return entry.length;<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span> }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private static void checkLength(int len, int max) throws IOException {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> if (len < 0 || len > max) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> }<a name="line.319"></a>
-<span class="sourceLineNo">320</span> }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.322"></a>
-<span class="sourceLineNo">323</span> public EnsureKvEncoder(OutputStream out) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> super(out);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> @Override<a name="line.326"></a>
-<span class="sourceLineNo">327</span> public void write(Cell cell) throws IOException {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> checkFlushed();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> // Make sure to write tags into WAL<a name="line.329"></a>
-<span class="sourceLineNo">330</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.330"></a>
-<span class="sourceLineNo">331</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> @Override<a name="line.335"></a>
-<span class="sourceLineNo">336</span> public Decoder getDecoder(InputStream is) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span> return (compression == null)<a name="line.337"></a>
-<span class="sourceLineNo">338</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.338"></a>
-<span class="sourceLineNo">339</span> }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span> @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> return getDecoder(new ByteBuffInputStream(buf));<a name="line.343"></a>
-<span class="sourceLineNo">344</span> }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span> public Encoder getEncoder(OutputStream os) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.348"></a>
-<span class="sourceLineNo">349</span> : new ByteBufferWriterOutputStream(os);<a name="line.349"></a>
-<span class="sourceLineNo">350</span> if (compression == null) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span> return new EnsureKvEncoder(os);<a name="line.351"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> protected Cell parseCell() throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
+<span class="sourceLineNo">275</span> int length = 0;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> if(tagsLength == 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span> byte[] backingArray = new byte[length];<a name="line.282"></a>
+<span class="sourceLineNo">283</span> int pos = 0;<a name="line.283"></a>
+<span class="sourceLineNo">284</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> // the row<a name="line.287"></a>
+<span class="sourceLineNo">288</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
+<span class="sourceLineNo">289</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
+<span class="sourceLineNo">290</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
+<span class="sourceLineNo">292</span> pos += elemLen;<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span> // family<a name="line.294"></a>
+<span class="sourceLineNo">295</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
+<span class="sourceLineNo">296</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
+<span class="sourceLineNo">297</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> pos += elemLen;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // qualifier<a name="line.301"></a>
+<span class="sourceLineNo">302</span> elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
+<span class="sourceLineNo">303</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
+<span class="sourceLineNo">304</span> pos += elemLen;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span> // timestamp, type and value<a name="line.306"></a>
+<span class="sourceLineNo">307</span> int tsTypeValLen = length - pos;<a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (tagsLength > 0) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
+<span class="sourceLineNo">310</span> }<a name="line.310"></a>
+<span class="sourceLineNo">311</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> pos += tsTypeValLen;<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span> // tags<a name="line.314"></a>
+<span class="sourceLineNo">315</span> if (tagsLength > 0) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> if (compression.tagCompressionContext != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> byte status = (byte)in.read();<a name="line.327"></a>
+<span class="sourceLineNo">328</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
+<span class="sourceLineNo">331</span> int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span> dict.addEntry(to, offset, length);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> return length;<a name="line.334"></a>
+<span class="sourceLineNo">335</span> } else {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
+<span class="sourceLineNo">337</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
+<span class="sourceLineNo">338</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (entry == null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> // now we write the uncompressed value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> return entry.length;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> }<a name="line.345"></a>
+<span class="sourceLineNo">346</span> }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span> private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> if (len < 0 || len > max) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span> }<a name="line.352"></a>
-<span class="sourceLineNo">353</span> return new CompressedKvEncoder(os, compression);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.357"></a>
-<span class="sourceLineNo">358</span> return new BaosAndCompressor();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.362"></a>
-<span class="sourceLineNo">363</span> return this.statelessUncompressor;<a name="line.363"></a>
-<span class="sourceLineNo">364</span> }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>}<a name="line.365"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span> super(out);<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span> @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span> public void write(Cell cell) throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> checkFlushed();<a name="line.361"></a>
+<span class="sourceLineNo">362</span> // Make sure to write tags into WAL<a name="line.362"></a>
+<span class="sourceLineNo">363</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
+<span class="sourceLineNo">364</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span> @Override<a name="line.368"></a>
+<span class="sourceLineNo">369</span> public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> return (compression == null)<a name="line.370"></a>
+<span class="sourceLineNo">371</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return getDecoder(new ByteBuffInputStream(buf));<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> @Override<a name="line.379"></a>
+<span class="sourceLineNo">380</span> public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
+<span class="sourceLineNo">382</span> : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
+<span class="sourceLineNo">383</span> if (compression == null) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> return new EnsureKvEncoder(os);<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span> return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> return new BaosAndCompressor(compression);<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span> return new StatelessUncompressor(compression);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span> public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return new NoneCompressor();<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> return new NoneUncompressor();<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>}<a name="line.404"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/replication/ClusterMarkingEntryFilter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ClusterMarkingEntryFilter.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ClusterMarkingEntryFilter.html
index 10fb290..1928efc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ClusterMarkingEntryFilter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ClusterMarkingEntryFilter.html
@@ -68,14 +68,12 @@
<span class="sourceLineNo">060</span> if (edit != null && !edit.isEmpty()) {<a name="line.60"></a>
<span class="sourceLineNo">061</span> // Mark that the current cluster has the change<a name="line.61"></a>
<span class="sourceLineNo">062</span> logKey.addClusterId(clusterId);<a name="line.62"></a>
-<span class="sourceLineNo">063</span> // We need to set the CC to null else it will be compressed when sent to the sink<a name="line.63"></a>
-<span class="sourceLineNo">064</span> entry.setCompressionContext(null);<a name="line.64"></a>
-<span class="sourceLineNo">065</span> return entry;<a name="line.65"></a>
-<span class="sourceLineNo">066</span> }<a name="line.66"></a>
-<span class="sourceLineNo">067</span> }<a name="line.67"></a>
-<span class="sourceLineNo">068</span> return null;<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">063</span> return entry;<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> return null;<a name="line.66"></a>
+<span class="sourceLineNo">067</span> }<a name="line.67"></a>
+<span class="sourceLineNo">068</span>}<a name="line.68"></a>
[16/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrContext.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrContext.html
index fdc5a8a..62e604e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrContext.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrContext.html
@@ -320,141 +320,143 @@
<span class="sourceLineNo">312</span> this.cellDecoder = codec.getDecoder(this.inputStream);<a name="line.312"></a>
<span class="sourceLineNo">313</span> if (this.hasCompression) {<a name="line.313"></a>
<span class="sourceLineNo">314</span> this.byteStringUncompressor = codec.getByteStringUncompressor();<a name="line.314"></a>
-<span class="sourceLineNo">315</span> }<a name="line.315"></a>
-<span class="sourceLineNo">316</span> }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> @Override<a name="line.318"></a>
-<span class="sourceLineNo">319</span> protected boolean hasCompression() {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> return this.hasCompression;<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span> @Override<a name="line.323"></a>
-<span class="sourceLineNo">324</span> protected boolean hasTagCompression() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> return this.hasTagCompression;<a name="line.325"></a>
-<span class="sourceLineNo">326</span> }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span> @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span> protected boolean readNext(Entry entry) throws IOException {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> while (true) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // OriginalPosition might be < 0 on local fs; if so, it is useless to us.<a name="line.331"></a>
-<span class="sourceLineNo">332</span> long originalPosition = this.inputStream.getPos();<a name="line.332"></a>
-<span class="sourceLineNo">333</span> if (trailerPresent && originalPosition > 0 && originalPosition == this.walEditsStopOffset) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span> if (LOG.isTraceEnabled()) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span> LOG.trace("Reached end of expected edits area at offset " + originalPosition);<a name="line.335"></a>
-<span class="sourceLineNo">336</span> }<a name="line.336"></a>
-<span class="sourceLineNo">337</span> return false;<a name="line.337"></a>
-<span class="sourceLineNo">338</span> }<a name="line.338"></a>
-<span class="sourceLineNo">339</span> WALKey.Builder builder = WALKey.newBuilder();<a name="line.339"></a>
-<span class="sourceLineNo">340</span> long size = 0;<a name="line.340"></a>
-<span class="sourceLineNo">341</span> try {<a name="line.341"></a>
-<span class="sourceLineNo">342</span> long available = -1;<a name="line.342"></a>
-<span class="sourceLineNo">343</span> try {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> int firstByte = this.inputStream.read();<a name="line.344"></a>
-<span class="sourceLineNo">345</span> if (firstByte == -1) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span> throw new EOFException("First byte is negative at offset " + originalPosition);<a name="line.346"></a>
-<span class="sourceLineNo">347</span> }<a name="line.347"></a>
-<span class="sourceLineNo">348</span> size = CodedInputStream.readRawVarint32(firstByte, this.inputStream);<a name="line.348"></a>
-<span class="sourceLineNo">349</span> // available may be < 0 on local fs for instance. If so, can't depend on it.<a name="line.349"></a>
-<span class="sourceLineNo">350</span> available = this.inputStream.available();<a name="line.350"></a>
-<span class="sourceLineNo">351</span> if (available > 0 && available < size) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> throw new EOFException("Available stream not enough for edit, " +<a name="line.352"></a>
-<span class="sourceLineNo">353</span> "inputStream.available()= " + this.inputStream.available() + ", " +<a name="line.353"></a>
-<span class="sourceLineNo">354</span> "entry size= " + size + " at offset = " + this.inputStream.getPos());<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span> ProtobufUtil.mergeFrom(builder, ByteStreams.limit(this.inputStream, size),<a name="line.356"></a>
-<span class="sourceLineNo">357</span> (int)size);<a name="line.357"></a>
-<span class="sourceLineNo">358</span> } catch (InvalidProtocolBufferException ipbe) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> throw (EOFException) new EOFException("Invalid PB, EOF? Ignoring; originalPosition=" +<a name="line.359"></a>
-<span class="sourceLineNo">360</span> originalPosition + ", currentPosition=" + this.inputStream.getPos() +<a name="line.360"></a>
-<span class="sourceLineNo">361</span> ", messageSize=" + size + ", currentAvailable=" + available).initCause(ipbe);<a name="line.361"></a>
-<span class="sourceLineNo">362</span> }<a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (!builder.isInitialized()) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> // TODO: not clear if we should try to recover from corrupt PB that looks semi-legit.<a name="line.364"></a>
-<span class="sourceLineNo">365</span> // If we can get the KV count, we could, theoretically, try to get next record.<a name="line.365"></a>
-<span class="sourceLineNo">366</span> throw new EOFException("Partial PB while reading WAL, " +<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "probably an unexpected EOF, ignoring. current offset=" + this.inputStream.getPos());<a name="line.367"></a>
-<span class="sourceLineNo">368</span> }<a name="line.368"></a>
-<span class="sourceLineNo">369</span> WALKey walKey = builder.build();<a name="line.369"></a>
-<span class="sourceLineNo">370</span> entry.getKey().readFieldsFromPb(walKey, this.byteStringUncompressor);<a name="line.370"></a>
-<span class="sourceLineNo">371</span> if (!walKey.hasFollowingKvCount() || 0 == walKey.getFollowingKvCount()) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> if (LOG.isTraceEnabled()) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span> LOG.trace("WALKey has no KVs that follow it; trying the next one. current offset=" +<a name="line.373"></a>
-<span class="sourceLineNo">374</span> this.inputStream.getPos());<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span> continue;<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span> int expectedCells = walKey.getFollowingKvCount();<a name="line.378"></a>
-<span class="sourceLineNo">379</span> long posBefore = this.inputStream.getPos();<a name="line.379"></a>
-<span class="sourceLineNo">380</span> try {<a name="line.380"></a>
-<span class="sourceLineNo">381</span> int actualCells = entry.getEdit().readFromCells(cellDecoder, expectedCells);<a name="line.381"></a>
-<span class="sourceLineNo">382</span> if (expectedCells != actualCells) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> throw new EOFException("Only read " + actualCells); // other info added in catch<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> } catch (Exception ex) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span> String posAfterStr = "<unknown>";<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> posAfterStr = this.inputStream.getPos() + "";<a name="line.388"></a>
-<span class="sourceLineNo">389</span> } catch (Throwable t) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span> if (LOG.isTraceEnabled()) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span> LOG.trace("Error getting pos for error message - ignoring", t);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span> }<a name="line.393"></a>
-<span class="sourceLineNo">394</span> String message = " while reading " + expectedCells + " WAL KVs; started reading at "<a name="line.394"></a>
-<span class="sourceLineNo">395</span> + posBefore + " and read up to " + posAfterStr;<a name="line.395"></a>
-<span class="sourceLineNo">396</span> IOException realEofEx = extractHiddenEof(ex);<a name="line.396"></a>
-<span class="sourceLineNo">397</span> throw (EOFException) new EOFException("EOF " + message).<a name="line.397"></a>
-<span class="sourceLineNo">398</span> initCause(realEofEx != null ? realEofEx : ex);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> }<a name="line.399"></a>
-<span class="sourceLineNo">400</span> if (trailerPresent && this.inputStream.getPos() > this.walEditsStopOffset) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span> LOG.error("Read WALTrailer while reading WALEdits. wal: " + this.path<a name="line.401"></a>
-<span class="sourceLineNo">402</span> + ", inputStream.getPos(): " + this.inputStream.getPos() + ", walEditsStopOffset: "<a name="line.402"></a>
-<span class="sourceLineNo">403</span> + this.walEditsStopOffset);<a name="line.403"></a>
-<span class="sourceLineNo">404</span> throw new EOFException("Read WALTrailer while reading WALEdits");<a name="line.404"></a>
-<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span> } catch (EOFException eof) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> // If originalPosition is < 0, it is rubbish and we cannot use it (probably local fs)<a name="line.407"></a>
-<span class="sourceLineNo">408</span> if (originalPosition < 0) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span> if (LOG.isTraceEnabled()) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span> LOG.trace("Encountered a malformed edit, but can't seek back to last good position because originalPosition is negative. last offset=" + this.inputStream.getPos(), eof);<a name="line.410"></a>
-<span class="sourceLineNo">411</span> }<a name="line.411"></a>
-<span class="sourceLineNo">412</span> throw eof;<a name="line.412"></a>
-<span class="sourceLineNo">413</span> }<a name="line.413"></a>
-<span class="sourceLineNo">414</span> // Else restore our position to original location in hope that next time through we will<a name="line.414"></a>
-<span class="sourceLineNo">415</span> // read successfully.<a name="line.415"></a>
-<span class="sourceLineNo">416</span> if (LOG.isTraceEnabled()) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span> LOG.trace("Encountered a malformed edit, seeking back to last good position in file, from "+ inputStream.getPos()+" to " + originalPosition, eof);<a name="line.417"></a>
-<span class="sourceLineNo">418</span> }<a name="line.418"></a>
-<span class="sourceLineNo">419</span> seekOnFs(originalPosition);<a name="line.419"></a>
-<span class="sourceLineNo">420</span> return false;<a name="line.420"></a>
-<span class="sourceLineNo">421</span> }<a name="line.421"></a>
-<span class="sourceLineNo">422</span> return true;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span> }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span> private IOException extractHiddenEof(Exception ex) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span> // There are two problems we are dealing with here. Hadoop stream throws generic exception<a name="line.427"></a>
-<span class="sourceLineNo">428</span> // for EOF, not EOFException; and scanner further hides it inside RuntimeException.<a name="line.428"></a>
-<span class="sourceLineNo">429</span> IOException ioEx = null;<a name="line.429"></a>
-<span class="sourceLineNo">430</span> if (ex instanceof EOFException) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span> return (EOFException)ex;<a name="line.431"></a>
-<span class="sourceLineNo">432</span> } else if (ex instanceof IOException) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span> ioEx = (IOException)ex;<a name="line.433"></a>
-<span class="sourceLineNo">434</span> } else if (ex instanceof RuntimeException<a name="line.434"></a>
-<span class="sourceLineNo">435</span> && ex.getCause() != null && ex.getCause() instanceof IOException) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> ioEx = (IOException)ex.getCause();<a name="line.436"></a>
-<span class="sourceLineNo">437</span> }<a name="line.437"></a>
-<span class="sourceLineNo">438</span> if (ioEx != null) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span> if (ioEx.getMessage().contains("EOF")) return ioEx;<a name="line.439"></a>
-<span class="sourceLineNo">440</span> return null;<a name="line.440"></a>
-<span class="sourceLineNo">441</span> }<a name="line.441"></a>
-<span class="sourceLineNo">442</span> return null;<a name="line.442"></a>
-<span class="sourceLineNo">443</span> }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span> @Override<a name="line.445"></a>
-<span class="sourceLineNo">446</span> protected void seekOnFs(long pos) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span> this.inputStream.seek(pos);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>}<a name="line.449"></a>
+<span class="sourceLineNo">315</span> } else {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> this.byteStringUncompressor = WALCellCodec.getNoneUncompressor();<a name="line.316"></a>
+<span class="sourceLineNo">317</span> }<a name="line.317"></a>
+<span class="sourceLineNo">318</span> }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> @Override<a name="line.320"></a>
+<span class="sourceLineNo">321</span> protected boolean hasCompression() {<a name="line.321"></a>
+<span class="sourceLineNo">322</span> return this.hasCompression;<a name="line.322"></a>
+<span class="sourceLineNo">323</span> }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span> @Override<a name="line.325"></a>
+<span class="sourceLineNo">326</span> protected boolean hasTagCompression() {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> return this.hasTagCompression;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> @Override<a name="line.330"></a>
+<span class="sourceLineNo">331</span> protected boolean readNext(Entry entry) throws IOException {<a name="line.331"></a>
+<span class="sourceLineNo">332</span> while (true) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> // OriginalPosition might be < 0 on local fs; if so, it is useless to us.<a name="line.333"></a>
+<span class="sourceLineNo">334</span> long originalPosition = this.inputStream.getPos();<a name="line.334"></a>
+<span class="sourceLineNo">335</span> if (trailerPresent && originalPosition > 0 && originalPosition == this.walEditsStopOffset) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> if (LOG.isTraceEnabled()) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span> LOG.trace("Reached end of expected edits area at offset " + originalPosition);<a name="line.337"></a>
+<span class="sourceLineNo">338</span> }<a name="line.338"></a>
+<span class="sourceLineNo">339</span> return false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span> }<a name="line.340"></a>
+<span class="sourceLineNo">341</span> WALKey.Builder builder = WALKey.newBuilder();<a name="line.341"></a>
+<span class="sourceLineNo">342</span> long size = 0;<a name="line.342"></a>
+<span class="sourceLineNo">343</span> try {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> long available = -1;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> try {<a name="line.345"></a>
+<span class="sourceLineNo">346</span> int firstByte = this.inputStream.read();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> if (firstByte == -1) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> throw new EOFException("First byte is negative at offset " + originalPosition);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> }<a name="line.349"></a>
+<span class="sourceLineNo">350</span> size = CodedInputStream.readRawVarint32(firstByte, this.inputStream);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> // available may be < 0 on local fs for instance. If so, can't depend on it.<a name="line.351"></a>
+<span class="sourceLineNo">352</span> available = this.inputStream.available();<a name="line.352"></a>
+<span class="sourceLineNo">353</span> if (available > 0 && available < size) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> throw new EOFException("Available stream not enough for edit, " +<a name="line.354"></a>
+<span class="sourceLineNo">355</span> "inputStream.available()= " + this.inputStream.available() + ", " +<a name="line.355"></a>
+<span class="sourceLineNo">356</span> "entry size= " + size + " at offset = " + this.inputStream.getPos());<a name="line.356"></a>
+<span class="sourceLineNo">357</span> }<a name="line.357"></a>
+<span class="sourceLineNo">358</span> ProtobufUtil.mergeFrom(builder, ByteStreams.limit(this.inputStream, size),<a name="line.358"></a>
+<span class="sourceLineNo">359</span> (int)size);<a name="line.359"></a>
+<span class="sourceLineNo">360</span> } catch (InvalidProtocolBufferException ipbe) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> throw (EOFException) new EOFException("Invalid PB, EOF? Ignoring; originalPosition=" +<a name="line.361"></a>
+<span class="sourceLineNo">362</span> originalPosition + ", currentPosition=" + this.inputStream.getPos() +<a name="line.362"></a>
+<span class="sourceLineNo">363</span> ", messageSize=" + size + ", currentAvailable=" + available).initCause(ipbe);<a name="line.363"></a>
+<span class="sourceLineNo">364</span> }<a name="line.364"></a>
+<span class="sourceLineNo">365</span> if (!builder.isInitialized()) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> // TODO: not clear if we should try to recover from corrupt PB that looks semi-legit.<a name="line.366"></a>
+<span class="sourceLineNo">367</span> // If we can get the KV count, we could, theoretically, try to get next record.<a name="line.367"></a>
+<span class="sourceLineNo">368</span> throw new EOFException("Partial PB while reading WAL, " +<a name="line.368"></a>
+<span class="sourceLineNo">369</span> "probably an unexpected EOF, ignoring. current offset=" + this.inputStream.getPos());<a name="line.369"></a>
+<span class="sourceLineNo">370</span> }<a name="line.370"></a>
+<span class="sourceLineNo">371</span> WALKey walKey = builder.build();<a name="line.371"></a>
+<span class="sourceLineNo">372</span> entry.getKey().readFieldsFromPb(walKey, this.byteStringUncompressor);<a name="line.372"></a>
+<span class="sourceLineNo">373</span> if (!walKey.hasFollowingKvCount() || 0 == walKey.getFollowingKvCount()) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span> if (LOG.isTraceEnabled()) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span> LOG.trace("WALKey has no KVs that follow it; trying the next one. current offset=" +<a name="line.375"></a>
+<span class="sourceLineNo">376</span> this.inputStream.getPos());<a name="line.376"></a>
+<span class="sourceLineNo">377</span> }<a name="line.377"></a>
+<span class="sourceLineNo">378</span> continue;<a name="line.378"></a>
+<span class="sourceLineNo">379</span> }<a name="line.379"></a>
+<span class="sourceLineNo">380</span> int expectedCells = walKey.getFollowingKvCount();<a name="line.380"></a>
+<span class="sourceLineNo">381</span> long posBefore = this.inputStream.getPos();<a name="line.381"></a>
+<span class="sourceLineNo">382</span> try {<a name="line.382"></a>
+<span class="sourceLineNo">383</span> int actualCells = entry.getEdit().readFromCells(cellDecoder, expectedCells);<a name="line.383"></a>
+<span class="sourceLineNo">384</span> if (expectedCells != actualCells) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span> throw new EOFException("Only read " + actualCells); // other info added in catch<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> } catch (Exception ex) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span> String posAfterStr = "<unknown>";<a name="line.388"></a>
+<span class="sourceLineNo">389</span> try {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> posAfterStr = this.inputStream.getPos() + "";<a name="line.390"></a>
+<span class="sourceLineNo">391</span> } catch (Throwable t) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> if (LOG.isTraceEnabled()) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> LOG.trace("Error getting pos for error message - ignoring", t);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span> String message = " while reading " + expectedCells + " WAL KVs; started reading at "<a name="line.396"></a>
+<span class="sourceLineNo">397</span> + posBefore + " and read up to " + posAfterStr;<a name="line.397"></a>
+<span class="sourceLineNo">398</span> IOException realEofEx = extractHiddenEof(ex);<a name="line.398"></a>
+<span class="sourceLineNo">399</span> throw (EOFException) new EOFException("EOF " + message).<a name="line.399"></a>
+<span class="sourceLineNo">400</span> initCause(realEofEx != null ? realEofEx : ex);<a name="line.400"></a>
+<span class="sourceLineNo">401</span> }<a name="line.401"></a>
+<span class="sourceLineNo">402</span> if (trailerPresent && this.inputStream.getPos() > this.walEditsStopOffset) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span> LOG.error("Read WALTrailer while reading WALEdits. wal: " + this.path<a name="line.403"></a>
+<span class="sourceLineNo">404</span> + ", inputStream.getPos(): " + this.inputStream.getPos() + ", walEditsStopOffset: "<a name="line.404"></a>
+<span class="sourceLineNo">405</span> + this.walEditsStopOffset);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> throw new EOFException("Read WALTrailer while reading WALEdits");<a name="line.406"></a>
+<span class="sourceLineNo">407</span> }<a name="line.407"></a>
+<span class="sourceLineNo">408</span> } catch (EOFException eof) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span> // If originalPosition is < 0, it is rubbish and we cannot use it (probably local fs)<a name="line.409"></a>
+<span class="sourceLineNo">410</span> if (originalPosition < 0) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> if (LOG.isTraceEnabled()) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span> LOG.trace("Encountered a malformed edit, but can't seek back to last good position because originalPosition is negative. last offset=" + this.inputStream.getPos(), eof);<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span> throw eof;<a name="line.414"></a>
+<span class="sourceLineNo">415</span> }<a name="line.415"></a>
+<span class="sourceLineNo">416</span> // Else restore our position to original location in hope that next time through we will<a name="line.416"></a>
+<span class="sourceLineNo">417</span> // read successfully.<a name="line.417"></a>
+<span class="sourceLineNo">418</span> if (LOG.isTraceEnabled()) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span> LOG.trace("Encountered a malformed edit, seeking back to last good position in file, from "+ inputStream.getPos()+" to " + originalPosition, eof);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span> seekOnFs(originalPosition);<a name="line.421"></a>
+<span class="sourceLineNo">422</span> return false;<a name="line.422"></a>
+<span class="sourceLineNo">423</span> }<a name="line.423"></a>
+<span class="sourceLineNo">424</span> return true;<a name="line.424"></a>
+<span class="sourceLineNo">425</span> }<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> private IOException extractHiddenEof(Exception ex) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> // There are two problems we are dealing with here. Hadoop stream throws generic exception<a name="line.429"></a>
+<span class="sourceLineNo">430</span> // for EOF, not EOFException; and scanner further hides it inside RuntimeException.<a name="line.430"></a>
+<span class="sourceLineNo">431</span> IOException ioEx = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span> if (ex instanceof EOFException) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span> return (EOFException)ex;<a name="line.433"></a>
+<span class="sourceLineNo">434</span> } else if (ex instanceof IOException) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span> ioEx = (IOException)ex;<a name="line.435"></a>
+<span class="sourceLineNo">436</span> } else if (ex instanceof RuntimeException<a name="line.436"></a>
+<span class="sourceLineNo">437</span> && ex.getCause() != null && ex.getCause() instanceof IOException) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span> ioEx = (IOException)ex.getCause();<a name="line.438"></a>
+<span class="sourceLineNo">439</span> }<a name="line.439"></a>
+<span class="sourceLineNo">440</span> if (ioEx != null) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span> if (ioEx.getMessage().contains("EOF")) return ioEx;<a name="line.441"></a>
+<span class="sourceLineNo">442</span> return null;<a name="line.442"></a>
+<span class="sourceLineNo">443</span> }<a name="line.443"></a>
+<span class="sourceLineNo">444</span> return null;<a name="line.444"></a>
+<span class="sourceLineNo">445</span> }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span> protected void seekOnFs(long pos) throws IOException {<a name="line.448"></a>
+<span class="sourceLineNo">449</span> this.inputStream.seek(pos);<a name="line.449"></a>
+<span class="sourceLineNo">450</span> }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>}<a name="line.451"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html
index fdc5a8a..62e604e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html
@@ -320,141 +320,143 @@
<span class="sourceLineNo">312</span> this.cellDecoder = codec.getDecoder(this.inputStream);<a name="line.312"></a>
<span class="sourceLineNo">313</span> if (this.hasCompression) {<a name="line.313"></a>
<span class="sourceLineNo">314</span> this.byteStringUncompressor = codec.getByteStringUncompressor();<a name="line.314"></a>
-<span class="sourceLineNo">315</span> }<a name="line.315"></a>
-<span class="sourceLineNo">316</span> }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> @Override<a name="line.318"></a>
-<span class="sourceLineNo">319</span> protected boolean hasCompression() {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> return this.hasCompression;<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span> @Override<a name="line.323"></a>
-<span class="sourceLineNo">324</span> protected boolean hasTagCompression() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> return this.hasTagCompression;<a name="line.325"></a>
-<span class="sourceLineNo">326</span> }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span> @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span> protected boolean readNext(Entry entry) throws IOException {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> while (true) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // OriginalPosition might be < 0 on local fs; if so, it is useless to us.<a name="line.331"></a>
-<span class="sourceLineNo">332</span> long originalPosition = this.inputStream.getPos();<a name="line.332"></a>
-<span class="sourceLineNo">333</span> if (trailerPresent && originalPosition > 0 && originalPosition == this.walEditsStopOffset) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span> if (LOG.isTraceEnabled()) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span> LOG.trace("Reached end of expected edits area at offset " + originalPosition);<a name="line.335"></a>
-<span class="sourceLineNo">336</span> }<a name="line.336"></a>
-<span class="sourceLineNo">337</span> return false;<a name="line.337"></a>
-<span class="sourceLineNo">338</span> }<a name="line.338"></a>
-<span class="sourceLineNo">339</span> WALKey.Builder builder = WALKey.newBuilder();<a name="line.339"></a>
-<span class="sourceLineNo">340</span> long size = 0;<a name="line.340"></a>
-<span class="sourceLineNo">341</span> try {<a name="line.341"></a>
-<span class="sourceLineNo">342</span> long available = -1;<a name="line.342"></a>
-<span class="sourceLineNo">343</span> try {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> int firstByte = this.inputStream.read();<a name="line.344"></a>
-<span class="sourceLineNo">345</span> if (firstByte == -1) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span> throw new EOFException("First byte is negative at offset " + originalPosition);<a name="line.346"></a>
-<span class="sourceLineNo">347</span> }<a name="line.347"></a>
-<span class="sourceLineNo">348</span> size = CodedInputStream.readRawVarint32(firstByte, this.inputStream);<a name="line.348"></a>
-<span class="sourceLineNo">349</span> // available may be < 0 on local fs for instance. If so, can't depend on it.<a name="line.349"></a>
-<span class="sourceLineNo">350</span> available = this.inputStream.available();<a name="line.350"></a>
-<span class="sourceLineNo">351</span> if (available > 0 && available < size) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> throw new EOFException("Available stream not enough for edit, " +<a name="line.352"></a>
-<span class="sourceLineNo">353</span> "inputStream.available()= " + this.inputStream.available() + ", " +<a name="line.353"></a>
-<span class="sourceLineNo">354</span> "entry size= " + size + " at offset = " + this.inputStream.getPos());<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span> ProtobufUtil.mergeFrom(builder, ByteStreams.limit(this.inputStream, size),<a name="line.356"></a>
-<span class="sourceLineNo">357</span> (int)size);<a name="line.357"></a>
-<span class="sourceLineNo">358</span> } catch (InvalidProtocolBufferException ipbe) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> throw (EOFException) new EOFException("Invalid PB, EOF? Ignoring; originalPosition=" +<a name="line.359"></a>
-<span class="sourceLineNo">360</span> originalPosition + ", currentPosition=" + this.inputStream.getPos() +<a name="line.360"></a>
-<span class="sourceLineNo">361</span> ", messageSize=" + size + ", currentAvailable=" + available).initCause(ipbe);<a name="line.361"></a>
-<span class="sourceLineNo">362</span> }<a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (!builder.isInitialized()) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> // TODO: not clear if we should try to recover from corrupt PB that looks semi-legit.<a name="line.364"></a>
-<span class="sourceLineNo">365</span> // If we can get the KV count, we could, theoretically, try to get next record.<a name="line.365"></a>
-<span class="sourceLineNo">366</span> throw new EOFException("Partial PB while reading WAL, " +<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "probably an unexpected EOF, ignoring. current offset=" + this.inputStream.getPos());<a name="line.367"></a>
-<span class="sourceLineNo">368</span> }<a name="line.368"></a>
-<span class="sourceLineNo">369</span> WALKey walKey = builder.build();<a name="line.369"></a>
-<span class="sourceLineNo">370</span> entry.getKey().readFieldsFromPb(walKey, this.byteStringUncompressor);<a name="line.370"></a>
-<span class="sourceLineNo">371</span> if (!walKey.hasFollowingKvCount() || 0 == walKey.getFollowingKvCount()) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> if (LOG.isTraceEnabled()) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span> LOG.trace("WALKey has no KVs that follow it; trying the next one. current offset=" +<a name="line.373"></a>
-<span class="sourceLineNo">374</span> this.inputStream.getPos());<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span> continue;<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span> int expectedCells = walKey.getFollowingKvCount();<a name="line.378"></a>
-<span class="sourceLineNo">379</span> long posBefore = this.inputStream.getPos();<a name="line.379"></a>
-<span class="sourceLineNo">380</span> try {<a name="line.380"></a>
-<span class="sourceLineNo">381</span> int actualCells = entry.getEdit().readFromCells(cellDecoder, expectedCells);<a name="line.381"></a>
-<span class="sourceLineNo">382</span> if (expectedCells != actualCells) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> throw new EOFException("Only read " + actualCells); // other info added in catch<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> } catch (Exception ex) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span> String posAfterStr = "<unknown>";<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> posAfterStr = this.inputStream.getPos() + "";<a name="line.388"></a>
-<span class="sourceLineNo">389</span> } catch (Throwable t) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span> if (LOG.isTraceEnabled()) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span> LOG.trace("Error getting pos for error message - ignoring", t);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span> }<a name="line.393"></a>
-<span class="sourceLineNo">394</span> String message = " while reading " + expectedCells + " WAL KVs; started reading at "<a name="line.394"></a>
-<span class="sourceLineNo">395</span> + posBefore + " and read up to " + posAfterStr;<a name="line.395"></a>
-<span class="sourceLineNo">396</span> IOException realEofEx = extractHiddenEof(ex);<a name="line.396"></a>
-<span class="sourceLineNo">397</span> throw (EOFException) new EOFException("EOF " + message).<a name="line.397"></a>
-<span class="sourceLineNo">398</span> initCause(realEofEx != null ? realEofEx : ex);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> }<a name="line.399"></a>
-<span class="sourceLineNo">400</span> if (trailerPresent && this.inputStream.getPos() > this.walEditsStopOffset) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span> LOG.error("Read WALTrailer while reading WALEdits. wal: " + this.path<a name="line.401"></a>
-<span class="sourceLineNo">402</span> + ", inputStream.getPos(): " + this.inputStream.getPos() + ", walEditsStopOffset: "<a name="line.402"></a>
-<span class="sourceLineNo">403</span> + this.walEditsStopOffset);<a name="line.403"></a>
-<span class="sourceLineNo">404</span> throw new EOFException("Read WALTrailer while reading WALEdits");<a name="line.404"></a>
-<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span> } catch (EOFException eof) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> // If originalPosition is < 0, it is rubbish and we cannot use it (probably local fs)<a name="line.407"></a>
-<span class="sourceLineNo">408</span> if (originalPosition < 0) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span> if (LOG.isTraceEnabled()) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span> LOG.trace("Encountered a malformed edit, but can't seek back to last good position because originalPosition is negative. last offset=" + this.inputStream.getPos(), eof);<a name="line.410"></a>
-<span class="sourceLineNo">411</span> }<a name="line.411"></a>
-<span class="sourceLineNo">412</span> throw eof;<a name="line.412"></a>
-<span class="sourceLineNo">413</span> }<a name="line.413"></a>
-<span class="sourceLineNo">414</span> // Else restore our position to original location in hope that next time through we will<a name="line.414"></a>
-<span class="sourceLineNo">415</span> // read successfully.<a name="line.415"></a>
-<span class="sourceLineNo">416</span> if (LOG.isTraceEnabled()) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span> LOG.trace("Encountered a malformed edit, seeking back to last good position in file, from "+ inputStream.getPos()+" to " + originalPosition, eof);<a name="line.417"></a>
-<span class="sourceLineNo">418</span> }<a name="line.418"></a>
-<span class="sourceLineNo">419</span> seekOnFs(originalPosition);<a name="line.419"></a>
-<span class="sourceLineNo">420</span> return false;<a name="line.420"></a>
-<span class="sourceLineNo">421</span> }<a name="line.421"></a>
-<span class="sourceLineNo">422</span> return true;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span> }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span> private IOException extractHiddenEof(Exception ex) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span> // There are two problems we are dealing with here. Hadoop stream throws generic exception<a name="line.427"></a>
-<span class="sourceLineNo">428</span> // for EOF, not EOFException; and scanner further hides it inside RuntimeException.<a name="line.428"></a>
-<span class="sourceLineNo">429</span> IOException ioEx = null;<a name="line.429"></a>
-<span class="sourceLineNo">430</span> if (ex instanceof EOFException) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span> return (EOFException)ex;<a name="line.431"></a>
-<span class="sourceLineNo">432</span> } else if (ex instanceof IOException) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span> ioEx = (IOException)ex;<a name="line.433"></a>
-<span class="sourceLineNo">434</span> } else if (ex instanceof RuntimeException<a name="line.434"></a>
-<span class="sourceLineNo">435</span> && ex.getCause() != null && ex.getCause() instanceof IOException) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> ioEx = (IOException)ex.getCause();<a name="line.436"></a>
-<span class="sourceLineNo">437</span> }<a name="line.437"></a>
-<span class="sourceLineNo">438</span> if (ioEx != null) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span> if (ioEx.getMessage().contains("EOF")) return ioEx;<a name="line.439"></a>
-<span class="sourceLineNo">440</span> return null;<a name="line.440"></a>
-<span class="sourceLineNo">441</span> }<a name="line.441"></a>
-<span class="sourceLineNo">442</span> return null;<a name="line.442"></a>
-<span class="sourceLineNo">443</span> }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span> @Override<a name="line.445"></a>
-<span class="sourceLineNo">446</span> protected void seekOnFs(long pos) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span> this.inputStream.seek(pos);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>}<a name="line.449"></a>
+<span class="sourceLineNo">315</span> } else {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> this.byteStringUncompressor = WALCellCodec.getNoneUncompressor();<a name="line.316"></a>
+<span class="sourceLineNo">317</span> }<a name="line.317"></a>
+<span class="sourceLineNo">318</span> }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> @Override<a name="line.320"></a>
+<span class="sourceLineNo">321</span> protected boolean hasCompression() {<a name="line.321"></a>
+<span class="sourceLineNo">322</span> return this.hasCompression;<a name="line.322"></a>
+<span class="sourceLineNo">323</span> }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span> @Override<a name="line.325"></a>
+<span class="sourceLineNo">326</span> protected boolean hasTagCompression() {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> return this.hasTagCompression;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> @Override<a name="line.330"></a>
+<span class="sourceLineNo">331</span> protected boolean readNext(Entry entry) throws IOException {<a name="line.331"></a>
+<span class="sourceLineNo">332</span> while (true) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> // OriginalPosition might be < 0 on local fs; if so, it is useless to us.<a name="line.333"></a>
+<span class="sourceLineNo">334</span> long originalPosition = this.inputStream.getPos();<a name="line.334"></a>
+<span class="sourceLineNo">335</span> if (trailerPresent && originalPosition > 0 && originalPosition == this.walEditsStopOffset) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> if (LOG.isTraceEnabled()) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span> LOG.trace("Reached end of expected edits area at offset " + originalPosition);<a name="line.337"></a>
+<span class="sourceLineNo">338</span> }<a name="line.338"></a>
+<span class="sourceLineNo">339</span> return false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span> }<a name="line.340"></a>
+<span class="sourceLineNo">341</span> WALKey.Builder builder = WALKey.newBuilder();<a name="line.341"></a>
+<span class="sourceLineNo">342</span> long size = 0;<a name="line.342"></a>
+<span class="sourceLineNo">343</span> try {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> long available = -1;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> try {<a name="line.345"></a>
+<span class="sourceLineNo">346</span> int firstByte = this.inputStream.read();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> if (firstByte == -1) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> throw new EOFException("First byte is negative at offset " + originalPosition);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> }<a name="line.349"></a>
+<span class="sourceLineNo">350</span> size = CodedInputStream.readRawVarint32(firstByte, this.inputStream);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> // available may be < 0 on local fs for instance. If so, can't depend on it.<a name="line.351"></a>
+<span class="sourceLineNo">352</span> available = this.inputStream.available();<a name="line.352"></a>
+<span class="sourceLineNo">353</span> if (available > 0 && available < size) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> throw new EOFException("Available stream not enough for edit, " +<a name="line.354"></a>
+<span class="sourceLineNo">355</span> "inputStream.available()= " + this.inputStream.available() + ", " +<a name="line.355"></a>
+<span class="sourceLineNo">356</span> "entry size= " + size + " at offset = " + this.inputStream.getPos());<a name="line.356"></a>
+<span class="sourceLineNo">357</span> }<a name="line.357"></a>
+<span class="sourceLineNo">358</span> ProtobufUtil.mergeFrom(builder, ByteStreams.limit(this.inputStream, size),<a name="line.358"></a>
+<span class="sourceLineNo">359</span> (int)size);<a name="line.359"></a>
+<span class="sourceLineNo">360</span> } catch (InvalidProtocolBufferException ipbe) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> throw (EOFException) new EOFException("Invalid PB, EOF? Ignoring; originalPosition=" +<a name="line.361"></a>
+<span class="sourceLineNo">362</span> originalPosition + ", currentPosition=" + this.inputStream.getPos() +<a name="line.362"></a>
+<span class="sourceLineNo">363</span> ", messageSize=" + size + ", currentAvailable=" + available).initCause(ipbe);<a name="line.363"></a>
+<span class="sourceLineNo">364</span> }<a name="line.364"></a>
+<span class="sourceLineNo">365</span> if (!builder.isInitialized()) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> // TODO: not clear if we should try to recover from corrupt PB that looks semi-legit.<a name="line.366"></a>
+<span class="sourceLineNo">367</span> // If we can get the KV count, we could, theoretically, try to get next record.<a name="line.367"></a>
+<span class="sourceLineNo">368</span> throw new EOFException("Partial PB while reading WAL, " +<a name="line.368"></a>
+<span class="sourceLineNo">369</span> "probably an unexpected EOF, ignoring. current offset=" + this.inputStream.getPos());<a name="line.369"></a>
+<span class="sourceLineNo">370</span> }<a name="line.370"></a>
+<span class="sourceLineNo">371</span> WALKey walKey = builder.build();<a name="line.371"></a>
+<span class="sourceLineNo">372</span> entry.getKey().readFieldsFromPb(walKey, this.byteStringUncompressor);<a name="line.372"></a>
+<span class="sourceLineNo">373</span> if (!walKey.hasFollowingKvCount() || 0 == walKey.getFollowingKvCount()) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span> if (LOG.isTraceEnabled()) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span> LOG.trace("WALKey has no KVs that follow it; trying the next one. current offset=" +<a name="line.375"></a>
+<span class="sourceLineNo">376</span> this.inputStream.getPos());<a name="line.376"></a>
+<span class="sourceLineNo">377</span> }<a name="line.377"></a>
+<span class="sourceLineNo">378</span> continue;<a name="line.378"></a>
+<span class="sourceLineNo">379</span> }<a name="line.379"></a>
+<span class="sourceLineNo">380</span> int expectedCells = walKey.getFollowingKvCount();<a name="line.380"></a>
+<span class="sourceLineNo">381</span> long posBefore = this.inputStream.getPos();<a name="line.381"></a>
+<span class="sourceLineNo">382</span> try {<a name="line.382"></a>
+<span class="sourceLineNo">383</span> int actualCells = entry.getEdit().readFromCells(cellDecoder, expectedCells);<a name="line.383"></a>
+<span class="sourceLineNo">384</span> if (expectedCells != actualCells) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span> throw new EOFException("Only read " + actualCells); // other info added in catch<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> } catch (Exception ex) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span> String posAfterStr = "<unknown>";<a name="line.388"></a>
+<span class="sourceLineNo">389</span> try {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> posAfterStr = this.inputStream.getPos() + "";<a name="line.390"></a>
+<span class="sourceLineNo">391</span> } catch (Throwable t) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> if (LOG.isTraceEnabled()) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> LOG.trace("Error getting pos for error message - ignoring", t);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span> String message = " while reading " + expectedCells + " WAL KVs; started reading at "<a name="line.396"></a>
+<span class="sourceLineNo">397</span> + posBefore + " and read up to " + posAfterStr;<a name="line.397"></a>
+<span class="sourceLineNo">398</span> IOException realEofEx = extractHiddenEof(ex);<a name="line.398"></a>
+<span class="sourceLineNo">399</span> throw (EOFException) new EOFException("EOF " + message).<a name="line.399"></a>
+<span class="sourceLineNo">400</span> initCause(realEofEx != null ? realEofEx : ex);<a name="line.400"></a>
+<span class="sourceLineNo">401</span> }<a name="line.401"></a>
+<span class="sourceLineNo">402</span> if (trailerPresent && this.inputStream.getPos() > this.walEditsStopOffset) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span> LOG.error("Read WALTrailer while reading WALEdits. wal: " + this.path<a name="line.403"></a>
+<span class="sourceLineNo">404</span> + ", inputStream.getPos(): " + this.inputStream.getPos() + ", walEditsStopOffset: "<a name="line.404"></a>
+<span class="sourceLineNo">405</span> + this.walEditsStopOffset);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> throw new EOFException("Read WALTrailer while reading WALEdits");<a name="line.406"></a>
+<span class="sourceLineNo">407</span> }<a name="line.407"></a>
+<span class="sourceLineNo">408</span> } catch (EOFException eof) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span> // If originalPosition is < 0, it is rubbish and we cannot use it (probably local fs)<a name="line.409"></a>
+<span class="sourceLineNo">410</span> if (originalPosition < 0) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> if (LOG.isTraceEnabled()) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span> LOG.trace("Encountered a malformed edit, but can't seek back to last good position because originalPosition is negative. last offset=" + this.inputStream.getPos(), eof);<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span> throw eof;<a name="line.414"></a>
+<span class="sourceLineNo">415</span> }<a name="line.415"></a>
+<span class="sourceLineNo">416</span> // Else restore our position to original location in hope that next time through we will<a name="line.416"></a>
+<span class="sourceLineNo">417</span> // read successfully.<a name="line.417"></a>
+<span class="sourceLineNo">418</span> if (LOG.isTraceEnabled()) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span> LOG.trace("Encountered a malformed edit, seeking back to last good position in file, from "+ inputStream.getPos()+" to " + originalPosition, eof);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span> seekOnFs(originalPosition);<a name="line.421"></a>
+<span class="sourceLineNo">422</span> return false;<a name="line.422"></a>
+<span class="sourceLineNo">423</span> }<a name="line.423"></a>
+<span class="sourceLineNo">424</span> return true;<a name="line.424"></a>
+<span class="sourceLineNo">425</span> }<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> private IOException extractHiddenEof(Exception ex) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> // There are two problems we are dealing with here. Hadoop stream throws generic exception<a name="line.429"></a>
+<span class="sourceLineNo">430</span> // for EOF, not EOFException; and scanner further hides it inside RuntimeException.<a name="line.430"></a>
+<span class="sourceLineNo">431</span> IOException ioEx = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span> if (ex instanceof EOFException) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span> return (EOFException)ex;<a name="line.433"></a>
+<span class="sourceLineNo">434</span> } else if (ex instanceof IOException) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span> ioEx = (IOException)ex;<a name="line.435"></a>
+<span class="sourceLineNo">436</span> } else if (ex instanceof RuntimeException<a name="line.436"></a>
+<span class="sourceLineNo">437</span> && ex.getCause() != null && ex.getCause() instanceof IOException) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span> ioEx = (IOException)ex.getCause();<a name="line.438"></a>
+<span class="sourceLineNo">439</span> }<a name="line.439"></a>
+<span class="sourceLineNo">440</span> if (ioEx != null) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span> if (ioEx.getMessage().contains("EOF")) return ioEx;<a name="line.441"></a>
+<span class="sourceLineNo">442</span> return null;<a name="line.442"></a>
+<span class="sourceLineNo">443</span> }<a name="line.443"></a>
+<span class="sourceLineNo">444</span> return null;<a name="line.444"></a>
+<span class="sourceLineNo">445</span> }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span> protected void seekOnFs(long pos) throws IOException {<a name="line.448"></a>
+<span class="sourceLineNo">449</span> this.inputStream.seek(pos);<a name="line.449"></a>
+<span class="sourceLineNo">450</span> }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>}<a name="line.451"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html
index fdc5a8a..62e604e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html
@@ -320,141 +320,143 @@
<span class="sourceLineNo">312</span> this.cellDecoder = codec.getDecoder(this.inputStream);<a name="line.312"></a>
<span class="sourceLineNo">313</span> if (this.hasCompression) {<a name="line.313"></a>
<span class="sourceLineNo">314</span> this.byteStringUncompressor = codec.getByteStringUncompressor();<a name="line.314"></a>
-<span class="sourceLineNo">315</span> }<a name="line.315"></a>
-<span class="sourceLineNo">316</span> }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> @Override<a name="line.318"></a>
-<span class="sourceLineNo">319</span> protected boolean hasCompression() {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> return this.hasCompression;<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span> @Override<a name="line.323"></a>
-<span class="sourceLineNo">324</span> protected boolean hasTagCompression() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> return this.hasTagCompression;<a name="line.325"></a>
-<span class="sourceLineNo">326</span> }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span> @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span> protected boolean readNext(Entry entry) throws IOException {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> while (true) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // OriginalPosition might be < 0 on local fs; if so, it is useless to us.<a name="line.331"></a>
-<span class="sourceLineNo">332</span> long originalPosition = this.inputStream.getPos();<a name="line.332"></a>
-<span class="sourceLineNo">333</span> if (trailerPresent && originalPosition > 0 && originalPosition == this.walEditsStopOffset) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span> if (LOG.isTraceEnabled()) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span> LOG.trace("Reached end of expected edits area at offset " + originalPosition);<a name="line.335"></a>
-<span class="sourceLineNo">336</span> }<a name="line.336"></a>
-<span class="sourceLineNo">337</span> return false;<a name="line.337"></a>
-<span class="sourceLineNo">338</span> }<a name="line.338"></a>
-<span class="sourceLineNo">339</span> WALKey.Builder builder = WALKey.newBuilder();<a name="line.339"></a>
-<span class="sourceLineNo">340</span> long size = 0;<a name="line.340"></a>
-<span class="sourceLineNo">341</span> try {<a name="line.341"></a>
-<span class="sourceLineNo">342</span> long available = -1;<a name="line.342"></a>
-<span class="sourceLineNo">343</span> try {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> int firstByte = this.inputStream.read();<a name="line.344"></a>
-<span class="sourceLineNo">345</span> if (firstByte == -1) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span> throw new EOFException("First byte is negative at offset " + originalPosition);<a name="line.346"></a>
-<span class="sourceLineNo">347</span> }<a name="line.347"></a>
-<span class="sourceLineNo">348</span> size = CodedInputStream.readRawVarint32(firstByte, this.inputStream);<a name="line.348"></a>
-<span class="sourceLineNo">349</span> // available may be < 0 on local fs for instance. If so, can't depend on it.<a name="line.349"></a>
-<span class="sourceLineNo">350</span> available = this.inputStream.available();<a name="line.350"></a>
-<span class="sourceLineNo">351</span> if (available > 0 && available < size) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> throw new EOFException("Available stream not enough for edit, " +<a name="line.352"></a>
-<span class="sourceLineNo">353</span> "inputStream.available()= " + this.inputStream.available() + ", " +<a name="line.353"></a>
-<span class="sourceLineNo">354</span> "entry size= " + size + " at offset = " + this.inputStream.getPos());<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span> ProtobufUtil.mergeFrom(builder, ByteStreams.limit(this.inputStream, size),<a name="line.356"></a>
-<span class="sourceLineNo">357</span> (int)size);<a name="line.357"></a>
-<span class="sourceLineNo">358</span> } catch (InvalidProtocolBufferException ipbe) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> throw (EOFException) new EOFException("Invalid PB, EOF? Ignoring; originalPosition=" +<a name="line.359"></a>
-<span class="sourceLineNo">360</span> originalPosition + ", currentPosition=" + this.inputStream.getPos() +<a name="line.360"></a>
-<span class="sourceLineNo">361</span> ", messageSize=" + size + ", currentAvailable=" + available).initCause(ipbe);<a name="line.361"></a>
-<span class="sourceLineNo">362</span> }<a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (!builder.isInitialized()) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> // TODO: not clear if we should try to recover from corrupt PB that looks semi-legit.<a name="line.364"></a>
-<span class="sourceLineNo">365</span> // If we can get the KV count, we could, theoretically, try to get next record.<a name="line.365"></a>
-<span class="sourceLineNo">366</span> throw new EOFException("Partial PB while reading WAL, " +<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "probably an unexpected EOF, ignoring. current offset=" + this.inputStream.getPos());<a name="line.367"></a>
-<span class="sourceLineNo">368</span> }<a name="line.368"></a>
-<span class="sourceLineNo">369</span> WALKey walKey = builder.build();<a name="line.369"></a>
-<span class="sourceLineNo">370</span> entry.getKey().readFieldsFromPb(walKey, this.byteStringUncompressor);<a name="line.370"></a>
-<span class="sourceLineNo">371</span> if (!walKey.hasFollowingKvCount() || 0 == walKey.getFollowingKvCount()) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> if (LOG.isTraceEnabled()) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span> LOG.trace("WALKey has no KVs that follow it; trying the next one. current offset=" +<a name="line.373"></a>
-<span class="sourceLineNo">374</span> this.inputStream.getPos());<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span> continue;<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span> int expectedCells = walKey.getFollowingKvCount();<a name="line.378"></a>
-<span class="sourceLineNo">379</span> long posBefore = this.inputStream.getPos();<a name="line.379"></a>
-<span class="sourceLineNo">380</span> try {<a name="line.380"></a>
-<span class="sourceLineNo">381</span> int actualCells = entry.getEdit().readFromCells(cellDecoder, expectedCells);<a name="line.381"></a>
-<span class="sourceLineNo">382</span> if (expectedCells != actualCells) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> throw new EOFException("Only read " + actualCells); // other info added in catch<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> } catch (Exception ex) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span> String posAfterStr = "<unknown>";<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> posAfterStr = this.inputStream.getPos() + "";<a name="line.388"></a>
-<span class="sourceLineNo">389</span> } catch (Throwable t) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span> if (LOG.isTraceEnabled()) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span> LOG.trace("Error getting pos for error message - ignoring", t);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span> }<a name="line.393"></a>
-<span class="sourceLineNo">394</span> String message = " while reading " + expectedCells + " WAL KVs; started reading at "<a name="line.394"></a>
-<span class="sourceLineNo">395</span> + posBefore + " and read up to " + posAfterStr;<a name="line.395"></a>
-<span class="sourceLineNo">396</span> IOException realEofEx = extractHiddenEof(ex);<a name="line.396"></a>
-<span class="sourceLineNo">397</span> throw (EOFException) new EOFException("EOF " + message).<a name="line.397"></a>
-<span class="sourceLineNo">398</span> initCause(realEofEx != null ? realEofEx : ex);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> }<a name="line.399"></a>
-<span class="sourceLineNo">400</span> if (trailerPresent && this.inputStream.getPos() > this.walEditsStopOffset) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span> LOG.error("Read WALTrailer while reading WALEdits. wal: " + this.path<a name="line.401"></a>
-<span class="sourceLineNo">402</span> + ", inputStream.getPos(): " + this.inputStream.getPos() + ", walEditsStopOffset: "<a name="line.402"></a>
-<span class="sourceLineNo">403</span> + this.walEditsStopOffset);<a name="line.403"></a>
-<span class="sourceLineNo">404</span> throw new EOFException("Read WALTrailer while reading WALEdits");<a name="line.404"></a>
-<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span> } catch (EOFException eof) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> // If originalPosition is < 0, it is rubbish and we cannot use it (probably local fs)<a name="line.407"></a>
-<span class="sourceLineNo">408</span> if (originalPosition < 0) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span> if (LOG.isTraceEnabled()) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span> LOG.trace("Encountered a malformed edit, but can't seek back to last good position because originalPosition is negative. last offset=" + this.inputStream.getPos(), eof);<a name="line.410"></a>
-<span class="sourceLineNo">411</span> }<a name="line.411"></a>
-<span class="sourceLineNo">412</span> throw eof;<a name="line.412"></a>
-<span class="sourceLineNo">413</span> }<a name="line.413"></a>
-<span class="sourceLineNo">414</span> // Else restore our position to original location in hope that next time through we will<a name="line.414"></a>
-<span class="sourceLineNo">415</span> // read successfully.<a name="line.415"></a>
-<span class="sourceLineNo">416</span> if (LOG.isTraceEnabled()) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span> LOG.trace("Encountered a malformed edit, seeking back to last good position in file, from "+ inputStream.getPos()+" to " + originalPosition, eof);<a name="line.417"></a>
-<span class="sourceLineNo">418</span> }<a name="line.418"></a>
-<span class="sourceLineNo">419</span> seekOnFs(originalPosition);<a name="line.419"></a>
-<span class="sourceLineNo">420</span> return false;<a name="line.420"></a>
-<span class="sourceLineNo">421</span> }<a name="line.421"></a>
-<span class="sourceLineNo">422</span> return true;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span> }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span> private IOException extractHiddenEof(Exception ex) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span> // There are two problems we are dealing with here. Hadoop stream throws generic exception<a name="line.427"></a>
-<span class="sourceLineNo">428</span> // for EOF, not EOFException; and scanner further hides it inside RuntimeException.<a name="line.428"></a>
-<span class="sourceLineNo">429</span> IOException ioEx = null;<a name="line.429"></a>
-<span class="sourceLineNo">430</span> if (ex instanceof EOFException) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span> return (EOFException)ex;<a name="line.431"></a>
-<span class="sourceLineNo">432</span> } else if (ex instanceof IOException) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span> ioEx = (IOException)ex;<a name="line.433"></a>
-<span class="sourceLineNo">434</span> } else if (ex instanceof RuntimeException<a name="line.434"></a>
-<span class="sourceLineNo">435</span> && ex.getCause() != null && ex.getCause() instanceof IOException) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> ioEx = (IOException)ex.getCause();<a name="line.436"></a>
-<span class="sourceLineNo">437</span> }<a name="line.437"></a>
-<span class="sourceLineNo">438</span> if (ioEx != null) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span> if (ioEx.getMessage().contains("EOF")) return ioEx;<a name="line.439"></a>
-<span class="sourceLineNo">440</span> return null;<a name="line.440"></a>
-<span class="sourceLineNo">441</span> }<a name="line.441"></a>
-<span class="sourceLineNo">442</span> return null;<a name="line.442"></a>
-<span class="sourceLineNo">443</span> }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span> @Override<a name="line.445"></a>
-<span class="sourceLineNo">446</span> protected void seekOnFs(long pos) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span> this.inputStream.seek(pos);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>}<a name="line.449"></a>
+<span class="sourceLineNo">315</span> } else {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> this.byteStringUncompressor = WALCellCodec.getNoneUncompressor();<a name="line.316"></a>
+<span class="sourceLineNo">317</span> }<a name="line.317"></a>
+<span class="sourceLineNo">318</span> }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> @Override<a name="line.320"></a>
+<span class="sourceLineNo">321</span> protected boolean hasCompression() {<a name="line.321"></a>
+<span class="sourceLineNo">322</span> return this.hasCompression;<a name="line.322"></a>
+<span class="sourceLineNo">323</span> }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span> @Override<a name="line.325"></a>
+<span class="sourceLineNo">326</span> protected boolean hasTagCompression() {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> return this.hasTagCompression;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> @Override<a name="line.330"></a>
+<span class="sourceLineNo">331</span> protected boolean readNext(Entry entry) throws IOException {<a name="line.331"></a>
+<span class="sourceLineNo">332</span> while (true) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> // OriginalPosition might be < 0 on local fs; if so, it is useless to us.<a name="line.333"></a>
+<span class="sourceLineNo">334</span> long originalPosition = this.inputStream.getPos();<a name="line.334"></a>
+<span class="sourceLineNo">335</span> if (trailerPresent && originalPosition > 0 && originalPosition == this.walEditsStopOffset) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> if (LOG.isTraceEnabled()) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span> LOG.trace("Reached end of expected edits area at offset " + originalPosition);<a name="line.337"></a>
+<span class="sourceLineNo">338</span> }<a name="line.338"></a>
+<span class="sourceLineNo">339</span> return false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span> }<a name="line.340"></a>
+<span class="sourceLineNo">341</span> WALKey.Builder builder = WALKey.newBuilder();<a name="line.341"></a>
+<span class="sourceLineNo">342</span> long size = 0;<a name="line.342"></a>
+<span class="sourceLineNo">343</span> try {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> long available = -1;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> try {<a name="line.345"></a>
+<span class="sourceLineNo">346</span> int firstByte = this.inputStream.read();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> if (firstByte == -1) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> throw new EOFException("First byte is negative at offset " + originalPosition);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> }<a name="line.349"></a>
+<span class="sourceLineNo">350</span> size = CodedInputStream.readRawVarint32(firstByte, this.inputStream);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> // available may be < 0 on local fs for instance. If so, can't depend on it.<a name="line.351"></a>
+<span class="sourceLineNo">352</span> available = this.inputStream.available();<a name="line.352"></a>
+<span class="sourceLineNo">353</span> if (available > 0 && available < size) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> throw new EOFException("Available stream not enough for edit, " +<a name="line.354"></a>
+<span class="sourceLineNo">355</span> "inputStream.available()= " + this.inputStream.available() + ", " +<a name="line.355"></a>
+<span class="sourceLineNo">356</span> "entry size= " + size + " at offset = " + this.inputStream.getPos());<a name="line.356"></a>
+<span class="sourceLineNo">357</span> }<a name="line.357"></a>
+<span class="sourceLineNo">358</span> ProtobufUtil.mergeFrom(builder, ByteStreams.limit(this.inputStream, size),<a name="line.358"></a>
+<span class="sourceLineNo">359</span> (int)size);<a name="line.359"></a>
+<span class="sourceLineNo">360</span> } catch (InvalidProtocolBufferException ipbe) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> throw (EOFException) new EOFException("Invalid PB, EOF? Ignoring; originalPosition=" +<a name="line.361"></a>
+<span class="sourceLineNo">362</span> originalPosition + ", currentPosition=" + this.inputStream.getPos() +<a name="line.362"></a>
+<span class="sourceLineNo">363</span> ", messageSize=" + size + ", currentAvailable=" + available).initCause(ipbe);<a name="line.363"></a>
+<span class="sourceLineNo">364</span> }<a name="line.364"></a>
+<span class="sourceLineNo">365</span> if (!builder.isInitialized()) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> // TODO: not clear if we should try to recover from corrupt PB that looks semi-legit.<a name="line.366"></a>
+<span class="sourceLineNo">367</span> // If we can get the KV count, we could, theoretically, try to get next record.<a name="line.367"></a>
+<span class="sourceLineNo">368</span> throw new EOFException("Partial PB while reading WAL, " +<a name="line.368"></a>
+<span class="sourceLineNo">369</span> "probably an unexpected EOF, ignoring. current offset=" + this.inputStream.getPos());<a name="line.369"></a>
+<span class="sourceLineNo">370</span> }<a name="line.370"></a>
+<span class="sourceLineNo">371</span> WALKey walKey = builder.build();<a name="line.371"></a>
+<span class="sourceLineNo">372</span> entry.getKey().readFieldsFromPb(walKey, this.byteStringUncompressor);<a name="line.372"></a>
+<span class="sourceLineNo">373</span> if (!walKey.hasFollowingKvCount() || 0 == walKey.getFollowingKvCount()) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span> if (LOG.isTraceEnabled()) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span> LOG.trace("WALKey has no KVs that follow it; trying the next one. current offset=" +<a name="line.375"></a>
+<span class="sourceLineNo">376</span> this.inputStream.getPos());<a name="line.376"></a>
+<span class="sourceLineNo">377</span> }<a name="line.377"></a>
+<span class="sourceLineNo">378</span> continue;<a name="line.378"></a>
+<span class="sourceLineNo">379</span> }<a name="line.379"></a>
+<span class="sourceLineNo">380</span> int expectedCells = walKey.getFollowingKvCount();<a name="line.380"></a>
+<span class="sourceLineNo">381</span> long posBefore = this.inputStream.getPos();<a name="line.381"></a>
+<span class="sourceLineNo">382</span> try {<a name="line.382"></a>
+<span class="sourceLineNo">383</span> int actualCells = entry.getEdit().readFromCells(cellDecoder, expectedCells);<a name="line.383"></a>
+<span class="sourceLineNo">384</span> if (expectedCells != actualCells) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span> throw new EOFException("Only read " + actualCells); // other info added in catch<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> } catch (Exception ex) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span> String posAfterStr = "<unknown>";<a name="line.388"></a>
+<span class="sourceLineNo">389</span> try {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> posAfterStr = this.inputStream.getPos() + "";<a name="line.390"></a>
+<span class="sourceLineNo">391</span> } catch (Throwable t) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> if (LOG.isTraceEnabled()) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> LOG.trace("Error getting pos for error message - ignoring", t);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span> String message = " while reading " + expectedCells + " WAL KVs; started reading at "<a name="line.396"></a>
+<span class="sourceLineNo">397</span> + posBefore + " and read up to " + posAfterStr;<a name="line.397"></a>
+<span class="sourceLineNo">398</span> IOException realEofEx = extractHiddenEof(ex);<a name="line.398"></a>
+<span class="sourceLineNo">399</span> throw (EOFException) new EOFException("EOF " + message).<a name="line.399"></a>
+<span class="sourceLineNo">400</span> initCause(realEofEx != null ? realEofEx : ex);<a name="line.400"></a>
+<span class="sourceLineNo">401</span> }<a name="line.401"></a>
+<span class="sourceLineNo">402</span> if (trailerPresent && this.inputStream.getPos() > this.walEditsStopOffset) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span> LOG.error("Read WALTrailer while reading WALEdits. wal: " + this.path<a name="line.403"></a>
+<span class="sourceLineNo">404</span> + ", inputStream.getPos(): " + this.inputStream.getPos() + ", walEditsStopOffset: "<a name="line.404"></a>
+<span class="sourceLineNo">405</span> + this.walEditsStopOffset);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> throw new EOFException("Read WALTrailer while reading WALEdits");<a name="line.406"></a>
+<span class="sourceLineNo">407</span> }<a name="line.407"></a>
+<span class="sourceLineNo">408</span> } catch (EOFException eof) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span> // If originalPosition is < 0, it is rubbish and we cannot use it (probably local fs)<a name="line.409"></a>
+<span class="sourceLineNo">410</span> if (originalPosition < 0) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> if (LOG.isTraceEnabled()) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span> LOG.trace("Encountered a malformed edit, but can't seek back to last good position because originalPosition is negative. last offset=" + this.inputStream.getPos(), eof);<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span> throw eof;<a name="line.414"></a>
+<span class="sourceLineNo">415</span> }<a name="line.415"></a>
+<span class="sourceLineNo">416</span> // Else restore our position to original location in hope that next time through we will<a name="line.416"></a>
+<span class="sourceLineNo">417</span> // read successfully.<a name="line.417"></a>
+<span class="sourceLineNo">418</span> if (LOG.isTraceEnabled()) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span> LOG.trace("Encountered a malformed edit, seeking back to last good position in file, from "+ inputStream.getPos()+" to " + originalPosition, eof);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span> seekOnFs(originalPosition);<a name="line.421"></a>
+<span class="sourceLineNo">422</span> return false;<a name="line.422"></a>
+<span class="sourceLineNo">423</span> }<a name="line.423"></a>
+<span class="sourceLineNo">424</span> return true;<a name="line.424"></a>
+<span class="sourceLineNo">425</span> }<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> private IOException extractHiddenEof(Exception ex) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> // There are two problems we are dealing with here. Hadoop stream throws generic exception<a name="line.429"></a>
+<span class="sourceLineNo">430</span> // for EOF, not EOFException; and scanner further hides it inside RuntimeException.<a name="line.430"></a>
+<span class="sourceLineNo">431</span> IOException ioEx = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span> if (ex instanceof EOFException) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span> return (EOFException)ex;<a name="line.433"></a>
+<span class="sourceLineNo">434</span> } else if (ex instanceof IOException) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span> ioEx = (IOException)ex;<a name="line.435"></a>
+<span class="sourceLineNo">436</span> } else if (ex instanceof RuntimeException<a name="line.436"></a>
+<span class="sourceLineNo">437</span> && ex.getCause() != null && ex.getCause() instanceof IOException) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span> ioEx = (IOException)ex.getCause();<a name="line.438"></a>
+<span class="sourceLineNo">439</span> }<a name="line.439"></a>
+<span class="sourceLineNo">440</span> if (ioEx != null) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span> if (ioEx.getMessage().contains("EOF")) return ioEx;<a name="line.441"></a>
+<span class="sourceLineNo">442</span> return null;<a name="line.442"></a>
+<span class="sourceLineNo">443</span> }<a name="line.443"></a>
+<span class="sourceLineNo">444</span> return null;<a name="line.444"></a>
+<span class="sourceLineNo">445</span> }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span> protected void seekOnFs(long pos) throws IOException {<a name="line.448"></a>
+<span class="sourceLineNo">449</span> this.inputStream.seek(pos);<a name="line.449"></a>
+<span class="sourceLineNo">450</span> }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>}<a name="line.451"></a>
[14/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
index 83c17c0..9df0225 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
@@ -54,323 +54,362 @@
<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> */<a name="line.57"></a>
-<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
-<span class="sourceLineNo">059</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
-<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
-<span class="sourceLineNo">061</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
-<span class="sourceLineNo">062</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span> protected final CompressionContext compression;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> protected final ByteStringUncompressor statelessUncompressor = new ByteStringUncompressor() {<a name="line.65"></a>
-<span class="sourceLineNo">066</span> @Override<a name="line.66"></a>
-<span class="sourceLineNo">067</span> public byte[] uncompress(ByteString data, Dictionary dict) throws IOException {<a name="line.67"></a>
-<span class="sourceLineNo">068</span> return WALCellCodec.uncompressByteString(data, dict);<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><a name="line.71"></a>
-<span class="sourceLineNo">072</span> /**<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.73"></a>
-<span class="sourceLineNo">074</span> */<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public WALCellCodec() {<a name="line.75"></a>
-<span class="sourceLineNo">076</span> this.compression = null;<a name="line.76"></a>
-<span class="sourceLineNo">077</span> }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span> /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.80"></a>
-<span class="sourceLineNo">081</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * @param conf configuration to configure <tt>this</tt><a name="line.82"></a>
-<span class="sourceLineNo">083</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * compression<a name="line.84"></a>
-<span class="sourceLineNo">085</span> */<a name="line.85"></a>
-<span class="sourceLineNo">086</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.86"></a>
-<span class="sourceLineNo">087</span> this.compression = compression;<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 String getWALCellCodecClass(Configuration conf) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * Fully prepares the codec for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * uses a {@link WALCellCodec}.<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * @param cellCodecClsName name of codec<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * @param compression compression the codec should use<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * @return a {@link WALCellCodec} ready for use.<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.104"></a>
-<span class="sourceLineNo">105</span> */<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.107"></a>
-<span class="sourceLineNo">108</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> if (cellCodecClsName == null) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.112"></a>
-<span class="sourceLineNo">113</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.113"></a>
-<span class="sourceLineNo">114</span> }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> /**<a name="line.116"></a>
-<span class="sourceLineNo">117</span> * Create and setup a {@link WALCellCodec} from the<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * CompressionContext.<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * Fully prepares the codec for use.<a name="line.120"></a>
-<span class="sourceLineNo">121</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * uses a {@link WALCellCodec}.<a name="line.122"></a>
-<span class="sourceLineNo">123</span> * @param compression compression the codec should use<a name="line.123"></a>
-<span class="sourceLineNo">124</span> * @return a {@link WALCellCodec} ready for use.<a name="line.124"></a>
-<span class="sourceLineNo">125</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.125"></a>
-<span class="sourceLineNo">126</span> */<a name="line.126"></a>
-<span class="sourceLineNo">127</span> public static WALCellCodec create(Configuration conf,<a name="line.127"></a>
-<span class="sourceLineNo">128</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.128"></a>
-<span class="sourceLineNo">129</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.129"></a>
-<span class="sourceLineNo">130</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.130"></a>
-<span class="sourceLineNo">131</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span> public interface ByteStringCompressor {<a name="line.134"></a>
-<span class="sourceLineNo">135</span> ByteString compress(byte[] data, Dictionary dict) throws IOException;<a name="line.135"></a>
-<span class="sourceLineNo">136</span> }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span> public interface ByteStringUncompressor {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> byte[] uncompress(ByteString data, Dictionary dict) throws IOException;<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> // TODO: it sucks that compression context is in WAL.Entry. It'd be nice if it was here.<a name="line.142"></a>
-<span class="sourceLineNo">143</span> // Dictionary could be gotten by enum; initially, based on enum, context would create<a name="line.143"></a>
-<span class="sourceLineNo">144</span> // an array of dictionaries.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> public ByteString toByteString() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.147"></a>
-<span class="sourceLineNo">148</span> // them.<a name="line.148"></a>
-<span class="sourceLineNo">149</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.149"></a>
-<span class="sourceLineNo">150</span> }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> @Override<a name="line.152"></a>
-<span class="sourceLineNo">153</span> public ByteString compress(byte[] data, Dictionary dict) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span> writeCompressed(data, dict);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.155"></a>
-<span class="sourceLineNo">156</span> // them.<a name="line.156"></a>
-<span class="sourceLineNo">157</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.157"></a>
-<span class="sourceLineNo">158</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.158"></a>
-<span class="sourceLineNo">159</span> return result;<a name="line.159"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
+<span class="sourceLineNo">060</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
+<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
+<span class="sourceLineNo">062</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
+<span class="sourceLineNo">063</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span> protected final CompressionContext compression;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.68"></a>
+<span class="sourceLineNo">069</span> */<a name="line.69"></a>
+<span class="sourceLineNo">070</span> public WALCellCodec() {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> this.compression = null;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<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> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.75"></a>
+<span class="sourceLineNo">076</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * @param conf configuration to configure <tt>this</tt><a name="line.77"></a>
+<span class="sourceLineNo">078</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * compression<a name="line.79"></a>
+<span class="sourceLineNo">080</span> */<a name="line.80"></a>
+<span class="sourceLineNo">081</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span> this.compression = compression;<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 getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * Fully prepares the codec for use.<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * uses a {@link WALCellCodec}.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * @param cellCodecClsName name of codec<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * @param compression compression the codec should use<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.99"></a>
+<span class="sourceLineNo">100</span> */<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
+<span class="sourceLineNo">103</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span> if (cellCodecClsName == null) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
+<span class="sourceLineNo">106</span> }<a name="line.106"></a>
+<span class="sourceLineNo">107</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
+<span class="sourceLineNo">108</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * CompressionContext.<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * Fully prepares the codec for use.<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * uses a {@link WALCellCodec}.<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * @param compression compression the codec should use<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
+<span class="sourceLineNo">121</span> */<a name="line.121"></a>
+<span class="sourceLineNo">122</span> public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
+<span class="sourceLineNo">123</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
+<span class="sourceLineNo">125</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
+<span class="sourceLineNo">126</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> public interface ByteStringCompressor {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> ByteString compress(byte[] data, Enum dictIndex) throws IOException;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> public interface ByteStringUncompressor {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span> static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> CompressionContext compressionContext;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> this.compressionContext = compressionContext;<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> @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span> public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> private CompressionContext compressionContext;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> this.compressionContext = compressionContext;<a name="line.154"></a>
+<span class="sourceLineNo">155</span> }<a name="line.155"></a>
+<span class="sourceLineNo">156</span> public ByteString toByteString() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
+<span class="sourceLineNo">158</span> // them.<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
<span class="sourceLineNo">160</span> }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span> private void writeCompressed(byte[] data, Dictionary dict) throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span> assert dict != null;<a name="line.163"></a>
-<span class="sourceLineNo">164</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.164"></a>
-<span class="sourceLineNo">165</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.166"></a>
-<span class="sourceLineNo">167</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> write(data, 0, data.length);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> } else {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> StreamUtils.writeShort(this, dictIdx);<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> }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.175"></a>
-<span class="sourceLineNo">176</span> InputStream in = bs.newInput();<a name="line.176"></a>
-<span class="sourceLineNo">177</span> byte status = (byte)in.read();<a name="line.177"></a>
-<span class="sourceLineNo">178</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.179"></a>
-<span class="sourceLineNo">180</span> int bytesRead = in.read(arr);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> if (bytesRead != arr.length) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.184"></a>
-<span class="sourceLineNo">185</span> return arr;<a name="line.185"></a>
-<span class="sourceLineNo">186</span> } else {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.187"></a>
-<span class="sourceLineNo">188</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.188"></a>
-<span class="sourceLineNo">189</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.189"></a>
-<span class="sourceLineNo">190</span> if (entry == null) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.191"></a>
-<span class="sourceLineNo">192</span> }<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return entry;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.197"></a>
-<span class="sourceLineNo">198</span> private final CompressionContext compression;<a name="line.198"></a>
-<span class="sourceLineNo">199</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> super(out);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> this.compression = compression;<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> @Override<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public void write(Cell cell) throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> // We first write the KeyValue infrastructure as VInts.<a name="line.206"></a>
-<span class="sourceLineNo">207</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.207"></a>
-<span class="sourceLineNo">208</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.208"></a>
-<span class="sourceLineNo">209</span> // To support tags<a name="line.209"></a>
-<span class="sourceLineNo">210</span> int tagsLength = cell.getTagsLength();<a name="line.210"></a>
-<span class="sourceLineNo">211</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.211"></a>
-<span class="sourceLineNo">212</span> PrivateCellUtil.compressRow(out, cell, compression.rowDict);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> PrivateCellUtil.compressFamily(out, cell, compression.familyDict);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> PrivateCellUtil.compressQualifier(out, cell, compression.qualifierDict);<a name="line.214"></a>
-<span class="sourceLineNo">215</span> // Write timestamp, type and value as uncompressed.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.216"></a>
-<span class="sourceLineNo">217</span> out.write(cell.getTypeByte());<a name="line.217"></a>
-<span class="sourceLineNo">218</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.218"></a>
-<span class="sourceLineNo">219</span> if (tagsLength > 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span> if (compression.tagCompressionContext != null) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span> // Write tags using Dictionary compression<a name="line.221"></a>
-<span class="sourceLineNo">222</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.222"></a>
-<span class="sourceLineNo">223</span> } else {<a name="line.223"></a>
-<span class="sourceLineNo">224</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.224"></a>
-<span class="sourceLineNo">225</span> // it is.<a name="line.225"></a>
-<span class="sourceLineNo">226</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.226"></a>
-<span class="sourceLineNo">227</span> }<a name="line.227"></a>
-<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span> public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> writeCompressed(data, dictIndex);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
+<span class="sourceLineNo">166</span> // them.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
+<span class="sourceLineNo">168</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> return result;<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> private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> assert dict != null;<a name="line.174"></a>
+<span class="sourceLineNo">175</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> write(data, 0, data.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> }<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> }<a name="line.191"></a>
+<span class="sourceLineNo">192</span> }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span> static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span> @Override<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> return data.toByteArray();<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span> }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> InputStream in = bs.newInput();<a name="line.203"></a>
+<span class="sourceLineNo">204</span> byte status = (byte)in.read();<a name="line.204"></a>
+<span class="sourceLineNo">205</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
+<span class="sourceLineNo">207</span> int bytesRead = in.read(arr);<a name="line.207"></a>
+<span class="sourceLineNo">208</span> if (bytesRead != arr.length) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
+<span class="sourceLineNo">212</span> return arr;<a name="line.212"></a>
+<span class="sourceLineNo">213</span> } else {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
+<span class="sourceLineNo">216</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
+<span class="sourceLineNo">217</span> if (entry == null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> }<a name="line.219"></a>
+<span class="sourceLineNo">220</span> return entry;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> private final CompressionContext compression;<a name="line.225"></a>
+<span class="sourceLineNo">226</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> super(out);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> this.compression = compression;<a name="line.228"></a>
<span class="sourceLineNo">229</span> }<a name="line.229"></a>
-<span class="sourceLineNo">230</span> }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.232"></a>
-<span class="sourceLineNo">233</span> private final CompressionContext compression;<a name="line.233"></a>
-<span class="sourceLineNo">234</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> super(in);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> this.compression = compression;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> }<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span> @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span> protected Cell parseCell() throws IOException {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.241"></a>
-<span class="sourceLineNo">242</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> int length = 0;<a name="line.245"></a>
-<span class="sourceLineNo">246</span> if(tagsLength == 0) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.247"></a>
-<span class="sourceLineNo">248</span> } else {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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> byte[] backingArray = new byte[length];<a name="line.252"></a>
-<span class="sourceLineNo">253</span> int pos = 0;<a name="line.253"></a>
-<span class="sourceLineNo">254</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span> // the row<a name="line.257"></a>
-<span class="sourceLineNo">258</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT, compression.rowDict);<a name="line.258"></a>
-<span class="sourceLineNo">259</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.259"></a>
-<span class="sourceLineNo">260</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.260"></a>
-<span class="sourceLineNo">261</span> pos += elemLen;<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> // family<a name="line.263"></a>
-<span class="sourceLineNo">264</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE, compression.familyDict);<a name="line.264"></a>
-<span class="sourceLineNo">265</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> pos += elemLen;<a name="line.267"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span> public void write(Cell cell) throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
+<span class="sourceLineNo">235</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
+<span class="sourceLineNo">236</span> // To support tags<a name="line.236"></a>
+<span class="sourceLineNo">237</span> int tagsLength = cell.getTagsLength();<a name="line.237"></a>
+<span class="sourceLineNo">238</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
+<span class="sourceLineNo">240</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
+<span class="sourceLineNo">241</span> PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
+<span class="sourceLineNo">242</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
+<span class="sourceLineNo">243</span> PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
+<span class="sourceLineNo">244</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
+<span class="sourceLineNo">245</span> // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
+<span class="sourceLineNo">246</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
+<span class="sourceLineNo">247</span> out.write(cell.getTypeByte());<a name="line.247"></a>
+<span class="sourceLineNo">248</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
+<span class="sourceLineNo">249</span> if (tagsLength > 0) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> if (compression.tagCompressionContext != null) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span> // Write tags using Dictionary compression<a name="line.251"></a>
+<span class="sourceLineNo">252</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> } else {<a name="line.253"></a>
+<span class="sourceLineNo">254</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
+<span class="sourceLineNo">255</span> // it is.<a name="line.255"></a>
+<span class="sourceLineNo">256</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
+<span class="sourceLineNo">257</span> }<a name="line.257"></a>
+<span class="sourceLineNo">258</span> }<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private final CompressionContext compression;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span> super(in);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.compression = compression;<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span> // qualifier<a name="line.269"></a>
-<span class="sourceLineNo">270</span> elemLen = readIntoArray(backingArray, pos, compression.qualifierDict);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> pos += elemLen;<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // timestamp, type and value<a name="line.273"></a>
-<span class="sourceLineNo">274</span> int tsTypeValLen = length - pos;<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (tagsLength > 0) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.276"></a>
-<span class="sourceLineNo">277</span> }<a name="line.277"></a>
-<span class="sourceLineNo">278</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.278"></a>
-<span class="sourceLineNo">279</span> pos += tsTypeValLen;<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span> // tags<a name="line.281"></a>
-<span class="sourceLineNo">282</span> if (tagsLength > 0) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.283"></a>
-<span class="sourceLineNo">284</span> if (compression.tagCompressionContext != null) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> } else {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span> return new KeyValue(backingArray, 0, length);<a name="line.290"></a>
-<span class="sourceLineNo">291</span> }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> byte status = (byte)in.read();<a name="line.294"></a>
-<span class="sourceLineNo">295</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span> // status byte indicating that data to be read is not in dictionary.<a name="line.296"></a>
-<span class="sourceLineNo">297</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> int length = StreamUtils.readRawVarint32(in);<a name="line.298"></a>
-<span class="sourceLineNo">299</span> IOUtils.readFully(in, to, offset, length);<a name="line.299"></a>
-<span class="sourceLineNo">300</span> dict.addEntry(to, offset, length);<a name="line.300"></a>
-<span class="sourceLineNo">301</span> return length;<a name="line.301"></a>
-<span class="sourceLineNo">302</span> } else {<a name="line.302"></a>
-<span class="sourceLineNo">303</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.303"></a>
-<span class="sourceLineNo">304</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.304"></a>
-<span class="sourceLineNo">305</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.305"></a>
-<span class="sourceLineNo">306</span> if (entry == null) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span> // now we write the uncompressed value.<a name="line.309"></a>
-<span class="sourceLineNo">310</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> return entry.length;<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span> }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private static void checkLength(int len, int max) throws IOException {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> if (len < 0 || len > max) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> }<a name="line.319"></a>
-<span class="sourceLineNo">320</span> }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.322"></a>
-<span class="sourceLineNo">323</span> public EnsureKvEncoder(OutputStream out) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> super(out);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> @Override<a name="line.326"></a>
-<span class="sourceLineNo">327</span> public void write(Cell cell) throws IOException {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> checkFlushed();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> // Make sure to write tags into WAL<a name="line.329"></a>
-<span class="sourceLineNo">330</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.330"></a>
-<span class="sourceLineNo">331</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> @Override<a name="line.335"></a>
-<span class="sourceLineNo">336</span> public Decoder getDecoder(InputStream is) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span> return (compression == null)<a name="line.337"></a>
-<span class="sourceLineNo">338</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.338"></a>
-<span class="sourceLineNo">339</span> }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span> @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> return getDecoder(new ByteBuffInputStream(buf));<a name="line.343"></a>
-<span class="sourceLineNo">344</span> }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span> public Encoder getEncoder(OutputStream os) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.348"></a>
-<span class="sourceLineNo">349</span> : new ByteBufferWriterOutputStream(os);<a name="line.349"></a>
-<span class="sourceLineNo">350</span> if (compression == null) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span> return new EnsureKvEncoder(os);<a name="line.351"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> protected Cell parseCell() throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
+<span class="sourceLineNo">275</span> int length = 0;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> if(tagsLength == 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span> byte[] backingArray = new byte[length];<a name="line.282"></a>
+<span class="sourceLineNo">283</span> int pos = 0;<a name="line.283"></a>
+<span class="sourceLineNo">284</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> // the row<a name="line.287"></a>
+<span class="sourceLineNo">288</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
+<span class="sourceLineNo">289</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
+<span class="sourceLineNo">290</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
+<span class="sourceLineNo">292</span> pos += elemLen;<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span> // family<a name="line.294"></a>
+<span class="sourceLineNo">295</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
+<span class="sourceLineNo">296</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
+<span class="sourceLineNo">297</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> pos += elemLen;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // qualifier<a name="line.301"></a>
+<span class="sourceLineNo">302</span> elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
+<span class="sourceLineNo">303</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
+<span class="sourceLineNo">304</span> pos += elemLen;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span> // timestamp, type and value<a name="line.306"></a>
+<span class="sourceLineNo">307</span> int tsTypeValLen = length - pos;<a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (tagsLength > 0) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
+<span class="sourceLineNo">310</span> }<a name="line.310"></a>
+<span class="sourceLineNo">311</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> pos += tsTypeValLen;<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span> // tags<a name="line.314"></a>
+<span class="sourceLineNo">315</span> if (tagsLength > 0) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> if (compression.tagCompressionContext != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> byte status = (byte)in.read();<a name="line.327"></a>
+<span class="sourceLineNo">328</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
+<span class="sourceLineNo">331</span> int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span> dict.addEntry(to, offset, length);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> return length;<a name="line.334"></a>
+<span class="sourceLineNo">335</span> } else {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
+<span class="sourceLineNo">337</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
+<span class="sourceLineNo">338</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (entry == null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> // now we write the uncompressed value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> return entry.length;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> }<a name="line.345"></a>
+<span class="sourceLineNo">346</span> }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span> private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> if (len < 0 || len > max) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span> }<a name="line.352"></a>
-<span class="sourceLineNo">353</span> return new CompressedKvEncoder(os, compression);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.357"></a>
-<span class="sourceLineNo">358</span> return new BaosAndCompressor();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.362"></a>
-<span class="sourceLineNo">363</span> return this.statelessUncompressor;<a name="line.363"></a>
-<span class="sourceLineNo">364</span> }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>}<a name="line.365"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span> super(out);<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span> @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span> public void write(Cell cell) throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> checkFlushed();<a name="line.361"></a>
+<span class="sourceLineNo">362</span> // Make sure to write tags into WAL<a name="line.362"></a>
+<span class="sourceLineNo">363</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
+<span class="sourceLineNo">364</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span> @Override<a name="line.368"></a>
+<span class="sourceLineNo">369</span> public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> return (compression == null)<a name="line.370"></a>
+<span class="sourceLineNo">371</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return getDecoder(new ByteBuffInputStream(buf));<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> @Override<a name="line.379"></a>
+<span class="sourceLineNo">380</span> public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
+<span class="sourceLineNo">382</span> : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
+<span class="sourceLineNo">383</span> if (compression == null) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> return new EnsureKvEncoder(os);<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span> return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> return new BaosAndCompressor(compression);<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span> return new StatelessUncompressor(compression);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span> public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return new NoneCompressor();<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> return new NoneUncompressor();<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>}<a name="line.404"></a>
[31/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html
index f236300..513d2ad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html
@@ -26,1048 +26,1115 @@
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.backup.impl;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.io.IOException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.net.URI;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.List;<a name="line.42"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.lang3.StringUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configured;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<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> * General backup commands, options and usage messages<a name="line.71"></a>
-<span class="sourceLineNo">072</span> */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceAudience.Private<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public final class BackupCommands {<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.77"></a>
-<span class="sourceLineNo">078</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.80"></a>
-<span class="sourceLineNo">081</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.81"></a>
-<span class="sourceLineNo">082</span> + " delete delete an existing backup image\n"<a name="line.82"></a>
-<span class="sourceLineNo">083</span> + " describe show the detailed information of a backup image\n"<a name="line.83"></a>
-<span class="sourceLineNo">084</span> + " history show history of all successful backups\n"<a name="line.84"></a>
-<span class="sourceLineNo">085</span> + " progress show the progress of the latest backup request\n"<a name="line.85"></a>
-<span class="sourceLineNo">086</span> + " set backup set management\n"<a name="line.86"></a>
-<span class="sourceLineNo">087</span> + " repair repair backup system table\n"<a name="line.87"></a>
-<span class="sourceLineNo">088</span> + " merge merge backup images\n"<a name="line.88"></a>
-<span class="sourceLineNo">089</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> public static final String CREATE_CMD_USAGE =<a name="line.91"></a>
-<span class="sourceLineNo">092</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.92"></a>
-<span class="sourceLineNo">093</span> + " type \"full\" to create a full backup image\n"<a name="line.93"></a>
-<span class="sourceLineNo">094</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.94"></a>
-<span class="sourceLineNo">095</span> + " backup_path Full path to store the backup image\n";<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.97"></a>
-<span class="sourceLineNo">098</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.98"></a>
-<span class="sourceLineNo">099</span> + " progress for currently running backup session.";<a name="line.99"></a>
-<span class="sourceLineNo">100</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.100"></a>
-<span class="sourceLineNo">101</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.103"></a>
-<span class="sourceLineNo">104</span> + " backup_id Backup image id\n";<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete <backup_id>\n"<a name="line.108"></a>
-<span class="sourceLineNo">109</span> + " backup_id Backup image id\n";<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.113"></a>
-<span class="sourceLineNo">114</span> + " name Backup set name\n"<a name="line.114"></a>
-<span class="sourceLineNo">115</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.115"></a>
-<span class="sourceLineNo">116</span> + " add add tables to a set, create a set if needed\n"<a name="line.116"></a>
-<span class="sourceLineNo">117</span> + " remove remove tables from a set\n"<a name="line.117"></a>
-<span class="sourceLineNo">118</span> + " list list all backup sets in the system\n"<a name="line.118"></a>
-<span class="sourceLineNo">119</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.119"></a>
-<span class="sourceLineNo">120</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.120"></a>
-<span class="sourceLineNo">121</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span> public static final String USAGE_FOOTER = "";<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> public static abstract class Command extends Configured {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> CommandLine cmdline;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> Connection conn;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> Command(Configuration conf) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (conf == null) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> conf = HBaseConfiguration.create();<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span> setConf(conf);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span> public void execute() throws IOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> printUsage();<a name="line.138"></a>
-<span class="sourceLineNo">139</span> throw new IOException(INCORRECT_USAGE);<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> // Create connection<a name="line.142"></a>
-<span class="sourceLineNo">143</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.143"></a>
-<span class="sourceLineNo">144</span> if (requiresNoActiveSession()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> // Check active session<a name="line.145"></a>
-<span class="sourceLineNo">146</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span> if (sessions.size() > 0) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.150"></a>
-<span class="sourceLineNo">151</span> System.err.println(sessions.get(0));<a name="line.151"></a>
-<span class="sourceLineNo">152</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.152"></a>
-<span class="sourceLineNo">153</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.153"></a>
-<span class="sourceLineNo">154</span> throw new IOException("Active session found, aborted command execution");<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> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> if (requiresConsistentState()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span> // Check failed delete<a name="line.159"></a>
-<span class="sourceLineNo">160</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (ids != null && ids.length > 0) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> System.err.println("Backup system recovery is required.");<a name="line.165"></a>
-<span class="sourceLineNo">166</span> throw new IOException("Failed backup DELETE found, aborted command execution");<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.169"></a>
-<span class="sourceLineNo">170</span> if (ids != null && ids.length > 0) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.171"></a>
-<span class="sourceLineNo">172</span> System.err.println("Backup system recovery is required.");<a name="line.172"></a>
-<span class="sourceLineNo">173</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> }<a name="line.175"></a>
-<span class="sourceLineNo">176</span> }<a name="line.176"></a>
-<span class="sourceLineNo">177</span> }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span> public void finish() throws IOException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (conn != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> conn.close();<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> protected abstract void printUsage();<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * The command can't be run if active backup session is in progress<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * @return true if no active sessions are in progress<a name="line.189"></a>
-<span class="sourceLineNo">190</span> */<a name="line.190"></a>
-<span class="sourceLineNo">191</span> protected boolean requiresNoActiveSession() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span> return false;<a name="line.192"></a>
-<span class="sourceLineNo">193</span> }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * because of an abnormal termination of a backup session or delete command<a name="line.197"></a>
-<span class="sourceLineNo">198</span> * @return true, if yes<a name="line.198"></a>
-<span class="sourceLineNo">199</span> */<a name="line.199"></a>
-<span class="sourceLineNo">200</span> protected boolean requiresConsistentState() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> return false;<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 BackupCommands() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> throw new AssertionError("Instantiating utility class...");<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> Command cmd;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> switch (type) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> case CREATE:<a name="line.212"></a>
-<span class="sourceLineNo">213</span> cmd = new CreateCommand(conf, cmdline);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span> case DESCRIBE:<a name="line.215"></a>
-<span class="sourceLineNo">216</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.216"></a>
+<span class="sourceLineNo">044</span>import java.io.IOException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.net.URI;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.List;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.lang3.StringUtils;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.conf.Configured;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.FileSystem;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.fs.Path;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.TableName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.yetus.audience.InterfaceAudience;<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> * General backup commands, options and usage messages<a name="line.75"></a>
+<span class="sourceLineNo">076</span> */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceAudience.Private<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public final class BackupCommands {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.81"></a>
+<span class="sourceLineNo">082</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.84"></a>
+<span class="sourceLineNo">085</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.85"></a>
+<span class="sourceLineNo">086</span> + " delete delete an existing backup image\n"<a name="line.86"></a>
+<span class="sourceLineNo">087</span> + " describe show the detailed information of a backup image\n"<a name="line.87"></a>
+<span class="sourceLineNo">088</span> + " history show history of all successful backups\n"<a name="line.88"></a>
+<span class="sourceLineNo">089</span> + " progress show the progress of the latest backup request\n"<a name="line.89"></a>
+<span class="sourceLineNo">090</span> + " set backup set management\n"<a name="line.90"></a>
+<span class="sourceLineNo">091</span> + " repair repair backup system table\n"<a name="line.91"></a>
+<span class="sourceLineNo">092</span> + " merge merge backup images\n"<a name="line.92"></a>
+<span class="sourceLineNo">093</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span> public static final String CREATE_CMD_USAGE =<a name="line.95"></a>
+<span class="sourceLineNo">096</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.96"></a>
+<span class="sourceLineNo">097</span> + " type \"full\" to create a full backup image\n"<a name="line.97"></a>
+<span class="sourceLineNo">098</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.98"></a>
+<span class="sourceLineNo">099</span> + " backup_path Full path to store the backup image\n";<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.101"></a>
+<span class="sourceLineNo">102</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.102"></a>
+<span class="sourceLineNo">103</span> + " progress for currently running backup session.";<a name="line.103"></a>
+<span class="sourceLineNo">104</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.104"></a>
+<span class="sourceLineNo">105</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.107"></a>
+<span class="sourceLineNo">108</span> + " backup_id Backup image id\n";<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete [options]";<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.116"></a>
+<span class="sourceLineNo">117</span> + " name Backup set name\n"<a name="line.117"></a>
+<span class="sourceLineNo">118</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.118"></a>
+<span class="sourceLineNo">119</span> + " add add tables to a set, create a set if needed\n"<a name="line.119"></a>
+<span class="sourceLineNo">120</span> + " remove remove tables from a set\n"<a name="line.120"></a>
+<span class="sourceLineNo">121</span> + " list list all backup sets in the system\n"<a name="line.121"></a>
+<span class="sourceLineNo">122</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.122"></a>
+<span class="sourceLineNo">123</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.123"></a>
+<span class="sourceLineNo">124</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static final String USAGE_FOOTER = "";<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> public static abstract class Command extends Configured {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> CommandLine cmdline;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> Connection conn;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span> Command(Configuration conf) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span> if (conf == null) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> conf = HBaseConfiguration.create();<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> setConf(conf);<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> public void execute() throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> printUsage();<a name="line.141"></a>
+<span class="sourceLineNo">142</span> throw new IOException(INCORRECT_USAGE);<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">145</span> // Create connection<a name="line.145"></a>
+<span class="sourceLineNo">146</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (requiresNoActiveSession()) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // Check active session<a name="line.148"></a>
+<span class="sourceLineNo">149</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span> if (sessions.size() > 0) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.153"></a>
+<span class="sourceLineNo">154</span> System.err.println(sessions.get(0));<a name="line.154"></a>
+<span class="sourceLineNo">155</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.155"></a>
+<span class="sourceLineNo">156</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.156"></a>
+<span class="sourceLineNo">157</span> throw new IOException("Active session found, aborted command execution");<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span> }<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span> if (requiresConsistentState()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span> // Check failed delete<a name="line.162"></a>
+<span class="sourceLineNo">163</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span> if (ids != null && ids.length > 0) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.167"></a>
+<span class="sourceLineNo">168</span> System.err.println("Backup system recovery is required.");<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throw new IOException("Failed backup DELETE found, aborted command execution");<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> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> if (ids != null && ids.length > 0) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.174"></a>
+<span class="sourceLineNo">175</span> System.err.println("Backup system recovery is required.");<a name="line.175"></a>
+<span class="sourceLineNo">176</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> }<a name="line.179"></a>
+<span class="sourceLineNo">180</span> }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span> public void finish() throws IOException {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> if (conn != null) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> conn.close();<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> protected abstract void printUsage();<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * The command can't be run if active backup session is in progress<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * @return true if no active sessions are in progress<a name="line.192"></a>
+<span class="sourceLineNo">193</span> */<a name="line.193"></a>
+<span class="sourceLineNo">194</span> protected boolean requiresNoActiveSession() {<a name="line.194"></a>
+<span class="sourceLineNo">195</span> return false;<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * because of an abnormal termination of a backup session or delete command<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * @return true, if yes<a name="line.201"></a>
+<span class="sourceLineNo">202</span> */<a name="line.202"></a>
+<span class="sourceLineNo">203</span> protected boolean requiresConsistentState() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return false;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> private BackupCommands() {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new AssertionError("Instantiating utility class...");<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> Command cmd;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> switch (type) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> case CREATE:<a name="line.215"></a>
+<span class="sourceLineNo">216</span> cmd = new CreateCommand(conf, cmdline);<a name="line.216"></a>
<span class="sourceLineNo">217</span> break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span> case PROGRESS:<a name="line.218"></a>
-<span class="sourceLineNo">219</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.219"></a>
+<span class="sourceLineNo">218</span> case DESCRIBE:<a name="line.218"></a>
+<span class="sourceLineNo">219</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.219"></a>
<span class="sourceLineNo">220</span> break;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> case DELETE:<a name="line.221"></a>
-<span class="sourceLineNo">222</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.222"></a>
+<span class="sourceLineNo">221</span> case PROGRESS:<a name="line.221"></a>
+<span class="sourceLineNo">222</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.222"></a>
<span class="sourceLineNo">223</span> break;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> case HISTORY:<a name="line.224"></a>
-<span class="sourceLineNo">225</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.225"></a>
+<span class="sourceLineNo">224</span> case DELETE:<a name="line.224"></a>
+<span class="sourceLineNo">225</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.225"></a>
<span class="sourceLineNo">226</span> break;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> case SET:<a name="line.227"></a>
-<span class="sourceLineNo">228</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.228"></a>
+<span class="sourceLineNo">227</span> case HISTORY:<a name="line.227"></a>
+<span class="sourceLineNo">228</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.228"></a>
<span class="sourceLineNo">229</span> break;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> case REPAIR:<a name="line.230"></a>
-<span class="sourceLineNo">231</span> cmd = new RepairCommand(conf, cmdline);<a name="line.231"></a>
+<span class="sourceLineNo">230</span> case SET:<a name="line.230"></a>
+<span class="sourceLineNo">231</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.231"></a>
<span class="sourceLineNo">232</span> break;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> case MERGE:<a name="line.233"></a>
-<span class="sourceLineNo">234</span> cmd = new MergeCommand(conf, cmdline);<a name="line.234"></a>
+<span class="sourceLineNo">233</span> case REPAIR:<a name="line.233"></a>
+<span class="sourceLineNo">234</span> cmd = new RepairCommand(conf, cmdline);<a name="line.234"></a>
<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> case HELP:<a name="line.236"></a>
-<span class="sourceLineNo">237</span> default:<a name="line.237"></a>
-<span class="sourceLineNo">238</span> cmd = new HelpCommand(conf, cmdline);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> break;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return cmd;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> static int numOfArgs(String[] args) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> if (args == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> return 0;<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> return args.length;<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
+<span class="sourceLineNo">236</span> case MERGE:<a name="line.236"></a>
+<span class="sourceLineNo">237</span> cmd = new MergeCommand(conf, cmdline);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> break;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> case HELP:<a name="line.239"></a>
+<span class="sourceLineNo">240</span> default:<a name="line.240"></a>
+<span class="sourceLineNo">241</span> cmd = new HelpCommand(conf, cmdline);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> break;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> return cmd;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> static int numOfArgs(String[] args) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> if (args == null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span> return 0;<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> public static class CreateCommand extends Command {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span> super(conf);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> this.cmdline = cmdline;<a name="line.255"></a>
-<span class="sourceLineNo">256</span> }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span> @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span> protected boolean requiresNoActiveSession() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> return true;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span> protected boolean requiresConsistentState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> return true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span> }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span> @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span> public void execute() throws IOException {<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> printUsage();<a name="line.271"></a>
-<span class="sourceLineNo">272</span> throw new IOException(INCORRECT_USAGE);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span> String[] args = cmdline.getArgs();<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (args.length != 3) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> printUsage();<a name="line.276"></a>
-<span class="sourceLineNo">277</span> throw new IOException(INCORRECT_USAGE);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.280"></a>
-<span class="sourceLineNo">281</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> printUsage();<a name="line.283"></a>
-<span class="sourceLineNo">284</span> throw new IOException(INCORRECT_USAGE);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span> if (!verifyPath(args[2])) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> printUsage();<a name="line.288"></a>
-<span class="sourceLineNo">289</span> throw new IOException(INCORRECT_USAGE);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> String targetBackupDir = args[2];<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.292"></a>
-<span class="sourceLineNo">293</span> if (isRootFolder(targetBackupDir)) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> String tables;<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span> // Check if we have both: backup set and list of tables<a name="line.298"></a>
-<span class="sourceLineNo">299</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.300"></a>
-<span class="sourceLineNo">301</span> + " of tables, but not both");<a name="line.301"></a>
-<span class="sourceLineNo">302</span> printUsage();<a name="line.302"></a>
-<span class="sourceLineNo">303</span> throw new IOException(INCORRECT_USAGE);<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Creates connection<a name="line.305"></a>
-<span class="sourceLineNo">306</span> super.execute();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Check backup set<a name="line.307"></a>
-<span class="sourceLineNo">308</span> String setName = null;<a name="line.308"></a>
-<span class="sourceLineNo">309</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> tables = getTablesForSet(setName, getConf());<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> if (tables == null) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> System.out.println("ERROR: Backup set '" + setName<a name="line.314"></a>
-<span class="sourceLineNo">315</span> + "' is either empty or does not exist");<a name="line.315"></a>
-<span class="sourceLineNo">316</span> printUsage();<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException(INCORRECT_USAGE);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span> int bandwidth =<a name="line.322"></a>
-<span class="sourceLineNo">323</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.323"></a>
-<span class="sourceLineNo">324</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> int workers =<a name="line.325"></a>
-<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.326"></a>
-<span class="sourceLineNo">327</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // Set system property value for MR job<a name="line.331"></a>
-<span class="sourceLineNo">332</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> BackupRequest request =<a name="line.337"></a>
-<span class="sourceLineNo">338</span> builder<a name="line.338"></a>
-<span class="sourceLineNo">339</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.339"></a>
-<span class="sourceLineNo">340</span> .withTableList(<a name="line.340"></a>
-<span class="sourceLineNo">341</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.341"></a>
-<span class="sourceLineNo">342</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.342"></a>
-<span class="sourceLineNo">343</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> String backupId = admin.backupTables(request);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.345"></a>
-<span class="sourceLineNo">346</span> } catch (IOException e) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.347"></a>
-<span class="sourceLineNo">348</span> throw e;<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> Path p = new Path(targetBackupDir);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> return p.isRoot();<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> private boolean verifyPath(String path) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> Path p = new Path(path);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> URI uri = p.toUri();<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (uri.getScheme() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> return false;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> FileSystem.get(uri, conf);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> return true;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> } catch (Exception e) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> return false;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> }<a name="line.371"></a>
-<span class="sourceLineNo">372</span> }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (tables == null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> return null;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span> protected void printUsage() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> System.out.println(CREATE_CMD_USAGE);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> Options options = new Options();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.397"></a>
-<span class="sourceLineNo">398</span> helpFormatter.setLeftPadding(2);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> helpFormatter.setDescPadding(8);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> helpFormatter.setWidth(100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.401"></a>
-<span class="sourceLineNo">402</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> public static class HelpCommand extends Command {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span> super(conf);<a name="line.408"></a>
-<span class="sourceLineNo">409</span> this.cmdline = cmdline;<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void execute() throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> if (cmdline == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span> printUsage();<a name="line.415"></a>
-<span class="sourceLineNo">416</span> throw new IOException(INCORRECT_USAGE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span> }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span> String[] args = cmdline.getArgs();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> if (args == null || args.length == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span> printUsage();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> throw new IOException(INCORRECT_USAGE);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> if (args.length != 2) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.426"></a>
-<span class="sourceLineNo">427</span> printUsage();<a name="line.427"></a>
-<span class="sourceLineNo">428</span> throw new IOException(INCORRECT_USAGE);<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> String type = args[1];<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (BackupCommand.CREATE.name().equalsIgnoreCase(type)) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> System.out.println(CREATE_CMD_USAGE);<a name="line.434"></a>
-<span class="sourceLineNo">435</span> } else if (BackupCommand.DESCRIBE.name().equalsIgnoreCase(type)) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.436"></a>
-<span class="sourceLineNo">437</span> } else if (BackupCommand.HISTORY.name().equalsIgnoreCase(type)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> System.out.println(HISTORY_CMD_USAGE);<a name="line.438"></a>
-<span class="sourceLineNo">439</span> } else if (BackupCommand.PROGRESS.name().equalsIgnoreCase(type)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> System.out.println(PROGRESS_CMD_USAGE);<a name="line.440"></a>
-<span class="sourceLineNo">441</span> } else if (BackupCommand.DELETE.name().equalsIgnoreCase(type)) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> System.out.println(DELETE_CMD_USAGE);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> } else if (BackupCommand.SET.name().equalsIgnoreCase(type)) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> System.out.println(SET_CMD_USAGE);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> } else {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> System.out.println("Unknown command : " + type);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> printUsage();<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span> @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected void printUsage() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> System.out.println(USAGE);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> }<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span> public static class DescribeCommand extends Command {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> DescribeCommand(Configuration conf, CommandLine cmdline) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> super(conf);<a name="line.459"></a>
-<span class="sourceLineNo">460</span> this.cmdline = cmdline;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span> public void execute() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> printUsage();<a name="line.466"></a>
-<span class="sourceLineNo">467</span> throw new IOException(INCORRECT_USAGE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span> String[] args = cmdline.getArgs();<a name="line.469"></a>
-<span class="sourceLineNo">470</span> if (args.length != 2) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> printUsage();<a name="line.471"></a>
-<span class="sourceLineNo">472</span> throw new IOException(INCORRECT_USAGE);<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> super.execute();<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> String backupId = args[1];<a name="line.477"></a>
-<span class="sourceLineNo">478</span> try (final BackupSystemTable sysTable = new BackupSystemTable(conn)) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> BackupInfo info = sysTable.readBackupInfo(backupId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span> if (info == null) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> System.out.println("ERROR: " + backupId + " does not exist");<a name="line.481"></a>
-<span class="sourceLineNo">482</span> printUsage();<a name="line.482"></a>
-<span class="sourceLineNo">483</span> throw new IOException(INCORRECT_USAGE);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> System.out.println(info.getShortDescription());<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> @Override<a name="line.489"></a>
-<span class="sourceLineNo">490</span> protected void printUsage() {<a name="line.490"></a>
-<span class="sourceLineNo">491</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<a name="line.492"></a>
-<span class="sourceLineNo">493</span> }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span> public static class ProgressCommand extends Command {<a name="line.495"></a>
-<span class="sourceLineNo">496</span> ProgressCommand(Configuration conf, CommandLine cmdline) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span> super(conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> this.cmdline = cmdline;<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public void execute() throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">252</span> return args.length;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> public static class CreateCommand extends Command {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> super(conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.cmdline = cmdline;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span> @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span> protected boolean requiresNoActiveSession() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return true;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span> protected boolean requiresConsistentState() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return true;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span> public void execute() throws IOException {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> printUsage();<a name="line.274"></a>
+<span class="sourceLineNo">275</span> throw new IOException(INCORRECT_USAGE);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span> String[] args = cmdline.getArgs();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> if (args.length != 3) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> printUsage();<a name="line.279"></a>
+<span class="sourceLineNo">280</span> throw new IOException(INCORRECT_USAGE);<a name="line.280"></a>
+<span class="sourceLineNo">281</span> }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.283"></a>
+<span class="sourceLineNo">284</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> printUsage();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> throw new IOException(INCORRECT_USAGE);<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> if (!verifyPath(args[2])) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> printUsage();<a name="line.291"></a>
+<span class="sourceLineNo">292</span> throw new IOException(INCORRECT_USAGE);<a name="line.292"></a>
+<span class="sourceLineNo">293</span> }<a name="line.293"></a>
+<span class="sourceLineNo">294</span> String targetBackupDir = args[2];<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (isRootFolder(targetBackupDir)) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> String tables;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // Check if we have both: backup set and list of tables<a name="line.301"></a>
+<span class="sourceLineNo">302</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.303"></a>
+<span class="sourceLineNo">304</span> + " of tables, but not both");<a name="line.304"></a>
+<span class="sourceLineNo">305</span> printUsage();<a name="line.305"></a>
+<span class="sourceLineNo">306</span> throw new IOException(INCORRECT_USAGE);<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span> // Creates connection<a name="line.308"></a>
+<span class="sourceLineNo">309</span> super.execute();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Check backup set<a name="line.310"></a>
+<span class="sourceLineNo">311</span> String setName = null;<a name="line.311"></a>
+<span class="sourceLineNo">312</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> tables = getTablesForSet(setName, getConf());<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span> if (tables == null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> System.out.println("ERROR: Backup set '" + setName<a name="line.317"></a>
+<span class="sourceLineNo">318</span> + "' is either empty or does not exist");<a name="line.318"></a>
+<span class="sourceLineNo">319</span> printUsage();<a name="line.319"></a>
+<span class="sourceLineNo">320</span> throw new IOException(INCORRECT_USAGE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> } else {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span> int bandwidth =<a name="line.325"></a>
+<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.326"></a>
+<span class="sourceLineNo">327</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> int workers =<a name="line.328"></a>
+<span class="sourceLineNo">329</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.329"></a>
+<span class="sourceLineNo">330</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> // Set system property value for MR job<a name="line.334"></a>
+<span class="sourceLineNo">335</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.339"></a>
+<span class="sourceLineNo">340</span> BackupRequest request =<a name="line.340"></a>
+<span class="sourceLineNo">341</span> builder<a name="line.341"></a>
+<span class="sourceLineNo">342</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.342"></a>
+<span class="sourceLineNo">343</span> .withTableList(<a name="line.343"></a>
+<span class="sourceLineNo">344</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.345"></a>
+<span class="sourceLineNo">346</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String backupId = admin.backupTables(request);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> } catch (IOException e) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.350"></a>
+<span class="sourceLineNo">351</span> throw e;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> Path p = new Path(targetBackupDir);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return p.isRoot();<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span> private boolean verifyPath(String path) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> try {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> Path p = new Path(path);<a name="line.362"></a>
+<span class="sourceLineNo">363</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.363"></a>
+<span class="sourceLineNo">364</span> URI uri = p.toUri();<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> if (uri.getScheme() == null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span> return false;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> FileSystem.get(uri, conf);<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return true;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> } catch (Exception e) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return false;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.377"></a>
+<span class="sourceLineNo">378</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span> if (tables == null) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span> return null;<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> @Override<a name="line.389"></a>
+<span class="sourceLineNo">390</span> protected void printUsage() {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> System.out.println(CREATE_CMD_USAGE);<a name="line.391"></a>
+<span class="sourceLineNo">392</span> Options options = new Options();<a name="line.392"></a>
+<span class="sourceLineNo">393</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.400"></a>
+<span class="sourceLineNo">401</span> helpFormatter.setLeftPadding(2);<a name="line.401"></a>
+<span class="sourceLineNo">402</span> helpFormatter.setDescPadding(8);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> helpFormatter.setWidth(100);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.404"></a>
+<span class="sourceLineNo">405</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<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> public static class HelpCommand extends Command {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> super(conf);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> this.cmdline = cmdline;<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span> @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span> public void execute() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span> if (cmdline == null) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> printUsage();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> throw new IOException(INCORRECT_USAGE);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> String[] args = cmdline.getArgs();<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (args == null || args.length == 0) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> printUsage();<a name="line.424"></a>
+<span class="sourceLineNo">425</span> throw new IOException(INCORRECT_USAGE);<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> if (args.length != 2) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.429"></a>
+<span class="sourceLineNo">430</span> printUsage();<a name="line.430"></a>
+<span class="sourceLineNo">431</span> throw new IOException(INCORRECT_USAGE);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>
<TRUNCATED>
[36/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupDriver.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupDriver.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupDriver.html
index 65c1a1f..2210003 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupDriver.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupDriver.html
@@ -25,201 +25,206 @@
<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 static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.35"></a>
-<span class="sourceLineNo">036</span><a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.io.IOException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.net.URI;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.conf.Configuration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.Path;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.backup.impl.BackupCommands;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.backup.impl.BackupManager;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.util.AbstractHBaseTool;<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.util.ToolRunner;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.log4j.Level;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.log4j.LogManager;<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.org.apache.commons.cli.CommandLine;<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> *<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * Command-line entry point for backup operation<a name="line.59"></a>
-<span class="sourceLineNo">060</span> *<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 BackupDriver extends AbstractHBaseTool {<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span> private static final Logger LOG = LoggerFactory.getLogger(BackupDriver.class);<a name="line.65"></a>
-<span class="sourceLineNo">066</span> private CommandLine cmd;<a name="line.66"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.io.IOException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.net.URI;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.conf.Configuration;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.fs.Path;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.backup.impl.BackupCommands;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.backup.impl.BackupManager;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.AbstractHBaseTool;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.util.ToolRunner;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.log4j.Level;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.log4j.LogManager;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.slf4j.Logger;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.slf4j.LoggerFactory;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>/**<a name="line.60"></a>
+<span class="sourceLineNo">061</span> *<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * Command-line entry point for backup operation<a name="line.62"></a>
+<span class="sourceLineNo">063</span> *<a name="line.63"></a>
+<span class="sourceLineNo">064</span> */<a name="line.64"></a>
+<span class="sourceLineNo">065</span>@InterfaceAudience.Private<a name="line.65"></a>
+<span class="sourceLineNo">066</span>public class BackupDriver extends AbstractHBaseTool {<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span> public BackupDriver() throws IOException {<a name="line.68"></a>
-<span class="sourceLineNo">069</span> init();<a name="line.69"></a>
-<span class="sourceLineNo">070</span> }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span> protected void init() throws IOException {<a name="line.72"></a>
-<span class="sourceLineNo">073</span> // disable irrelevant loggers to avoid it mess up command output<a name="line.73"></a>
-<span class="sourceLineNo">074</span> LogUtils.disableZkAndClientLoggers();<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 int parseAndRun(String[] args) throws IOException {<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span> // Check if backup is enabled<a name="line.79"></a>
-<span class="sourceLineNo">080</span> if (!BackupManager.isBackupEnabled(getConf())) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span> System.err.println(BackupRestoreConstants.ENABLE_BACKUP);<a name="line.81"></a>
-<span class="sourceLineNo">082</span> return -1;<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> System.out.println(BackupRestoreConstants.VERIFY_BACKUP);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span> String cmd = null;<a name="line.87"></a>
-<span class="sourceLineNo">088</span> String[] remainArgs = null;<a name="line.88"></a>
-<span class="sourceLineNo">089</span> if (args == null || args.length == 0) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span> printToolUsage();<a name="line.90"></a>
-<span class="sourceLineNo">091</span> return -1;<a name="line.91"></a>
-<span class="sourceLineNo">092</span> } else {<a name="line.92"></a>
-<span class="sourceLineNo">093</span> cmd = args[0];<a name="line.93"></a>
-<span class="sourceLineNo">094</span> remainArgs = new String[args.length - 1];<a name="line.94"></a>
-<span class="sourceLineNo">095</span> if (args.length > 1) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span> System.arraycopy(args, 1, remainArgs, 0, args.length - 1);<a name="line.96"></a>
-<span class="sourceLineNo">097</span> }<a name="line.97"></a>
-<span class="sourceLineNo">098</span> }<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span> BackupCommand type = BackupCommand.HELP;<a name="line.100"></a>
-<span class="sourceLineNo">101</span> if (BackupCommand.CREATE.name().equalsIgnoreCase(cmd)) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span> type = BackupCommand.CREATE;<a name="line.102"></a>
-<span class="sourceLineNo">103</span> } else if (BackupCommand.HELP.name().equalsIgnoreCase(cmd)) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span> type = BackupCommand.HELP;<a name="line.104"></a>
-<span class="sourceLineNo">105</span> } else if (BackupCommand.DELETE.name().equalsIgnoreCase(cmd)) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span> type = BackupCommand.DELETE;<a name="line.106"></a>
-<span class="sourceLineNo">107</span> } else if (BackupCommand.DESCRIBE.name().equalsIgnoreCase(cmd)) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span> type = BackupCommand.DESCRIBE;<a name="line.108"></a>
-<span class="sourceLineNo">109</span> } else if (BackupCommand.HISTORY.name().equalsIgnoreCase(cmd)) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span> type = BackupCommand.HISTORY;<a name="line.110"></a>
-<span class="sourceLineNo">111</span> } else if (BackupCommand.PROGRESS.name().equalsIgnoreCase(cmd)) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span> type = BackupCommand.PROGRESS;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> } else if (BackupCommand.SET.name().equalsIgnoreCase(cmd)) {<a name="line.113"></a>
-<span class="sourceLineNo">114</span> type = BackupCommand.SET;<a name="line.114"></a>
-<span class="sourceLineNo">115</span> } else if (BackupCommand.REPAIR.name().equalsIgnoreCase(cmd)) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span> type = BackupCommand.REPAIR;<a name="line.116"></a>
-<span class="sourceLineNo">117</span> } else if (BackupCommand.MERGE.name().equalsIgnoreCase(cmd)) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span> type = BackupCommand.MERGE;<a name="line.118"></a>
-<span class="sourceLineNo">119</span> } else {<a name="line.119"></a>
-<span class="sourceLineNo">120</span> System.out.println("Unsupported command for backup: " + cmd);<a name="line.120"></a>
-<span class="sourceLineNo">121</span> printToolUsage();<a name="line.121"></a>
-<span class="sourceLineNo">122</span> return -1;<a name="line.122"></a>
-<span class="sourceLineNo">123</span> }<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> // enable debug logging<a name="line.125"></a>
-<span class="sourceLineNo">126</span> if (this.cmd.hasOption(OPTION_DEBUG)) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span> LogManager.getLogger("org.apache.hadoop.hbase.backup").setLevel(Level.DEBUG);<a name="line.127"></a>
-<span class="sourceLineNo">128</span> } else {<a name="line.128"></a>
-<span class="sourceLineNo">129</span> LogManager.getLogger("org.apache.hadoop.hbase.backup").setLevel(Level.INFO);<a name="line.129"></a>
-<span class="sourceLineNo">130</span> }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span> BackupCommands.Command command = BackupCommands.createCommand(getConf(), type, this.cmd);<a name="line.132"></a>
-<span class="sourceLineNo">133</span> if (type == BackupCommand.CREATE && conf != null) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span> ((BackupCommands.CreateCommand) command).setConf(conf);<a name="line.134"></a>
-<span class="sourceLineNo">135</span> }<a name="line.135"></a>
-<span class="sourceLineNo">136</span> try {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> command.execute();<a name="line.137"></a>
-<span class="sourceLineNo">138</span> } catch (IOException e) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> if (e.getMessage().equals(BackupCommands.INCORRECT_USAGE)) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span> return -1;<a name="line.140"></a>
-<span class="sourceLineNo">141</span> }<a name="line.141"></a>
-<span class="sourceLineNo">142</span> throw e;<a name="line.142"></a>
-<span class="sourceLineNo">143</span> } finally {<a name="line.143"></a>
-<span class="sourceLineNo">144</span> command.finish();<a name="line.144"></a>
-<span class="sourceLineNo">145</span> }<a name="line.145"></a>
-<span class="sourceLineNo">146</span> return 0;<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> @Override<a name="line.149"></a>
-<span class="sourceLineNo">150</span> protected void addOptions() {<a name="line.150"></a>
-<span class="sourceLineNo">151</span> // define supported options<a name="line.151"></a>
-<span class="sourceLineNo">152</span> addOptNoArg(OPTION_DEBUG, OPTION_DEBUG_DESC);<a name="line.152"></a>
-<span class="sourceLineNo">153</span> addOptWithArg(OPTION_TABLE, OPTION_TABLE_DESC);<a name="line.153"></a>
-<span class="sourceLineNo">154</span> addOptWithArg(OPTION_BANDWIDTH, OPTION_BANDWIDTH_DESC);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> addOptWithArg(OPTION_WORKERS, OPTION_WORKERS_DESC);<a name="line.155"></a>
-<span class="sourceLineNo">156</span> addOptWithArg(OPTION_RECORD_NUMBER, OPTION_RECORD_NUMBER_DESC);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> addOptWithArg(OPTION_SET, OPTION_SET_DESC);<a name="line.157"></a>
-<span class="sourceLineNo">158</span> addOptWithArg(OPTION_PATH, OPTION_PATH_DESC);<a name="line.158"></a>
-<span class="sourceLineNo">159</span> addOptWithArg(OPTION_YARN_QUEUE_NAME, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.159"></a>
-<span class="sourceLineNo">160</span><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> @Override<a name="line.163"></a>
-<span class="sourceLineNo">164</span> protected void processOptions(CommandLine cmd) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span> this.cmd = cmd;<a name="line.165"></a>
+<span class="sourceLineNo">068</span> private static final Logger LOG = LoggerFactory.getLogger(BackupDriver.class);<a name="line.68"></a>
+<span class="sourceLineNo">069</span> private CommandLine cmd;<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span> public BackupDriver() throws IOException {<a name="line.71"></a>
+<span class="sourceLineNo">072</span> init();<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> protected void init() throws IOException {<a name="line.75"></a>
+<span class="sourceLineNo">076</span> // disable irrelevant loggers to avoid it mess up command output<a name="line.76"></a>
+<span class="sourceLineNo">077</span> LogUtils.disableZkAndClientLoggers();<a name="line.77"></a>
+<span class="sourceLineNo">078</span> }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span> private int parseAndRun(String[] args) throws IOException {<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span> // Check if backup is enabled<a name="line.82"></a>
+<span class="sourceLineNo">083</span> if (!BackupManager.isBackupEnabled(getConf())) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span> System.err.println(BackupRestoreConstants.ENABLE_BACKUP);<a name="line.84"></a>
+<span class="sourceLineNo">085</span> return -1;<a name="line.85"></a>
+<span class="sourceLineNo">086</span> }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span> System.out.println(BackupRestoreConstants.VERIFY_BACKUP);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span> String cmd = null;<a name="line.90"></a>
+<span class="sourceLineNo">091</span> String[] remainArgs = null;<a name="line.91"></a>
+<span class="sourceLineNo">092</span> if (args == null || args.length == 0) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span> printToolUsage();<a name="line.93"></a>
+<span class="sourceLineNo">094</span> return -1;<a name="line.94"></a>
+<span class="sourceLineNo">095</span> } else {<a name="line.95"></a>
+<span class="sourceLineNo">096</span> cmd = args[0];<a name="line.96"></a>
+<span class="sourceLineNo">097</span> remainArgs = new String[args.length - 1];<a name="line.97"></a>
+<span class="sourceLineNo">098</span> if (args.length > 1) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span> System.arraycopy(args, 1, remainArgs, 0, args.length - 1);<a name="line.99"></a>
+<span class="sourceLineNo">100</span> }<a name="line.100"></a>
+<span class="sourceLineNo">101</span> }<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span> BackupCommand type = BackupCommand.HELP;<a name="line.103"></a>
+<span class="sourceLineNo">104</span> if (BackupCommand.CREATE.name().equalsIgnoreCase(cmd)) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> type = BackupCommand.CREATE;<a name="line.105"></a>
+<span class="sourceLineNo">106</span> } else if (BackupCommand.HELP.name().equalsIgnoreCase(cmd)) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span> type = BackupCommand.HELP;<a name="line.107"></a>
+<span class="sourceLineNo">108</span> } else if (BackupCommand.DELETE.name().equalsIgnoreCase(cmd)) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span> type = BackupCommand.DELETE;<a name="line.109"></a>
+<span class="sourceLineNo">110</span> } else if (BackupCommand.DESCRIBE.name().equalsIgnoreCase(cmd)) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span> type = BackupCommand.DESCRIBE;<a name="line.111"></a>
+<span class="sourceLineNo">112</span> } else if (BackupCommand.HISTORY.name().equalsIgnoreCase(cmd)) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span> type = BackupCommand.HISTORY;<a name="line.113"></a>
+<span class="sourceLineNo">114</span> } else if (BackupCommand.PROGRESS.name().equalsIgnoreCase(cmd)) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span> type = BackupCommand.PROGRESS;<a name="line.115"></a>
+<span class="sourceLineNo">116</span> } else if (BackupCommand.SET.name().equalsIgnoreCase(cmd)) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span> type = BackupCommand.SET;<a name="line.117"></a>
+<span class="sourceLineNo">118</span> } else if (BackupCommand.REPAIR.name().equalsIgnoreCase(cmd)) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span> type = BackupCommand.REPAIR;<a name="line.119"></a>
+<span class="sourceLineNo">120</span> } else if (BackupCommand.MERGE.name().equalsIgnoreCase(cmd)) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span> type = BackupCommand.MERGE;<a name="line.121"></a>
+<span class="sourceLineNo">122</span> } else {<a name="line.122"></a>
+<span class="sourceLineNo">123</span> System.out.println("Unsupported command for backup: " + cmd);<a name="line.123"></a>
+<span class="sourceLineNo">124</span> printToolUsage();<a name="line.124"></a>
+<span class="sourceLineNo">125</span> return -1;<a name="line.125"></a>
+<span class="sourceLineNo">126</span> }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> // enable debug logging<a name="line.128"></a>
+<span class="sourceLineNo">129</span> if (this.cmd.hasOption(OPTION_DEBUG)) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> LogManager.getLogger("org.apache.hadoop.hbase.backup").setLevel(Level.DEBUG);<a name="line.130"></a>
+<span class="sourceLineNo">131</span> } else {<a name="line.131"></a>
+<span class="sourceLineNo">132</span> LogManager.getLogger("org.apache.hadoop.hbase.backup").setLevel(Level.INFO);<a name="line.132"></a>
+<span class="sourceLineNo">133</span> }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span> BackupCommands.Command command = BackupCommands.createCommand(getConf(), type, this.cmd);<a name="line.135"></a>
+<span class="sourceLineNo">136</span> if (type == BackupCommand.CREATE && conf != null) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span> ((BackupCommands.CreateCommand) command).setConf(conf);<a name="line.137"></a>
+<span class="sourceLineNo">138</span> }<a name="line.138"></a>
+<span class="sourceLineNo">139</span> try {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> command.execute();<a name="line.140"></a>
+<span class="sourceLineNo">141</span> } catch (IOException e) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span> if (e.getMessage().equals(BackupCommands.INCORRECT_USAGE)) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span> return -1;<a name="line.143"></a>
+<span class="sourceLineNo">144</span> }<a name="line.144"></a>
+<span class="sourceLineNo">145</span> throw e;<a name="line.145"></a>
+<span class="sourceLineNo">146</span> } finally {<a name="line.146"></a>
+<span class="sourceLineNo">147</span> command.finish();<a name="line.147"></a>
+<span class="sourceLineNo">148</span> }<a name="line.148"></a>
+<span class="sourceLineNo">149</span> return 0;<a name="line.149"></a>
+<span class="sourceLineNo">150</span> }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span> @Override<a name="line.152"></a>
+<span class="sourceLineNo">153</span> protected void addOptions() {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> // define supported options<a name="line.154"></a>
+<span class="sourceLineNo">155</span> addOptNoArg(OPTION_DEBUG, OPTION_DEBUG_DESC);<a name="line.155"></a>
+<span class="sourceLineNo">156</span> addOptWithArg(OPTION_TABLE, OPTION_TABLE_DESC);<a name="line.156"></a>
+<span class="sourceLineNo">157</span> addOptWithArg(OPTION_BANDWIDTH, OPTION_BANDWIDTH_DESC);<a name="line.157"></a>
+<span class="sourceLineNo">158</span> addOptWithArg(OPTION_LIST, OPTION_BACKUP_LIST_DESC);<a name="line.158"></a>
+<span class="sourceLineNo">159</span> addOptWithArg(OPTION_WORKERS, OPTION_WORKERS_DESC);<a name="line.159"></a>
+<span class="sourceLineNo">160</span> addOptWithArg(OPTION_RECORD_NUMBER, OPTION_RECORD_NUMBER_DESC);<a name="line.160"></a>
+<span class="sourceLineNo">161</span> addOptWithArg(OPTION_SET, OPTION_SET_DESC);<a name="line.161"></a>
+<span class="sourceLineNo">162</span> addOptWithArg(OPTION_PATH, OPTION_PATH_DESC);<a name="line.162"></a>
+<span class="sourceLineNo">163</span> addOptWithArg(OPTION_KEEP, OPTION_KEEP_DESC);<a name="line.163"></a>
+<span class="sourceLineNo">164</span> addOptWithArg(OPTION_YARN_QUEUE_NAME, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
<span class="sourceLineNo">166</span> }<a name="line.166"></a>
<span class="sourceLineNo">167</span><a name="line.167"></a>
<span class="sourceLineNo">168</span> @Override<a name="line.168"></a>
-<span class="sourceLineNo">169</span> protected int doWork() throws Exception {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> return parseAndRun(cmd.getArgs());<a name="line.170"></a>
+<span class="sourceLineNo">169</span> protected void processOptions(CommandLine cmd) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span> this.cmd = cmd;<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> public static void main(String[] args) throws Exception {<a name="line.173"></a>
-<span class="sourceLineNo">174</span> Configuration conf = HBaseConfiguration.create();<a name="line.174"></a>
-<span class="sourceLineNo">175</span> Path hbasedir = FSUtils.getRootDir(conf);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> URI defaultFs = hbasedir.getFileSystem(conf).getUri();<a name="line.176"></a>
-<span class="sourceLineNo">177</span> FSUtils.setFsDefault(conf, new Path(defaultFs));<a name="line.177"></a>
-<span class="sourceLineNo">178</span> int ret = ToolRunner.run(conf, new BackupDriver(), args);<a name="line.178"></a>
-<span class="sourceLineNo">179</span> System.exit(ret);<a name="line.179"></a>
-<span class="sourceLineNo">180</span> }<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span> @Override<a name="line.182"></a>
-<span class="sourceLineNo">183</span> public int run(String[] args) throws IOException {<a name="line.183"></a>
-<span class="sourceLineNo">184</span> if (conf == null) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span> LOG.error("Tool configuration is not initialized");<a name="line.185"></a>
-<span class="sourceLineNo">186</span> throw new NullPointerException("conf");<a name="line.186"></a>
-<span class="sourceLineNo">187</span> }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span> CommandLine cmd;<a name="line.189"></a>
-<span class="sourceLineNo">190</span> try {<a name="line.190"></a>
-<span class="sourceLineNo">191</span> // parse the command line arguments<a name="line.191"></a>
-<span class="sourceLineNo">192</span> cmd = parseArgs(args);<a name="line.192"></a>
-<span class="sourceLineNo">193</span> cmdLineArgs = args;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> } catch (Exception e) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span> System.err.println("Error when parsing command-line arguments: " + e.getMessage());<a name="line.195"></a>
-<span class="sourceLineNo">196</span> printToolUsage();<a name="line.196"></a>
-<span class="sourceLineNo">197</span> return EXIT_FAILURE;<a name="line.197"></a>
-<span class="sourceLineNo">198</span> }<a name="line.198"></a>
-<span class="sourceLineNo">199</span> processOptions(cmd);<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span> int ret = EXIT_FAILURE;<a name="line.201"></a>
-<span class="sourceLineNo">202</span> try {<a name="line.202"></a>
-<span class="sourceLineNo">203</span> ret = doWork();<a name="line.203"></a>
-<span class="sourceLineNo">204</span> } catch (Exception e) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> LOG.error("Error running command-line tool", e);<a name="line.205"></a>
-<span class="sourceLineNo">206</span> return EXIT_FAILURE;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span> return ret;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span> protected void printToolUsage() throws IOException {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> System.out.println(BackupCommands.USAGE);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>}<a name="line.214"></a>
+<span class="sourceLineNo">173</span> @Override<a name="line.173"></a>
+<span class="sourceLineNo">174</span> protected int doWork() throws Exception {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> return parseAndRun(cmd.getArgs());<a name="line.175"></a>
+<span class="sourceLineNo">176</span> }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span> public static void main(String[] args) throws Exception {<a name="line.178"></a>
+<span class="sourceLineNo">179</span> Configuration conf = HBaseConfiguration.create();<a name="line.179"></a>
+<span class="sourceLineNo">180</span> Path hbasedir = FSUtils.getRootDir(conf);<a name="line.180"></a>
+<span class="sourceLineNo">181</span> URI defaultFs = hbasedir.getFileSystem(conf).getUri();<a name="line.181"></a>
+<span class="sourceLineNo">182</span> FSUtils.setFsDefault(conf, new Path(defaultFs));<a name="line.182"></a>
+<span class="sourceLineNo">183</span> int ret = ToolRunner.run(conf, new BackupDriver(), args);<a name="line.183"></a>
+<span class="sourceLineNo">184</span> System.exit(ret);<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span> @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span> public int run(String[] args) throws IOException {<a name="line.188"></a>
+<span class="sourceLineNo">189</span> if (conf == null) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> LOG.error("Tool configuration is not initialized");<a name="line.190"></a>
+<span class="sourceLineNo">191</span> throw new NullPointerException("conf");<a name="line.191"></a>
+<span class="sourceLineNo">192</span> }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span> CommandLine cmd;<a name="line.194"></a>
+<span class="sourceLineNo">195</span> try {<a name="line.195"></a>
+<span class="sourceLineNo">196</span> // parse the command line arguments<a name="line.196"></a>
+<span class="sourceLineNo">197</span> cmd = parseArgs(args);<a name="line.197"></a>
+<span class="sourceLineNo">198</span> cmdLineArgs = args;<a name="line.198"></a>
+<span class="sourceLineNo">199</span> } catch (Exception e) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span> System.err.println("Error when parsing command-line arguments: " + e.getMessage());<a name="line.200"></a>
+<span class="sourceLineNo">201</span> printToolUsage();<a name="line.201"></a>
+<span class="sourceLineNo">202</span> return EXIT_FAILURE;<a name="line.202"></a>
+<span class="sourceLineNo">203</span> }<a name="line.203"></a>
+<span class="sourceLineNo">204</span> processOptions(cmd);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span> int ret = EXIT_FAILURE;<a name="line.206"></a>
+<span class="sourceLineNo">207</span> try {<a name="line.207"></a>
+<span class="sourceLineNo">208</span> ret = doWork();<a name="line.208"></a>
+<span class="sourceLineNo">209</span> } catch (Exception e) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span> LOG.error("Error running command-line tool", e);<a name="line.210"></a>
+<span class="sourceLineNo">211</span> return EXIT_FAILURE;<a name="line.211"></a>
+<span class="sourceLineNo">212</span> }<a name="line.212"></a>
+<span class="sourceLineNo">213</span> return ret;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span> protected void printToolUsage() throws IOException {<a name="line.216"></a>
+<span class="sourceLineNo">217</span> System.out.println(BackupCommands.USAGE);<a name="line.217"></a>
+<span class="sourceLineNo">218</span> }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>}<a name="line.219"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html
index e68377f..ef07f8f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html
@@ -73,63 +73,68 @@
<span class="sourceLineNo">065</span> String OPTION_TABLE_DESC = "Table name. If specified, only backup images,"<a name="line.65"></a>
<span class="sourceLineNo">066</span> + " which contain this table will be listed.";<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span> String OPTION_TABLE_LIST = "l";<a name="line.68"></a>
+<span class="sourceLineNo">068</span> String OPTION_LIST = "l";<a name="line.68"></a>
<span class="sourceLineNo">069</span> String OPTION_TABLE_LIST_DESC = "Table name list, comma-separated.";<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span> String OPTION_BANDWIDTH = "b";<a name="line.71"></a>
-<span class="sourceLineNo">072</span> String OPTION_BANDWIDTH_DESC = "Bandwidth per task (MapReduce task) in MB/s";<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span> String OPTION_WORKERS = "w";<a name="line.74"></a>
-<span class="sourceLineNo">075</span> String OPTION_WORKERS_DESC = "Number of parallel MapReduce tasks to execute";<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> String OPTION_RECORD_NUMBER = "n";<a name="line.77"></a>
-<span class="sourceLineNo">078</span> String OPTION_RECORD_NUMBER_DESC = "Number of records of backup history. Default: 10";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> String OPTION_PATH = "p";<a name="line.80"></a>
-<span class="sourceLineNo">081</span> String OPTION_PATH_DESC = "Backup destination root directory path";<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span> String OPTION_TABLE_MAPPING = "m";<a name="line.83"></a>
-<span class="sourceLineNo">084</span> String OPTION_TABLE_MAPPING_DESC =<a name="line.84"></a>
-<span class="sourceLineNo">085</span> "A comma separated list of target tables. "<a name="line.85"></a>
-<span class="sourceLineNo">086</span> + "If specified, each table in <tables> must have a mapping";<a name="line.86"></a>
-<span class="sourceLineNo">087</span> String OPTION_YARN_QUEUE_NAME = "q";<a name="line.87"></a>
-<span class="sourceLineNo">088</span> String OPTION_YARN_QUEUE_NAME_DESC = "Yarn queue name to run backup create command on";<a name="line.88"></a>
-<span class="sourceLineNo">089</span> String OPTION_YARN_QUEUE_NAME_RESTORE_DESC = "Yarn queue name to run backup restore command on";<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> String JOB_NAME_CONF_KEY = "mapreduce.job.name";<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span> String BACKUP_CONFIG_STRING = BackupRestoreConstants.BACKUP_ENABLE_KEY<a name="line.93"></a>
-<span class="sourceLineNo">094</span> + "=true\n"<a name="line.94"></a>
-<span class="sourceLineNo">095</span> + "hbase.master.logcleaner.plugins="<a name="line.95"></a>
-<span class="sourceLineNo">096</span> +"YOUR_PLUGINS,org.apache.hadoop.hbase.backup.master.BackupLogCleaner\n"<a name="line.96"></a>
-<span class="sourceLineNo">097</span> + "hbase.procedure.master.classes=YOUR_CLASSES,"<a name="line.97"></a>
-<span class="sourceLineNo">098</span> +"org.apache.hadoop.hbase.backup.master.LogRollMasterProcedureManager\n"<a name="line.98"></a>
-<span class="sourceLineNo">099</span> + "hbase.procedure.regionserver.classes=YOUR_CLASSES,"<a name="line.99"></a>
-<span class="sourceLineNo">100</span> + "org.apache.hadoop.hbase.backup.regionserver.LogRollRegionServerProcedureManager\n"<a name="line.100"></a>
-<span class="sourceLineNo">101</span> + "hbase.coprocessor.region.classes=YOUR_CLASSES,"<a name="line.101"></a>
-<span class="sourceLineNo">102</span> + "org.apache.hadoop.hbase.backup.BackupObserver\n"<a name="line.102"></a>
-<span class="sourceLineNo">103</span> + "and restart the cluster\n";<a name="line.103"></a>
-<span class="sourceLineNo">104</span> String ENABLE_BACKUP = "Backup is not enabled. To enable backup, "+<a name="line.104"></a>
-<span class="sourceLineNo">105</span> "in hbase-site.xml, set:\n "<a name="line.105"></a>
-<span class="sourceLineNo">106</span> + BACKUP_CONFIG_STRING;<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> String VERIFY_BACKUP = "Please make sure that backup is enabled on the cluster. To enable "<a name="line.108"></a>
-<span class="sourceLineNo">109</span> + "backup, in hbase-site.xml, set:\n " + BACKUP_CONFIG_STRING;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> /*<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * Delimiter in table name list in restore command<a name="line.112"></a>
-<span class="sourceLineNo">113</span> */<a name="line.113"></a>
-<span class="sourceLineNo">114</span> String TABLENAME_DELIMITER_IN_COMMAND = ",";<a name="line.114"></a>
+<span class="sourceLineNo">070</span> String OPTION_BACKUP_LIST_DESC = "Backup ids list, comma-separated.";<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span> String OPTION_BANDWIDTH = "b";<a name="line.72"></a>
+<span class="sourceLineNo">073</span> String OPTION_BANDWIDTH_DESC = "Bandwidth per task (MapReduce task) in MB/s";<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span> String OPTION_WORKERS = "w";<a name="line.75"></a>
+<span class="sourceLineNo">076</span> String OPTION_WORKERS_DESC = "Number of parallel MapReduce tasks to execute";<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span> String OPTION_RECORD_NUMBER = "n";<a name="line.78"></a>
+<span class="sourceLineNo">079</span> String OPTION_RECORD_NUMBER_DESC = "Number of records of backup history. Default: 10";<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> String OPTION_PATH = "p";<a name="line.81"></a>
+<span class="sourceLineNo">082</span> String OPTION_PATH_DESC = "Backup destination root directory path";<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> String OPTION_KEEP = "k";<a name="line.84"></a>
+<span class="sourceLineNo">085</span> String OPTION_KEEP_DESC = "Specifies maximum age of backup (in days) to keep during bulk delete";<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span> String OPTION_TABLE_MAPPING = "m";<a name="line.88"></a>
+<span class="sourceLineNo">089</span> String OPTION_TABLE_MAPPING_DESC =<a name="line.89"></a>
+<span class="sourceLineNo">090</span> "A comma separated list of target tables. "<a name="line.90"></a>
+<span class="sourceLineNo">091</span> + "If specified, each table in <tables> must have a mapping";<a name="line.91"></a>
+<span class="sourceLineNo">092</span> String OPTION_YARN_QUEUE_NAME = "q";<a name="line.92"></a>
+<span class="sourceLineNo">093</span> String OPTION_YARN_QUEUE_NAME_DESC = "Yarn queue name to run backup create command on";<a name="line.93"></a>
+<span class="sourceLineNo">094</span> String OPTION_YARN_QUEUE_NAME_RESTORE_DESC = "Yarn queue name to run backup restore command on";<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span> String JOB_NAME_CONF_KEY = "mapreduce.job.name";<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span> String BACKUP_CONFIG_STRING = BackupRestoreConstants.BACKUP_ENABLE_KEY<a name="line.98"></a>
+<span class="sourceLineNo">099</span> + "=true\n"<a name="line.99"></a>
+<span class="sourceLineNo">100</span> + "hbase.master.logcleaner.plugins="<a name="line.100"></a>
+<span class="sourceLineNo">101</span> +"YOUR_PLUGINS,org.apache.hadoop.hbase.backup.master.BackupLogCleaner\n"<a name="line.101"></a>
+<span class="sourceLineNo">102</span> + "hbase.procedure.master.classes=YOUR_CLASSES,"<a name="line.102"></a>
+<span class="sourceLineNo">103</span> +"org.apache.hadoop.hbase.backup.master.LogRollMasterProcedureManager\n"<a name="line.103"></a>
+<span class="sourceLineNo">104</span> + "hbase.procedure.regionserver.classes=YOUR_CLASSES,"<a name="line.104"></a>
+<span class="sourceLineNo">105</span> + "org.apache.hadoop.hbase.backup.regionserver.LogRollRegionServerProcedureManager\n"<a name="line.105"></a>
+<span class="sourceLineNo">106</span> + "hbase.coprocessor.region.classes=YOUR_CLASSES,"<a name="line.106"></a>
+<span class="sourceLineNo">107</span> + "org.apache.hadoop.hbase.backup.BackupObserver\n"<a name="line.107"></a>
+<span class="sourceLineNo">108</span> + "and restart the cluster\n";<a name="line.108"></a>
+<span class="sourceLineNo">109</span> String ENABLE_BACKUP = "Backup is not enabled. To enable backup, "+<a name="line.109"></a>
+<span class="sourceLineNo">110</span> "in hbase-site.xml, set:\n "<a name="line.110"></a>
+<span class="sourceLineNo">111</span> + BACKUP_CONFIG_STRING;<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span> String VERIFY_BACKUP = "Please make sure that backup is enabled on the cluster. To enable "<a name="line.113"></a>
+<span class="sourceLineNo">114</span> + "backup, in hbase-site.xml, set:\n " + BACKUP_CONFIG_STRING;<a name="line.114"></a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> String CONF_STAGING_ROOT = "snapshot.export.staging.root";<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span> String BACKUPID_PREFIX = "backup_";<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span> enum BackupCommand {<a name="line.120"></a>
-<span class="sourceLineNo">121</span> CREATE, CANCEL, DELETE, DESCRIBE, HISTORY, STATUS, CONVERT, MERGE, STOP, SHOW, HELP, PROGRESS,<a name="line.121"></a>
-<span class="sourceLineNo">122</span> SET, SET_ADD, SET_REMOVE, SET_DELETE, SET_DESCRIBE, SET_LIST, REPAIR<a name="line.122"></a>
-<span class="sourceLineNo">123</span> }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>}<a name="line.124"></a>
+<span class="sourceLineNo">116</span> /*<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * Delimiter in table name list in restore command<a name="line.117"></a>
+<span class="sourceLineNo">118</span> */<a name="line.118"></a>
+<span class="sourceLineNo">119</span> String TABLENAME_DELIMITER_IN_COMMAND = ",";<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span> String CONF_STAGING_ROOT = "snapshot.export.staging.root";<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span> String BACKUPID_PREFIX = "backup_";<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span> enum BackupCommand {<a name="line.125"></a>
+<span class="sourceLineNo">126</span> CREATE, CANCEL, DELETE, DESCRIBE, HISTORY, STATUS, CONVERT, MERGE, STOP, SHOW, HELP, PROGRESS,<a name="line.126"></a>
+<span class="sourceLineNo">127</span> SET, SET_ADD, SET_REMOVE, SET_DELETE, SET_DESCRIBE, SET_LIST, REPAIR<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>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html
index e68377f..ef07f8f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html
@@ -73,63 +73,68 @@
<span class="sourceLineNo">065</span> String OPTION_TABLE_DESC = "Table name. If specified, only backup images,"<a name="line.65"></a>
<span class="sourceLineNo">066</span> + " which contain this table will be listed.";<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span> String OPTION_TABLE_LIST = "l";<a name="line.68"></a>
+<span class="sourceLineNo">068</span> String OPTION_LIST = "l";<a name="line.68"></a>
<span class="sourceLineNo">069</span> String OPTION_TABLE_LIST_DESC = "Table name list, comma-separated.";<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span> String OPTION_BANDWIDTH = "b";<a name="line.71"></a>
-<span class="sourceLineNo">072</span> String OPTION_BANDWIDTH_DESC = "Bandwidth per task (MapReduce task) in MB/s";<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span> String OPTION_WORKERS = "w";<a name="line.74"></a>
-<span class="sourceLineNo">075</span> String OPTION_WORKERS_DESC = "Number of parallel MapReduce tasks to execute";<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> String OPTION_RECORD_NUMBER = "n";<a name="line.77"></a>
-<span class="sourceLineNo">078</span> String OPTION_RECORD_NUMBER_DESC = "Number of records of backup history. Default: 10";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> String OPTION_PATH = "p";<a name="line.80"></a>
-<span class="sourceLineNo">081</span> String OPTION_PATH_DESC = "Backup destination root directory path";<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span> String OPTION_TABLE_MAPPING = "m";<a name="line.83"></a>
-<span class="sourceLineNo">084</span> String OPTION_TABLE_MAPPING_DESC =<a name="line.84"></a>
-<span class="sourceLineNo">085</span> "A comma separated list of target tables. "<a name="line.85"></a>
-<span class="sourceLineNo">086</span> + "If specified, each table in <tables> must have a mapping";<a name="line.86"></a>
-<span class="sourceLineNo">087</span> String OPTION_YARN_QUEUE_NAME = "q";<a name="line.87"></a>
-<span class="sourceLineNo">088</span> String OPTION_YARN_QUEUE_NAME_DESC = "Yarn queue name to run backup create command on";<a name="line.88"></a>
-<span class="sourceLineNo">089</span> String OPTION_YARN_QUEUE_NAME_RESTORE_DESC = "Yarn queue name to run backup restore command on";<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> String JOB_NAME_CONF_KEY = "mapreduce.job.name";<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span> String BACKUP_CONFIG_STRING = BackupRestoreConstants.BACKUP_ENABLE_KEY<a name="line.93"></a>
-<span class="sourceLineNo">094</span> + "=true\n"<a name="line.94"></a>
-<span class="sourceLineNo">095</span> + "hbase.master.logcleaner.plugins="<a name="line.95"></a>
-<span class="sourceLineNo">096</span> +"YOUR_PLUGINS,org.apache.hadoop.hbase.backup.master.BackupLogCleaner\n"<a name="line.96"></a>
-<span class="sourceLineNo">097</span> + "hbase.procedure.master.classes=YOUR_CLASSES,"<a name="line.97"></a>
-<span class="sourceLineNo">098</span> +"org.apache.hadoop.hbase.backup.master.LogRollMasterProcedureManager\n"<a name="line.98"></a>
-<span class="sourceLineNo">099</span> + "hbase.procedure.regionserver.classes=YOUR_CLASSES,"<a name="line.99"></a>
-<span class="sourceLineNo">100</span> + "org.apache.hadoop.hbase.backup.regionserver.LogRollRegionServerProcedureManager\n"<a name="line.100"></a>
-<span class="sourceLineNo">101</span> + "hbase.coprocessor.region.classes=YOUR_CLASSES,"<a name="line.101"></a>
-<span class="sourceLineNo">102</span> + "org.apache.hadoop.hbase.backup.BackupObserver\n"<a name="line.102"></a>
-<span class="sourceLineNo">103</span> + "and restart the cluster\n";<a name="line.103"></a>
-<span class="sourceLineNo">104</span> String ENABLE_BACKUP = "Backup is not enabled. To enable backup, "+<a name="line.104"></a>
-<span class="sourceLineNo">105</span> "in hbase-site.xml, set:\n "<a name="line.105"></a>
-<span class="sourceLineNo">106</span> + BACKUP_CONFIG_STRING;<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> String VERIFY_BACKUP = "Please make sure that backup is enabled on the cluster. To enable "<a name="line.108"></a>
-<span class="sourceLineNo">109</span> + "backup, in hbase-site.xml, set:\n " + BACKUP_CONFIG_STRING;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> /*<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * Delimiter in table name list in restore command<a name="line.112"></a>
-<span class="sourceLineNo">113</span> */<a name="line.113"></a>
-<span class="sourceLineNo">114</span> String TABLENAME_DELIMITER_IN_COMMAND = ",";<a name="line.114"></a>
+<span class="sourceLineNo">070</span> String OPTION_BACKUP_LIST_DESC = "Backup ids list, comma-separated.";<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span> String OPTION_BANDWIDTH = "b";<a name="line.72"></a>
+<span class="sourceLineNo">073</span> String OPTION_BANDWIDTH_DESC = "Bandwidth per task (MapReduce task) in MB/s";<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span> String OPTION_WORKERS = "w";<a name="line.75"></a>
+<span class="sourceLineNo">076</span> String OPTION_WORKERS_DESC = "Number of parallel MapReduce tasks to execute";<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span> String OPTION_RECORD_NUMBER = "n";<a name="line.78"></a>
+<span class="sourceLineNo">079</span> String OPTION_RECORD_NUMBER_DESC = "Number of records of backup history. Default: 10";<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> String OPTION_PATH = "p";<a name="line.81"></a>
+<span class="sourceLineNo">082</span> String OPTION_PATH_DESC = "Backup destination root directory path";<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> String OPTION_KEEP = "k";<a name="line.84"></a>
+<span class="sourceLineNo">085</span> String OPTION_KEEP_DESC = "Specifies maximum age of backup (in days) to keep during bulk delete";<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span> String OPTION_TABLE_MAPPING = "m";<a name="line.88"></a>
+<span class="sourceLineNo">089</span> String OPTION_TABLE_MAPPING_DESC =<a name="line.89"></a>
+<span class="sourceLineNo">090</span> "A comma separated list of target tables. "<a name="line.90"></a>
+<span class="sourceLineNo">091</span> + "If specified, each table in <tables> must have a mapping";<a name="line.91"></a>
+<span class="sourceLineNo">092</span> String OPTION_YARN_QUEUE_NAME = "q";<a name="line.92"></a>
+<span class="sourceLineNo">093</span> String OPTION_YARN_QUEUE_NAME_DESC = "Yarn queue name to run backup create command on";<a name="line.93"></a>
+<span class="sourceLineNo">094</span> String OPTION_YARN_QUEUE_NAME_RESTORE_DESC = "Yarn queue name to run backup restore command on";<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span> String JOB_NAME_CONF_KEY = "mapreduce.job.name";<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span> String BACKUP_CONFIG_STRING = BackupRestoreConstants.BACKUP_ENABLE_KEY<a name="line.98"></a>
+<span class="sourceLineNo">099</span> + "=true\n"<a name="line.99"></a>
+<span class="sourceLineNo">100</span> + "hbase.master.logcleaner.plugins="<a name="line.100"></a>
+<span class="sourceLineNo">101</span> +"YOUR_PLUGINS,org.apache.hadoop.hbase.backup.master.BackupLogCleaner\n"<a name="line.101"></a>
+<span class="sourceLineNo">102</span> + "hbase.procedure.master.classes=YOUR_CLASSES,"<a name="line.102"></a>
+<span class="sourceLineNo">103</span> +"org.apache.hadoop.hbase.backup.master.LogRollMasterProcedureManager\n"<a name="line.103"></a>
+<span class="sourceLineNo">104</span> + "hbase.procedure.regionserver.classes=YOUR_CLASSES,"<a name="line.104"></a>
+<span class="sourceLineNo">105</span> + "org.apache.hadoop.hbase.backup.regionserver.LogRollRegionServerProcedureManager\n"<a name="line.105"></a>
+<span class="sourceLineNo">106</span> + "hbase.coprocessor.region.classes=YOUR_CLASSES,"<a name="line.106"></a>
+<span class="sourceLineNo">107</span> + "org.apache.hadoop.hbase.backup.BackupObserver\n"<a name="line.107"></a>
+<span class="sourceLineNo">108</span> + "and restart the cluster\n";<a name="line.108"></a>
+<span class="sourceLineNo">109</span> String ENABLE_BACKUP = "Backup is not enabled. To enable backup, "+<a name="line.109"></a>
+<span class="sourceLineNo">110</span> "in hbase-site.xml, set:\n "<a name="line.110"></a>
+<span class="sourceLineNo">111</span> + BACKUP_CONFIG_STRING;<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span> String VERIFY_BACKUP = "Please make sure that backup is enabled on the cluster. To enable "<a name="line.113"></a>
+<span class="sourceLineNo">114</span> + "backup, in hbase-site.xml, set:\n " + BACKUP_CONFIG_STRING;<a name="line.114"></a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> String CONF_STAGING_ROOT = "snapshot.export.staging.root";<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span> String BACKUPID_PREFIX = "backup_";<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span> enum BackupCommand {<a name="line.120"></a>
-<span class="sourceLineNo">121</span> CREATE, CANCEL, DELETE, DESCRIBE, HISTORY, STATUS, CONVERT, MERGE, STOP, SHOW, HELP, PROGRESS,<a name="line.121"></a>
-<span class="sourceLineNo">122</span> SET, SET_ADD, SET_REMOVE, SET_DELETE, SET_DESCRIBE, SET_LIST, REPAIR<a name="line.122"></a>
-<span class="sourceLineNo">123</span> }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>}<a name="line.124"></a>
+<span class="sourceLineNo">116</span> /*<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * Delimiter in table name list in restore command<a name="line.117"></a>
+<span class="sourceLineNo">118</span> */<a name="line.118"></a>
+<span class="sourceLineNo">119</span> String TABLENAME_DELIMITER_IN_COMMAND = ",";<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span> String CONF_STAGING_ROOT = "snapshot.export.staging.root";<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span> String BACKUPID_PREFIX = "backup_";<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span> enum BackupCommand {<a name="line.125"></a>
+<span class="sourceLineNo">126</span> CREATE, CANCEL, DELETE, DESCRIBE, HISTORY, STATUS, CONVERT, MERGE, STOP, SHOW, HELP, PROGRESS,<a name="line.126"></a>
+<span class="sourceLineNo">127</span> SET, SET_ADD, SET_REMOVE, SET_DELETE, SET_DESCRIBE, SET_LIST, REPAIR<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>
[12/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
index 83c17c0..9df0225 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
@@ -54,323 +54,362 @@
<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> */<a name="line.57"></a>
-<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
-<span class="sourceLineNo">059</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
-<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
-<span class="sourceLineNo">061</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
-<span class="sourceLineNo">062</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span> protected final CompressionContext compression;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> protected final ByteStringUncompressor statelessUncompressor = new ByteStringUncompressor() {<a name="line.65"></a>
-<span class="sourceLineNo">066</span> @Override<a name="line.66"></a>
-<span class="sourceLineNo">067</span> public byte[] uncompress(ByteString data, Dictionary dict) throws IOException {<a name="line.67"></a>
-<span class="sourceLineNo">068</span> return WALCellCodec.uncompressByteString(data, dict);<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><a name="line.71"></a>
-<span class="sourceLineNo">072</span> /**<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.73"></a>
-<span class="sourceLineNo">074</span> */<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public WALCellCodec() {<a name="line.75"></a>
-<span class="sourceLineNo">076</span> this.compression = null;<a name="line.76"></a>
-<span class="sourceLineNo">077</span> }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span> /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.80"></a>
-<span class="sourceLineNo">081</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * @param conf configuration to configure <tt>this</tt><a name="line.82"></a>
-<span class="sourceLineNo">083</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * compression<a name="line.84"></a>
-<span class="sourceLineNo">085</span> */<a name="line.85"></a>
-<span class="sourceLineNo">086</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.86"></a>
-<span class="sourceLineNo">087</span> this.compression = compression;<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 String getWALCellCodecClass(Configuration conf) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * Fully prepares the codec for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * uses a {@link WALCellCodec}.<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * @param cellCodecClsName name of codec<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * @param compression compression the codec should use<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * @return a {@link WALCellCodec} ready for use.<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.104"></a>
-<span class="sourceLineNo">105</span> */<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.107"></a>
-<span class="sourceLineNo">108</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> if (cellCodecClsName == null) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.112"></a>
-<span class="sourceLineNo">113</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.113"></a>
-<span class="sourceLineNo">114</span> }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> /**<a name="line.116"></a>
-<span class="sourceLineNo">117</span> * Create and setup a {@link WALCellCodec} from the<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * CompressionContext.<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * Fully prepares the codec for use.<a name="line.120"></a>
-<span class="sourceLineNo">121</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * uses a {@link WALCellCodec}.<a name="line.122"></a>
-<span class="sourceLineNo">123</span> * @param compression compression the codec should use<a name="line.123"></a>
-<span class="sourceLineNo">124</span> * @return a {@link WALCellCodec} ready for use.<a name="line.124"></a>
-<span class="sourceLineNo">125</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.125"></a>
-<span class="sourceLineNo">126</span> */<a name="line.126"></a>
-<span class="sourceLineNo">127</span> public static WALCellCodec create(Configuration conf,<a name="line.127"></a>
-<span class="sourceLineNo">128</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.128"></a>
-<span class="sourceLineNo">129</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.129"></a>
-<span class="sourceLineNo">130</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.130"></a>
-<span class="sourceLineNo">131</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span> public interface ByteStringCompressor {<a name="line.134"></a>
-<span class="sourceLineNo">135</span> ByteString compress(byte[] data, Dictionary dict) throws IOException;<a name="line.135"></a>
-<span class="sourceLineNo">136</span> }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span> public interface ByteStringUncompressor {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> byte[] uncompress(ByteString data, Dictionary dict) throws IOException;<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> // TODO: it sucks that compression context is in WAL.Entry. It'd be nice if it was here.<a name="line.142"></a>
-<span class="sourceLineNo">143</span> // Dictionary could be gotten by enum; initially, based on enum, context would create<a name="line.143"></a>
-<span class="sourceLineNo">144</span> // an array of dictionaries.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> public ByteString toByteString() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.147"></a>
-<span class="sourceLineNo">148</span> // them.<a name="line.148"></a>
-<span class="sourceLineNo">149</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.149"></a>
-<span class="sourceLineNo">150</span> }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> @Override<a name="line.152"></a>
-<span class="sourceLineNo">153</span> public ByteString compress(byte[] data, Dictionary dict) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span> writeCompressed(data, dict);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.155"></a>
-<span class="sourceLineNo">156</span> // them.<a name="line.156"></a>
-<span class="sourceLineNo">157</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.157"></a>
-<span class="sourceLineNo">158</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.158"></a>
-<span class="sourceLineNo">159</span> return result;<a name="line.159"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
+<span class="sourceLineNo">060</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
+<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
+<span class="sourceLineNo">062</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
+<span class="sourceLineNo">063</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span> protected final CompressionContext compression;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.68"></a>
+<span class="sourceLineNo">069</span> */<a name="line.69"></a>
+<span class="sourceLineNo">070</span> public WALCellCodec() {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> this.compression = null;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<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> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.75"></a>
+<span class="sourceLineNo">076</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * @param conf configuration to configure <tt>this</tt><a name="line.77"></a>
+<span class="sourceLineNo">078</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * compression<a name="line.79"></a>
+<span class="sourceLineNo">080</span> */<a name="line.80"></a>
+<span class="sourceLineNo">081</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span> this.compression = compression;<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 getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * Fully prepares the codec for use.<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * uses a {@link WALCellCodec}.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * @param cellCodecClsName name of codec<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * @param compression compression the codec should use<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.99"></a>
+<span class="sourceLineNo">100</span> */<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
+<span class="sourceLineNo">103</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span> if (cellCodecClsName == null) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
+<span class="sourceLineNo">106</span> }<a name="line.106"></a>
+<span class="sourceLineNo">107</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
+<span class="sourceLineNo">108</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * CompressionContext.<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * Fully prepares the codec for use.<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * uses a {@link WALCellCodec}.<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * @param compression compression the codec should use<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
+<span class="sourceLineNo">121</span> */<a name="line.121"></a>
+<span class="sourceLineNo">122</span> public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
+<span class="sourceLineNo">123</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
+<span class="sourceLineNo">125</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
+<span class="sourceLineNo">126</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> public interface ByteStringCompressor {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> ByteString compress(byte[] data, Enum dictIndex) throws IOException;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> public interface ByteStringUncompressor {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span> static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> CompressionContext compressionContext;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> this.compressionContext = compressionContext;<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> @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span> public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> private CompressionContext compressionContext;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> this.compressionContext = compressionContext;<a name="line.154"></a>
+<span class="sourceLineNo">155</span> }<a name="line.155"></a>
+<span class="sourceLineNo">156</span> public ByteString toByteString() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
+<span class="sourceLineNo">158</span> // them.<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
<span class="sourceLineNo">160</span> }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span> private void writeCompressed(byte[] data, Dictionary dict) throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span> assert dict != null;<a name="line.163"></a>
-<span class="sourceLineNo">164</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.164"></a>
-<span class="sourceLineNo">165</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.166"></a>
-<span class="sourceLineNo">167</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> write(data, 0, data.length);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> } else {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> StreamUtils.writeShort(this, dictIdx);<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> }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.175"></a>
-<span class="sourceLineNo">176</span> InputStream in = bs.newInput();<a name="line.176"></a>
-<span class="sourceLineNo">177</span> byte status = (byte)in.read();<a name="line.177"></a>
-<span class="sourceLineNo">178</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.179"></a>
-<span class="sourceLineNo">180</span> int bytesRead = in.read(arr);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> if (bytesRead != arr.length) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.184"></a>
-<span class="sourceLineNo">185</span> return arr;<a name="line.185"></a>
-<span class="sourceLineNo">186</span> } else {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.187"></a>
-<span class="sourceLineNo">188</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.188"></a>
-<span class="sourceLineNo">189</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.189"></a>
-<span class="sourceLineNo">190</span> if (entry == null) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.191"></a>
-<span class="sourceLineNo">192</span> }<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return entry;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.197"></a>
-<span class="sourceLineNo">198</span> private final CompressionContext compression;<a name="line.198"></a>
-<span class="sourceLineNo">199</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> super(out);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> this.compression = compression;<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> @Override<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public void write(Cell cell) throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> // We first write the KeyValue infrastructure as VInts.<a name="line.206"></a>
-<span class="sourceLineNo">207</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.207"></a>
-<span class="sourceLineNo">208</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.208"></a>
-<span class="sourceLineNo">209</span> // To support tags<a name="line.209"></a>
-<span class="sourceLineNo">210</span> int tagsLength = cell.getTagsLength();<a name="line.210"></a>
-<span class="sourceLineNo">211</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.211"></a>
-<span class="sourceLineNo">212</span> PrivateCellUtil.compressRow(out, cell, compression.rowDict);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> PrivateCellUtil.compressFamily(out, cell, compression.familyDict);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> PrivateCellUtil.compressQualifier(out, cell, compression.qualifierDict);<a name="line.214"></a>
-<span class="sourceLineNo">215</span> // Write timestamp, type and value as uncompressed.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.216"></a>
-<span class="sourceLineNo">217</span> out.write(cell.getTypeByte());<a name="line.217"></a>
-<span class="sourceLineNo">218</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.218"></a>
-<span class="sourceLineNo">219</span> if (tagsLength > 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span> if (compression.tagCompressionContext != null) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span> // Write tags using Dictionary compression<a name="line.221"></a>
-<span class="sourceLineNo">222</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.222"></a>
-<span class="sourceLineNo">223</span> } else {<a name="line.223"></a>
-<span class="sourceLineNo">224</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.224"></a>
-<span class="sourceLineNo">225</span> // it is.<a name="line.225"></a>
-<span class="sourceLineNo">226</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.226"></a>
-<span class="sourceLineNo">227</span> }<a name="line.227"></a>
-<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span> public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> writeCompressed(data, dictIndex);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
+<span class="sourceLineNo">166</span> // them.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
+<span class="sourceLineNo">168</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> return result;<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> private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> assert dict != null;<a name="line.174"></a>
+<span class="sourceLineNo">175</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> write(data, 0, data.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> }<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> }<a name="line.191"></a>
+<span class="sourceLineNo">192</span> }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span> static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span> @Override<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> return data.toByteArray();<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span> }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> InputStream in = bs.newInput();<a name="line.203"></a>
+<span class="sourceLineNo">204</span> byte status = (byte)in.read();<a name="line.204"></a>
+<span class="sourceLineNo">205</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
+<span class="sourceLineNo">207</span> int bytesRead = in.read(arr);<a name="line.207"></a>
+<span class="sourceLineNo">208</span> if (bytesRead != arr.length) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
+<span class="sourceLineNo">212</span> return arr;<a name="line.212"></a>
+<span class="sourceLineNo">213</span> } else {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
+<span class="sourceLineNo">216</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
+<span class="sourceLineNo">217</span> if (entry == null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> }<a name="line.219"></a>
+<span class="sourceLineNo">220</span> return entry;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> private final CompressionContext compression;<a name="line.225"></a>
+<span class="sourceLineNo">226</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> super(out);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> this.compression = compression;<a name="line.228"></a>
<span class="sourceLineNo">229</span> }<a name="line.229"></a>
-<span class="sourceLineNo">230</span> }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.232"></a>
-<span class="sourceLineNo">233</span> private final CompressionContext compression;<a name="line.233"></a>
-<span class="sourceLineNo">234</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> super(in);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> this.compression = compression;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> }<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span> @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span> protected Cell parseCell() throws IOException {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.241"></a>
-<span class="sourceLineNo">242</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> int length = 0;<a name="line.245"></a>
-<span class="sourceLineNo">246</span> if(tagsLength == 0) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.247"></a>
-<span class="sourceLineNo">248</span> } else {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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> byte[] backingArray = new byte[length];<a name="line.252"></a>
-<span class="sourceLineNo">253</span> int pos = 0;<a name="line.253"></a>
-<span class="sourceLineNo">254</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span> // the row<a name="line.257"></a>
-<span class="sourceLineNo">258</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT, compression.rowDict);<a name="line.258"></a>
-<span class="sourceLineNo">259</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.259"></a>
-<span class="sourceLineNo">260</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.260"></a>
-<span class="sourceLineNo">261</span> pos += elemLen;<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> // family<a name="line.263"></a>
-<span class="sourceLineNo">264</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE, compression.familyDict);<a name="line.264"></a>
-<span class="sourceLineNo">265</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> pos += elemLen;<a name="line.267"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span> public void write(Cell cell) throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
+<span class="sourceLineNo">235</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
+<span class="sourceLineNo">236</span> // To support tags<a name="line.236"></a>
+<span class="sourceLineNo">237</span> int tagsLength = cell.getTagsLength();<a name="line.237"></a>
+<span class="sourceLineNo">238</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
+<span class="sourceLineNo">240</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
+<span class="sourceLineNo">241</span> PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
+<span class="sourceLineNo">242</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
+<span class="sourceLineNo">243</span> PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
+<span class="sourceLineNo">244</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
+<span class="sourceLineNo">245</span> // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
+<span class="sourceLineNo">246</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
+<span class="sourceLineNo">247</span> out.write(cell.getTypeByte());<a name="line.247"></a>
+<span class="sourceLineNo">248</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
+<span class="sourceLineNo">249</span> if (tagsLength > 0) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> if (compression.tagCompressionContext != null) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span> // Write tags using Dictionary compression<a name="line.251"></a>
+<span class="sourceLineNo">252</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> } else {<a name="line.253"></a>
+<span class="sourceLineNo">254</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
+<span class="sourceLineNo">255</span> // it is.<a name="line.255"></a>
+<span class="sourceLineNo">256</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
+<span class="sourceLineNo">257</span> }<a name="line.257"></a>
+<span class="sourceLineNo">258</span> }<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private final CompressionContext compression;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span> super(in);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.compression = compression;<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span> // qualifier<a name="line.269"></a>
-<span class="sourceLineNo">270</span> elemLen = readIntoArray(backingArray, pos, compression.qualifierDict);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> pos += elemLen;<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // timestamp, type and value<a name="line.273"></a>
-<span class="sourceLineNo">274</span> int tsTypeValLen = length - pos;<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (tagsLength > 0) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.276"></a>
-<span class="sourceLineNo">277</span> }<a name="line.277"></a>
-<span class="sourceLineNo">278</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.278"></a>
-<span class="sourceLineNo">279</span> pos += tsTypeValLen;<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span> // tags<a name="line.281"></a>
-<span class="sourceLineNo">282</span> if (tagsLength > 0) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.283"></a>
-<span class="sourceLineNo">284</span> if (compression.tagCompressionContext != null) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> } else {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span> return new KeyValue(backingArray, 0, length);<a name="line.290"></a>
-<span class="sourceLineNo">291</span> }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> byte status = (byte)in.read();<a name="line.294"></a>
-<span class="sourceLineNo">295</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span> // status byte indicating that data to be read is not in dictionary.<a name="line.296"></a>
-<span class="sourceLineNo">297</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> int length = StreamUtils.readRawVarint32(in);<a name="line.298"></a>
-<span class="sourceLineNo">299</span> IOUtils.readFully(in, to, offset, length);<a name="line.299"></a>
-<span class="sourceLineNo">300</span> dict.addEntry(to, offset, length);<a name="line.300"></a>
-<span class="sourceLineNo">301</span> return length;<a name="line.301"></a>
-<span class="sourceLineNo">302</span> } else {<a name="line.302"></a>
-<span class="sourceLineNo">303</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.303"></a>
-<span class="sourceLineNo">304</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.304"></a>
-<span class="sourceLineNo">305</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.305"></a>
-<span class="sourceLineNo">306</span> if (entry == null) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span> // now we write the uncompressed value.<a name="line.309"></a>
-<span class="sourceLineNo">310</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> return entry.length;<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span> }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private static void checkLength(int len, int max) throws IOException {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> if (len < 0 || len > max) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> }<a name="line.319"></a>
-<span class="sourceLineNo">320</span> }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.322"></a>
-<span class="sourceLineNo">323</span> public EnsureKvEncoder(OutputStream out) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> super(out);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> @Override<a name="line.326"></a>
-<span class="sourceLineNo">327</span> public void write(Cell cell) throws IOException {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> checkFlushed();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> // Make sure to write tags into WAL<a name="line.329"></a>
-<span class="sourceLineNo">330</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.330"></a>
-<span class="sourceLineNo">331</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> @Override<a name="line.335"></a>
-<span class="sourceLineNo">336</span> public Decoder getDecoder(InputStream is) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span> return (compression == null)<a name="line.337"></a>
-<span class="sourceLineNo">338</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.338"></a>
-<span class="sourceLineNo">339</span> }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span> @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> return getDecoder(new ByteBuffInputStream(buf));<a name="line.343"></a>
-<span class="sourceLineNo">344</span> }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span> public Encoder getEncoder(OutputStream os) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.348"></a>
-<span class="sourceLineNo">349</span> : new ByteBufferWriterOutputStream(os);<a name="line.349"></a>
-<span class="sourceLineNo">350</span> if (compression == null) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span> return new EnsureKvEncoder(os);<a name="line.351"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> protected Cell parseCell() throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
+<span class="sourceLineNo">275</span> int length = 0;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> if(tagsLength == 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span> byte[] backingArray = new byte[length];<a name="line.282"></a>
+<span class="sourceLineNo">283</span> int pos = 0;<a name="line.283"></a>
+<span class="sourceLineNo">284</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> // the row<a name="line.287"></a>
+<span class="sourceLineNo">288</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
+<span class="sourceLineNo">289</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
+<span class="sourceLineNo">290</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
+<span class="sourceLineNo">292</span> pos += elemLen;<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span> // family<a name="line.294"></a>
+<span class="sourceLineNo">295</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
+<span class="sourceLineNo">296</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
+<span class="sourceLineNo">297</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> pos += elemLen;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // qualifier<a name="line.301"></a>
+<span class="sourceLineNo">302</span> elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
+<span class="sourceLineNo">303</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
+<span class="sourceLineNo">304</span> pos += elemLen;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span> // timestamp, type and value<a name="line.306"></a>
+<span class="sourceLineNo">307</span> int tsTypeValLen = length - pos;<a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (tagsLength > 0) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
+<span class="sourceLineNo">310</span> }<a name="line.310"></a>
+<span class="sourceLineNo">311</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> pos += tsTypeValLen;<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span> // tags<a name="line.314"></a>
+<span class="sourceLineNo">315</span> if (tagsLength > 0) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> if (compression.tagCompressionContext != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> byte status = (byte)in.read();<a name="line.327"></a>
+<span class="sourceLineNo">328</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
+<span class="sourceLineNo">331</span> int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span> dict.addEntry(to, offset, length);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> return length;<a name="line.334"></a>
+<span class="sourceLineNo">335</span> } else {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
+<span class="sourceLineNo">337</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
+<span class="sourceLineNo">338</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (entry == null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> // now we write the uncompressed value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> return entry.length;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> }<a name="line.345"></a>
+<span class="sourceLineNo">346</span> }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span> private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> if (len < 0 || len > max) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span> }<a name="line.352"></a>
-<span class="sourceLineNo">353</span> return new CompressedKvEncoder(os, compression);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.357"></a>
-<span class="sourceLineNo">358</span> return new BaosAndCompressor();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.362"></a>
-<span class="sourceLineNo">363</span> return this.statelessUncompressor;<a name="line.363"></a>
-<span class="sourceLineNo">364</span> }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>}<a name="line.365"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span> super(out);<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span> @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span> public void write(Cell cell) throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> checkFlushed();<a name="line.361"></a>
+<span class="sourceLineNo">362</span> // Make sure to write tags into WAL<a name="line.362"></a>
+<span class="sourceLineNo">363</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
+<span class="sourceLineNo">364</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span> @Override<a name="line.368"></a>
+<span class="sourceLineNo">369</span> public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> return (compression == null)<a name="line.370"></a>
+<span class="sourceLineNo">371</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return getDecoder(new ByteBuffInputStream(buf));<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> @Override<a name="line.379"></a>
+<span class="sourceLineNo">380</span> public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
+<span class="sourceLineNo">382</span> : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
+<span class="sourceLineNo">383</span> if (compression == null) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> return new EnsureKvEncoder(os);<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span> return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> return new BaosAndCompressor(compression);<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span> return new StatelessUncompressor(compression);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span> public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return new NoneCompressor();<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> return new NoneUncompressor();<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>}<a name="line.404"></a>
[20/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
index 42d0637..eb16038 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
@@ -80,21 +80,21 @@
<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.72"></a>
<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.73"></a>
<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.ScheduledChore;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ServerName;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.Result;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.89"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ServerName;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableName;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.Result;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.89"></a>
<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.90"></a>
<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.91"></a>
<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.92"></a>
@@ -220,3477 +220,3481 @@
<span class="sourceLineNo">212</span><a name="line.212"></a>
<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.213"></a>
<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>/**<a name="line.221"></a>
-<span class="sourceLineNo">222</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.222"></a>
-<span class="sourceLineNo">223</span> * master. If many masters are started, all compete. Whichever wins goes on to<a name="line.223"></a>
-<span class="sourceLineNo">224</span> * run the cluster. All others park themselves in their constructor until<a name="line.224"></a>
-<span class="sourceLineNo">225</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * zookeeper. Thereafter, all running master jostle to take over master role.<a name="line.226"></a>
-<span class="sourceLineNo">227</span> *<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * <p>The Master can be asked shutdown the cluster. See {@link #shutdown()}. In<a name="line.228"></a>
-<span class="sourceLineNo">229</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.229"></a>
-<span class="sourceLineNo">230</span> * all reporting in that they are down. This master will then shut itself down.<a name="line.230"></a>
-<span class="sourceLineNo">231</span> *<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * <p>You can also shutdown just this master. Call {@link #stopMaster()}.<a name="line.232"></a>
-<span class="sourceLineNo">233</span> *<a name="line.233"></a>
-<span class="sourceLineNo">234</span> * @see org.apache.zookeeper.Watcher<a name="line.234"></a>
-<span class="sourceLineNo">235</span> */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.236"></a>
-<span class="sourceLineNo">237</span>@SuppressWarnings("deprecation")<a name="line.237"></a>
-<span class="sourceLineNo">238</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private static Logger LOG = LoggerFactory.getLogger(HMaster.class.getName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.243"></a>
-<span class="sourceLineNo">244</span> */<a name="line.244"></a>
-<span class="sourceLineNo">245</span> private static class InitializationMonitor extends HasThread {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.246"></a>
-<span class="sourceLineNo">247</span> public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.247"></a>
-<span class="sourceLineNo">248</span> public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<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> * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * true, do nothing otherwise.<a name="line.252"></a>
-<span class="sourceLineNo">253</span> */<a name="line.253"></a>
-<span class="sourceLineNo">254</span> public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.254"></a>
-<span class="sourceLineNo">255</span> public static final boolean HALT_DEFAULT = false;<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span> private final HMaster master;<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private final long timeout;<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private final boolean haltOnTimeout;<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span> /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.261"></a>
-<span class="sourceLineNo">262</span> InitializationMonitor(HMaster master) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span> super("MasterInitializationMonitor");<a name="line.263"></a>
-<span class="sourceLineNo">264</span> this.master = master;<a name="line.264"></a>
-<span class="sourceLineNo">265</span> this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.265"></a>
-<span class="sourceLineNo">266</span> this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> this.setDaemon(true);<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> @Override<a name="line.270"></a>
-<span class="sourceLineNo">271</span> public void run() {<a name="line.271"></a>
-<span class="sourceLineNo">272</span> try {<a name="line.272"></a>
-<span class="sourceLineNo">273</span> while (!master.isStopped() && master.isActiveMaster()) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span> Thread.sleep(timeout);<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (master.isInitialized()) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.276"></a>
-<span class="sourceLineNo">277</span> } else {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.278"></a>
-<span class="sourceLineNo">279</span> + " consider submitting a bug report including a thread dump of this process.");<a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (haltOnTimeout) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span> LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.281"></a>
-<span class="sourceLineNo">282</span> Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.282"></a>
-<span class="sourceLineNo">283</span> System.exit(-1);<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> } catch (InterruptedException ie) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span> LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span> // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.293"></a>
-<span class="sourceLineNo">294</span> //instance into web context.<a name="line.294"></a>
-<span class="sourceLineNo">295</span> public static final String MASTER = "master";<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span> // Manager and zk listener for master election<a name="line.297"></a>
-<span class="sourceLineNo">298</span> private final ActiveMasterManager activeMasterManager;<a name="line.298"></a>
-<span class="sourceLineNo">299</span> // Region server tracker<a name="line.299"></a>
-<span class="sourceLineNo">300</span> RegionServerTracker regionServerTracker;<a name="line.300"></a>
-<span class="sourceLineNo">301</span> // Draining region server tracker<a name="line.301"></a>
-<span class="sourceLineNo">302</span> private DrainingServerTracker drainingServerTracker;<a name="line.302"></a>
-<span class="sourceLineNo">303</span> // Tracker for load balancer state<a name="line.303"></a>
-<span class="sourceLineNo">304</span> LoadBalancerTracker loadBalancerTracker;<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Tracker for meta location, if any client ZK quorum specified<a name="line.305"></a>
-<span class="sourceLineNo">306</span> MetaLocationSyncer metaLocationSyncer;<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Tracker for active master location, if any client ZK quorum specified<a name="line.307"></a>
-<span class="sourceLineNo">308</span> MasterAddressSyncer masterAddressSyncer;<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span> // Tracker for split and merge state<a name="line.310"></a>
-<span class="sourceLineNo">311</span> private SplitOrMergeTracker splitOrMergeTracker;<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> // Tracker for region normalizer state<a name="line.313"></a>
-<span class="sourceLineNo">314</span> private RegionNormalizerTracker regionNormalizerTracker;<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span> //Tracker for master maintenance mode setting<a name="line.316"></a>
-<span class="sourceLineNo">317</span> private MasterMaintenanceModeTracker maintenanceModeTracker;<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span> private ClusterSchemaService clusterSchemaService;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.321"></a>
-<span class="sourceLineNo">322</span> "hbase.master.wait.on.service.seconds";<a name="line.322"></a>
-<span class="sourceLineNo">323</span> public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> // Metrics for the HMaster<a name="line.325"></a>
-<span class="sourceLineNo">326</span> final MetricsMaster metricsMaster;<a name="line.326"></a>
-<span class="sourceLineNo">327</span> // file system manager for the master FS operations<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private MasterFileSystem fileSystemManager;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private MasterWalManager walManager;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> // server manager to deal with region server info<a name="line.331"></a>
-<span class="sourceLineNo">332</span> private volatile ServerManager serverManager;<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span> // manager of assignment nodes in zookeeper<a name="line.334"></a>
-<span class="sourceLineNo">335</span> private AssignmentManager assignmentManager;<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span> // manager of replication<a name="line.337"></a>
-<span class="sourceLineNo">338</span> private ReplicationPeerManager replicationPeerManager;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span> // buffer for "fatal error" notices from region servers<a name="line.340"></a>
-<span class="sourceLineNo">341</span> // in the cluster. This is only used for assisting<a name="line.341"></a>
-<span class="sourceLineNo">342</span> // operations/debugging.<a name="line.342"></a>
-<span class="sourceLineNo">343</span> MemoryBoundedLogMessageBuffer rsFatals;<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span> // flag set after we become the active master (used for testing)<a name="line.345"></a>
-<span class="sourceLineNo">346</span> private volatile boolean activeMaster = false;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span> // flag set after we complete initialization once active<a name="line.348"></a>
-<span class="sourceLineNo">349</span> private final ProcedureEvent<?> initialized = new ProcedureEvent<>("master initialized");<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span> // flag set after master services are started,<a name="line.351"></a>
-<span class="sourceLineNo">352</span> // initialization may have not completed yet.<a name="line.352"></a>
-<span class="sourceLineNo">353</span> volatile boolean serviceStarted = false;<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span> // flag set after we complete assignMeta.<a name="line.355"></a>
-<span class="sourceLineNo">356</span> private final ProcedureEvent<?> serverCrashProcessingEnabled =<a name="line.356"></a>
-<span class="sourceLineNo">357</span> new ProcedureEvent<>("server crash processing");<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span> // Maximum time we should run balancer for<a name="line.359"></a>
-<span class="sourceLineNo">360</span> private final int maxBlancingTime;<a name="line.360"></a>
-<span class="sourceLineNo">361</span> // Maximum percent of regions in transition when balancing<a name="line.361"></a>
-<span class="sourceLineNo">362</span> private final double maxRitPercent;<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span> private final LockManager lockManager = new LockManager(this);<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span> private LoadBalancer balancer;<a name="line.366"></a>
-<span class="sourceLineNo">367</span> private RegionNormalizer normalizer;<a name="line.367"></a>
-<span class="sourceLineNo">368</span> private BalancerChore balancerChore;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> private RegionNormalizerChore normalizerChore;<a name="line.369"></a>
-<span class="sourceLineNo">370</span> private ClusterStatusChore clusterStatusChore;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span> CatalogJanitor catalogJanitorChore;<a name="line.373"></a>
-<span class="sourceLineNo">374</span> private LogCleaner logCleaner;<a name="line.374"></a>
-<span class="sourceLineNo">375</span> private HFileCleaner hfileCleaner;<a name="line.375"></a>
-<span class="sourceLineNo">376</span> private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.376"></a>
-<span class="sourceLineNo">377</span> private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.377"></a>
-<span class="sourceLineNo">378</span> private MobCompactionChore mobCompactChore;<a name="line.378"></a>
-<span class="sourceLineNo">379</span> private MasterMobCompactionThread mobCompactThread;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> // used to synchronize the mobCompactionStates<a name="line.380"></a>
-<span class="sourceLineNo">381</span> private final IdLock mobCompactionLock = new IdLock();<a name="line.381"></a>
-<span class="sourceLineNo">382</span> // save the information of mob compactions in tables.<a name="line.382"></a>
-<span class="sourceLineNo">383</span> // the key is table name, the value is the number of compactions in that table.<a name="line.383"></a>
-<span class="sourceLineNo">384</span> private Map<TableName, AtomicInteger> mobCompactionStates = Maps.newConcurrentMap();<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> MasterCoprocessorHost cpHost;<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span> private final boolean preLoadTableDescriptors;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> // Time stamps for when a hmaster became active<a name="line.390"></a>
-<span class="sourceLineNo">391</span> private long masterActiveTime;<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span> // Time stamp for when HMaster finishes becoming Active Master<a name="line.393"></a>
-<span class="sourceLineNo">394</span> private long masterFinishedInitializationTime;<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span> //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.396"></a>
-<span class="sourceLineNo">397</span> private final boolean masterCheckCompression;<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span> //should we check encryption settings at master side, default true<a name="line.399"></a>
-<span class="sourceLineNo">400</span> private final boolean masterCheckEncryption;<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> Map<String, Service> coprocessorServiceHandlers = Maps.newHashMap();<a name="line.402"></a>
-<span class="sourceLineNo">403</span><a name="line.403"></a>
-<span class="sourceLineNo">404</span> // monitor for snapshot of hbase tables<a name="line.404"></a>
-<span class="sourceLineNo">405</span> SnapshotManager snapshotManager;<a name="line.405"></a>
-<span class="sourceLineNo">406</span> // monitor for distributed procedures<a name="line.406"></a>
-<span class="sourceLineNo">407</span> private MasterProcedureManagerHost mpmHost;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span> // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.409"></a>
-<span class="sourceLineNo">410</span> private volatile MasterQuotaManager quotaManager;<a name="line.410"></a>
-<span class="sourceLineNo">411</span> private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> private QuotaObserverChore quotaObserverChore;<a name="line.412"></a>
-<span class="sourceLineNo">413</span> private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span> private ProcedureExecutor<MasterProcedureEnv> procedureExecutor;<a name="line.415"></a>
-<span class="sourceLineNo">416</span> private WALProcedureStore procedureStore;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span> // handle table states<a name="line.418"></a>
-<span class="sourceLineNo">419</span> private TableStateManager tableStateManager;<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> private long splitPlanCount;<a name="line.421"></a>
-<span class="sourceLineNo">422</span> private long mergePlanCount;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span> /* Handle favored nodes information */<a name="line.424"></a>
-<span class="sourceLineNo">425</span> private FavoredNodesManager favoredNodesManager;<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span> /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.427"></a>
-<span class="sourceLineNo">428</span> private Server masterJettyServer;<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span> public static class RedirectServlet extends HttpServlet {<a name="line.430"></a>
-<span class="sourceLineNo">431</span> private static final long serialVersionUID = 2894774810058302473L;<a name="line.431"></a>
-<span class="sourceLineNo">432</span> private final int regionServerInfoPort;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> private final String regionServerHostname;<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span> /**<a name="line.435"></a>
-<span class="sourceLineNo">436</span> * @param infoServer that we're trying to send all requests to<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.437"></a>
-<span class="sourceLineNo">438</span> */<a name="line.438"></a>
-<span class="sourceLineNo">439</span> public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> regionServerInfoPort = infoServer.getPort();<a name="line.440"></a>
-<span class="sourceLineNo">441</span> regionServerHostname = hostname;<a name="line.441"></a>
-<span class="sourceLineNo">442</span> }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span> @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span> public void doGet(HttpServletRequest request,<a name="line.445"></a>
-<span class="sourceLineNo">446</span> HttpServletResponse response) throws ServletException, IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span> String redirectHost = regionServerHostname;<a name="line.447"></a>
-<span class="sourceLineNo">448</span> if(redirectHost == null) {<a name="line.448"></a>
-<span class="sourceLineNo">449</span> redirectHost = request.getServerName();<a name="line.449"></a>
-<span class="sourceLineNo">450</span> if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.451"></a>
-<span class="sourceLineNo">452</span> MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.452"></a>
-<span class="sourceLineNo">453</span> "your HBase deployment relies on client accessible names that the region server process " +<a name="line.453"></a>
-<span class="sourceLineNo">454</span> "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.454"></a>
-<span class="sourceLineNo">455</span> "to an appropriate hostname.");<a name="line.455"></a>
-<span class="sourceLineNo">456</span> // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.456"></a>
-<span class="sourceLineNo">457</span> response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.457"></a>
-<span class="sourceLineNo">458</span> "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.458"></a>
-<span class="sourceLineNo">459</span> "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span> }<a name="line.462"></a>
-<span class="sourceLineNo">463</span> // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.463"></a>
-<span class="sourceLineNo">464</span> // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.464"></a>
-<span class="sourceLineNo">465</span> String redirectUrl = request.getScheme() + "://"<a name="line.465"></a>
-<span class="sourceLineNo">466</span> + redirectHost + ":" + regionServerInfoPort<a name="line.466"></a>
-<span class="sourceLineNo">467</span> + request.getRequestURI();<a name="line.467"></a>
-<span class="sourceLineNo">468</span> response.sendRedirect(redirectUrl);<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><a name="line.471"></a>
-<span class="sourceLineNo">472</span> /**<a name="line.472"></a>
-<span class="sourceLineNo">473</span> * Initializes the HMaster. The steps are as follows:<a name="line.473"></a>
-<span class="sourceLineNo">474</span> * <p><a name="line.474"></a>
-<span class="sourceLineNo">475</span> * <ol><a name="line.475"></a>
-<span class="sourceLineNo">476</span> * <li>Initialize the local HRegionServer<a name="line.476"></a>
-<span class="sourceLineNo">477</span> * <li>Start the ActiveMasterManager.<a name="line.477"></a>
-<span class="sourceLineNo">478</span> * </ol><a name="line.478"></a>
-<span class="sourceLineNo">479</span> * <p><a name="line.479"></a>
-<span class="sourceLineNo">480</span> * Remaining steps of initialization occur in<a name="line.480"></a>
-<span class="sourceLineNo">481</span> * #finishActiveMasterInitialization(MonitoredTask) after<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * the master becomes the active one.<a name="line.482"></a>
-<span class="sourceLineNo">483</span> */<a name="line.483"></a>
-<span class="sourceLineNo">484</span> public HMaster(final Configuration conf)<a name="line.484"></a>
-<span class="sourceLineNo">485</span> throws IOException, KeeperException {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> super(conf);<a name="line.486"></a>
-<span class="sourceLineNo">487</span> TraceUtil.initTracer(conf);<a name="line.487"></a>
-<span class="sourceLineNo">488</span> try {<a name="line.488"></a>
-<span class="sourceLineNo">489</span> this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.489"></a>
-<span class="sourceLineNo">490</span> conf.getLong("hbase.master.buffer.for.rs.fatals", 1 * 1024 * 1024));<a name="line.490"></a>
-<span class="sourceLineNo">491</span> LOG.info("hbase.rootdir=" + getRootDir() +<a name="line.491"></a>
-<span class="sourceLineNo">492</span> ", hbase.cluster.distributed=" + this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span> // Disable usage of meta replicas in the master<a name="line.494"></a>
-<span class="sourceLineNo">495</span> this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span> decorateMasterConfiguration(this.conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span> // Hack! Maps DFSClient => Master for logs. HDFS made this<a name="line.499"></a>
-<span class="sourceLineNo">500</span> // config param for task trackers, but we can piggyback off of it.<a name="line.500"></a>
-<span class="sourceLineNo">501</span> if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span> this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.502"></a>
-<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span> // should we check the compression codec type at master side, default true, HBASE-6370<a name="line.505"></a>
-<span class="sourceLineNo">506</span> this.masterCheckCompression = conf.getBoolean("hbase.master.check.compression", true);<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span> // should we check encryption settings at master side, default true<a name="line.508"></a>
-<span class="sourceLineNo">509</span> this.masterCheckEncryption = conf.getBoolean("hbase.master.check.encryption", true);<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // preload table descriptor at startup<a name="line.513"></a>
-<span class="sourceLineNo">514</span> this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span> this.maxBlancingTime = getMaxBalancingTime();<a name="line.516"></a>
-<span class="sourceLineNo">517</span> this.maxRitPercent = conf.getDouble(HConstants.HBASE_MASTER_BALANCER_MAX_RIT_PERCENT,<a name="line.517"></a>
-<span class="sourceLineNo">518</span> HConstants.DEFAULT_HBASE_MASTER_BALANCER_MAX_RIT_PERCENT);<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span> // Do we publish the status?<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span> boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.522"></a>
-<span class="sourceLineNo">523</span> HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> Class<? extends ClusterStatusPublisher.Publisher> publisherClass =<a name="line.524"></a>
-<span class="sourceLineNo">525</span> conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.525"></a>
-<span class="sourceLineNo">526</span> ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS,<a name="line.526"></a>
-<span class="sourceLineNo">527</span> ClusterStatusPublisher.Publisher.class);<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span> if (shouldPublish) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span> if (publisherClass == null) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.531"></a>
-<span class="sourceLineNo">532</span> ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS +<a name="line.532"></a>
-<span class="sourceLineNo">533</span> " is not set - not publishing status");<a name="line.533"></a>
-<span class="sourceLineNo">534</span> } else {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> clusterStatusPublisherChore = new ClusterStatusPublisher(this, conf, publisherClass);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> getChoreService().scheduleChore(clusterStatusPublisherChore);<a name="line.536"></a>
-<span class="sourceLineNo">537</span> }<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span> // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.540"></a>
-<span class="sourceLineNo">541</span> if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span> this.activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, this);<a name="line.542"></a>
-<span class="sourceLineNo">543</span> } else {<a name="line.543"></a>
-<span class="sourceLineNo">544</span> this.activeMasterManager = null;<a name="line.544"></a>
-<span class="sourceLineNo">545</span> }<a name="line.545"></a>
-<span class="sourceLineNo">546</span> } catch (Throwable t) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span> // Make sure we log the exception. HMaster is often started via reflection and the<a name="line.547"></a>
-<span class="sourceLineNo">548</span> // cause of failed startup is lost.<a name="line.548"></a>
-<span class="sourceLineNo">549</span> LOG.error("Failed construction of Master", t);<a name="line.549"></a>
-<span class="sourceLineNo">550</span> throw t;<a name="line.550"></a>
-<span class="sourceLineNo">551</span> }<a name="line.551"></a>
-<span class="sourceLineNo">552</span> }<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span> @Override<a name="line.554"></a>
-<span class="sourceLineNo">555</span> protected String getUseThisHostnameInstead(Configuration conf) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span> return conf.get(MASTER_HOSTNAME_KEY);<a name="line.556"></a>
-<span class="sourceLineNo">557</span> }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span> // Main run loop. Calls through to the regionserver run loop AFTER becoming active Master; will<a name="line.559"></a>
-<span class="sourceLineNo">560</span> // block in here until then.<a name="line.560"></a>
-<span class="sourceLineNo">561</span> @Override<a name="line.561"></a>
-<span class="sourceLineNo">562</span> public void run() {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> try {<a name="line.563"></a>
-<span class="sourceLineNo">564</span> if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span> Threads.setDaemonThreadRunning(new Thread(() -> {<a name="line.565"></a>
-<span class="sourceLineNo">566</span> try {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> int infoPort = putUpJettyServer();<a name="line.567"></a>
-<span class="sourceLineNo">568</span> startActiveMasterManager(infoPort);<a name="line.568"></a>
-<span class="sourceLineNo">569</span> } catch (Throwable t) {<a name="line.569"></a>
-<span class="sourceLineNo">570</span> // Make sure we log the exception.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> String error = "Failed to become Active Master";<a name="line.571"></a>
-<span class="sourceLineNo">572</span> LOG.error(error, t);<a name="line.572"></a>
-<span class="sourceLineNo">573</span> // Abort should have been called already.<a name="line.573"></a>
-<span class="sourceLineNo">574</span> if (!isAborted()) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span> abort(error, t);<a name="line.575"></a>
-<span class="sourceLineNo">576</span> }<a name="line.576"></a>
-<span class="sourceLineNo">577</span> }<a name="line.577"></a>
-<span class="sourceLineNo">578</span> }));<a name="line.578"></a>
-<span class="sourceLineNo">579</span> }<a name="line.579"></a>
-<span class="sourceLineNo">580</span> // Fall in here even if we have been aborted. Need to run the shutdown services and<a name="line.580"></a>
-<span class="sourceLineNo">581</span> // the super run call will do this for us.<a name="line.581"></a>
-<span class="sourceLineNo">582</span> super.run();<a name="line.582"></a>
-<span class="sourceLineNo">583</span> } finally {<a name="line.583"></a>
-<span class="sourceLineNo">584</span> if (this.clusterSchemaService != null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> // If on way out, then we are no longer active master.<a name="line.585"></a>
-<span class="sourceLineNo">586</span> this.clusterSchemaService.stopAsync();<a name="line.586"></a>
-<span class="sourceLineNo">587</span> try {<a name="line.587"></a>
-<span class="sourceLineNo">588</span> this.clusterSchemaService.awaitTerminated(<a name="line.588"></a>
-<span class="sourceLineNo">589</span> getConfiguration().getInt(HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.589"></a>
-<span class="sourceLineNo">590</span> DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.590"></a>
-<span class="sourceLineNo">591</span> } catch (TimeoutException te) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span> LOG.warn("Failed shutdown of clusterSchemaService", te);<a name="line.592"></a>
-<span class="sourceLineNo">593</span> }<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> this.activeMaster = false;<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span> }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span> // return the actual infoPort, -1 means disable info server.<a name="line.599"></a>
-<span class="sourceLineNo">600</span> private int putUpJettyServer() throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> if (!conf.getBoolean("hbase.master.infoserver.redirect", true)) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span> return -1;<a name="line.602"></a>
-<span class="sourceLineNo">603</span> }<a name="line.603"></a>
-<span class="sourceLineNo">604</span> final int infoPort = conf.getInt("hbase.master.info.port.orig",<a name="line.604"></a>
-<span class="sourceLineNo">605</span> HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.605"></a>
-<span class="sourceLineNo">606</span> // -1 is for disabling info server, so no redirecting<a name="line.606"></a>
-<span class="sourceLineNo">607</span> if (infoPort < 0 || infoServer == null) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span> return -1;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span> if(infoPort == infoServer.getPort()) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span> return infoPort;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span> final String addr = conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.613"></a>
-<span class="sourceLineNo">614</span> if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span> String msg =<a name="line.615"></a>
-<span class="sourceLineNo">616</span> "Failed to start redirecting jetty server. Address " + addr<a name="line.616"></a>
-<span class="sourceLineNo">617</span> + " does not belong to this host. Correct configuration parameter: "<a name="line.617"></a>
-<span class="sourceLineNo">618</span> + "hbase.master.info.bindAddress";<a name="line.618"></a>
-<span class="sourceLineNo">619</span> LOG.error(msg);<a name="line.619"></a>
-<span class="sourceLineNo">620</span> throw new IOException(msg);<a name="line.620"></a>
-<span class="sourceLineNo">621</span> }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span> // TODO I'm pretty sure we could just add another binding to the InfoServer run by<a name="line.623"></a>
-<span class="sourceLineNo">624</span> // the RegionServer and have it run the RedirectServlet instead of standing up<a name="line.624"></a>
-<span class="sourceLineNo">625</span> // a second entire stack here.<a name="line.625"></a>
-<span class="sourceLineNo">626</span> masterJettyServer = new Server();<a name="line.626"></a>
-<span class="sourceLineNo">627</span> final ServerConnector connector = new ServerConnector(masterJettyServer);<a name="line.627"></a>
-<span class="sourceLineNo">628</span> connector.setHost(addr);<a name="line.628"></a>
-<span class="sourceLineNo">629</span> connector.setPort(infoPort);<a name="line.629"></a>
-<span class="sourceLineNo">630</span> masterJettyServer.addConnector(connector);<a name="line.630"></a>
-<span class="sourceLineNo">631</span> masterJettyServer.setStopAtShutdown(true);<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span> final String redirectHostname =<a name="line.633"></a>
-<span class="sourceLineNo">634</span> StringUtils.isBlank(useThisHostnameInstead) ? null : useThisHostnameInstead;<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span> final RedirectServlet redirect = new RedirectServlet(infoServer, redirectHostname);<a name="line.636"></a>
-<span class="sourceLineNo">637</span> final WebAppContext context = new WebAppContext(null, "/", null, null, null, null, WebAppContext.NO_SESSIONS);<a name="line.637"></a>
-<span class="sourceLineNo">638</span> context.addServlet(new ServletHolder(redirect), "/*");<a name="line.638"></a>
-<span class="sourceLineNo">639</span> context.setServer(masterJettyServer);<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span> try {<a name="line.641"></a>
-<span class="sourceLineNo">642</span> masterJettyServer.start();<a name="line.642"></a>
-<span class="sourceLineNo">643</span> } catch (Exception e) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span> throw new IOException("Failed to start redirecting jetty server", e);<a name="line.644"></a>
-<span class="sourceLineNo">645</span> }<a name="line.645"></a>
-<span class="sourceLineNo">646</span> return connector.getLocalPort();<a name="line.646"></a>
-<span class="sourceLineNo">647</span> }<a name="line.647"></a>
-<span class="sourceLineNo">648</span><a name="line.648"></a>
-<span class="sourceLineNo">649</span> @Override<a name="line.649"></a>
-<span class="sourceLineNo">650</span> protected Function<TableDescriptorBuilder, TableDescriptorBuilder> getMetaTableObserver() {<a name="line.650"></a>
-<span class="sourceLineNo">651</span> return builder -> builder.setRegionReplication(conf.getInt(HConstants.META_REPLICAS_NUM, HConstants.DEFAULT_META_REPLICA_NUM));<a name="line.651"></a>
-<span class="sourceLineNo">652</span> }<a name="line.652"></a>
-<span class="sourceLineNo">653</span> /**<a name="line.653"></a>
-<span class="sourceLineNo">654</span> * For compatibility, if failed with regionserver credentials, try the master one<a name="line.654"></a>
-<span class="sourceLineNo">655</span> */<a name="line.655"></a>
-<span class="sourceLineNo">656</span> @Override<a name="line.656"></a>
-<span class="sourceLineNo">657</span> protected void login(UserProvider user, String host) throws IOException {<a name="line.657"></a>
-<span class="sourceLineNo">658</span> try {<a name="line.658"></a>
-<span class="sourceLineNo">659</span> super.login(user, host);<a name="line.659"></a>
-<span class="sourceLineNo">660</span> } catch (IOException ie) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span> user.login("hbase.master.keytab.file",<a name="line.661"></a>
-<span class="sourceLineNo">662</span> "hbase.master.kerberos.principal", host);<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><a name="line.665"></a>
-<span class="sourceLineNo">666</span> /**<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * If configured to put regions on active master,<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * wait till a backup master becomes active.<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * Otherwise, loop till the server is stopped or aborted.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> @Override<a name="line.671"></a>
-<span class="sourceLineNo">672</span> protected void waitForMasterActive(){<a name="line.672"></a>
-<span class="sourceLineNo">673</span> boolean tablesOnMaster = LoadBalancer.isTablesOnMaster(conf);<a name="line.673"></a>
-<span class="sourceLineNo">674</span> while (!(tablesOnMaster && activeMaster) && !isStopped() && !isAborted()) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span> sleeper.sleep();<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> @VisibleForTesting<a name="line.679"></a>
-<span class="sourceLineNo">680</span> public MasterRpcServices getMasterRpcServices() {<a name="line.680"></a>
-<span class="sourceLineNo">681</span> return (MasterRpcServices)rpcServices;<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> public boolean balanceSwitch(final boolean b) throws IOException {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> return getMasterRpcServices().switchBalancer(b, BalanceSwitchMode.ASYNC);<a name="line.685"></a>
-<span class="sourceLineNo">686</span> }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span> @Override<a name="line.688"></a>
-<span class="sourceLineNo">689</span> protected String getProcessName() {<a name="line.689"></a>
-<span class="sourceLineNo">690</span> return MASTER;<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> @Override<a name="line.693"></a>
-<span class="sourceLineNo">694</span> protected boolean canCreateBaseZNode() {<a name="line.694"></a>
-<span class="sourceLineNo">695</span> return true;<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> @Override<a name="line.698"></a>
-<span class="sourceLineNo">699</span> protected boolean canUpdateTableDescriptor() {<a name="line.699"></a>
-<span class="sourceLineNo">700</span> return true;<a name="line.700"></a>
-<span class="sourceLineNo">701</span> }<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span> @Override<a name="line.703"></a>
-<span class="sourceLineNo">704</span> protected RSRpcServices createRpcServices() throws IOException {<a name="line.704"></a>
-<span class="sourceLineNo">705</span> return new MasterRpcServices(this);<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> @Override<a name="line.708"></a>
-<span class="sourceLineNo">709</span> protected void configureInfoServer() {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> infoServer.addServlet("master-status", "/master-status", MasterStatusServlet.class);<a name="line.710"></a>
-<span class="sourceLineNo">711</span> infoServer.setAttribute(MASTER, this);<a name="line.711"></a>
-<span class="sourceLineNo">712</span> if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span> super.configureInfoServer();<a name="line.713"></a>
-<span class="sourceLineNo">714</span> }<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
-<span class="sourceLineNo">716</span><a name="line.716"></a>
-<span class="sourceLineNo">717</span> @Override<a name="line.717"></a>
-<span class="sourceLineNo">718</span> protected Class<? extends HttpServlet> getDumpServlet() {<a name="line.718"></a>
-<span class="sourceLineNo">719</span> return MasterDumpServlet.class;<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span><a name="line.721"></a>
-<span class="sourceLineNo">722</span> @Override<a name="line.722"></a>
-<span class="sourceLineNo">723</span> public MetricsMaster getMasterMetrics() {<a name="line.723"></a>
-<span class="sourceLineNo">724</span> return metricsMaster;<a name="line.724"></a>
-<span class="sourceLineNo">725</span> }<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span> /**<a name="line.727"></a>
+<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>/**<a name="line.220"></a>
+<span class="sourceLineNo">221</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.221"></a>
+<span class="sourceLineNo">222</span> * master. If many masters are started, all compete. Whichever wins goes on to<a name="line.222"></a>
+<span class="sourceLineNo">223</span> * run the cluster. All others park themselves in their constructor until<a name="line.223"></a>
+<span class="sourceLineNo">224</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.224"></a>
+<span class="sourceLineNo">225</span> * zookeeper. Thereafter, all running master jostle to take over master role.<a name="line.225"></a>
+<span class="sourceLineNo">226</span> *<a name="line.226"></a>
+<span class="sourceLineNo">227</span> * <p>The Master can be asked shutdown the cluster. See {@link #shutdown()}. In<a name="line.227"></a>
+<span class="sourceLineNo">228</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * all reporting in that they are down. This master will then shut itself down.<a name="line.229"></a>
+<span class="sourceLineNo">230</span> *<a name="line.230"></a>
+<span class="sourceLineNo">231</span> * <p>You can also shutdown just this master. Call {@link #stopMaster()}.<a name="line.231"></a>
+<span class="sourceLineNo">232</span> *<a name="line.232"></a>
+<span class="sourceLineNo">233</span> * @see org.apache.zookeeper.Watcher<a name="line.233"></a>
+<span class="sourceLineNo">234</span> */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.235"></a>
+<span class="sourceLineNo">236</span>@SuppressWarnings("deprecation")<a name="line.236"></a>
+<span class="sourceLineNo">237</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private static Logger LOG = LoggerFactory.getLogger(HMaster.class.getName());<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span> /**<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.241"></a>
+<span class="sourceLineNo">242</span> * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.242"></a>
+<span class="sourceLineNo">243</span> */<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private static class InitializationMonitor extends HasThread {<a name="line.244"></a>
+<span class="sourceLineNo">245</span> /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.245"></a>
+<span class="sourceLineNo">246</span> public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.246"></a>
+<span class="sourceLineNo">247</span> public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span> /**<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.250"></a>
+<span class="sourceLineNo">251</span> * true, do nothing otherwise.<a name="line.251"></a>
+<span class="sourceLineNo">252</span> */<a name="line.252"></a>
+<span class="sourceLineNo">253</span> public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.253"></a>
+<span class="sourceLineNo">254</span> public static final boolean HALT_DEFAULT = false;<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span> private final HMaster master;<a name="line.256"></a>
+<span class="sourceLineNo">257</span> private final long timeout;<a name="line.257"></a>
+<span class="sourceLineNo">258</span> private final boolean haltOnTimeout;<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span> /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.260"></a>
+<span class="sourceLineNo">261</span> InitializationMonitor(HMaster master) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span> super("MasterInitializationMonitor");<a name="line.262"></a>
+<span class="sourceLineNo">263</span> this.master = master;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.264"></a>
+<span class="sourceLineNo">265</span> this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.setDaemon(true);<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> public void run() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> try {<a name="line.271"></a>
+<span class="sourceLineNo">272</span> while (!master.isStopped() && master.isActiveMaster()) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> Thread.sleep(timeout);<a name="line.273"></a>
+<span class="sourceLineNo">274</span> if (master.isInitialized()) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span> LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.275"></a>
+<span class="sourceLineNo">276</span> } else {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.277"></a>
+<span class="sourceLineNo">278</span> + " consider submitting a bug report including a thread dump of this process.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span> if (haltOnTimeout) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span> LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.280"></a>
+<span class="sourceLineNo">281</span> Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.281"></a>
+<span class="sourceLineNo">282</span> System.exit(-1);<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> } catch (InterruptedException ie) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span> LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span> }<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.292"></a>
+<span class="sourceLineNo">293</span> //instance into web context.<a name="line.293"></a>
+<span class="sourceLineNo">294</span> public static final String MASTER = "master";<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span> // Manager and zk listener for master election<a name="line.296"></a>
+<span class="sourceLineNo">297</span> private final ActiveMasterManager activeMasterManager;<a name="line.297"></a>
+<span class="sourceLineNo">298</span> // Region server tracker<a name="line.298"></a>
+<span class="sourceLineNo">299</span> private RegionServerTracker regionServerTracker;<a name="line.299"></a>
+<span class="sourceLineNo">300</span> // Draining region server tracker<a name="line.300"></a>
+<span class="sourceLineNo">301</span> private DrainingServerTracker drainingServerTracker;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> // Tracker for load balancer state<a name="line.302"></a>
+<span class="sourceLineNo">303</span> LoadBalancerTracker loadBalancerTracker;<a name="line.303"></a>
+<span class="sourceLineNo">304</span> // Tracker for meta location, if any client ZK quorum specified<a name="line.304"></a>
+<span class="sourceLineNo">305</span> MetaLocationSyncer metaLocationSyncer;<a name="line.305"></a>
+<span class="sourceLineNo">306</span> // Tracker for active master location, if any client ZK quorum specified<a name="line.306"></a>
+<span class="sourceLineNo">307</span> MasterAddressSyncer masterAddressSyncer;<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span> // Tracker for split and merge state<a name="line.309"></a>
+<span class="sourceLineNo">310</span> private SplitOrMergeTracker splitOrMergeTracker;<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span> // Tracker for region normalizer state<a name="line.312"></a>
+<span class="sourceLineNo">313</span> private RegionNormalizerTracker regionNormalizerTracker;<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span> //Tracker for master maintenance mode setting<a name="line.315"></a>
+<span class="sourceLineNo">316</span> private MasterMaintenanceModeTracker maintenanceModeTracker;<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span> private ClusterSchemaService clusterSchemaService;<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.320"></a>
+<span class="sourceLineNo">321</span> "hbase.master.wait.on.service.seconds";<a name="line.321"></a>
+<span class="sourceLineNo">322</span> public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span> // Metrics for the HMaster<a name="line.324"></a>
+<span class="sourceLineNo">325</span> final MetricsMaster metricsMaster;<a name="line.325"></a>
+<span class="sourceLineNo">326</span> // file system manager for the master FS operations<a name="line.326"></a>
+<span class="sourceLineNo">327</span> private MasterFileSystem fileSystemManager;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private MasterWalManager walManager;<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> // server manager to deal with region server info<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private volatile ServerManager serverManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span> // manager of assignment nodes in zookeeper<a name="line.333"></a>
+<span class="sourceLineNo">334</span> private AssignmentManager assignmentManager;<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> // manager of replication<a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ReplicationPeerManager replicationPeerManager;<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span> // buffer for "fatal error" notices from region servers<a name="line.339"></a>
+<span class="sourceLineNo">340</span> // in the cluster. This is only used for assisting<a name="line.340"></a>
+<span class="sourceLineNo">341</span> // operations/debugging.<a name="line.341"></a>
+<span class="sourceLineNo">342</span> MemoryBoundedLogMessageBuffer rsFatals;<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span> // flag set after we become the active master (used for testing)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> private volatile boolean activeMaster = false;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span> // flag set after we complete initialization once active<a name="line.347"></a>
+<span class="sourceLineNo">348</span> private final ProcedureEvent<?> initialized = new ProcedureEvent<>("master initialized");<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span> // flag set after master services are started,<a name="line.350"></a>
+<span class="sourceLineNo">351</span> // initialization may have not completed yet.<a name="line.351"></a>
+<span class="sourceLineNo">352</span> volatile boolean serviceStarted = false;<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span> // flag set after we complete assignMeta.<a name="line.354"></a>
+<span class="sourceLineNo">355</span> private final ProcedureEvent<?> serverCrashProcessingEnabled =<a name="line.355"></a>
+<span class="sourceLineNo">356</span> new ProcedureEvent<>("server crash processing");<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> // Maximum time we should run balancer for<a name="line.358"></a>
+<span class="sourceLineNo">359</span> private final int maxBlancingTime;<a name="line.359"></a>
+<span class="sourceLineNo">360</span> // Maximum percent of regions in transition when balancing<a name="line.360"></a>
+<span class="sourceLineNo">361</span> private final double maxRitPercent;<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span> private final LockManager lockManager = new LockManager(this);<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span> private LoadBalancer balancer;<a name="line.365"></a>
+<span class="sourceLineNo">366</span> private RegionNormalizer normalizer;<a name="line.366"></a>
+<span class="sourceLineNo">367</span> private BalancerChore balancerChore;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> private RegionNormalizerChore normalizerChore;<a name="line.368"></a>
+<span class="sourceLineNo">369</span> private ClusterStatusChore clusterStatusChore;<a name="line.369"></a>
+<span class="sourceLineNo">370</span> private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span> CatalogJanitor catalogJanitorChore;<a name="line.372"></a>
+<span class="sourceLineNo">373</span> private LogCleaner logCleaner;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> private HFileCleaner hfileCleaner;<a name="line.374"></a>
+<span class="sourceLineNo">375</span> private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.375"></a>
+<span class="sourceLineNo">376</span> private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.376"></a>
+<span class="sourceLineNo">377</span> private MobCompactionChore mobCompactChore;<a name="line.377"></a>
+<span class="sourceLineNo">378</span> private MasterMobCompactionThread mobCompactThread;<a name="line.378"></a>
+<span class="sourceLineNo">379</span> // used to synchronize the mobCompactionStates<a name="line.379"></a>
+<span class="sourceLineNo">380</span> private final IdLock mobCompactionLock = new IdLock();<a name="line.380"></a>
+<span class="sourceLineNo">381</span> // save the information of mob compactions in tables.<a name="line.381"></a>
+<span class="sourceLineNo">382</span> // the key is table name, the value is the number of compactions in that table.<a name="line.382"></a>
+<span class="sourceLineNo">383</span> private Map<TableName, AtomicInteger> mobCompactionStates = Maps.newConcurrentMap();<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> MasterCoprocessorHost cpHost;<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span> private final boolean preLoadTableDescriptors;<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> // Time stamps for when a hmaster became active<a name="line.389"></a>
+<span class="sourceLineNo">390</span> private long masterActiveTime;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> // Time stamp for when HMaster finishes becoming Active Master<a name="line.392"></a>
+<span class="sourceLineNo">393</span> private long masterFinishedInitializationTime;<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span> //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.395"></a>
+<span class="sourceLineNo">396</span> private final boolean masterCheckCompression;<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span> //should we check encryption settings at master side, default true<a name="line.398"></a>
+<span class="sourceLineNo">399</span> private final boolean masterCheckEncryption;<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> Map<String, Service> coprocessorServiceHandlers = Maps.newHashMap();<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span> // monitor for snapshot of hbase tables<a name="line.403"></a>
+<span class="sourceLineNo">404</span> SnapshotManager snapshotManager;<a name="line.404"></a>
+<span class="sourceLineNo">405</span> // monitor for distributed procedures<a name="line.405"></a>
+<span class="sourceLineNo">406</span> private MasterProcedureManagerHost mpmHost;<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span> // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.408"></a>
+<span class="sourceLineNo">409</span> private volatile MasterQuotaManager quotaManager;<a name="line.409"></a>
+<span class="sourceLineNo">410</span> private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.410"></a>
+<span class="sourceLineNo">411</span> private QuotaObserverChore quotaObserverChore;<a name="line.411"></a>
+<span class="sourceLineNo">412</span> private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span> private ProcedureExecutor<MasterProcedureEnv> procedureExecutor;<a name="line.414"></a>
+<span class="sourceLineNo">415</span> private WALProcedureStore procedureStore;<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span> // handle table states<a name="line.417"></a>
+<span class="sourceLineNo">418</span> private TableStateManager tableStateManager;<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span> private long splitPlanCount;<a name="line.420"></a>
+<span class="sourceLineNo">421</span> private long mergePlanCount;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span> /* Handle favored nodes information */<a name="line.423"></a>
+<span class="sourceLineNo">424</span> private FavoredNodesManager favoredNodesManager;<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span> /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.426"></a>
+<span class="sourceLineNo">427</span> private Server masterJettyServer;<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span> public static class RedirectServlet extends HttpServlet {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> private static final long serialVersionUID = 2894774810058302473L;<a name="line.430"></a>
+<span class="sourceLineNo">431</span> private final int regionServerInfoPort;<a name="line.431"></a>
+<span class="sourceLineNo">432</span> private final String regionServerHostname;<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span> /**<a name="line.434"></a>
+<span class="sourceLineNo">435</span> * @param infoServer that we're trying to send all requests to<a name="line.435"></a>
+<span class="sourceLineNo">436</span> * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.436"></a>
+<span class="sourceLineNo">437</span> */<a name="line.437"></a>
+<span class="sourceLineNo">438</span> public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span> regionServerInfoPort = infoServer.getPort();<a name="line.439"></a>
+<span class="sourceLineNo">440</span> regionServerHostname = hostname;<a name="line.440"></a>
+<span class="sourceLineNo">441</span> }<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span> @Override<a name="line.443"></a>
+<span class="sourceLineNo">444</span> public void doGet(HttpServletRequest request,<a name="line.444"></a>
+<span class="sourceLineNo">445</span> HttpServletResponse response) throws ServletException, IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span> String redirectHost = regionServerHostname;<a name="line.446"></a>
+<span class="sourceLineNo">447</span> if(redirectHost == null) {<a name="line.447"></a>
+<span class="sourceLineNo">448</span> redirectHost = request.getServerName();<a name="line.448"></a>
+<span class="sourceLineNo">449</span> if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.449"></a>
+<span class="sourceLineNo">450</span> LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.450"></a>
+<span class="sourceLineNo">451</span> MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.451"></a>
+<span class="sourceLineNo">452</span> "your HBase deployment relies on client accessible names that the region server process " +<a name="line.452"></a>
+<span class="sourceLineNo">453</span> "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.453"></a>
+<span class="sourceLineNo">454</span> "to an appropriate hostname.");<a name="line.454"></a>
+<span class="sourceLineNo">455</span> // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.455"></a>
+<span class="sourceLineNo">456</span> response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.456"></a>
+<span class="sourceLineNo">457</span> "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.457"></a>
+<span class="sourceLineNo">458</span> "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.458"></a>
+<span class="sourceLineNo">459</span> return;<a name="line.459"></a>
+<span class="sourceLineNo">460</span> }<a name="line.460"></a>
+<span class="sourceLineNo">461</span> }<a name="line.461"></a>
+<span class="sourceLineNo">462</span> // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.462"></a>
+<span class="sourceLineNo">463</span> // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.463"></a>
+<span class="sourceLineNo">464</span> String redirectUrl = request.getScheme() + "://"<a name="line.464"></a>
+<span class="sourceLineNo">465</span> + redirectHost + ":" + regionServerInfoPort<a name="line.465"></a>
+<span class="sourceLineNo">466</span> + request.getRequestURI();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> response.sendRedirect(redirectUrl);<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> /**<a name="line.471"></a>
+<span class="sourceLineNo">472</span> * Initializes the HMaster. The steps are as follows:<a name="line.472"></a>
+<span class="sourceLineNo">473</span> * <p><a name="line.473"></a>
+<span class="sourceLineNo">474</span> * <ol><a name="line.474"></a>
+<span class="sourceLineNo">475</span> * <li>Initialize the local HRegionServer<a name="line.475"></a>
+<span class="sourceLineNo">476</span> * <li>Start the ActiveMasterManager.<a name="line.476"></a>
+<span class="sourceLineNo">477</span> * </ol><a name="line.477"></a>
+<span class="sourceLineNo">478</span> * <p><a name="line.478"></a>
+<span class="sourceLineNo">479</span> * Remaining steps of initialization occur in<a name="line.479"></a>
+<span class="sourceLineNo">480</span> * #finishActiveMasterInitialization(MonitoredTask) after<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * the master becomes the active one.<a name="line.481"></a>
+<span class="sourceLineNo">482</span> */<a name="line.482"></a>
+<span class="sourceLineNo">483</span> public HMaster(final Configuration conf)<a name="line.483"></a>
+<span class="sourceLineNo">484</span> throws IOException, KeeperException {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> super(conf);<a name="line.485"></a>
+<span class="sourceLineNo">486</span> TraceUtil.initTracer(conf);<a name="line.486"></a>
+<span class="sourceLineNo">487</span> try {<a name="line.487"></a>
+<span class="sourceLineNo">488</span> this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.488"></a>
+<span class="sourceLineNo">489</span> conf.getLong("hbase.master.buffer.for.rs.fatals", 1 * 1024 * 1024));<a name="line.489"></a>
+<span class="sourceLineNo">490</span> LOG.info("hbase.rootdir=" + getRootDir() +<a name="line.490"></a>
+<span class="sourceLineNo">491</span> ", hbase.cluster.distributed=" + this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span> // Disable usage of meta replicas in the master<a name="line.493"></a>
+<span class="sourceLineNo">494</span> this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span> decorateMasterConfiguration(this.conf);<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span> // Hack! Maps DFSClient => Master for logs. HDFS made this<a name="line.498"></a>
+<span class="sourceLineNo">499</span> // config param for task trackers, but we can piggyback off of it.<a name="line.499"></a>
+<span class="sourceLineNo">500</span> if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span> this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.501"></a>
+<span class="sourceLineNo">502</span> }<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span> // should we check the compression codec type at master side, default true, HBASE-6370<a name="line.504"></a>
+<span class="sourceLineNo">505</span> this.masterCheckCompression = conf.getBoolean("hbase.master.check.compression", true);<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span> // should we check encryption settings at master side, default true<a name="line.507"></a>
+<span class="sourceLineNo">508</span> this.masterCheckEncryption = conf.getBoolean("hbase.master.check.encryption", true);<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span> this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span> // preload table descriptor at startup<a name="line.512"></a>
+<span class="sourceLineNo">513</span> this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span> this.maxBlancingTime = getMaxBalancingTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span> this.maxRitPercent = conf.getDouble(HConstants.HBASE_MASTER_BALANCER_MAX_RIT_PERCENT,<a name="line.516"></a>
+<span class="sourceLineNo">517</span> HConstants.DEFAULT_HBASE_MASTER_BALANCER_MAX_RIT_PERCENT);<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span> // Do we publish the status?<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span> boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.521"></a>
+<span class="sourceLineNo">522</span> HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.522"></a>
+<span class="sourceLineNo">523</span> Class<? extends ClusterStatusPublisher.Publisher> publisherClass =<a name="line.523"></a>
+<span class="sourceLineNo">524</span> conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.524"></a>
+<span class="sourceLineNo">525</span> ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS,<a name="line.525"></a>
+<span class="s
<TRUNCATED>
[19/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html
index d60bbd0..cc0dba8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html
@@ -7,179 +7,190 @@
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> *<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * or more contributor license agreements. See the NOTICE file<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * regarding copyright ownership. The ASF licenses this file<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
-<span class="sourceLineNo">009</span> * with the License. You may obtain a copy of the License at<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *<a name="line.10"></a>
-<span class="sourceLineNo">011</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
-<span class="sourceLineNo">012</span> *<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
-<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
-<span class="sourceLineNo">018</span> */<a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.master;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><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">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.master;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.InterruptedIOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.HashSet;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.Iterator;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.List;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.NavigableMap;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.TreeMap;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.ServerName;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.zookeeper.ZKListener;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.zookeeper.KeeperException;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.slf4j.Logger;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.slf4j.LoggerFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>/**<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * Tracks the online region servers via ZK.<a name="line.41"></a>
-<span class="sourceLineNo">042</span> *<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * <p>Handling of new RSs checking in is done via RPC. This class<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * is only responsible for watching for expired nodes. It handles<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * listening for changes in the RS node list and watching each node.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> *<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * <p>If an RS node gets deleted, this automatically handles calling of<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * {@link ServerManager#expireServer(ServerName)}<a name="line.48"></a>
-<span class="sourceLineNo">049</span> */<a name="line.49"></a>
-<span class="sourceLineNo">050</span>@InterfaceAudience.Private<a name="line.50"></a>
-<span class="sourceLineNo">051</span>public class RegionServerTracker extends ZKListener {<a name="line.51"></a>
-<span class="sourceLineNo">052</span> private static final Logger LOG = LoggerFactory.getLogger(RegionServerTracker.class);<a name="line.52"></a>
-<span class="sourceLineNo">053</span> private final NavigableMap<ServerName, RegionServerInfo> regionServers = new TreeMap<>();<a name="line.53"></a>
-<span class="sourceLineNo">054</span> private ServerManager serverManager;<a name="line.54"></a>
-<span class="sourceLineNo">055</span> private MasterServices server;<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span> public RegionServerTracker(ZKWatcher watcher,<a name="line.57"></a>
-<span class="sourceLineNo">058</span> MasterServices server, ServerManager serverManager) {<a name="line.58"></a>
-<span class="sourceLineNo">059</span> super(watcher);<a name="line.59"></a>
-<span class="sourceLineNo">060</span> this.server = server;<a name="line.60"></a>
-<span class="sourceLineNo">061</span> this.serverManager = serverManager;<a name="line.61"></a>
-<span class="sourceLineNo">062</span> }<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span> /**<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * Starts the tracking of online RegionServers.<a name="line.65"></a>
-<span class="sourceLineNo">066</span> *<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * <p>All RSs will be tracked after this method is called.<a name="line.67"></a>
-<span class="sourceLineNo">068</span> *<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * @throws KeeperException<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * @throws IOException<a name="line.70"></a>
-<span class="sourceLineNo">071</span> */<a name="line.71"></a>
-<span class="sourceLineNo">072</span> public void start() throws KeeperException, IOException {<a name="line.72"></a>
-<span class="sourceLineNo">073</span> watcher.registerListener(this);<a name="line.73"></a>
-<span class="sourceLineNo">074</span> List<String> servers =<a name="line.74"></a>
-<span class="sourceLineNo">075</span> ZKUtil.listChildrenAndWatchThem(watcher, watcher.getZNodePaths().rsZNode);<a name="line.75"></a>
-<span class="sourceLineNo">076</span> refresh(servers);<a name="line.76"></a>
-<span class="sourceLineNo">077</span> }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span> private void refresh(final List<String> servers) throws IOException {<a name="line.79"></a>
-<span class="sourceLineNo">080</span> synchronized(this.regionServers) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span> this.regionServers.clear();<a name="line.81"></a>
-<span class="sourceLineNo">082</span> for (String n: servers) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span> ServerName sn = ServerName.parseServerName(ZKUtil.getNodeName(n));<a name="line.83"></a>
-<span class="sourceLineNo">084</span> if (regionServers.get(sn) == null) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span> RegionServerInfo.Builder rsInfoBuilder = RegionServerInfo.newBuilder();<a name="line.85"></a>
-<span class="sourceLineNo">086</span> try {<a name="line.86"></a>
-<span class="sourceLineNo">087</span> String nodePath = ZNodePaths.joinZNode(watcher.getZNodePaths().rsZNode, n);<a name="line.87"></a>
-<span class="sourceLineNo">088</span> byte[] data = ZKUtil.getData(watcher, nodePath);<a name="line.88"></a>
-<span class="sourceLineNo">089</span> if (data != null && data.length > 0 && ProtobufUtil.isPBMagicPrefix(data)) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span> int magicLen = ProtobufUtil.lengthOfPBMagic();<a name="line.90"></a>
-<span class="sourceLineNo">091</span> ProtobufUtil.mergeFrom(rsInfoBuilder, data, magicLen, data.length - magicLen);<a name="line.91"></a>
-<span class="sourceLineNo">092</span> }<a name="line.92"></a>
-<span class="sourceLineNo">093</span> if (LOG.isTraceEnabled()) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span> LOG.trace("Added tracking of RS " + nodePath);<a name="line.94"></a>
-<span class="sourceLineNo">095</span> }<a name="line.95"></a>
-<span class="sourceLineNo">096</span> } catch (KeeperException e) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span> LOG.warn("Get Rs info port from ephemeral node", e);<a name="line.97"></a>
-<span class="sourceLineNo">098</span> } catch (IOException e) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span> LOG.warn("Illegal data from ephemeral node", e);<a name="line.99"></a>
-<span class="sourceLineNo">100</span> } catch (InterruptedException e) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span> throw new InterruptedIOException();<a name="line.101"></a>
-<span class="sourceLineNo">102</span> }<a name="line.102"></a>
-<span class="sourceLineNo">103</span> this.regionServers.put(sn, rsInfoBuilder.build());<a name="line.103"></a>
-<span class="sourceLineNo">104</span> }<a name="line.104"></a>
-<span class="sourceLineNo">105</span> }<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> private void remove(final ServerName sn) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span> synchronized(this.regionServers) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span> this.regionServers.remove(sn);<a name="line.111"></a>
-<span class="sourceLineNo">112</span> }<a name="line.112"></a>
-<span class="sourceLineNo">113</span> }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span> @Override<a name="line.115"></a>
-<span class="sourceLineNo">116</span> public void nodeCreated(String path) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span> if (path.startsWith(watcher.getZNodePaths().rsZNode)) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span> String serverName = ZKUtil.getNodeName(path);<a name="line.118"></a>
-<span class="sourceLineNo">119</span> LOG.info("RegionServer ephemeral node created, adding [" + serverName + "]");<a name="line.119"></a>
-<span class="sourceLineNo">120</span> if (server.isInitialized()) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span> // Only call the check to move servers if a RegionServer was added to the cluster; in this<a name="line.121"></a>
-<span class="sourceLineNo">122</span> // case it could be a server with a new version so it makes sense to run the check.<a name="line.122"></a>
-<span class="sourceLineNo">123</span> server.checkIfShouldMoveSystemRegionAsync();<a name="line.123"></a>
-<span class="sourceLineNo">124</span> }<a name="line.124"></a>
-<span class="sourceLineNo">125</span> }<a name="line.125"></a>
-<span class="sourceLineNo">126</span> }<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span> @Override<a name="line.128"></a>
-<span class="sourceLineNo">129</span> public void nodeDeleted(String path) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (path.startsWith(watcher.getZNodePaths().rsZNode)) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> String serverName = ZKUtil.getNodeName(path);<a name="line.131"></a>
-<span class="sourceLineNo">132</span> LOG.info("RegionServer ephemeral node deleted, processing expiration [" +<a name="line.132"></a>
-<span class="sourceLineNo">133</span> serverName + "]");<a name="line.133"></a>
-<span class="sourceLineNo">134</span> ServerName sn = ServerName.parseServerName(serverName);<a name="line.134"></a>
-<span class="sourceLineNo">135</span> if (!serverManager.isServerOnline(sn)) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span> LOG.warn(serverName.toString() + " is not online or isn't known to the master."+<a name="line.136"></a>
-<span class="sourceLineNo">137</span> "The latter could be caused by a DNS misconfiguration.");<a name="line.137"></a>
-<span class="sourceLineNo">138</span> return;<a name="line.138"></a>
-<span class="sourceLineNo">139</span> }<a name="line.139"></a>
-<span class="sourceLineNo">140</span> remove(sn);<a name="line.140"></a>
-<span class="sourceLineNo">141</span> this.serverManager.expireServer(sn);<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">145</span> @Override<a name="line.145"></a>
-<span class="sourceLineNo">146</span> public void nodeChildrenChanged(String path) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> if (path.equals(watcher.getZNodePaths().rsZNode)<a name="line.147"></a>
-<span class="sourceLineNo">148</span> && !server.isAborted() && !server.isStopped()) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span> try {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> List<String> servers =<a name="line.150"></a>
-<span class="sourceLineNo">151</span> ZKUtil.listChildrenAndWatchThem(watcher, watcher.getZNodePaths().rsZNode);<a name="line.151"></a>
-<span class="sourceLineNo">152</span> refresh(servers);<a name="line.152"></a>
-<span class="sourceLineNo">153</span> } catch (IOException e) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span> server.abort("Unexpected zk exception getting RS nodes", e);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> } catch (KeeperException e) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> server.abort("Unexpected zk exception getting RS nodes", e);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> }<a name="line.158"></a>
-<span class="sourceLineNo">159</span> }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span> public RegionServerInfo getRegionServerInfo(final ServerName sn) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span> return regionServers.get(sn);<a name="line.162"></a>
-<span class="sourceLineNo">163</span> }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span> /**<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * Gets the online servers.<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * @return list of online servers<a name="line.167"></a>
-<span class="sourceLineNo">168</span> */<a name="line.168"></a>
-<span class="sourceLineNo">169</span> public List<ServerName> getOnlineServers() {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> synchronized (this.regionServers) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> return new ArrayList<>(this.regionServers.keySet());<a name="line.171"></a>
-<span class="sourceLineNo">172</span> }<a name="line.172"></a>
-<span class="sourceLineNo">173</span> }<a name="line.173"></a>
-<span class="sourceLineNo">174</span>}<a name="line.174"></a>
+<span class="sourceLineNo">025</span>import java.util.Set;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.ExecutorService;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.concurrent.Executors;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.stream.Collectors;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.ServerName;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.zookeeper.ZKListener;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.zookeeper.KeeperException;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.slf4j.Logger;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.slf4j.LoggerFactory;<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>/**<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * <p><a name="line.49"></a>
+<span class="sourceLineNo">050</span> * Tracks the online region servers via ZK.<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * </p><a name="line.51"></a>
+<span class="sourceLineNo">052</span> * <p><a name="line.52"></a>
+<span class="sourceLineNo">053</span> * Handling of new RSs checking in is done via RPC. This class is only responsible for watching for<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * expired nodes. It handles listening for changes in the RS node list. The only exception is when<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * master restart, we will use the list fetched from zk to construct the initial set of live region<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * servers.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * </p><a name="line.57"></a>
+<span class="sourceLineNo">058</span> * <p><a name="line.58"></a>
+<span class="sourceLineNo">059</span> * If an RS node gets deleted, this automatically handles calling of<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * {@link ServerManager#expireServer(ServerName)}<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * </p><a name="line.61"></a>
+<span class="sourceLineNo">062</span> */<a name="line.62"></a>
+<span class="sourceLineNo">063</span>@InterfaceAudience.Private<a name="line.63"></a>
+<span class="sourceLineNo">064</span>public class RegionServerTracker extends ZKListener {<a name="line.64"></a>
+<span class="sourceLineNo">065</span> private static final Logger LOG = LoggerFactory.getLogger(RegionServerTracker.class);<a name="line.65"></a>
+<span class="sourceLineNo">066</span> private final Set<ServerName> regionServers = new HashSet<>();<a name="line.66"></a>
+<span class="sourceLineNo">067</span> private final ServerManager serverManager;<a name="line.67"></a>
+<span class="sourceLineNo">068</span> private final MasterServices server;<a name="line.68"></a>
+<span class="sourceLineNo">069</span> // As we need to send request to zk when processing the nodeChildrenChanged event, we'd better<a name="line.69"></a>
+<span class="sourceLineNo">070</span> // move the operation to a single threaded thread pool in order to not block the zk event<a name="line.70"></a>
+<span class="sourceLineNo">071</span> // processing since all the zk listener across HMaster will be called in one thread sequentially.<a name="line.71"></a>
+<span class="sourceLineNo">072</span> private final ExecutorService executor;<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span> public RegionServerTracker(ZKWatcher watcher, MasterServices server,<a name="line.74"></a>
+<span class="sourceLineNo">075</span> ServerManager serverManager) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span> super(watcher);<a name="line.76"></a>
+<span class="sourceLineNo">077</span> this.server = server;<a name="line.77"></a>
+<span class="sourceLineNo">078</span> this.serverManager = serverManager;<a name="line.78"></a>
+<span class="sourceLineNo">079</span> executor = Executors.newSingleThreadExecutor(<a name="line.79"></a>
+<span class="sourceLineNo">080</span> new ThreadFactoryBuilder().setDaemon(true).setNameFormat("RegionServerTracker-%d").build());<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> private Pair<ServerName, RegionServerInfo> getServerInfo(String name)<a name="line.83"></a>
+<span class="sourceLineNo">084</span> throws KeeperException, IOException {<a name="line.84"></a>
+<span class="sourceLineNo">085</span> ServerName serverName = ServerName.parseServerName(name);<a name="line.85"></a>
+<span class="sourceLineNo">086</span> String nodePath = ZNodePaths.joinZNode(watcher.getZNodePaths().rsZNode, name);<a name="line.86"></a>
+<span class="sourceLineNo">087</span> byte[] data;<a name="line.87"></a>
+<span class="sourceLineNo">088</span> try {<a name="line.88"></a>
+<span class="sourceLineNo">089</span> data = ZKUtil.getData(watcher, nodePath);<a name="line.89"></a>
+<span class="sourceLineNo">090</span> } catch (InterruptedException e) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span> throw (InterruptedIOException) new InterruptedIOException().initCause(e);<a name="line.91"></a>
+<span class="sourceLineNo">092</span> }<a name="line.92"></a>
+<span class="sourceLineNo">093</span> if (data == null) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span> // we should receive a children changed event later and then we will expire it, so we still<a name="line.94"></a>
+<span class="sourceLineNo">095</span> // need to add it to the region server set.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> LOG.warn("Server node {} does not exist, already dead?", name);<a name="line.96"></a>
+<span class="sourceLineNo">097</span> return Pair.newPair(serverName, null);<a name="line.97"></a>
+<span class="sourceLineNo">098</span> }<a name="line.98"></a>
+<span class="sourceLineNo">099</span> if (data.length == 0 || !ProtobufUtil.isPBMagicPrefix(data)) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span> // this should not happen actually, unless we have bugs or someone has messed zk up.<a name="line.100"></a>
+<span class="sourceLineNo">101</span> LOG.warn("Invalid data for region server node {} on zookeeper, data length = {}", name,<a name="line.101"></a>
+<span class="sourceLineNo">102</span> data.length);<a name="line.102"></a>
+<span class="sourceLineNo">103</span> return Pair.newPair(serverName, null);<a name="line.103"></a>
+<span class="sourceLineNo">104</span> }<a name="line.104"></a>
+<span class="sourceLineNo">105</span> RegionServerInfo.Builder builder = RegionServerInfo.newBuilder();<a name="line.105"></a>
+<span class="sourceLineNo">106</span> int magicLen = ProtobufUtil.lengthOfPBMagic();<a name="line.106"></a>
+<span class="sourceLineNo">107</span> ProtobufUtil.mergeFrom(builder, data, magicLen, data.length - magicLen);<a name="line.107"></a>
+<span class="sourceLineNo">108</span> return Pair.newPair(serverName, builder.build());<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * <p><a name="line.112"></a>
+<span class="sourceLineNo">113</span> * Starts the tracking of online RegionServers.<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * </p><a name="line.114"></a>
+<span class="sourceLineNo">115</span> * <p><a name="line.115"></a>
+<span class="sourceLineNo">116</span> * All RSs will be tracked after this method is called.<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * </p><a name="line.117"></a>
+<span class="sourceLineNo">118</span> */<a name="line.118"></a>
+<span class="sourceLineNo">119</span> public void start() throws KeeperException, IOException {<a name="line.119"></a>
+<span class="sourceLineNo">120</span> watcher.registerListener(this);<a name="line.120"></a>
+<span class="sourceLineNo">121</span> synchronized (this) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span> List<String> servers =<a name="line.122"></a>
+<span class="sourceLineNo">123</span> ZKUtil.listChildrenAndWatchForNewChildren(watcher, watcher.getZNodePaths().rsZNode);<a name="line.123"></a>
+<span class="sourceLineNo">124</span> for (String n : servers) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span> Pair<ServerName, RegionServerInfo> pair = getServerInfo(n);<a name="line.125"></a>
+<span class="sourceLineNo">126</span> ServerName serverName = pair.getFirst();<a name="line.126"></a>
+<span class="sourceLineNo">127</span> RegionServerInfo info = pair.getSecond();<a name="line.127"></a>
+<span class="sourceLineNo">128</span> regionServers.add(serverName);<a name="line.128"></a>
+<span class="sourceLineNo">129</span> ServerMetrics serverMetrics = info != null<a name="line.129"></a>
+<span class="sourceLineNo">130</span> ? ServerMetricsBuilder.of(serverName,<a name="line.130"></a>
+<span class="sourceLineNo">131</span> VersionInfoUtil.getVersionNumber(info.getVersionInfo()))<a name="line.131"></a>
+<span class="sourceLineNo">132</span> : ServerMetricsBuilder.of(serverName);<a name="line.132"></a>
+<span class="sourceLineNo">133</span> serverManager.checkAndRecordNewServer(serverName, serverMetrics);<a name="line.133"></a>
+<span class="sourceLineNo">134</span> }<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> }<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span> public void stop() {<a name="line.138"></a>
+<span class="sourceLineNo">139</span> executor.shutdownNow();<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> private synchronized void refresh() {<a name="line.142"></a>
+<span class="sourceLineNo">143</span> List<String> names;<a name="line.143"></a>
+<span class="sourceLineNo">144</span> try {<a name="line.144"></a>
+<span class="sourceLineNo">145</span> names = ZKUtil.listChildrenAndWatchForNewChildren(watcher, watcher.getZNodePaths().rsZNode);<a name="line.145"></a>
+<span class="sourceLineNo">146</span> } catch (KeeperException e) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span> // here we need to abort as we failed to set watcher on the rs node which means that we can<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // not track the node deleted evetnt any more.<a name="line.148"></a>
+<span class="sourceLineNo">149</span> server.abort("Unexpected zk exception getting RS nodes", e);<a name="line.149"></a>
+<span class="sourceLineNo">150</span> return;<a name="line.150"></a>
+<span class="sourceLineNo">151</span> }<a name="line.151"></a>
+<span class="sourceLineNo">152</span> Set<ServerName> servers =<a name="line.152"></a>
+<span class="sourceLineNo">153</span> names.stream().map(ServerName::parseServerName).collect(Collectors.toSet());<a name="line.153"></a>
+<span class="sourceLineNo">154</span> for (Iterator<ServerName> iter = regionServers.iterator(); iter.hasNext();) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span> ServerName sn = iter.next();<a name="line.155"></a>
+<span class="sourceLineNo">156</span> if (!servers.contains(sn)) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> LOG.info("RegionServer ephemeral node deleted, processing expiration [{}]", sn);<a name="line.157"></a>
+<span class="sourceLineNo">158</span> serverManager.expireServer(sn);<a name="line.158"></a>
+<span class="sourceLineNo">159</span> iter.remove();<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span> }<a name="line.161"></a>
+<span class="sourceLineNo">162</span> // here we do not need to parse the region server info as it is useless now, we only need the<a name="line.162"></a>
+<span class="sourceLineNo">163</span> // server name.<a name="line.163"></a>
+<span class="sourceLineNo">164</span> boolean newServerAdded = false;<a name="line.164"></a>
+<span class="sourceLineNo">165</span> for (ServerName sn : servers) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span> if (regionServers.add(sn)) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> newServerAdded = true;<a name="line.167"></a>
+<span class="sourceLineNo">168</span> LOG.info("RegionServer ephemeral node created, adding [" + sn + "]");<a name="line.168"></a>
+<span class="sourceLineNo">169</span> }<a name="line.169"></a>
+<span class="sourceLineNo">170</span> }<a name="line.170"></a>
+<span class="sourceLineNo">171</span> if (newServerAdded && server.isInitialized()) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span> // Only call the check to move servers if a RegionServer was added to the cluster; in this<a name="line.172"></a>
+<span class="sourceLineNo">173</span> // case it could be a server with a new version so it makes sense to run the check.<a name="line.173"></a>
+<span class="sourceLineNo">174</span> server.checkIfShouldMoveSystemRegionAsync();<a name="line.174"></a>
+<span class="sourceLineNo">175</span> }<a name="line.175"></a>
+<span class="sourceLineNo">176</span> }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span> @Override<a name="line.178"></a>
+<span class="sourceLineNo">179</span> public void nodeChildrenChanged(String path) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span> if (path.equals(watcher.getZNodePaths().rsZNode) && !server.isAborted() &&<a name="line.180"></a>
+<span class="sourceLineNo">181</span> !server.isStopped()) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span> executor.execute(this::refresh);<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>}<a name="line.185"></a>
[42/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/ServerManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/ServerManager.html b/devapidocs/org/apache/hadoop/hbase/master/ServerManager.html
index ed8e9dd..2d0d7ff 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/ServerManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/ServerManager.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":9,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":9,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.97">ServerManager</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.96">ServerManager</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">The ServerManager class manages info about region servers.
<p>
@@ -267,10 +267,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<div class="block">Constructor.</div>
</td>
</tr>
-<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#ServerManager-org.apache.hadoop.hbase.master.MasterServices-boolean-">ServerManager</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> master,
- boolean connect)</code> </td>
-</tr>
</table>
</li>
</ul>
@@ -381,104 +377,108 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getDrainingServersList--">getDrainingServersList</a></span>()</code> </td>
</tr>
<tr id="i16" class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getInfoPort-org.apache.hadoop.hbase.ServerName-">getInfoPort</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
+</tr>
+<tr id="i17" class="rowColor">
<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getLastFlushedSequenceId-byte:A-">getLastFlushedSequenceId</a></span>(byte[] encodedRegionName)</code> </td>
</tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getLoad-org.apache.hadoop.hbase.ServerName-">getLoad</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
</tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
<td class="colFirst"><code>private int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getMinToStart--">getMinToStart</a></span>()</code>
<div class="block">Calculate min necessary to start.</div>
</td>
</tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
<td class="colFirst"><code><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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getOnlineServers--">getOnlineServers</a></span>()</code> </td>
</tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
<td class="colFirst"><code><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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getOnlineServersList--">getOnlineServersList</a></span>()</code> </td>
</tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
<td class="colFirst"><code><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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getOnlineServersListWithPredicator-java.util.List-java.util.function.Predicate-">getOnlineServersListWithPredicator</a></span>(<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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> keys,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html?is-external=true" title="class or interface in java.util.function">Predicate</a><<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a>> idleServerPredicator)</code> </td>
</tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
<td class="colFirst"><code>private <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><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getRegionServersInZK-org.apache.hadoop.hbase.zookeeper.ZKWatcher-">getRegionServersInZK</a></span>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a> zkw)</code> </td>
</tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getRsAdmin-org.apache.hadoop.hbase.ServerName-">getRsAdmin</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</code> </td>
</tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getServerVersion-org.apache.hadoop.hbase.ServerName-">getServerVersion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
<div class="block">May return 0 when server is not online.</div>
</td>
</tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getStrForMax-int-">getStrForMax</a></span>(int max)</code> </td>
</tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#isClusterShutdown--">isClusterShutdown</a></span>()</code> </td>
</tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#isRegionInServerManagerStates-org.apache.hadoop.hbase.client.RegionInfo-">isRegionInServerManagerStates</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)</code> </td>
</tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#isServerDead-org.apache.hadoop.hbase.ServerName-">isServerDead</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
<div class="block">Check if a server is known to be dead.</div>
</td>
</tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#isServerOnline-org.apache.hadoop.hbase.ServerName-">isServerOnline</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
</tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#letRegionServersShutdown--">letRegionServersShutdown</a></span>()</code> </td>
</tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#moveFromOnlineToDeadServers-org.apache.hadoop.hbase.ServerName-">moveFromOnlineToDeadServers</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</code> </td>
</tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#newRpcController--">newRpcController</a></span>()</code> </td>
</tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#processDeadServer-org.apache.hadoop.hbase.ServerName-boolean-">processDeadServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
boolean shouldSplitWal)</code> </td>
</tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#processQueuedDeadServers--">processQueuedDeadServers</a></span>()</code>
<div class="block">Process the servers which died during master's initialization.</div>
</td>
</tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#recordNewServerWithLock-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.ServerMetrics-">recordNewServerWithLock</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a> sl)</code>
<div class="block">Adds the onlineServers list.</div>
</td>
</tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#regionServerReport-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.ServerMetrics-">regionServerReport</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn,
<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a> sl)</code> </td>
</tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#regionServerStartup-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest-int-java.net.InetAddress-">regionServerStartup</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest request,
int versionNumber,
@@ -486,66 +486,66 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<div class="block">Let the server manager know a new regionserver has come online</div>
</td>
</tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#registerListener-org.apache.hadoop.hbase.master.ServerListener-">registerListener</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html" title="interface in org.apache.hadoop.hbase.master">ServerListener</a> listener)</code>
<div class="block">Add the listener to the notification list.</div>
</td>
</tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#removeDeadNotExpiredServers-java.util.List-">removeDeadNotExpiredServers</a></span>(<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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> servers)</code>
<div class="block">Loop through the deadNotExpired server list and remove them from the
servers.</div>
</td>
</tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#removeRegion-org.apache.hadoop.hbase.client.RegionInfo-">removeRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</code>
<div class="block">Called by delete table and similar to notify the ServerManager that a region was removed.</div>
</td>
</tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#removeRegions-java.util.List-">removeRegions</a></span>(<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><<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> regions)</code>
<div class="block">Called by delete table and similar to notify the ServerManager that a region was removed.</div>
</td>
</tr>
-<tr id="i42" class="altColor">
+<tr id="i43" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#removeServerFromDrainList-org.apache.hadoop.hbase.ServerName-">removeServerFromDrainList</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</code> </td>
</tr>
-<tr id="i43" class="rowColor">
+<tr id="i44" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#sendRegionWarmup-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.RegionInfo-">sendRegionWarmup</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server,
<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region)</code>
<div class="block">Sends a WARMUP RPC to the specified server to warmup the specified region.</div>
</td>
</tr>
-<tr id="i44" class="altColor">
+<tr id="i45" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#shutdownCluster--">shutdownCluster</a></span>()</code> </td>
</tr>
-<tr id="i45" class="rowColor">
+<tr id="i46" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#stop--">stop</a></span>()</code>
<div class="block">Stop the ServerManager.</div>
</td>
</tr>
-<tr id="i46" class="altColor">
+<tr id="i47" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#unregisterListener-org.apache.hadoop.hbase.master.ServerListener-">unregisterListener</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html" title="interface in org.apache.hadoop.hbase.master">ServerListener</a> listener)</code>
<div class="block">Remove the listener from the notification list.</div>
</td>
</tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#updateLastFlushedSequenceIds-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.ServerMetrics-">updateLastFlushedSequenceIds</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn,
<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a> hsl)</code>
<div class="block">Updates last flushed sequence Ids for the regions on server sn</div>
</td>
</tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#waitForRegionServers-org.apache.hadoop.hbase.monitoring.MonitoredTask-">waitForRegionServers</a></span>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)</code>
<div class="block">Wait for the region servers to report in.</div>
@@ -579,7 +579,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>WAIT_ON_REGIONSERVERS_MAXTOSTART</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.98">WAIT_ON_REGIONSERVERS_MAXTOSTART</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.97">WAIT_ON_REGIONSERVERS_MAXTOSTART</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART">Constant Field Values</a></dd>
@@ -592,7 +592,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>WAIT_ON_REGIONSERVERS_MINTOSTART</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.101">WAIT_ON_REGIONSERVERS_MINTOSTART</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.100">WAIT_ON_REGIONSERVERS_MINTOSTART</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART">Constant Field Values</a></dd>
@@ -605,7 +605,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>WAIT_ON_REGIONSERVERS_TIMEOUT</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.104">WAIT_ON_REGIONSERVERS_TIMEOUT</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.103">WAIT_ON_REGIONSERVERS_TIMEOUT</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.ServerManager.WAIT_ON_REGIONSERVERS_TIMEOUT">Constant Field Values</a></dd>
@@ -618,7 +618,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>WAIT_ON_REGIONSERVERS_INTERVAL</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.107">WAIT_ON_REGIONSERVERS_INTERVAL</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.106">WAIT_ON_REGIONSERVERS_INTERVAL</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.ServerManager.WAIT_ON_REGIONSERVERS_INTERVAL">Constant Field Values</a></dd>
@@ -631,7 +631,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.110">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.109">LOG</a></pre>
</li>
</ul>
<a name="clusterShutdown">
@@ -640,7 +640,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>clusterShutdown</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.113">clusterShutdown</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.112">clusterShutdown</a></pre>
</li>
</ul>
<a name="flushedSequenceIdByRegion">
@@ -649,7 +649,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>flushedSequenceIdByRegion</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentNavigableMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentNavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.118">flushedSequenceIdByRegion</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentNavigableMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentNavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.117">flushedSequenceIdByRegion</a></pre>
<div class="block">The last flushed sequence id for a region.</div>
</li>
</ul>
@@ -659,7 +659,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>storeFlushedSequenceIdsByRegion</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentNavigableMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentNavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentNavigableMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentNavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.125">storeFlushedSequenceIdsByRegion</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentNavigableMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentNavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentNavigableMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentNavigableMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.124">storeFlushedSequenceIdsByRegion</a></pre>
<div class="block">The last flushed sequence id for a store in a region.</div>
</li>
</ul>
@@ -669,7 +669,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>onlineServers</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentNavigableMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentNavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.128">onlineServers</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentNavigableMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentNavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.127">onlineServers</a></pre>
<div class="block">Map of registered servers to their current load</div>
</li>
</ul>
@@ -679,7 +679,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>rsAdmins</h4>
-<pre>private final <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.135">rsAdmins</a></pre>
+<pre>private final <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.134">rsAdmins</a></pre>
<div class="block">Map of admin interfaces per registered regionserver; these interfaces we use to control
regionservers out on the cluster</div>
</li>
@@ -690,7 +690,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>drainingServers</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.138">drainingServers</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.137">drainingServers</a></pre>
<div class="block">List of region servers that should not get any more new regions.</div>
</li>
</ul>
@@ -700,7 +700,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>master</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.140">master</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.139">master</a></pre>
</li>
</ul>
<a name="connection">
@@ -709,7 +709,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>connection</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.141">connection</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.140">connection</a></pre>
</li>
</ul>
<a name="deadservers">
@@ -718,7 +718,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>deadservers</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/master/DeadServer.html" title="class in org.apache.hadoop.hbase.master">DeadServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.143">deadservers</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/master/DeadServer.html" title="class in org.apache.hadoop.hbase.master">DeadServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.142">deadservers</a></pre>
</li>
</ul>
<a name="maxSkew">
@@ -727,7 +727,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>maxSkew</h4>
-<pre>private final long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.145">maxSkew</a></pre>
+<pre>private final long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.144">maxSkew</a></pre>
</li>
</ul>
<a name="warningSkew">
@@ -736,7 +736,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>warningSkew</h4>
-<pre>private final long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.146">warningSkew</a></pre>
+<pre>private final long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.145">warningSkew</a></pre>
</li>
</ul>
<a name="rpcControllerFactory">
@@ -745,7 +745,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>rpcControllerFactory</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcControllerFactory.html" title="class in org.apache.hadoop.hbase.ipc">RpcControllerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.148">rpcControllerFactory</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcControllerFactory.html" title="class in org.apache.hadoop.hbase.ipc">RpcControllerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.147">rpcControllerFactory</a></pre>
</li>
</ul>
<a name="queuedDeadServers">
@@ -754,7 +754,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>queuedDeadServers</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.166">queuedDeadServers</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.165">queuedDeadServers</a></pre>
<div class="block">Set of region servers which are dead but not processed immediately. If one
server died before master enables ServerShutdownHandler, the server will be
added to this set and will be processed through calling
@@ -777,7 +777,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>requeuedDeadServers</h4>
-<pre>private <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><<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/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.183">requeuedDeadServers</a></pre>
+<pre>private <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><<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/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.182">requeuedDeadServers</a></pre>
<div class="block">Set of region servers which are dead and submitted to ServerShutdownHandler to process but not
fully processed immediately.
<p>
@@ -799,7 +799,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>listeners</h4>
-<pre>private <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><<a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html" title="interface in org.apache.hadoop.hbase.master">ServerListener</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.186">listeners</a></pre>
+<pre>private <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><<a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html" title="interface in org.apache.hadoop.hbase.master">ServerListener</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.185">listeners</a></pre>
<div class="block">Listeners that are called on server events.</div>
</li>
</ul>
@@ -814,27 +814,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<a name="ServerManager-org.apache.hadoop.hbase.master.MasterServices-">
<!-- -->
</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ServerManager</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.193">ServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> master)</pre>
-<div class="block">Constructor.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>master</code> - </dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../../org/apache/hadoop/hbase/ZooKeeperConnectionException.html" title="class in org.apache.hadoop.hbase">ZooKeeperConnectionException</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="ServerManager-org.apache.hadoop.hbase.master.MasterServices-boolean-">
-<!-- -->
-</a>
<ul class="blockListLast">
<li class="blockList">
<h4>ServerManager</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.197">ServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> master,
- boolean connect)</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.190">ServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> master)</pre>
+<div class="block">Constructor.</div>
</li>
</ul>
</li>
@@ -851,7 +835,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>registerListener</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.210">registerListener</a>(<a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html" title="interface in org.apache.hadoop.hbase.master">ServerListener</a> listener)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.203">registerListener</a>(<a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html" title="interface in org.apache.hadoop.hbase.master">ServerListener</a> listener)</pre>
<div class="block">Add the listener to the notification list.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -865,7 +849,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>unregisterListener</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.218">unregisterListener</a>(<a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html" title="interface in org.apache.hadoop.hbase.master">ServerListener</a> listener)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.211">unregisterListener</a>(<a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html" title="interface in org.apache.hadoop.hbase.master">ServerListener</a> listener)</pre>
<div class="block">Remove the listener from the notification list.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -879,7 +863,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>regionServerStartup</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.230">regionServerStartup</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest request,
+<pre><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.223">regionServerStartup</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest request,
int versionNumber,
<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a> ia)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -902,7 +886,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>updateLastFlushedSequenceIds</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.259">updateLastFlushedSequenceIds</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.251">updateLastFlushedSequenceIds</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn,
<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a> hsl)</pre>
<div class="block">Updates last flushed sequence Ids for the regions on server sn</div>
<dl>
@@ -918,7 +902,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>regionServerReport</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.296">regionServerReport</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.288">regionServerReport</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn,
<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a> sl)
throws <a href="../../../../../org/apache/hadoop/hbase/YouAreDeadException.html" title="class in org.apache.hadoop.hbase">YouAreDeadException</a></pre>
<dl>
@@ -933,7 +917,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>checkAndRecordNewServer</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.322">checkAndRecordNewServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.314">checkAndRecordNewServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a> sl)</pre>
<div class="block">Check is a server of same host and port already exists,
if not, or the existed one got a smaller start code, record it.</div>
@@ -952,7 +936,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>checkClockSkew</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.360">checkClockSkew</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.352">checkClockSkew</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
long serverCurrentTime)
throws <a href="../../../../../org/apache/hadoop/hbase/ClockOutOfSyncException.html" title="class in org.apache.hadoop.hbase">ClockOutOfSyncException</a></pre>
<div class="block">Checks if the clock skew between the server and the master. If the clock skew exceeds the
@@ -973,7 +957,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>checkIsDead</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.385">checkIsDead</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.377">checkIsDead</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> what)
throws <a href="../../../../../org/apache/hadoop/hbase/YouAreDeadException.html" title="class in org.apache.hadoop.hbase">YouAreDeadException</a></pre>
<div class="block">If this server is on the dead list, reject it with a YouAreDeadException.
@@ -994,7 +978,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>findServerWithSameHostnamePortWithLock</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.410">findServerWithSameHostnamePortWithLock</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.402">findServerWithSameHostnamePortWithLock</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
<div class="block">Assumes onlineServers is locked.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1008,7 +992,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>recordNewServerWithLock</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.429">recordNewServerWithLock</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.421">recordNewServerWithLock</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a> sl)</pre>
<div class="block">Adds the onlineServers list. onlineServers should be locked.</div>
<dl>
@@ -1023,7 +1007,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getLastFlushedSequenceId</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.435">getLastFlushedSequenceId</a>(byte[] encodedRegionName)</pre>
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.427">getLastFlushedSequenceId</a>(byte[] encodedRegionName)</pre>
</li>
</ul>
<a name="getLoad-org.apache.hadoop.hbase.ServerName-">
@@ -1032,7 +1016,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getLoad</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.455">getLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.447">getLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>serverName</code> - </dd>
@@ -1047,7 +1031,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getAverageLoad</h4>
-<pre>public double <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.465">getAverageLoad</a>()</pre>
+<pre>public double <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.457">getAverageLoad</a>()</pre>
<div class="block">Compute the average load across all region servers.
Currently, this uses a very naive computation - just uses the number of
regions being served, ignoring stats about number of requests.</div>
@@ -1063,7 +1047,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>countOfRegionServers</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.477">countOfRegionServers</a>()</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.469">countOfRegionServers</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the count of active regionservers</dd>
@@ -1076,7 +1060,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getOnlineServers</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.485">getOnlineServers</a>()</pre>
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.477">getOnlineServers</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Read-only map of servers to serverinfo</dd>
@@ -1089,7 +1073,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getDeadServers</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/DeadServer.html" title="class in org.apache.hadoop.hbase.master">DeadServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.492">getDeadServers</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/DeadServer.html" title="class in org.apache.hadoop.hbase.master">DeadServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.484">getDeadServers</a>()</pre>
</li>
</ul>
<a name="areDeadServersInProgress--">
@@ -1098,7 +1082,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>areDeadServersInProgress</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.500">areDeadServersInProgress</a>()</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.492">areDeadServersInProgress</a>()</pre>
<div class="block">Checks if any dead servers are currently in progress.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1112,7 +1096,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>letRegionServersShutdown</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.504">letRegionServersShutdown</a>()</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.496">letRegionServersShutdown</a>()</pre>
</li>
</ul>
<a name="getRegionServersInZK-org.apache.hadoop.hbase.zookeeper.ZKWatcher-">
@@ -1121,7 +1105,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionServersInZK</h4>
-<pre>private <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><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.554">getRegionServersInZK</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a> zkw)
+<pre>private <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><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.546">getRegionServersInZK</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a> zkw)
throws org.apache.zookeeper.KeeperException</pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -1135,7 +1119,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>expireServer</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.567">expireServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.559">expireServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
</li>
</ul>
<a name="moveFromOnlineToDeadServers-org.apache.hadoop.hbase.ServerName-">
@@ -1144,7 +1128,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>moveFromOnlineToDeadServers</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.616">moveFromOnlineToDeadServers</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.608">moveFromOnlineToDeadServers</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
</li>
</ul>
<a name="processDeadServer-org.apache.hadoop.hbase.ServerName-boolean-">
@@ -1153,7 +1137,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>processDeadServer</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.631">processDeadServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.623">processDeadServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
boolean shouldSplitWal)</pre>
</li>
</ul>
@@ -1163,7 +1147,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>processQueuedDeadServers</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.653">processQueuedDeadServers</a>()</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.645">processQueuedDeadServers</a>()</pre>
<div class="block">Process the servers which died during master's initialization. It will be
called after HMaster#assignMeta and AssignmentManager#joinCluster.</div>
</li>
@@ -1174,7 +1158,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>removeServerFromDrainList</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.680">removeServerFromDrainList</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.672">removeServerFromDrainList</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
</li>
</ul>
<a name="addServerToDrainList-org.apache.hadoop.hbase.ServerName-">
@@ -1183,7 +1167,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>addServerToDrainList</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.697">addServerToDrainList</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.689">addServerToDrainList</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
<div class="block">Add the server to the drain list.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1199,7 +1183,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>newRpcController</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.719">newRpcController</a>()</pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.711">newRpcController</a>()</pre>
</li>
</ul>
<a name="sendRegionWarmup-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1208,7 +1192,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>sendRegionWarmup</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.731">sendRegionWarmup</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.723">sendRegionWarmup</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server,
<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region)</pre>
<div class="block">Sends a WARMUP RPC to the specified server to warmup the specified region.
<p>
@@ -1227,7 +1211,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>closeRegionSilentlyAndWait</h4>
-<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.749">closeRegionSilentlyAndWait</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> connection,
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.741">closeRegionSilentlyAndWait</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> connection,
<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server,
<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region,
long timeout)
@@ -1248,7 +1232,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRsAdmin</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.783">getRsAdmin</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.775">getRsAdmin</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1267,7 +1251,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getMinToStart</h4>
-<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.804">getMinToStart</a>()</pre>
+<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.796">getMinToStart</a>()</pre>
<div class="block">Calculate min necessary to start. This is not an absolute. It is just
a friction that will cause us hang around a bit longer waiting on
RegionServers to check-in.</div>
@@ -1279,7 +1263,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>waitForRegionServers</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.833">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.825">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block">Wait for the region servers to report in.
We will wait until one of this condition is met:
@@ -1302,7 +1286,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getStrForMax</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.900">getStrForMax</a>(int max)</pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.892">getStrForMax</a>(int max)</pre>
</li>
</ul>
<a name="getOnlineServersList--">
@@ -1311,7 +1295,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getOnlineServersList</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.907">getOnlineServersList</a>()</pre>
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.899">getOnlineServersList</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A copy of the internal list of online servers.</dd>
@@ -1324,7 +1308,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getOnlineServersListWithPredicator</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.918">getOnlineServersListWithPredicator</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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> keys,
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.910">getOnlineServersListWithPredicator</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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> keys,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html?is-external=true" title="class or interface in java.util.function">Predicate</a><<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a>> idleServerPredicator)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1341,7 +1325,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getDrainingServersList</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.937">getDrainingServersList</a>()</pre>
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.929">getDrainingServersList</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A copy of the internal list of draining servers.</dd>
@@ -1354,7 +1338,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getDeadNotExpiredServers</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.944">getDeadNotExpiredServers</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.936">getDeadNotExpiredServers</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A copy of the internal set of deadNotExpired servers.</dd>
@@ -1367,7 +1351,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isServerOnline</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.948">isServerOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.940">isServerOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
</li>
</ul>
<a name="isServerDead-org.apache.hadoop.hbase.ServerName-">
@@ -1376,7 +1360,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isServerDead</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.958">isServerDead</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.950">isServerDead</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
<div class="block">Check if a server is known to be dead. A server can be online,
or known to be dead, or unknown to this manager (i.e, not online,
not known to be dead either. it is simply not tracked by the
@@ -1389,7 +1373,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>shutdownCluster</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.964">shutdownCluster</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.956">shutdownCluster</a>()</pre>
</li>
</ul>
<a name="isClusterShutdown--">
@@ -1398,7 +1382,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isClusterShutdown</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.974">isClusterShutdown</a>()</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.966">isClusterShutdown</a>()</pre>
</li>
</ul>
<a name="stop--">
@@ -1407,7 +1391,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>stop</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.981">stop</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.973">stop</a>()</pre>
<div class="block">Stop the ServerManager.</div>
</li>
</ul>
@@ -1417,7 +1401,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>createDestinationServersList</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.990">createDestinationServersList</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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> serversToExclude)</pre>
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.982">createDestinationServersList</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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> serversToExclude)</pre>
<div class="block">Creates a list of possible destinations for a region. It contains the online servers, but not
the draining or dying servers.</div>
<dl>
@@ -1432,7 +1416,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>createDestinationServersList</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1009">createDestinationServersList</a>()</pre>
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1001">createDestinationServersList</a>()</pre>
<div class="block">Calls <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#createDestinationServersList-java.util.List-"><code>createDestinationServersList(java.util.List<org.apache.hadoop.hbase.ServerName>)</code></a> without server to exclude.</div>
</li>
</ul>
@@ -1442,7 +1426,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>removeDeadNotExpiredServers</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1019">removeDeadNotExpiredServers</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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> servers)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1011">removeDeadNotExpiredServers</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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> servers)</pre>
<div class="block">Loop through the deadNotExpired server list and remove them from the
servers.
This function should be used carefully outside of this class. You should use a high level
@@ -1455,7 +1439,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>clearDeadServersWithSameHostNameAndPortOfOnlineServer</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1033">clearDeadServersWithSameHostNameAndPortOfOnlineServer</a>()</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1025">clearDeadServersWithSameHostNameAndPortOfOnline
<TRUNCATED>
[47/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html b/devapidocs/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html
index 3347de0..0b774f2 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.120">BackupRestoreConstants.BackupCommand</a>
+<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.125">BackupRestoreConstants.BackupCommand</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a><<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a>></pre>
</li>
</ul>
@@ -261,7 +261,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>CREATE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.121">CREATE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.126">CREATE</a></pre>
</li>
</ul>
<a name="CANCEL">
@@ -270,7 +270,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>CANCEL</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.121">CANCEL</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.126">CANCEL</a></pre>
</li>
</ul>
<a name="DELETE">
@@ -279,7 +279,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>DELETE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.121">DELETE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.126">DELETE</a></pre>
</li>
</ul>
<a name="DESCRIBE">
@@ -288,7 +288,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>DESCRIBE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.121">DESCRIBE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.126">DESCRIBE</a></pre>
</li>
</ul>
<a name="HISTORY">
@@ -297,7 +297,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>HISTORY</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.121">HISTORY</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.126">HISTORY</a></pre>
</li>
</ul>
<a name="STATUS">
@@ -306,7 +306,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>STATUS</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.121">STATUS</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.126">STATUS</a></pre>
</li>
</ul>
<a name="CONVERT">
@@ -315,7 +315,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>CONVERT</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.121">CONVERT</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.126">CONVERT</a></pre>
</li>
</ul>
<a name="MERGE">
@@ -324,7 +324,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>MERGE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.121">MERGE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.126">MERGE</a></pre>
</li>
</ul>
<a name="STOP">
@@ -333,7 +333,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>STOP</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.121">STOP</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.126">STOP</a></pre>
</li>
</ul>
<a name="SHOW">
@@ -342,7 +342,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>SHOW</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.121">SHOW</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.126">SHOW</a></pre>
</li>
</ul>
<a name="HELP">
@@ -351,7 +351,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>HELP</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.121">HELP</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.126">HELP</a></pre>
</li>
</ul>
<a name="PROGRESS">
@@ -360,7 +360,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>PROGRESS</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.121">PROGRESS</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.126">PROGRESS</a></pre>
</li>
</ul>
<a name="SET">
@@ -369,7 +369,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>SET</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.122">SET</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.127">SET</a></pre>
</li>
</ul>
<a name="SET_ADD">
@@ -378,7 +378,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>SET_ADD</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.122">SET_ADD</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.127">SET_ADD</a></pre>
</li>
</ul>
<a name="SET_REMOVE">
@@ -387,7 +387,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>SET_REMOVE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.122">SET_REMOVE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.127">SET_REMOVE</a></pre>
</li>
</ul>
<a name="SET_DELETE">
@@ -396,7 +396,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>SET_DELETE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.122">SET_DELETE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.127">SET_DELETE</a></pre>
</li>
</ul>
<a name="SET_DESCRIBE">
@@ -405,7 +405,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>SET_DESCRIBE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.122">SET_DESCRIBE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.127">SET_DESCRIBE</a></pre>
</li>
</ul>
<a name="SET_LIST">
@@ -414,7 +414,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>SET_LIST</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.122">SET_LIST</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.127">SET_LIST</a></pre>
</li>
</ul>
<a name="REPAIR">
@@ -423,7 +423,7 @@ the order they are declared.</div>
<ul class="blockListLast">
<li class="blockList">
<h4>REPAIR</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.122">REPAIR</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.127">REPAIR</a></pre>
</li>
</ul>
</li>
@@ -440,7 +440,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>values</h4>
-<pre>public static <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.120">values</a>()</pre>
+<pre>public static <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.125">values</a>()</pre>
<div class="block">Returns an array containing the constants of this enum type, in
the order they are declared. This method may be used to iterate
over the constants as follows:
@@ -460,7 +460,7 @@ for (BackupRestoreConstants.BackupCommand c : BackupRestoreConstants.BackupComma
<ul class="blockListLast">
<li class="blockList">
<h4>valueOf</h4>
-<pre>public static <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.120">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
+<pre>public static <a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html#line.125">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
<div class="block">Returns the enum constant of this type with the specified name.
The string must match <i>exactly</i> an identifier used to declare an
enum constant in this type. (Extraneous whitespace characters are
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html b/devapidocs/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html
index 362f8a3..5692d27 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html
@@ -197,28 +197,44 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_BANDWIDTH">OPTION_BANDWIDTH</a></span></code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_BACKUP_LIST_DESC">OPTION_BACKUP_LIST_DESC</a></span></code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_BANDWIDTH_DESC">OPTION_BANDWIDTH_DESC</a></span></code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_BANDWIDTH">OPTION_BANDWIDTH</a></span></code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_CHECK">OPTION_CHECK</a></span></code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_BANDWIDTH_DESC">OPTION_BANDWIDTH_DESC</a></span></code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_CHECK_DESC">OPTION_CHECK_DESC</a></span></code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_CHECK">OPTION_CHECK</a></span></code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_DEBUG">OPTION_DEBUG</a></span></code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_CHECK_DESC">OPTION_CHECK_DESC</a></span></code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_DEBUG">OPTION_DEBUG</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_DEBUG_DESC">OPTION_DEBUG_DESC</a></span></code> </td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_KEEP">OPTION_KEEP</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_KEEP_DESC">OPTION_KEEP_DESC</a></span></code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_LIST">OPTION_LIST</a></span></code> </td>
+</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_OVERWRITE">OPTION_OVERWRITE</a></span></code> </td>
@@ -269,45 +285,41 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_TABLE_LIST">OPTION_TABLE_LIST</a></span></code> </td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_TABLE_LIST_DESC">OPTION_TABLE_LIST_DESC</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_TABLE_MAPPING">OPTION_TABLE_MAPPING</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_TABLE_MAPPING_DESC">OPTION_TABLE_MAPPING_DESC</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_WORKERS">OPTION_WORKERS</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_WORKERS_DESC">OPTION_WORKERS_DESC</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_YARN_QUEUE_NAME">OPTION_YARN_QUEUE_NAME</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_YARN_QUEUE_NAME_DESC">OPTION_YARN_QUEUE_NAME_DESC</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_YARN_QUEUE_NAME_RESTORE_DESC">OPTION_YARN_QUEUE_NAME_RESTORE_DESC</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#TABLENAME_DELIMITER_IN_COMMAND">TABLENAME_DELIMITER_IN_COMMAND</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#VERIFY_BACKUP">VERIFY_BACKUP</a></span></code> </td>
</tr>
@@ -612,16 +624,16 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
</dl>
</li>
</ul>
-<a name="OPTION_TABLE_LIST">
+<a name="OPTION_LIST">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>OPTION_TABLE_LIST</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.68">OPTION_TABLE_LIST</a></pre>
+<h4>OPTION_LIST</h4>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.68">OPTION_LIST</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST">Constant Field Values</a></dd>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST">Constant Field Values</a></dd>
</dl>
</li>
</ul>
@@ -638,13 +650,26 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
</dl>
</li>
</ul>
+<a name="OPTION_BACKUP_LIST_DESC">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>OPTION_BACKUP_LIST_DESC</h4>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.70">OPTION_BACKUP_LIST_DESC</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
<a name="OPTION_BANDWIDTH">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>OPTION_BANDWIDTH</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.71">OPTION_BANDWIDTH</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.72">OPTION_BANDWIDTH</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH">Constant Field Values</a></dd>
@@ -657,7 +682,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>OPTION_BANDWIDTH_DESC</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.72">OPTION_BANDWIDTH_DESC</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.73">OPTION_BANDWIDTH_DESC</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC">Constant Field Values</a></dd>
@@ -670,7 +695,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>OPTION_WORKERS</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.74">OPTION_WORKERS</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.75">OPTION_WORKERS</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS">Constant Field Values</a></dd>
@@ -683,7 +708,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>OPTION_WORKERS_DESC</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.75">OPTION_WORKERS_DESC</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.76">OPTION_WORKERS_DESC</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC">Constant Field Values</a></dd>
@@ -696,7 +721,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>OPTION_RECORD_NUMBER</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.77">OPTION_RECORD_NUMBER</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.78">OPTION_RECORD_NUMBER</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER">Constant Field Values</a></dd>
@@ -709,7 +734,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>OPTION_RECORD_NUMBER_DESC</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.78">OPTION_RECORD_NUMBER_DESC</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.79">OPTION_RECORD_NUMBER_DESC</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC">Constant Field Values</a></dd>
@@ -722,7 +747,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>OPTION_PATH</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.80">OPTION_PATH</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.81">OPTION_PATH</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH">Constant Field Values</a></dd>
@@ -735,20 +760,46 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>OPTION_PATH_DESC</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.81">OPTION_PATH_DESC</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.82">OPTION_PATH_DESC</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC">Constant Field Values</a></dd>
</dl>
</li>
</ul>
+<a name="OPTION_KEEP">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>OPTION_KEEP</h4>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.84">OPTION_KEEP</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="OPTION_KEEP_DESC">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>OPTION_KEEP_DESC</h4>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.85">OPTION_KEEP_DESC</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
<a name="OPTION_TABLE_MAPPING">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>OPTION_TABLE_MAPPING</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.83">OPTION_TABLE_MAPPING</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.88">OPTION_TABLE_MAPPING</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_MAPPING">Constant Field Values</a></dd>
@@ -761,7 +812,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>OPTION_TABLE_MAPPING_DESC</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.84">OPTION_TABLE_MAPPING_DESC</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.89">OPTION_TABLE_MAPPING_DESC</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_MAPPING_DESC">Constant Field Values</a></dd>
@@ -774,7 +825,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>OPTION_YARN_QUEUE_NAME</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.87">OPTION_YARN_QUEUE_NAME</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.92">OPTION_YARN_QUEUE_NAME</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME">Constant Field Values</a></dd>
@@ -787,7 +838,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>OPTION_YARN_QUEUE_NAME_DESC</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.88">OPTION_YARN_QUEUE_NAME_DESC</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.93">OPTION_YARN_QUEUE_NAME_DESC</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC">Constant Field Values</a></dd>
@@ -800,7 +851,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>OPTION_YARN_QUEUE_NAME_RESTORE_DESC</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.89">OPTION_YARN_QUEUE_NAME_RESTORE_DESC</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.94">OPTION_YARN_QUEUE_NAME_RESTORE_DESC</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_RESTORE_DESC">Constant Field Values</a></dd>
@@ -813,7 +864,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>JOB_NAME_CONF_KEY</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.91">JOB_NAME_CONF_KEY</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.96">JOB_NAME_CONF_KEY</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.JOB_NAME_CONF_KEY">Constant Field Values</a></dd>
@@ -826,7 +877,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>BACKUP_CONFIG_STRING</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.93">BACKUP_CONFIG_STRING</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.98">BACKUP_CONFIG_STRING</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.BACKUP_CONFIG_STRING">Constant Field Values</a></dd>
@@ -839,7 +890,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>ENABLE_BACKUP</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.104">ENABLE_BACKUP</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.109">ENABLE_BACKUP</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.ENABLE_BACKUP">Constant Field Values</a></dd>
@@ -852,7 +903,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>VERIFY_BACKUP</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.108">VERIFY_BACKUP</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.113">VERIFY_BACKUP</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.VERIFY_BACKUP">Constant Field Values</a></dd>
@@ -865,7 +916,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>TABLENAME_DELIMITER_IN_COMMAND</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.114">TABLENAME_DELIMITER_IN_COMMAND</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.119">TABLENAME_DELIMITER_IN_COMMAND</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND">Constant Field Values</a></dd>
@@ -878,7 +929,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockList">
<li class="blockList">
<h4>CONF_STAGING_ROOT</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.116">CONF_STAGING_ROOT</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.121">CONF_STAGING_ROOT</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.CONF_STAGING_ROOT">Constant Field Values</a></dd>
@@ -891,7 +942,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/backup
<ul class="blockListLast">
<li class="blockList">
<h4>BACKUPID_PREFIX</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.118">BACKUPID_PREFIX</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#line.123">BACKUPID_PREFIX</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.BackupRestoreConstants.BACKUPID_PREFIX">Constant Field Values</a></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/class-use/BackupInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/class-use/BackupInfo.html b/devapidocs/org/apache/hadoop/hbase/backup/class-use/BackupInfo.html
index f521f28..9931d72 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/class-use/BackupInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/class-use/BackupInfo.html
@@ -495,6 +495,19 @@
</tr>
</tbody>
</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Method parameters in <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/package-summary.html">org.apache.hadoop.hbase.backup.impl</a> with type arguments of type <a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a></span><span class="tabEnd"> </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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]</code></td>
+<td class="colLast"><span class="typeNameLabel">BackupCommands.DeleteCommand.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#convertToBackupIds-java.util.List-">convertToBackupIds</a></span>(<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><<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>> history)</code> </td>
+</tr>
+</tbody>
+</table>
<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
<caption><span>Constructors in <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/package-summary.html">org.apache.hadoop.hbase.backup.impl</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a></span><span class="tabEnd"> </span></caption>
<tr>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html
index 1f554bf..d1771ec 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.901">BackupCommands.BackupSetCommand</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.968">BackupCommands.BackupSetCommand</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></pre>
</li>
</ul>
@@ -285,7 +285,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>SET_ADD_CMD</h4>
-<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.902">SET_ADD_CMD</a></pre>
+<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.969">SET_ADD_CMD</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.BackupSetCommand.SET_ADD_CMD">Constant Field Values</a></dd>
@@ -298,7 +298,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>SET_REMOVE_CMD</h4>
-<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.903">SET_REMOVE_CMD</a></pre>
+<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.970">SET_REMOVE_CMD</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.BackupSetCommand.SET_REMOVE_CMD">Constant Field Values</a></dd>
@@ -311,7 +311,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>SET_DELETE_CMD</h4>
-<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.904">SET_DELETE_CMD</a></pre>
+<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.971">SET_DELETE_CMD</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.BackupSetCommand.SET_DELETE_CMD">Constant Field Values</a></dd>
@@ -324,7 +324,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>SET_DESCRIBE_CMD</h4>
-<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.905">SET_DESCRIBE_CMD</a></pre>
+<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.972">SET_DESCRIBE_CMD</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.BackupSetCommand.SET_DESCRIBE_CMD">Constant Field Values</a></dd>
@@ -337,7 +337,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>SET_LIST_CMD</h4>
-<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.906">SET_LIST_CMD</a></pre>
+<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.973">SET_LIST_CMD</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.BackupSetCommand.SET_LIST_CMD">Constant Field Values</a></dd>
@@ -358,7 +358,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>BackupSetCommand</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.908">BackupSetCommand</a>(org.apache.hadoop.conf.Configuration conf,
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.975">BackupSetCommand</a>(org.apache.hadoop.conf.Configuration conf,
org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)</pre>
</li>
</ul>
@@ -376,7 +376,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.914">execute</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.981">execute</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -392,7 +392,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>processSetList</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.946">processSetList</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.1013">processSetList</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -406,7 +406,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>processSetDescribe</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.959">processSetDescribe</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.1026">processSetDescribe</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -420,7 +420,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>processSetDelete</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.978">processSetDelete</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.1045">processSetDelete</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -434,7 +434,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>processSetRemove</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.996">processSetRemove</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.1063">processSetRemove</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -448,7 +448,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>toTableNames</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.1011">toTableNames</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] tables)</pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.1078">toTableNames</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] tables)</pre>
</li>
</ul>
<a name="processSetAdd-java.lang.String:A-">
@@ -457,7 +457,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>processSetAdd</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.1019">processSetAdd</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.1086">processSetAdd</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -471,7 +471,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>getCommand</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.1038">getCommand</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> cmdStr)
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.1105">getCommand</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> cmdStr)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -485,7 +485,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>printUsage</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.1058">printUsage</a>()</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.BackupSetCommand.html#line.1125">printUsage</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#printUsage--">printUsage</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html
index 7bb7c69..d96789a 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html
@@ -126,7 +126,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public abstract static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.125">BackupCommands.Command</a>
+<pre>public abstract static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.128">BackupCommands.Command</a>
extends org.apache.hadoop.conf.Configured</pre>
</li>
</ul>
@@ -246,7 +246,7 @@ extends org.apache.hadoop.conf.Configured</pre>
<ul class="blockList">
<li class="blockList">
<h4>cmdline</h4>
-<pre>org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.126">cmdline</a></pre>
+<pre>org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.129">cmdline</a></pre>
</li>
</ul>
<a name="conn">
@@ -255,7 +255,7 @@ extends org.apache.hadoop.conf.Configured</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>conn</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.127">conn</a></pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.130">conn</a></pre>
</li>
</ul>
</li>
@@ -272,7 +272,7 @@ extends org.apache.hadoop.conf.Configured</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>Command</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.129">Command</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.132">Command</a>(org.apache.hadoop.conf.Configuration conf)</pre>
</li>
</ul>
</li>
@@ -289,7 +289,7 @@ extends org.apache.hadoop.conf.Configured</pre>
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.136">execute</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.139">execute</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -303,7 +303,7 @@ extends org.apache.hadoop.conf.Configured</pre>
<ul class="blockList">
<li class="blockList">
<h4>finish</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.179">finish</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.182">finish</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -317,7 +317,7 @@ extends org.apache.hadoop.conf.Configured</pre>
<ul class="blockList">
<li class="blockList">
<h4>printUsage</h4>
-<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.185">printUsage</a>()</pre>
+<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.188">printUsage</a>()</pre>
</li>
</ul>
<a name="requiresNoActiveSession--">
@@ -326,7 +326,7 @@ extends org.apache.hadoop.conf.Configured</pre>
<ul class="blockList">
<li class="blockList">
<h4>requiresNoActiveSession</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.191">requiresNoActiveSession</a>()</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.194">requiresNoActiveSession</a>()</pre>
<div class="block">The command can't be run if active backup session is in progress</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -340,7 +340,7 @@ extends org.apache.hadoop.conf.Configured</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>requiresConsistentState</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.200">requiresConsistentState</a>()</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#line.203">requiresConsistentState</a>()</pre>
<div class="block">Command requires consistent state of a backup system Backup system may become inconsistent
because of an abnormal termination of a backup session or delete command</div>
<dl>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html
index 4269ddf..5b388d9 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.252">BackupCommands.CreateCommand</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.255">BackupCommands.CreateCommand</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></pre>
</li>
</ul>
@@ -256,7 +256,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>CreateCommand</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.253">CreateCommand</a>(org.apache.hadoop.conf.Configuration conf,
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.256">CreateCommand</a>(org.apache.hadoop.conf.Configuration conf,
org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)</pre>
</li>
</ul>
@@ -274,7 +274,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>requiresNoActiveSession</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.259">requiresNoActiveSession</a>()</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.262">requiresNoActiveSession</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#requiresNoActiveSession--">BackupCommands.Command</a></code></span></div>
<div class="block">The command can't be run if active backup session is in progress</div>
<dl>
@@ -291,7 +291,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>requiresConsistentState</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.264">requiresConsistentState</a>()</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.267">requiresConsistentState</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#requiresConsistentState--">BackupCommands.Command</a></code></span></div>
<div class="block">Command requires consistent state of a backup system Backup system may become inconsistent
because of an abnormal termination of a backup session or delete command</div>
@@ -309,7 +309,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.269">execute</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.272">execute</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -325,7 +325,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>isRootFolder</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.352">isRootFolder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> targetBackupDir)</pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.355">isRootFolder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> targetBackupDir)</pre>
</li>
</ul>
<a name="verifyPath-java.lang.String-">
@@ -334,7 +334,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>verifyPath</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.357">verifyPath</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> path)</pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.360">verifyPath</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> path)</pre>
</li>
</ul>
<a name="getTablesForSet-java.lang.String-org.apache.hadoop.conf.Configuration-">
@@ -343,7 +343,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>getTablesForSet</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.374">getTablesForSet</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name,
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.377">getTablesForSet</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name,
org.apache.hadoop.conf.Configuration conf)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
@@ -358,7 +358,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>printUsage</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.387">printUsage</a>()</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.CreateCommand.html#line.390">printUsage</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#printUsage--">printUsage</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></code></dd>
[04/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html
index e31f5c6..f4d1eb0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html
@@ -31,277 +31,266 @@
<span class="sourceLineNo">023</span>import java.util.Set;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HConstants;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.regionserver.wal.CompressionContext;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.regionserver.wal.WALCoprocessorHost;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.replication.regionserver.WALFileLengthProvider;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.32"></a>
-<span class="sourceLineNo">033</span><a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>/**<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * A Write Ahead Log (WAL) provides service for reading, writing waledits. This interface provides<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * APIs for WAL users (such as RegionServer) to use the WAL (do append, sync, etc).<a name="line.38"></a>
-<span class="sourceLineNo">039</span> *<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * Note that some internals, such as log rolling and performance evaluation tools, will use<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * WAL.equals to determine if they have already seen a given WAL.<a name="line.41"></a>
-<span class="sourceLineNo">042</span> */<a name="line.42"></a>
-<span class="sourceLineNo">043</span>@InterfaceAudience.Private<a name="line.43"></a>
-<span class="sourceLineNo">044</span>@InterfaceStability.Evolving<a name="line.44"></a>
-<span class="sourceLineNo">045</span>public interface WAL extends Closeable, WALFileLengthProvider {<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span> /**<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * Registers WALActionsListener<a name="line.48"></a>
-<span class="sourceLineNo">049</span> */<a name="line.49"></a>
-<span class="sourceLineNo">050</span> void registerWALActionsListener(final WALActionsListener listener);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span> /**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Unregisters WALActionsListener<a name="line.53"></a>
-<span class="sourceLineNo">054</span> */<a name="line.54"></a>
-<span class="sourceLineNo">055</span> boolean unregisterWALActionsListener(final WALActionsListener listener);<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> * Roll the log writer. That is, start writing log messages to a new file.<a name="line.58"></a>
-<span class="sourceLineNo">059</span> *<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * <p><a name="line.60"></a>
-<span class="sourceLineNo">061</span> * The implementation is synchronized in order to make sure there's one rollWriter<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * running at any given time.<a name="line.62"></a>
-<span class="sourceLineNo">063</span> *<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * @return If lots of logs, flush the returned regions so next time through we<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * can clean logs. Returns null if nothing to flush. Names are actual<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * region names as returned by {@link RegionInfo#getEncodedName()}<a name="line.66"></a>
-<span class="sourceLineNo">067</span> */<a name="line.67"></a>
-<span class="sourceLineNo">068</span> byte[][] rollWriter() throws FailedLogCloseException, IOException;<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> * Roll the log writer. That is, start writing log messages to a new file.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> *<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <p><a name="line.73"></a>
-<span class="sourceLineNo">074</span> * The implementation is synchronized in order to make sure there's one rollWriter<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * running at any given time.<a name="line.75"></a>
-<span class="sourceLineNo">076</span> *<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * @param force<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * If true, force creation of a new writer even if no entries have<a name="line.78"></a>
-<span class="sourceLineNo">079</span> * been written to the current writer<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * @return If lots of logs, flush the returned regions so next time through we<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * can clean logs. Returns null if nothing to flush. Names are actual<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * region names as returned by {@link RegionInfo#getEncodedName()}<a name="line.82"></a>
-<span class="sourceLineNo">083</span> */<a name="line.83"></a>
-<span class="sourceLineNo">084</span> byte[][] rollWriter(boolean force) throws FailedLogCloseException, IOException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span> /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span> * Stop accepting new writes. If we have unsynced writes still in buffer, sync them.<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * Extant edits are left in place in backing storage to be replayed later.<a name="line.88"></a>
-<span class="sourceLineNo">089</span> */<a name="line.89"></a>
-<span class="sourceLineNo">090</span> void shutdown() throws IOException;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span> /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * Caller no longer needs any edits from this WAL. Implementers are free to reclaim<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * underlying resources after this call; i.e. filesystem based WALs can archive or<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * delete files.<a name="line.95"></a>
-<span class="sourceLineNo">096</span> */<a name="line.96"></a>
-<span class="sourceLineNo">097</span> @Override<a name="line.97"></a>
-<span class="sourceLineNo">098</span> void close() throws IOException;<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> * Append a set of edits to the WAL. The WAL is not flushed/sync'd after this transaction<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * completes BUT on return this edit must have its region edit/sequence id assigned<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * else it messes up our unification of mvcc and sequenceid. On return <code>key</code> will<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * have the region edit/sequence id filled in.<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * @param info the regioninfo associated with append<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * @param key Modified by this call; we add to it this edits region edit/sequence id.<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * @param edits Edits to append. MAY CONTAIN NO EDITS for case where we want to get an edit<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * sequence id that is after all currently appended edits.<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * @param inMemstore Always true except for case where we are writing a compaction completion<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * record into the WAL; in this case the entry is just so we can finish an unfinished compaction<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * -- it is not an edit for memstore.<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * @return Returns a 'transaction id' and <code>key</code> will have the region edit/sequence id<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * in it.<a name="line.113"></a>
-<span class="sourceLineNo">114</span> */<a name="line.114"></a>
-<span class="sourceLineNo">115</span> long append(RegionInfo info, WALKeyImpl key, WALEdit edits, boolean inMemstore) throws IOException;<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span> /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * updates the seuence number of a specific store.<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * depending on the flag: replaces current seq number if the given seq id is bigger,<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * or even if it is lower than existing one<a name="line.120"></a>
-<span class="sourceLineNo">121</span> * @param encodedRegionName<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * @param familyName<a name="line.122"></a>
-<span class="sourceLineNo">123</span> * @param sequenceid<a name="line.123"></a>
-<span class="sourceLineNo">124</span> * @param onlyIfGreater<a name="line.124"></a>
-<span class="sourceLineNo">125</span> */<a name="line.125"></a>
-<span class="sourceLineNo">126</span> void updateStore(byte[] encodedRegionName, byte[] familyName, Long sequenceid,<a name="line.126"></a>
-<span class="sourceLineNo">127</span> boolean onlyIfGreater);<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> * Sync what we have in the WAL.<a name="line.130"></a>
-<span class="sourceLineNo">131</span> * @throws IOException<a name="line.131"></a>
-<span class="sourceLineNo">132</span> */<a name="line.132"></a>
-<span class="sourceLineNo">133</span> void sync() throws IOException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span> /**<a name="line.135"></a>
-<span class="sourceLineNo">136</span> * Sync the WAL if the txId was not already sync'd.<a name="line.136"></a>
-<span class="sourceLineNo">137</span> * @param txid Transaction id to sync to.<a name="line.137"></a>
-<span class="sourceLineNo">138</span> * @throws IOException<a name="line.138"></a>
-<span class="sourceLineNo">139</span> */<a name="line.139"></a>
-<span class="sourceLineNo">140</span> void sync(long txid) throws IOException;<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span> /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span> * @param forceSync Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush<a name="line.143"></a>
-<span class="sourceLineNo">144</span> * vs hsync.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> */<a name="line.145"></a>
-<span class="sourceLineNo">146</span> default void sync(boolean forceSync) throws IOException {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> sync();<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> /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span> * @param txid Transaction id to sync to.<a name="line.151"></a>
-<span class="sourceLineNo">152</span> * @param forceSync Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush<a name="line.152"></a>
-<span class="sourceLineNo">153</span> * vs hsync.<a name="line.153"></a>
-<span class="sourceLineNo">154</span> */<a name="line.154"></a>
-<span class="sourceLineNo">155</span> default void sync(long txid, boolean forceSync) throws IOException {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> sync(txid);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span> /**<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * WAL keeps track of the sequence numbers that are as yet not flushed im memstores<a name="line.160"></a>
-<span class="sourceLineNo">161</span> * in order to be able to do accounting to figure which WALs can be let go. This method tells WAL<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * that some region is about to flush. The flush can be the whole region or for a column family<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * of the region only.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> *<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * <p>Currently, it is expected that the update lock is held for the region; i.e. no<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * concurrent appends while we set up cache flush.<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * @param families Families to flush. May be a subset of all families in the region.<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * @return Returns {@link HConstants#NO_SEQNUM} if we are flushing the whole region OR if<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * we are flushing a subset of all families but there are no edits in those families not<a name="line.169"></a>
-<span class="sourceLineNo">170</span> * being flushed; in other words, this is effectively same as a flush of all of the region<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * though we were passed a subset of regions. Otherwise, it returns the sequence id of the<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * oldest/lowest outstanding edit.<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * @see #completeCacheFlush(byte[])<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * @see #abortCacheFlush(byte[])<a name="line.174"></a>
-<span class="sourceLineNo">175</span> */<a name="line.175"></a>
-<span class="sourceLineNo">176</span> Long startCacheFlush(final byte[] encodedRegionName, Set<byte[]> families);<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span> Long startCacheFlush(final byte[] encodedRegionName, Map<byte[], Long> familyToSeq);<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span> /**<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * Complete the cache flush.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * @param encodedRegionName Encoded region name.<a name="line.182"></a>
-<span class="sourceLineNo">183</span> * @see #startCacheFlush(byte[], Set)<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * @see #abortCacheFlush(byte[])<a name="line.184"></a>
-<span class="sourceLineNo">185</span> */<a name="line.185"></a>
-<span class="sourceLineNo">186</span> void completeCacheFlush(final byte[] encodedRegionName);<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span> /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * Abort a cache flush. Call if the flush fails. Note that the only recovery<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * for an aborted flush currently is a restart of the regionserver so the<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * snapshot content dropped by the failure gets restored to the memstore.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * @param encodedRegionName Encoded region name.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span> void abortCacheFlush(byte[] encodedRegionName);<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span> /**<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * @return Coprocessor host.<a name="line.197"></a>
-<span class="sourceLineNo">198</span> */<a name="line.198"></a>
-<span class="sourceLineNo">199</span> WALCoprocessorHost getCoprocessorHost();<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span> /**<a name="line.201"></a>
-<span class="sourceLineNo">202</span> * Gets the earliest unflushed sequence id in the memstore for the region.<a name="line.202"></a>
-<span class="sourceLineNo">203</span> * @param encodedRegionName The region to get the number for.<a name="line.203"></a>
-<span class="sourceLineNo">204</span> * @return The earliest/lowest/oldest sequence id if present, HConstants.NO_SEQNUM if absent.<a name="line.204"></a>
-<span class="sourceLineNo">205</span> * @deprecated Since version 1.2.0. Removing because not used and exposes subtle internal<a name="line.205"></a>
-<span class="sourceLineNo">206</span> * workings. Use {@link #getEarliestMemStoreSeqNum(byte[], byte[])}<a name="line.206"></a>
-<span class="sourceLineNo">207</span> */<a name="line.207"></a>
-<span class="sourceLineNo">208</span> @VisibleForTesting<a name="line.208"></a>
-<span class="sourceLineNo">209</span> @Deprecated<a name="line.209"></a>
-<span class="sourceLineNo">210</span> long getEarliestMemStoreSeqNum(byte[] encodedRegionName);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span> /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span> * Gets the earliest unflushed sequence id in the memstore for the store.<a name="line.213"></a>
-<span class="sourceLineNo">214</span> * @param encodedRegionName The region to get the number for.<a name="line.214"></a>
-<span class="sourceLineNo">215</span> * @param familyName The family to get the number for.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> * @return The earliest/lowest/oldest sequence id if present, HConstants.NO_SEQNUM if absent.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> */<a name="line.217"></a>
-<span class="sourceLineNo">218</span> long getEarliestMemStoreSeqNum(byte[] encodedRegionName, byte[] familyName);<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span> /**<a name="line.220"></a>
-<span class="sourceLineNo">221</span> * Human readable identifying information about the state of this WAL.<a name="line.221"></a>
-<span class="sourceLineNo">222</span> * Implementors are encouraged to include information appropriate for debugging.<a name="line.222"></a>
-<span class="sourceLineNo">223</span> * Consumers are advised not to rely on the details of the returned String; it does<a name="line.223"></a>
-<span class="sourceLineNo">224</span> * not have a defined structure.<a name="line.224"></a>
-<span class="sourceLineNo">225</span> */<a name="line.225"></a>
-<span class="sourceLineNo">226</span> @Override<a name="line.226"></a>
-<span class="sourceLineNo">227</span> String toString();<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span> /**<a name="line.229"></a>
-<span class="sourceLineNo">230</span> * When outside clients need to consume persisted WALs, they rely on a provided<a name="line.230"></a>
-<span class="sourceLineNo">231</span> * Reader.<a name="line.231"></a>
-<span class="sourceLineNo">232</span> */<a name="line.232"></a>
-<span class="sourceLineNo">233</span> interface Reader extends Closeable {<a name="line.233"></a>
-<span class="sourceLineNo">234</span> Entry next() throws IOException;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> Entry next(Entry reuse) throws IOException;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> void seek(long pos) throws IOException;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> long getPosition() throws IOException;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> void reset() throws IOException;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Utility class that lets us keep track of the edit with it's key.<a name="line.242"></a>
-<span class="sourceLineNo">243</span> */<a name="line.243"></a>
-<span class="sourceLineNo">244</span> class Entry {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> private final WALEdit edit;<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private final WALKeyImpl key;<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span> public Entry() {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> this(new WALKeyImpl(), new WALEdit());<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> /**<a name="line.252"></a>
-<span class="sourceLineNo">253</span> * Constructor for both params<a name="line.253"></a>
-<span class="sourceLineNo">254</span> *<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * @param edit log's edit<a name="line.255"></a>
-<span class="sourceLineNo">256</span> * @param key log's key<a name="line.256"></a>
-<span class="sourceLineNo">257</span> */<a name="line.257"></a>
-<span class="sourceLineNo">258</span> public Entry(WALKeyImpl key, WALEdit edit) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span> this.key = key;<a name="line.259"></a>
-<span class="sourceLineNo">260</span> this.edit = edit;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> /**<a name="line.263"></a>
-<span class="sourceLineNo">264</span> * Gets the edit<a name="line.264"></a>
-<span class="sourceLineNo">265</span> *<a name="line.265"></a>
-<span class="sourceLineNo">266</span> * @return edit<a name="line.266"></a>
-<span class="sourceLineNo">267</span> */<a name="line.267"></a>
-<span class="sourceLineNo">268</span> public WALEdit getEdit() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> return edit;<a name="line.269"></a>
-<span class="sourceLineNo">270</span> }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span> /**<a name="line.272"></a>
-<span class="sourceLineNo">273</span> * Gets the key<a name="line.273"></a>
-<span class="sourceLineNo">274</span> *<a name="line.274"></a>
-<span class="sourceLineNo">275</span> * @return key<a name="line.275"></a>
-<span class="sourceLineNo">276</span> */<a name="line.276"></a>
-<span class="sourceLineNo">277</span> public WALKeyImpl getKey() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> return key;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span> /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span> * Set compression context for this entry.<a name="line.282"></a>
-<span class="sourceLineNo">283</span> *<a name="line.283"></a>
-<span class="sourceLineNo">284</span> * @param compressionContext<a name="line.284"></a>
-<span class="sourceLineNo">285</span> * Compression context<a name="line.285"></a>
-<span class="sourceLineNo">286</span> */<a name="line.286"></a>
-<span class="sourceLineNo">287</span> public void setCompressionContext(CompressionContext compressionContext) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span> key.setCompressionContext(compressionContext);<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
-<span class="sourceLineNo">292</span> public String toString() {<a name="line.292"></a>
-<span class="sourceLineNo">293</span> return this.key + "=" + this.edit;<a name="line.293"></a>
-<span class="sourceLineNo">294</span> }<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span>}<a name="line.296"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.regionserver.wal.WALCoprocessorHost;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.replication.regionserver.WALFileLengthProvider;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>/**<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * A Write Ahead Log (WAL) provides service for reading, writing waledits. This interface provides<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * APIs for WAL users (such as RegionServer) to use the WAL (do append, sync, etc).<a name="line.37"></a>
+<span class="sourceLineNo">038</span> *<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * Note that some internals, such as log rolling and performance evaluation tools, will use<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * WAL.equals to determine if they have already seen a given WAL.<a name="line.40"></a>
+<span class="sourceLineNo">041</span> */<a name="line.41"></a>
+<span class="sourceLineNo">042</span>@InterfaceAudience.Private<a name="line.42"></a>
+<span class="sourceLineNo">043</span>@InterfaceStability.Evolving<a name="line.43"></a>
+<span class="sourceLineNo">044</span>public interface WAL extends Closeable, WALFileLengthProvider {<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span> /**<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * Registers WALActionsListener<a name="line.47"></a>
+<span class="sourceLineNo">048</span> */<a name="line.48"></a>
+<span class="sourceLineNo">049</span> void registerWALActionsListener(final WALActionsListener listener);<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span> /**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Unregisters WALActionsListener<a name="line.52"></a>
+<span class="sourceLineNo">053</span> */<a name="line.53"></a>
+<span class="sourceLineNo">054</span> boolean unregisterWALActionsListener(final WALActionsListener listener);<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span> /**<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * Roll the log writer. That is, start writing log messages to a new file.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * <p><a name="line.59"></a>
+<span class="sourceLineNo">060</span> * The implementation is synchronized in order to make sure there's one rollWriter<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * running at any given time.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> *<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * @return If lots of logs, flush the returned regions so next time through we<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * can clean logs. Returns null if nothing to flush. Names are actual<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * region names as returned by {@link RegionInfo#getEncodedName()}<a name="line.65"></a>
+<span class="sourceLineNo">066</span> */<a name="line.66"></a>
+<span class="sourceLineNo">067</span> byte[][] rollWriter() throws FailedLogCloseException, IOException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span> /**<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * Roll the log writer. That is, start writing log messages to a new file.<a name="line.70"></a>
+<span class="sourceLineNo">071</span> *<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * <p><a name="line.72"></a>
+<span class="sourceLineNo">073</span> * The implementation is synchronized in order to make sure there's one rollWriter<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * running at any given time.<a name="line.74"></a>
+<span class="sourceLineNo">075</span> *<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * @param force<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * If true, force creation of a new writer even if no entries have<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * been written to the current writer<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * @return If lots of logs, flush the returned regions so next time through we<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * can clean logs. Returns null if nothing to flush. Names are actual<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * region names as returned by {@link RegionInfo#getEncodedName()}<a name="line.81"></a>
+<span class="sourceLineNo">082</span> */<a name="line.82"></a>
+<span class="sourceLineNo">083</span> byte[][] rollWriter(boolean force) throws FailedLogCloseException, IOException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span> /**<a name="line.85"></a>
+<span class="sourceLineNo">086</span> * Stop accepting new writes. If we have unsynced writes still in buffer, sync them.<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * Extant edits are left in place in backing storage to be replayed later.<a name="line.87"></a>
+<span class="sourceLineNo">088</span> */<a name="line.88"></a>
+<span class="sourceLineNo">089</span> void shutdown() throws IOException;<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> * Caller no longer needs any edits from this WAL. Implementers are free to reclaim<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * underlying resources after this call; i.e. filesystem based WALs can archive or<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * delete files.<a name="line.94"></a>
+<span class="sourceLineNo">095</span> */<a name="line.95"></a>
+<span class="sourceLineNo">096</span> @Override<a name="line.96"></a>
+<span class="sourceLineNo">097</span> void close() throws IOException;<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span> /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * Append a set of edits to the WAL. The WAL is not flushed/sync'd after this transaction<a name="line.100"></a>
+<span class="sourceLineNo">101</span> * completes BUT on return this edit must have its region edit/sequence id assigned<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * else it messes up our unification of mvcc and sequenceid. On return <code>key</code> will<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * have the region edit/sequence id filled in.<a name="line.103"></a>
+<span class="sourceLineNo">104</span> * @param info the regioninfo associated with append<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * @param key Modified by this call; we add to it this edits region edit/sequence id.<a name="line.105"></a>
+<span class="sourceLineNo">106</span> * @param edits Edits to append. MAY CONTAIN NO EDITS for case where we want to get an edit<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * sequence id that is after all currently appended edits.<a name="line.107"></a>
+<span class="sourceLineNo">108</span> * @param inMemstore Always true except for case where we are writing a compaction completion<a name="line.108"></a>
+<span class="sourceLineNo">109</span> * record into the WAL; in this case the entry is just so we can finish an unfinished compaction<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * -- it is not an edit for memstore.<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * @return Returns a 'transaction id' and <code>key</code> will have the region edit/sequence id<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * in it.<a name="line.112"></a>
+<span class="sourceLineNo">113</span> */<a name="line.113"></a>
+<span class="sourceLineNo">114</span> long append(RegionInfo info, WALKeyImpl key, WALEdit edits, boolean inMemstore) throws IOException;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * updates the seuence number of a specific store.<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * depending on the flag: replaces current seq number if the given seq id is bigger,<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * or even if it is lower than existing one<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * @param encodedRegionName<a name="line.120"></a>
+<span class="sourceLineNo">121</span> * @param familyName<a name="line.121"></a>
+<span class="sourceLineNo">122</span> * @param sequenceid<a name="line.122"></a>
+<span class="sourceLineNo">123</span> * @param onlyIfGreater<a name="line.123"></a>
+<span class="sourceLineNo">124</span> */<a name="line.124"></a>
+<span class="sourceLineNo">125</span> void updateStore(byte[] encodedRegionName, byte[] familyName, Long sequenceid,<a name="line.125"></a>
+<span class="sourceLineNo">126</span> boolean onlyIfGreater);<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> /**<a name="line.128"></a>
+<span class="sourceLineNo">129</span> * Sync what we have in the WAL.<a name="line.129"></a>
+<span class="sourceLineNo">130</span> * @throws IOException<a name="line.130"></a>
+<span class="sourceLineNo">131</span> */<a name="line.131"></a>
+<span class="sourceLineNo">132</span> void sync() throws IOException;<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span> /**<a name="line.134"></a>
+<span class="sourceLineNo">135</span> * Sync the WAL if the txId was not already sync'd.<a name="line.135"></a>
+<span class="sourceLineNo">136</span> * @param txid Transaction id to sync to.<a name="line.136"></a>
+<span class="sourceLineNo">137</span> * @throws IOException<a name="line.137"></a>
+<span class="sourceLineNo">138</span> */<a name="line.138"></a>
+<span class="sourceLineNo">139</span> void sync(long txid) throws IOException;<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> * @param forceSync Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush<a name="line.142"></a>
+<span class="sourceLineNo">143</span> * vs hsync.<a name="line.143"></a>
+<span class="sourceLineNo">144</span> */<a name="line.144"></a>
+<span class="sourceLineNo">145</span> default void sync(boolean forceSync) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> sync();<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> * @param txid Transaction id to sync to.<a name="line.150"></a>
+<span class="sourceLineNo">151</span> * @param forceSync Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush<a name="line.151"></a>
+<span class="sourceLineNo">152</span> * vs hsync.<a name="line.152"></a>
+<span class="sourceLineNo">153</span> */<a name="line.153"></a>
+<span class="sourceLineNo">154</span> default void sync(long txid, boolean forceSync) throws IOException {<a name="line.154"></a>
+<span class="sourceLineNo">155</span> sync(txid);<a name="line.155"></a>
+<span class="sourceLineNo">156</span> }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span> /**<a name="line.158"></a>
+<span class="sourceLineNo">159</span> * WAL keeps track of the sequence numbers that are as yet not flushed im memstores<a name="line.159"></a>
+<span class="sourceLineNo">160</span> * in order to be able to do accounting to figure which WALs can be let go. This method tells WAL<a name="line.160"></a>
+<span class="sourceLineNo">161</span> * that some region is about to flush. The flush can be the whole region or for a column family<a name="line.161"></a>
+<span class="sourceLineNo">162</span> * of the region only.<a name="line.162"></a>
+<span class="sourceLineNo">163</span> *<a name="line.163"></a>
+<span class="sourceLineNo">164</span> * <p>Currently, it is expected that the update lock is held for the region; i.e. no<a name="line.164"></a>
+<span class="sourceLineNo">165</span> * concurrent appends while we set up cache flush.<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * @param families Families to flush. May be a subset of all families in the region.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * @return Returns {@link HConstants#NO_SEQNUM} if we are flushing the whole region OR if<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * we are flushing a subset of all families but there are no edits in those families not<a name="line.168"></a>
+<span class="sourceLineNo">169</span> * being flushed; in other words, this is effectively same as a flush of all of the region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * though we were passed a subset of regions. Otherwise, it returns the sequence id of the<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * oldest/lowest outstanding edit.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * @see #completeCacheFlush(byte[])<a name="line.172"></a>
+<span class="sourceLineNo">173</span> * @see #abortCacheFlush(byte[])<a name="line.173"></a>
+<span class="sourceLineNo">174</span> */<a name="line.174"></a>
+<span class="sourceLineNo">175</span> Long startCacheFlush(final byte[] encodedRegionName, Set<byte[]> families);<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span> Long startCacheFlush(final byte[] encodedRegionName, Map<byte[], Long> familyToSeq);<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span> /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * Complete the cache flush.<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * @param encodedRegionName Encoded region name.<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * @see #startCacheFlush(byte[], Set)<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * @see #abortCacheFlush(byte[])<a name="line.183"></a>
+<span class="sourceLineNo">184</span> */<a name="line.184"></a>
+<span class="sourceLineNo">185</span> void completeCacheFlush(final byte[] encodedRegionName);<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * Abort a cache flush. Call if the flush fails. Note that the only recovery<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * for an aborted flush currently is a restart of the regionserver so the<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * snapshot content dropped by the failure gets restored to the memstore.<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * @param encodedRegionName Encoded region name.<a name="line.191"></a>
+<span class="sourceLineNo">192</span> */<a name="line.192"></a>
+<span class="sourceLineNo">193</span> void abortCacheFlush(byte[] encodedRegionName);<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
+<span class="sourceLineNo">196</span> * @return Coprocessor host.<a name="line.196"></a>
+<span class="sourceLineNo">197</span> */<a name="line.197"></a>
+<span class="sourceLineNo">198</span> WALCoprocessorHost getCoprocessorHost();<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span> /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Gets the earliest unflushed sequence id in the memstore for the region.<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * @param encodedRegionName The region to get the number for.<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * @return The earliest/lowest/oldest sequence id if present, HConstants.NO_SEQNUM if absent.<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * @deprecated Since version 1.2.0. Removing because not used and exposes subtle internal<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * workings. Use {@link #getEarliestMemStoreSeqNum(byte[], byte[])}<a name="line.205"></a>
+<span class="sourceLineNo">206</span> */<a name="line.206"></a>
+<span class="sourceLineNo">207</span> @VisibleForTesting<a name="line.207"></a>
+<span class="sourceLineNo">208</span> @Deprecated<a name="line.208"></a>
+<span class="sourceLineNo">209</span> long getEarliestMemStoreSeqNum(byte[] encodedRegionName);<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span> /**<a name="line.211"></a>
+<span class="sourceLineNo">212</span> * Gets the earliest unflushed sequence id in the memstore for the store.<a name="line.212"></a>
+<span class="sourceLineNo">213</span> * @param encodedRegionName The region to get the number for.<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * @param familyName The family to get the number for.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> * @return The earliest/lowest/oldest sequence id if present, HConstants.NO_SEQNUM if absent.<a name="line.215"></a>
+<span class="sourceLineNo">216</span> */<a name="line.216"></a>
+<span class="sourceLineNo">217</span> long getEarliestMemStoreSeqNum(byte[] encodedRegionName, byte[] familyName);<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span> /**<a name="line.219"></a>
+<span class="sourceLineNo">220</span> * Human readable identifying information about the state of this WAL.<a name="line.220"></a>
+<span class="sourceLineNo">221</span> * Implementors are encouraged to include information appropriate for debugging.<a name="line.221"></a>
+<span class="sourceLineNo">222</span> * Consumers are advised not to rely on the details of the returned String; it does<a name="line.222"></a>
+<span class="sourceLineNo">223</span> * not have a defined structure.<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> String toString();<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span> /**<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * When outside clients need to consume persisted WALs, they rely on a provided<a name="line.229"></a>
+<span class="sourceLineNo">230</span> * Reader.<a name="line.230"></a>
+<span class="sourceLineNo">231</span> */<a name="line.231"></a>
+<span class="sourceLineNo">232</span> interface Reader extends Closeable {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> Entry next() throws IOException;<a name="line.233"></a>
+<span class="sourceLineNo">234</span> Entry next(Entry reuse) throws IOException;<a name="line.234"></a>
+<span class="sourceLineNo">235</span> void seek(long pos) throws IOException;<a name="line.235"></a>
+<span class="sourceLineNo">236</span> long getPosition() throws IOException;<a name="line.236"></a>
+<span class="sourceLineNo">237</span> void reset() throws IOException;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span> /**<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * Utility class that lets us keep track of the edit with it's key.<a name="line.241"></a>
+<span class="sourceLineNo">242</span> */<a name="line.242"></a>
+<span class="sourceLineNo">243</span> class Entry {<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private final WALEdit edit;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private final WALKeyImpl key;<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> public Entry() {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> this(new WALKeyImpl(), new WALEdit());<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> * Constructor for both params<a name="line.252"></a>
+<span class="sourceLineNo">253</span> *<a name="line.253"></a>
+<span class="sourceLineNo">254</span> * @param edit log's edit<a name="line.254"></a>
+<span class="sourceLineNo">255</span> * @param key log's key<a name="line.255"></a>
+<span class="sourceLineNo">256</span> */<a name="line.256"></a>
+<span class="sourceLineNo">257</span> public Entry(WALKeyImpl key, WALEdit edit) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.key = key;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> this.edit = edit;<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> /**<a name="line.262"></a>
+<span class="sourceLineNo">263</span> * Gets the edit<a name="line.263"></a>
+<span class="sourceLineNo">264</span> *<a name="line.264"></a>
+<span class="sourceLineNo">265</span> * @return edit<a name="line.265"></a>
+<span class="sourceLineNo">266</span> */<a name="line.266"></a>
+<span class="sourceLineNo">267</span> public WALEdit getEdit() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return edit;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> /**<a name="line.271"></a>
+<span class="sourceLineNo">272</span> * Gets the key<a name="line.272"></a>
+<span class="sourceLineNo">273</span> *<a name="line.273"></a>
+<span class="sourceLineNo">274</span> * @return key<a name="line.274"></a>
+<span class="sourceLineNo">275</span> */<a name="line.275"></a>
+<span class="sourceLineNo">276</span> public WALKeyImpl getKey() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> return key;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span> @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span> public String toString() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span> return this.key + "=" + this.edit;<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>
[15/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html
index 64099d9..2cafba9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html
@@ -55,82 +55,81 @@
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span> @Override<a name="line.48"></a>
<span class="sourceLineNo">049</span> public void append(Entry entry) throws IOException {<a name="line.49"></a>
-<span class="sourceLineNo">050</span> entry.setCompressionContext(compressionContext);<a name="line.50"></a>
-<span class="sourceLineNo">051</span> entry.getKey().getBuilder(compressor).<a name="line.51"></a>
-<span class="sourceLineNo">052</span> setFollowingKvCount(entry.getEdit().size()).build().writeDelimitedTo(output);<a name="line.52"></a>
-<span class="sourceLineNo">053</span> for (Cell cell : entry.getEdit().getCells()) {<a name="line.53"></a>
-<span class="sourceLineNo">054</span> // cellEncoder must assume little about the stream, since we write PB and cells in turn.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> cellEncoder.write(cell);<a name="line.55"></a>
-<span class="sourceLineNo">056</span> }<a name="line.56"></a>
-<span class="sourceLineNo">057</span> length.set(output.getPos());<a name="line.57"></a>
-<span class="sourceLineNo">058</span> }<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span> @Override<a name="line.60"></a>
-<span class="sourceLineNo">061</span> public void close() throws IOException {<a name="line.61"></a>
-<span class="sourceLineNo">062</span> if (this.output != null) {<a name="line.62"></a>
-<span class="sourceLineNo">063</span> try {<a name="line.63"></a>
-<span class="sourceLineNo">064</span> if (!trailerWritten) writeWALTrailer();<a name="line.64"></a>
-<span class="sourceLineNo">065</span> this.output.close();<a name="line.65"></a>
-<span class="sourceLineNo">066</span> } catch (NullPointerException npe) {<a name="line.66"></a>
-<span class="sourceLineNo">067</span> // Can get a NPE coming up from down in DFSClient$DFSOutputStream#close<a name="line.67"></a>
-<span class="sourceLineNo">068</span> LOG.warn(npe.toString(), npe);<a name="line.68"></a>
-<span class="sourceLineNo">069</span> }<a name="line.69"></a>
-<span class="sourceLineNo">070</span> this.output = null;<a name="line.70"></a>
-<span class="sourceLineNo">071</span> }<a name="line.71"></a>
-<span class="sourceLineNo">072</span> }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span> @Override<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public void sync(boolean forceSync) throws IOException {<a name="line.75"></a>
-<span class="sourceLineNo">076</span> FSDataOutputStream fsdos = this.output;<a name="line.76"></a>
-<span class="sourceLineNo">077</span> if (fsdos == null) return; // Presume closed<a name="line.77"></a>
-<span class="sourceLineNo">078</span> fsdos.flush();<a name="line.78"></a>
-<span class="sourceLineNo">079</span> if (forceSync) {<a name="line.79"></a>
-<span class="sourceLineNo">080</span> fsdos.hsync();<a name="line.80"></a>
-<span class="sourceLineNo">081</span> } else {<a name="line.81"></a>
-<span class="sourceLineNo">082</span> fsdos.hflush();<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><a name="line.85"></a>
-<span class="sourceLineNo">086</span> public FSDataOutputStream getStream() {<a name="line.86"></a>
-<span class="sourceLineNo">087</span> return this.output;<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> @SuppressWarnings("deprecation")<a name="line.90"></a>
-<span class="sourceLineNo">091</span> @Override<a name="line.91"></a>
-<span class="sourceLineNo">092</span> protected void initOutput(FileSystem fs, Path path, boolean overwritable, int bufferSize,<a name="line.92"></a>
-<span class="sourceLineNo">093</span> short replication, long blockSize) throws IOException, StreamLacksCapabilityException {<a name="line.93"></a>
-<span class="sourceLineNo">094</span> this.output = fs.createNonRecursive(path, overwritable, bufferSize, replication, blockSize,<a name="line.94"></a>
-<span class="sourceLineNo">095</span> null);<a name="line.95"></a>
-<span class="sourceLineNo">096</span> if (fs.getConf().getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true)) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span> if (!CommonFSUtils.hasCapability(output, "hflush")) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span> throw new StreamLacksCapabilityException("hflush");<a name="line.98"></a>
-<span class="sourceLineNo">099</span> }<a name="line.99"></a>
-<span class="sourceLineNo">100</span> if (!CommonFSUtils.hasCapability(output, "hsync")) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span> throw new StreamLacksCapabilityException("hsync");<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><a name="line.105"></a>
-<span class="sourceLineNo">106</span> @Override<a name="line.106"></a>
-<span class="sourceLineNo">107</span> protected long writeMagicAndWALHeader(byte[] magic, WALHeader header) throws IOException {<a name="line.107"></a>
-<span class="sourceLineNo">108</span> output.write(magic);<a name="line.108"></a>
-<span class="sourceLineNo">109</span> header.writeDelimitedTo(output);<a name="line.109"></a>
-<span class="sourceLineNo">110</span> return output.getPos();<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> @Override<a name="line.113"></a>
-<span class="sourceLineNo">114</span> protected OutputStream getOutputStreamForCellEncoder() {<a name="line.114"></a>
-<span class="sourceLineNo">115</span> return this.output;<a name="line.115"></a>
-<span class="sourceLineNo">116</span> }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span> @Override<a name="line.118"></a>
-<span class="sourceLineNo">119</span> protected long writeWALTrailerAndMagic(WALTrailer trailer, byte[] magic) throws IOException {<a name="line.119"></a>
-<span class="sourceLineNo">120</span> trailer.writeTo(output);<a name="line.120"></a>
-<span class="sourceLineNo">121</span> output.writeInt(trailer.getSerializedSize());<a name="line.121"></a>
-<span class="sourceLineNo">122</span> output.write(magic);<a name="line.122"></a>
-<span class="sourceLineNo">123</span> return output.getPos();<a name="line.123"></a>
-<span class="sourceLineNo">124</span> }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>}<a name="line.125"></a>
+<span class="sourceLineNo">050</span> entry.getKey().getBuilder(compressor).<a name="line.50"></a>
+<span class="sourceLineNo">051</span> setFollowingKvCount(entry.getEdit().size()).build().writeDelimitedTo(output);<a name="line.51"></a>
+<span class="sourceLineNo">052</span> for (Cell cell : entry.getEdit().getCells()) {<a name="line.52"></a>
+<span class="sourceLineNo">053</span> // cellEncoder must assume little about the stream, since we write PB and cells in turn.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> cellEncoder.write(cell);<a name="line.54"></a>
+<span class="sourceLineNo">055</span> }<a name="line.55"></a>
+<span class="sourceLineNo">056</span> length.set(output.getPos());<a name="line.56"></a>
+<span class="sourceLineNo">057</span> }<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span> @Override<a name="line.59"></a>
+<span class="sourceLineNo">060</span> public void close() throws IOException {<a name="line.60"></a>
+<span class="sourceLineNo">061</span> if (this.output != null) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span> try {<a name="line.62"></a>
+<span class="sourceLineNo">063</span> if (!trailerWritten) writeWALTrailer();<a name="line.63"></a>
+<span class="sourceLineNo">064</span> this.output.close();<a name="line.64"></a>
+<span class="sourceLineNo">065</span> } catch (NullPointerException npe) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span> // Can get a NPE coming up from down in DFSClient$DFSOutputStream#close<a name="line.66"></a>
+<span class="sourceLineNo">067</span> LOG.warn(npe.toString(), npe);<a name="line.67"></a>
+<span class="sourceLineNo">068</span> }<a name="line.68"></a>
+<span class="sourceLineNo">069</span> this.output = null;<a name="line.69"></a>
+<span class="sourceLineNo">070</span> }<a name="line.70"></a>
+<span class="sourceLineNo">071</span> }<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span> @Override<a name="line.73"></a>
+<span class="sourceLineNo">074</span> public void sync(boolean forceSync) throws IOException {<a name="line.74"></a>
+<span class="sourceLineNo">075</span> FSDataOutputStream fsdos = this.output;<a name="line.75"></a>
+<span class="sourceLineNo">076</span> if (fsdos == null) return; // Presume closed<a name="line.76"></a>
+<span class="sourceLineNo">077</span> fsdos.flush();<a name="line.77"></a>
+<span class="sourceLineNo">078</span> if (forceSync) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> fsdos.hsync();<a name="line.79"></a>
+<span class="sourceLineNo">080</span> } else {<a name="line.80"></a>
+<span class="sourceLineNo">081</span> fsdos.hflush();<a name="line.81"></a>
+<span class="sourceLineNo">082</span> }<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 FSDataOutputStream getStream() {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return this.output;<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> @SuppressWarnings("deprecation")<a name="line.89"></a>
+<span class="sourceLineNo">090</span> @Override<a name="line.90"></a>
+<span class="sourceLineNo">091</span> protected void initOutput(FileSystem fs, Path path, boolean overwritable, int bufferSize,<a name="line.91"></a>
+<span class="sourceLineNo">092</span> short replication, long blockSize) throws IOException, StreamLacksCapabilityException {<a name="line.92"></a>
+<span class="sourceLineNo">093</span> this.output = fs.createNonRecursive(path, overwritable, bufferSize, replication, blockSize,<a name="line.93"></a>
+<span class="sourceLineNo">094</span> null);<a name="line.94"></a>
+<span class="sourceLineNo">095</span> if (fs.getConf().getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true)) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span> if (!CommonFSUtils.hasCapability(output, "hflush")) {<a name="line.96"></a>
+<span class="sourceLineNo">097</span> throw new StreamLacksCapabilityException("hflush");<a name="line.97"></a>
+<span class="sourceLineNo">098</span> }<a name="line.98"></a>
+<span class="sourceLineNo">099</span> if (!CommonFSUtils.hasCapability(output, "hsync")) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span> throw new StreamLacksCapabilityException("hsync");<a name="line.100"></a>
+<span class="sourceLineNo">101</span> }<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> @Override<a name="line.105"></a>
+<span class="sourceLineNo">106</span> protected long writeMagicAndWALHeader(byte[] magic, WALHeader header) throws IOException {<a name="line.106"></a>
+<span class="sourceLineNo">107</span> output.write(magic);<a name="line.107"></a>
+<span class="sourceLineNo">108</span> header.writeDelimitedTo(output);<a name="line.108"></a>
+<span class="sourceLineNo">109</span> return output.getPos();<a name="line.109"></a>
+<span class="sourceLineNo">110</span> }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> @Override<a name="line.112"></a>
+<span class="sourceLineNo">113</span> protected OutputStream getOutputStreamForCellEncoder() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span> return this.output;<a name="line.114"></a>
+<span class="sourceLineNo">115</span> }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span> @Override<a name="line.117"></a>
+<span class="sourceLineNo">118</span> protected long writeWALTrailerAndMagic(WALTrailer trailer, byte[] magic) throws IOException {<a name="line.118"></a>
+<span class="sourceLineNo">119</span> trailer.writeTo(output);<a name="line.119"></a>
+<span class="sourceLineNo">120</span> output.writeInt(trailer.getSerializedSize());<a name="line.120"></a>
+<span class="sourceLineNo">121</span> output.write(magic);<a name="line.121"></a>
+<span class="sourceLineNo">122</span> return output.getPos();<a name="line.122"></a>
+<span class="sourceLineNo">123</span> }<a name="line.123"></a>
+<span class="sourceLineNo">124</span>}<a name="line.124"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html
index 934dca2..b35994e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html
@@ -100,81 +100,78 @@
<span class="sourceLineNo">092</span> if (e == null) {<a name="line.92"></a>
<span class="sourceLineNo">093</span> e = new Entry();<a name="line.93"></a>
<span class="sourceLineNo">094</span> }<a name="line.94"></a>
-<span class="sourceLineNo">095</span> if (compressionContext != null) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span> e.setCompressionContext(compressionContext);<a name="line.96"></a>
-<span class="sourceLineNo">097</span> }<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span> boolean hasEntry = false;<a name="line.99"></a>
-<span class="sourceLineNo">100</span> try {<a name="line.100"></a>
-<span class="sourceLineNo">101</span> hasEntry = readNext(e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span> } catch (IllegalArgumentException iae) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span> TableName tableName = e.getKey().getTableName();<a name="line.103"></a>
-<span class="sourceLineNo">104</span> if (tableName != null && tableName.equals(TableName.OLD_ROOT_TABLE_NAME)) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span> // It is old ROOT table edit, ignore it<a name="line.105"></a>
-<span class="sourceLineNo">106</span> LOG.info("Got an old ROOT edit, ignoring ");<a name="line.106"></a>
-<span class="sourceLineNo">107</span> return next(e);<a name="line.107"></a>
-<span class="sourceLineNo">108</span> }<a name="line.108"></a>
-<span class="sourceLineNo">109</span> else throw iae;<a name="line.109"></a>
-<span class="sourceLineNo">110</span> }<a name="line.110"></a>
-<span class="sourceLineNo">111</span> edit++;<a name="line.111"></a>
-<span class="sourceLineNo">112</span> if (compressionContext != null && emptyCompressionContext) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span> emptyCompressionContext = false;<a name="line.113"></a>
-<span class="sourceLineNo">114</span> }<a name="line.114"></a>
-<span class="sourceLineNo">115</span> return hasEntry ? e : null;<a name="line.115"></a>
-<span class="sourceLineNo">116</span> }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span> @Override<a name="line.118"></a>
-<span class="sourceLineNo">119</span> public void seek(long pos) throws IOException {<a name="line.119"></a>
-<span class="sourceLineNo">120</span> if (compressionContext != null && emptyCompressionContext) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span> while (next() != null) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span> if (getPosition() == pos) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span> emptyCompressionContext = false;<a name="line.123"></a>
-<span class="sourceLineNo">124</span> break;<a name="line.124"></a>
-<span class="sourceLineNo">125</span> }<a name="line.125"></a>
-<span class="sourceLineNo">126</span> }<a name="line.126"></a>
-<span class="sourceLineNo">127</span> }<a name="line.127"></a>
-<span class="sourceLineNo">128</span> seekOnFs(pos);<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> /**<a name="line.131"></a>
-<span class="sourceLineNo">132</span> * Initializes the log reader with a particular stream (may be null).<a name="line.132"></a>
-<span class="sourceLineNo">133</span> * Reader assumes ownership of the stream if not null and may use it. Called once.<a name="line.133"></a>
-<span class="sourceLineNo">134</span> * @return the class name of cell Codec, null if such information is not available<a name="line.134"></a>
-<span class="sourceLineNo">135</span> */<a name="line.135"></a>
-<span class="sourceLineNo">136</span> protected abstract String initReader(FSDataInputStream stream) throws IOException;<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span> /**<a name="line.138"></a>
-<span class="sourceLineNo">139</span> * Initializes the compression after the shared stuff has been initialized. Called once.<a name="line.139"></a>
-<span class="sourceLineNo">140</span> */<a name="line.140"></a>
-<span class="sourceLineNo">141</span> protected abstract void initAfterCompression() throws IOException;<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> * Initializes the compression after the shared stuff has been initialized. Called once.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> * @param cellCodecClsName class name of cell Codec<a name="line.145"></a>
-<span class="sourceLineNo">146</span> */<a name="line.146"></a>
-<span class="sourceLineNo">147</span> protected abstract void initAfterCompression(String cellCodecClsName) throws IOException;<a name="line.147"></a>
-<span class="sourceLineNo">148</span> /**<a name="line.148"></a>
-<span class="sourceLineNo">149</span> * @return Whether compression is enabled for this log.<a name="line.149"></a>
-<span class="sourceLineNo">150</span> */<a name="line.150"></a>
-<span class="sourceLineNo">151</span> protected abstract boolean hasCompression();<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span> /**<a name="line.153"></a>
-<span class="sourceLineNo">154</span> * @return Whether tag compression is enabled for this log.<a name="line.154"></a>
-<span class="sourceLineNo">155</span> */<a name="line.155"></a>
-<span class="sourceLineNo">156</span> protected abstract boolean hasTagCompression();<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span> /**<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * Read next entry.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * @param e The entry to read into.<a name="line.160"></a>
-<span class="sourceLineNo">161</span> * @return Whether there was anything to read.<a name="line.161"></a>
-<span class="sourceLineNo">162</span> */<a name="line.162"></a>
-<span class="sourceLineNo">163</span> protected abstract boolean readNext(Entry e) throws IOException;<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span> /**<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * Performs a filesystem-level seek to a certain position in an underlying file.<a name="line.166"></a>
-<span class="sourceLineNo">167</span> */<a name="line.167"></a>
-<span class="sourceLineNo">168</span> protected abstract void seekOnFs(long pos) throws IOException;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>}<a name="line.169"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span> boolean hasEntry = false;<a name="line.96"></a>
+<span class="sourceLineNo">097</span> try {<a name="line.97"></a>
+<span class="sourceLineNo">098</span> hasEntry = readNext(e);<a name="line.98"></a>
+<span class="sourceLineNo">099</span> } catch (IllegalArgumentException iae) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span> TableName tableName = e.getKey().getTableName();<a name="line.100"></a>
+<span class="sourceLineNo">101</span> if (tableName != null && tableName.equals(TableName.OLD_ROOT_TABLE_NAME)) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span> // It is old ROOT table edit, ignore it<a name="line.102"></a>
+<span class="sourceLineNo">103</span> LOG.info("Got an old ROOT edit, ignoring ");<a name="line.103"></a>
+<span class="sourceLineNo">104</span> return next(e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span> }<a name="line.105"></a>
+<span class="sourceLineNo">106</span> else throw iae;<a name="line.106"></a>
+<span class="sourceLineNo">107</span> }<a name="line.107"></a>
+<span class="sourceLineNo">108</span> edit++;<a name="line.108"></a>
+<span class="sourceLineNo">109</span> if (compressionContext != null && emptyCompressionContext) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span> emptyCompressionContext = false;<a name="line.110"></a>
+<span class="sourceLineNo">111</span> }<a name="line.111"></a>
+<span class="sourceLineNo">112</span> return hasEntry ? e : null;<a name="line.112"></a>
+<span class="sourceLineNo">113</span> }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span> @Override<a name="line.115"></a>
+<span class="sourceLineNo">116</span> public void seek(long pos) throws IOException {<a name="line.116"></a>
+<span class="sourceLineNo">117</span> if (compressionContext != null && emptyCompressionContext) {<a name="line.117"></a>
+<span class="sourceLineNo">118</span> while (next() != null) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span> if (getPosition() == pos) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span> emptyCompressionContext = false;<a name="line.120"></a>
+<span class="sourceLineNo">121</span> break;<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> }<a name="line.124"></a>
+<span class="sourceLineNo">125</span> seekOnFs(pos);<a name="line.125"></a>
+<span class="sourceLineNo">126</span> }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> /**<a name="line.128"></a>
+<span class="sourceLineNo">129</span> * Initializes the log reader with a particular stream (may be null).<a name="line.129"></a>
+<span class="sourceLineNo">130</span> * Reader assumes ownership of the stream if not null and may use it. Called once.<a name="line.130"></a>
+<span class="sourceLineNo">131</span> * @return the class name of cell Codec, null if such information is not available<a name="line.131"></a>
+<span class="sourceLineNo">132</span> */<a name="line.132"></a>
+<span class="sourceLineNo">133</span> protected abstract String initReader(FSDataInputStream stream) throws IOException;<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span> /**<a name="line.135"></a>
+<span class="sourceLineNo">136</span> * Initializes the compression after the shared stuff has been initialized. Called once.<a name="line.136"></a>
+<span class="sourceLineNo">137</span> */<a name="line.137"></a>
+<span class="sourceLineNo">138</span> protected abstract void initAfterCompression() throws IOException;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> /**<a name="line.140"></a>
+<span class="sourceLineNo">141</span> * Initializes the compression after the shared stuff has been initialized. Called once.<a name="line.141"></a>
+<span class="sourceLineNo">142</span> * @param cellCodecClsName class name of cell Codec<a name="line.142"></a>
+<span class="sourceLineNo">143</span> */<a name="line.143"></a>
+<span class="sourceLineNo">144</span> protected abstract void initAfterCompression(String cellCodecClsName) throws IOException;<a name="line.144"></a>
+<span class="sourceLineNo">145</span> /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span> * @return Whether compression is enabled for this log.<a name="line.146"></a>
+<span class="sourceLineNo">147</span> */<a name="line.147"></a>
+<span class="sourceLineNo">148</span> protected abstract boolean hasCompression();<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span> /**<a name="line.150"></a>
+<span class="sourceLineNo">151</span> * @return Whether tag compression is enabled for this log.<a name="line.151"></a>
+<span class="sourceLineNo">152</span> */<a name="line.152"></a>
+<span class="sourceLineNo">153</span> protected abstract boolean hasTagCompression();<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span> /**<a name="line.155"></a>
+<span class="sourceLineNo">156</span> * Read next entry.<a name="line.156"></a>
+<span class="sourceLineNo">157</span> * @param e The entry to read into.<a name="line.157"></a>
+<span class="sourceLineNo">158</span> * @return Whether there was anything to read.<a name="line.158"></a>
+<span class="sourceLineNo">159</span> */<a name="line.159"></a>
+<span class="sourceLineNo">160</span> protected abstract boolean readNext(Entry e) throws IOException;<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> * Performs a filesystem-level seek to a certain position in an underlying file.<a name="line.163"></a>
+<span class="sourceLineNo">164</span> */<a name="line.164"></a>
+<span class="sourceLineNo">165</span> protected abstract void seekOnFs(long pos) throws IOException;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>}<a name="line.166"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogReader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogReader.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogReader.html
index 0da9705..1caf2a5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogReader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogReader.html
@@ -149,13 +149,14 @@
<span class="sourceLineNo">141</span> this.cellDecoder = codec.getDecoder(this.inputStream);<a name="line.141"></a>
<span class="sourceLineNo">142</span> // We do not support compression with WAL encryption<a name="line.142"></a>
<span class="sourceLineNo">143</span> this.compressionContext = null;<a name="line.143"></a>
-<span class="sourceLineNo">144</span> this.hasCompression = false;<a name="line.144"></a>
-<span class="sourceLineNo">145</span> } else {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> super.initAfterCompression(cellCodecClsName);<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>}<a name="line.150"></a>
+<span class="sourceLineNo">144</span> this.byteStringUncompressor = WALCellCodec.getNoneUncompressor();<a name="line.144"></a>
+<span class="sourceLineNo">145</span> this.hasCompression = false;<a name="line.145"></a>
+<span class="sourceLineNo">146</span> } else {<a name="line.146"></a>
+<span class="sourceLineNo">147</span> super.initAfterCompression(cellCodecClsName);<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><a name="line.150"></a>
+<span class="sourceLineNo">151</span>}<a name="line.151"></a>
[02/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html
index a00f005..9bca473 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALKeyImpl.html
@@ -45,593 +45,571 @@
<span class="sourceLineNo">037</span><a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FamilyScope;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.ScopeType;<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>/**<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * Default implementation of Key for an Entry in the WAL.<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * For internal use only though Replication needs to have access.<a name="line.49"></a>
-<span class="sourceLineNo">050</span> *<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * The log intermingles edits to many tables and rows, so each log entry<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * identifies the appropriate table and row. Within a table and row, they're<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * also sorted.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * <p>Some Transactional edits (START, COMMIT, ABORT) will not have an associated row.<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>// TODO: Key and WALEdit are never used separately, or in one-to-many relation, for practical<a name="line.58"></a>
-<span class="sourceLineNo">059</span>// purposes. They need to be merged into WALEntry.<a name="line.59"></a>
-<span class="sourceLineNo">060</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.REPLICATION})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class WALKeyImpl implements WALKey {<a name="line.61"></a>
-<span class="sourceLineNo">062</span> public static final WALKeyImpl EMPTY_WALKEYIMPL = new WALKeyImpl();<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span> public MultiVersionConcurrencyControl getMvcc() {<a name="line.64"></a>
-<span class="sourceLineNo">065</span> return mvcc;<a name="line.65"></a>
-<span class="sourceLineNo">066</span> }<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span> /**<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * Use it to complete mvcc transaction. This WALKeyImpl was part of<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * (the transaction is started when you call append; see the comment on FSHLog#append). To<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * complete call<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * {@link MultiVersionConcurrencyControl#complete(MultiVersionConcurrencyControl.WriteEntry)}<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * or {@link MultiVersionConcurrencyControl#complete(MultiVersionConcurrencyControl.WriteEntry)}<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * @return A WriteEntry gotten from local WAL subsystem.<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * @see #setWriteEntry(MultiVersionConcurrencyControl.WriteEntry)<a name="line.75"></a>
-<span class="sourceLineNo">076</span> */<a name="line.76"></a>
-<span class="sourceLineNo">077</span> public MultiVersionConcurrencyControl.WriteEntry getWriteEntry() {<a name="line.77"></a>
-<span class="sourceLineNo">078</span> return this.writeEntry;<a name="line.78"></a>
-<span class="sourceLineNo">079</span> }<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span> public void setWriteEntry(MultiVersionConcurrencyControl.WriteEntry writeEntry) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span> assert this.writeEntry == null;<a name="line.82"></a>
-<span class="sourceLineNo">083</span> this.writeEntry = writeEntry;<a name="line.83"></a>
-<span class="sourceLineNo">084</span> // Set our sequenceid now using WriteEntry.<a name="line.84"></a>
-<span class="sourceLineNo">085</span> this.sequenceId = writeEntry.getWriteNumber();<a name="line.85"></a>
-<span class="sourceLineNo">086</span> }<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span> private byte [] encodedRegionName;<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span> private TableName tablename;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span> /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * SequenceId for this edit. Set post-construction at write-to-WAL time. Until then it is<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * NO_SEQUENCE_ID. Change it so multiple threads can read it -- e.g. access is synchronized.<a name="line.94"></a>
-<span class="sourceLineNo">095</span> */<a name="line.95"></a>
-<span class="sourceLineNo">096</span> private long sequenceId;<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span> /**<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * Used during WAL replay; the sequenceId of the edit when it came into the system.<a name="line.99"></a>
-<span class="sourceLineNo">100</span> */<a name="line.100"></a>
-<span class="sourceLineNo">101</span> private long origLogSeqNum = 0;<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span> /** Time at which this edit was written. */<a name="line.103"></a>
-<span class="sourceLineNo">104</span> private long writeTime;<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span> /** The first element in the list is the cluster id on which the change has originated */<a name="line.106"></a>
-<span class="sourceLineNo">107</span> private List<UUID> clusterIds;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span> private NavigableMap<byte[], Integer> replicationScope;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> private long nonceGroup = HConstants.NO_NONCE;<a name="line.111"></a>
-<span class="sourceLineNo">112</span> private long nonce = HConstants.NO_NONCE;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> private MultiVersionConcurrencyControl mvcc;<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span> /**<a name="line.115"></a>
-<span class="sourceLineNo">116</span> * Set in a way visible to multiple threads; e.g. synchronized getter/setters.<a name="line.116"></a>
-<span class="sourceLineNo">117</span> */<a name="line.117"></a>
-<span class="sourceLineNo">118</span> private MultiVersionConcurrencyControl.WriteEntry writeEntry;<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span> private CompressionContext compressionContext;<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span> public WALKeyImpl() {<a name="line.122"></a>
-<span class="sourceLineNo">123</span> init(null, null, 0L, HConstants.LATEST_TIMESTAMP,<a name="line.123"></a>
-<span class="sourceLineNo">124</span> new ArrayList<>(), HConstants.NO_NONCE, HConstants.NO_NONCE, null, null);<a name="line.124"></a>
-<span class="sourceLineNo">125</span> }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span> public WALKeyImpl(final NavigableMap<byte[], Integer> replicationScope) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span> init(null, null, 0L, HConstants.LATEST_TIMESTAMP,<a name="line.128"></a>
-<span class="sourceLineNo">129</span> new ArrayList<>(), HConstants.NO_NONCE, HConstants.NO_NONCE, null, replicationScope);<a name="line.129"></a>
-<span class="sourceLineNo">130</span> }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span> @VisibleForTesting<a name="line.132"></a>
-<span class="sourceLineNo">133</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename,<a name="line.133"></a>
-<span class="sourceLineNo">134</span> long logSeqNum,<a name="line.134"></a>
-<span class="sourceLineNo">135</span> final long now, UUID clusterId) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span> List<UUID> clusterIds = new ArrayList<>(1);<a name="line.136"></a>
-<span class="sourceLineNo">137</span> clusterIds.add(clusterId);<a name="line.137"></a>
-<span class="sourceLineNo">138</span> init(encodedRegionName, tablename, logSeqNum, now, clusterIds,<a name="line.138"></a>
-<span class="sourceLineNo">139</span> HConstants.NO_NONCE, HConstants.NO_NONCE, null, null);<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> // TODO: Fix being able to pass in sequenceid.<a name="line.142"></a>
-<span class="sourceLineNo">143</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename, final long now) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span> init(encodedRegionName,<a name="line.144"></a>
-<span class="sourceLineNo">145</span> tablename,<a name="line.145"></a>
-<span class="sourceLineNo">146</span> NO_SEQUENCE_ID,<a name="line.146"></a>
-<span class="sourceLineNo">147</span> now,<a name="line.147"></a>
-<span class="sourceLineNo">148</span> EMPTY_UUIDS,<a name="line.148"></a>
-<span class="sourceLineNo">149</span> HConstants.NO_NONCE,<a name="line.149"></a>
-<span class="sourceLineNo">150</span> HConstants.NO_NONCE,<a name="line.150"></a>
-<span class="sourceLineNo">151</span> null, null);<a name="line.151"></a>
-<span class="sourceLineNo">152</span> }<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span> // TODO: Fix being able to pass in sequenceid.<a name="line.154"></a>
-<span class="sourceLineNo">155</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename, final long now,<a name="line.155"></a>
-<span class="sourceLineNo">156</span> final NavigableMap<byte[], Integer> replicationScope) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span> init(encodedRegionName, tablename, NO_SEQUENCE_ID, now, EMPTY_UUIDS, HConstants.NO_NONCE,<a name="line.157"></a>
-<span class="sourceLineNo">158</span> HConstants.NO_NONCE, null, replicationScope);<a name="line.158"></a>
-<span class="sourceLineNo">159</span> }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename, final long now,<a name="line.161"></a>
-<span class="sourceLineNo">162</span> MultiVersionConcurrencyControl mvcc, final NavigableMap<byte[], Integer> replicationScope) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span> init(encodedRegionName, tablename, NO_SEQUENCE_ID, now, EMPTY_UUIDS, HConstants.NO_NONCE,<a name="line.163"></a>
-<span class="sourceLineNo">164</span> HConstants.NO_NONCE, mvcc, replicationScope);<a name="line.164"></a>
-<span class="sourceLineNo">165</span> }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span> public WALKeyImpl(final byte[] encodedRegionName,<a name="line.167"></a>
-<span class="sourceLineNo">168</span> final TableName tablename,<a name="line.168"></a>
-<span class="sourceLineNo">169</span> final long now,<a name="line.169"></a>
-<span class="sourceLineNo">170</span> MultiVersionConcurrencyControl mvcc) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> init(encodedRegionName,<a name="line.171"></a>
-<span class="sourceLineNo">172</span> tablename,<a name="line.172"></a>
-<span class="sourceLineNo">173</span> NO_SEQUENCE_ID,<a name="line.173"></a>
-<span class="sourceLineNo">174</span> now,<a name="line.174"></a>
-<span class="sourceLineNo">175</span> EMPTY_UUIDS,<a name="line.175"></a>
-<span class="sourceLineNo">176</span> HConstants.NO_NONCE,<a name="line.176"></a>
-<span class="sourceLineNo">177</span> HConstants.NO_NONCE,<a name="line.177"></a>
-<span class="sourceLineNo">178</span> mvcc, null);<a name="line.178"></a>
-<span class="sourceLineNo">179</span> }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span> /**<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * Create the log key for writing to somewhere.<a name="line.182"></a>
-<span class="sourceLineNo">183</span> * We maintain the tablename mainly for debugging purposes.<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * A regionName is always a sub-table object.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * <p>Used by log splitting and snapshots.<a name="line.185"></a>
-<span class="sourceLineNo">186</span> *<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * @param encodedRegionName Encoded name of the region as returned by<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * <code>HRegionInfo#getEncodedNameAsBytes()</code>.<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * @param tablename - name of table<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * @param logSeqNum - log sequence number<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * @param now Time at which this edit was written.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * @param clusterIds the clusters that have consumed the change(used in Replication)<a name="line.192"></a>
-<span class="sourceLineNo">193</span> * @param nonceGroup the nonceGroup<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * @param nonce the nonce<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * @param mvcc the mvcc associate the WALKeyImpl<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * @param replicationScope the non-default replication scope<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * associated with the region's column families<a name="line.197"></a>
-<span class="sourceLineNo">198</span> */<a name="line.198"></a>
-<span class="sourceLineNo">199</span> // TODO: Fix being able to pass in sequenceid.<a name="line.199"></a>
-<span class="sourceLineNo">200</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename, long logSeqNum,<a name="line.200"></a>
-<span class="sourceLineNo">201</span> final long now, List<UUID> clusterIds, long nonceGroup, long nonce,<a name="line.201"></a>
-<span class="sourceLineNo">202</span> MultiVersionConcurrencyControl mvcc, final NavigableMap<byte[], Integer> replicationScope) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span> init(encodedRegionName, tablename, logSeqNum, now, clusterIds, nonceGroup, nonce, mvcc,<a name="line.203"></a>
-<span class="sourceLineNo">204</span> replicationScope);<a name="line.204"></a>
-<span class="sourceLineNo">205</span> }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span> /**<a name="line.207"></a>
-<span class="sourceLineNo">208</span> * Create the log key for writing to somewhere.<a name="line.208"></a>
-<span class="sourceLineNo">209</span> * We maintain the tablename mainly for debugging purposes.<a name="line.209"></a>
-<span class="sourceLineNo">210</span> * A regionName is always a sub-table object.<a name="line.210"></a>
-<span class="sourceLineNo">211</span> * <p>Used by log splitting and snapshots.<a name="line.211"></a>
-<span class="sourceLineNo">212</span> *<a name="line.212"></a>
-<span class="sourceLineNo">213</span> * @param encodedRegionName Encoded name of the region as returned by<a name="line.213"></a>
-<span class="sourceLineNo">214</span> * <code>HRegionInfo#getEncodedNameAsBytes()</code>.<a name="line.214"></a>
-<span class="sourceLineNo">215</span> * @param tablename - name of table<a name="line.215"></a>
-<span class="sourceLineNo">216</span> * @param logSeqNum - log sequence number<a name="line.216"></a>
-<span class="sourceLineNo">217</span> * @param now Time at which this edit was written.<a name="line.217"></a>
-<span class="sourceLineNo">218</span> * @param clusterIds the clusters that have consumed the change(used in Replication)<a name="line.218"></a>
-<span class="sourceLineNo">219</span> */<a name="line.219"></a>
-<span class="sourceLineNo">220</span> // TODO: Fix being able to pass in sequenceid.<a name="line.220"></a>
-<span class="sourceLineNo">221</span> public WALKeyImpl(final byte[] encodedRegionName,<a name="line.221"></a>
-<span class="sourceLineNo">222</span> final TableName tablename,<a name="line.222"></a>
-<span class="sourceLineNo">223</span> long logSeqNum,<a name="line.223"></a>
-<span class="sourceLineNo">224</span> final long now,<a name="line.224"></a>
-<span class="sourceLineNo">225</span> List<UUID> clusterIds,<a name="line.225"></a>
-<span class="sourceLineNo">226</span> long nonceGroup,<a name="line.226"></a>
-<span class="sourceLineNo">227</span> long nonce,<a name="line.227"></a>
-<span class="sourceLineNo">228</span> MultiVersionConcurrencyControl mvcc) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span> init(encodedRegionName, tablename, logSeqNum, now, clusterIds, nonceGroup, nonce, mvcc, null);<a name="line.229"></a>
-<span class="sourceLineNo">230</span> }<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> * Create the log key for writing to somewhere.<a name="line.233"></a>
-<span class="sourceLineNo">234</span> * We maintain the tablename mainly for debugging purposes.<a name="line.234"></a>
-<span class="sourceLineNo">235</span> * A regionName is always a sub-table object.<a name="line.235"></a>
-<span class="sourceLineNo">236</span> *<a name="line.236"></a>
-<span class="sourceLineNo">237</span> * @param encodedRegionName Encoded name of the region as returned by<a name="line.237"></a>
-<span class="sourceLineNo">238</span> * <code>HRegionInfo#getEncodedNameAsBytes()</code>.<a name="line.238"></a>
-<span class="sourceLineNo">239</span> * @param tablename the tablename<a name="line.239"></a>
-<span class="sourceLineNo">240</span> * @param now Time at which this edit was written.<a name="line.240"></a>
-<span class="sourceLineNo">241</span> * @param clusterIds the clusters that have consumed the change(used in Replication)<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * @param nonceGroup<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * @param nonce<a name="line.243"></a>
-<span class="sourceLineNo">244</span> * @param mvcc mvcc control used to generate sequence numbers and control read/write points<a name="line.244"></a>
-<span class="sourceLineNo">245</span> */<a name="line.245"></a>
-<span class="sourceLineNo">246</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename,<a name="line.246"></a>
-<span class="sourceLineNo">247</span> final long now, List<UUID> clusterIds, long nonceGroup,<a name="line.247"></a>
-<span class="sourceLineNo">248</span> final long nonce, final MultiVersionConcurrencyControl mvcc) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> init(encodedRegionName, tablename, NO_SEQUENCE_ID, now, clusterIds, nonceGroup, nonce, mvcc,<a name="line.249"></a>
-<span class="sourceLineNo">250</span> null);<a name="line.250"></a>
-<span class="sourceLineNo">251</span> }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span> /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span> * Create the log key for writing to somewhere.<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * We maintain the tablename mainly for debugging purposes.<a name="line.255"></a>
-<span class="sourceLineNo">256</span> * A regionName is always a sub-table object.<a name="line.256"></a>
-<span class="sourceLineNo">257</span> *<a name="line.257"></a>
-<span class="sourceLineNo">258</span> * @param encodedRegionName Encoded name of the region as returned by<a name="line.258"></a>
-<span class="sourceLineNo">259</span> * <code>HRegionInfo#getEncodedNameAsBytes()</code>.<a name="line.259"></a>
-<span class="sourceLineNo">260</span> * @param tablename<a name="line.260"></a>
-<span class="sourceLineNo">261</span> * @param now Time at which this edit was written.<a name="line.261"></a>
-<span class="sourceLineNo">262</span> * @param clusterIds the clusters that have consumed the change(used in Replication)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> * @param nonceGroup the nonceGroup<a name="line.263"></a>
-<span class="sourceLineNo">264</span> * @param nonce the nonce<a name="line.264"></a>
-<span class="sourceLineNo">265</span> * @param mvcc mvcc control used to generate sequence numbers and control read/write points<a name="line.265"></a>
-<span class="sourceLineNo">266</span> * @param replicationScope the non-default replication scope of the column families<a name="line.266"></a>
-<span class="sourceLineNo">267</span> */<a name="line.267"></a>
-<span class="sourceLineNo">268</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename,<a name="line.268"></a>
-<span class="sourceLineNo">269</span> final long now, List<UUID> clusterIds, long nonceGroup,<a name="line.269"></a>
-<span class="sourceLineNo">270</span> final long nonce, final MultiVersionConcurrencyControl mvcc,<a name="line.270"></a>
-<span class="sourceLineNo">271</span> NavigableMap<byte[], Integer> replicationScope) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span> init(encodedRegionName, tablename, NO_SEQUENCE_ID, now, clusterIds, nonceGroup, nonce, mvcc,<a name="line.272"></a>
-<span class="sourceLineNo">273</span> replicationScope);<a name="line.273"></a>
-<span class="sourceLineNo">274</span> }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span> /**<a name="line.276"></a>
-<span class="sourceLineNo">277</span> * Create the log key for writing to somewhere.<a name="line.277"></a>
-<span class="sourceLineNo">278</span> * We maintain the tablename mainly for debugging purposes.<a name="line.278"></a>
-<span class="sourceLineNo">279</span> * A regionName is always a sub-table object.<a name="line.279"></a>
-<span class="sourceLineNo">280</span> *<a name="line.280"></a>
-<span class="sourceLineNo">281</span> * @param encodedRegionName Encoded name of the region as returned by<a name="line.281"></a>
-<span class="sourceLineNo">282</span> * <code>HRegionInfo#getEncodedNameAsBytes()</code>.<a name="line.282"></a>
-<span class="sourceLineNo">283</span> * @param tablename<a name="line.283"></a>
-<span class="sourceLineNo">284</span> * @param logSeqNum<a name="line.284"></a>
-<span class="sourceLineNo">285</span> * @param nonceGroup<a name="line.285"></a>
-<span class="sourceLineNo">286</span> * @param nonce<a name="line.286"></a>
-<span class="sourceLineNo">287</span> */<a name="line.287"></a>
-<span class="sourceLineNo">288</span> // TODO: Fix being able to pass in sequenceid.<a name="line.288"></a>
-<span class="sourceLineNo">289</span> public WALKeyImpl(final byte[] encodedRegionName,<a name="line.289"></a>
-<span class="sourceLineNo">290</span> final TableName tablename,<a name="line.290"></a>
-<span class="sourceLineNo">291</span> long logSeqNum,<a name="line.291"></a>
-<span class="sourceLineNo">292</span> long nonceGroup,<a name="line.292"></a>
-<span class="sourceLineNo">293</span> long nonce,<a name="line.293"></a>
-<span class="sourceLineNo">294</span> final MultiVersionConcurrencyControl mvcc) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span> init(encodedRegionName,<a name="line.295"></a>
-<span class="sourceLineNo">296</span> tablename,<a name="line.296"></a>
-<span class="sourceLineNo">297</span> logSeqNum,<a name="line.297"></a>
-<span class="sourceLineNo">298</span> EnvironmentEdgeManager.currentTime(),<a name="line.298"></a>
-<span class="sourceLineNo">299</span> EMPTY_UUIDS,<a name="line.299"></a>
-<span class="sourceLineNo">300</span> nonceGroup,<a name="line.300"></a>
-<span class="sourceLineNo">301</span> nonce,<a name="line.301"></a>
-<span class="sourceLineNo">302</span> mvcc, null);<a name="line.302"></a>
-<span class="sourceLineNo">303</span> }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span> @InterfaceAudience.Private<a name="line.305"></a>
-<span class="sourceLineNo">306</span> protected void init(final byte[] encodedRegionName,<a name="line.306"></a>
-<span class="sourceLineNo">307</span> final TableName tablename,<a name="line.307"></a>
-<span class="sourceLineNo">308</span> long logSeqNum,<a name="line.308"></a>
-<span class="sourceLineNo">309</span> final long now,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> List<UUID> clusterIds,<a name="line.310"></a>
-<span class="sourceLineNo">311</span> long nonceGroup,<a name="line.311"></a>
-<span class="sourceLineNo">312</span> long nonce,<a name="line.312"></a>
-<span class="sourceLineNo">313</span> MultiVersionConcurrencyControl mvcc,<a name="line.313"></a>
-<span class="sourceLineNo">314</span> NavigableMap<byte[], Integer> replicationScope) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> this.sequenceId = logSeqNum;<a name="line.315"></a>
-<span class="sourceLineNo">316</span> this.writeTime = now;<a name="line.316"></a>
-<span class="sourceLineNo">317</span> this.clusterIds = clusterIds;<a name="line.317"></a>
-<span class="sourceLineNo">318</span> this.encodedRegionName = encodedRegionName;<a name="line.318"></a>
-<span class="sourceLineNo">319</span> this.tablename = tablename;<a name="line.319"></a>
-<span class="sourceLineNo">320</span> this.nonceGroup = nonceGroup;<a name="line.320"></a>
-<span class="sourceLineNo">321</span> this.nonce = nonce;<a name="line.321"></a>
-<span class="sourceLineNo">322</span> this.mvcc = mvcc;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> if (logSeqNum != NO_SEQUENCE_ID) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> setSequenceId(logSeqNum);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> this.replicationScope = replicationScope;<a name="line.326"></a>
-<span class="sourceLineNo">327</span> }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span> // For deserialization. DO NOT USE. See setWriteEntry below.<a name="line.329"></a>
-<span class="sourceLineNo">330</span> @InterfaceAudience.Private<a name="line.330"></a>
-<span class="sourceLineNo">331</span> protected void setSequenceId(long sequenceId) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> this.sequenceId = sequenceId;<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> /**<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @param compressionContext Compression context to use<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public void setCompressionContext(CompressionContext compressionContext) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this.compressionContext = compressionContext;<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> /** @return encoded region name */<a name="line.342"></a>
-<span class="sourceLineNo">343</span> @Override<a name="line.343"></a>
-<span class="sourceLineNo">344</span> public byte [] getEncodedRegionName() {<a name="line.344"></a>
-<span class="sourceLineNo">345</span> return encodedRegionName;<a name="line.345"></a>
-<span class="sourceLineNo">346</span> }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span> /** @return table name */<a name="line.348"></a>
-<span class="sourceLineNo">349</span> @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span> public TableName getTableName() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span> return tablename;<a name="line.351"></a>
-<span class="sourceLineNo">352</span> }<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span> /** @return log sequence number<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * @deprecated Use {@link #getSequenceId()}<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> @Deprecated<a name="line.357"></a>
-<span class="sourceLineNo">358</span> public long getLogSeqNum() {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> return getSequenceId();<a name="line.359"></a>
-<span class="sourceLineNo">360</span> }<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span> /**<a name="line.362"></a>
-<span class="sourceLineNo">363</span> * Used to set original sequenceId for WALKeyImpl during WAL replay<a name="line.363"></a>
-<span class="sourceLineNo">364</span> */<a name="line.364"></a>
-<span class="sourceLineNo">365</span> public void setOrigLogSeqNum(final long sequenceId) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span> this.origLogSeqNum = sequenceId;<a name="line.366"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FamilyScope;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.ScopeType;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>/**<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * Default implementation of Key for an Entry in the WAL.<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * For internal use only though Replication needs to have access.<a name="line.48"></a>
+<span class="sourceLineNo">049</span> *<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * The log intermingles edits to many tables and rows, so each log entry<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * identifies the appropriate table and row. Within a table and row, they're<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * also sorted.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> *<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * <p>Some Transactional edits (START, COMMIT, ABORT) will not have an associated row.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *<a name="line.55"></a>
+<span class="sourceLineNo">056</span> */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>// TODO: Key and WALEdit are never used separately, or in one-to-many relation, for practical<a name="line.57"></a>
+<span class="sourceLineNo">058</span>// purposes. They need to be merged into WALEntry.<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.REPLICATION})<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public class WALKeyImpl implements WALKey {<a name="line.60"></a>
+<span class="sourceLineNo">061</span> public static final WALKeyImpl EMPTY_WALKEYIMPL = new WALKeyImpl();<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span> public MultiVersionConcurrencyControl getMvcc() {<a name="line.63"></a>
+<span class="sourceLineNo">064</span> return mvcc;<a name="line.64"></a>
+<span class="sourceLineNo">065</span> }<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * Use it to complete mvcc transaction. This WALKeyImpl was part of<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * (the transaction is started when you call append; see the comment on FSHLog#append). To<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * complete call<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * {@link MultiVersionConcurrencyControl#complete(MultiVersionConcurrencyControl.WriteEntry)}<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * or {@link MultiVersionConcurrencyControl#complete(MultiVersionConcurrencyControl.WriteEntry)}<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * @return A WriteEntry gotten from local WAL subsystem.<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * @see #setWriteEntry(MultiVersionConcurrencyControl.WriteEntry)<a name="line.74"></a>
+<span class="sourceLineNo">075</span> */<a name="line.75"></a>
+<span class="sourceLineNo">076</span> public MultiVersionConcurrencyControl.WriteEntry getWriteEntry() {<a name="line.76"></a>
+<span class="sourceLineNo">077</span> return this.writeEntry;<a name="line.77"></a>
+<span class="sourceLineNo">078</span> }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span> public void setWriteEntry(MultiVersionConcurrencyControl.WriteEntry writeEntry) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span> assert this.writeEntry == null;<a name="line.81"></a>
+<span class="sourceLineNo">082</span> this.writeEntry = writeEntry;<a name="line.82"></a>
+<span class="sourceLineNo">083</span> // Set our sequenceid now using WriteEntry.<a name="line.83"></a>
+<span class="sourceLineNo">084</span> this.sequenceId = writeEntry.getWriteNumber();<a name="line.84"></a>
+<span class="sourceLineNo">085</span> }<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span> private byte [] encodedRegionName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span> private TableName tablename;<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> * SequenceId for this edit. Set post-construction at write-to-WAL time. Until then it is<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * NO_SEQUENCE_ID. Change it so multiple threads can read it -- e.g. access is synchronized.<a name="line.93"></a>
+<span class="sourceLineNo">094</span> */<a name="line.94"></a>
+<span class="sourceLineNo">095</span> private long sequenceId;<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span> /**<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * Used during WAL replay; the sequenceId of the edit when it came into the system.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> */<a name="line.99"></a>
+<span class="sourceLineNo">100</span> private long origLogSeqNum = 0;<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span> /** Time at which this edit was written. */<a name="line.102"></a>
+<span class="sourceLineNo">103</span> private long writeTime;<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span> /** The first element in the list is the cluster id on which the change has originated */<a name="line.105"></a>
+<span class="sourceLineNo">106</span> private List<UUID> clusterIds;<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span> private NavigableMap<byte[], Integer> replicationScope;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> private long nonceGroup = HConstants.NO_NONCE;<a name="line.110"></a>
+<span class="sourceLineNo">111</span> private long nonce = HConstants.NO_NONCE;<a name="line.111"></a>
+<span class="sourceLineNo">112</span> private MultiVersionConcurrencyControl mvcc;<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> /**<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * Set in a way visible to multiple threads; e.g. synchronized getter/setters.<a name="line.115"></a>
+<span class="sourceLineNo">116</span> */<a name="line.116"></a>
+<span class="sourceLineNo">117</span> private MultiVersionConcurrencyControl.WriteEntry writeEntry;<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span> public WALKeyImpl() {<a name="line.119"></a>
+<span class="sourceLineNo">120</span> init(null, null, 0L, HConstants.LATEST_TIMESTAMP,<a name="line.120"></a>
+<span class="sourceLineNo">121</span> new ArrayList<>(), HConstants.NO_NONCE, HConstants.NO_NONCE, null, null);<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> public WALKeyImpl(final NavigableMap<byte[], Integer> replicationScope) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span> init(null, null, 0L, HConstants.LATEST_TIMESTAMP,<a name="line.125"></a>
+<span class="sourceLineNo">126</span> new ArrayList<>(), HConstants.NO_NONCE, HConstants.NO_NONCE, null, replicationScope);<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> @VisibleForTesting<a name="line.129"></a>
+<span class="sourceLineNo">130</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename,<a name="line.130"></a>
+<span class="sourceLineNo">131</span> long logSeqNum,<a name="line.131"></a>
+<span class="sourceLineNo">132</span> final long now, UUID clusterId) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span> List<UUID> clusterIds = new ArrayList<>(1);<a name="line.133"></a>
+<span class="sourceLineNo">134</span> clusterIds.add(clusterId);<a name="line.134"></a>
+<span class="sourceLineNo">135</span> init(encodedRegionName, tablename, logSeqNum, now, clusterIds,<a name="line.135"></a>
+<span class="sourceLineNo">136</span> HConstants.NO_NONCE, HConstants.NO_NONCE, null, null);<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> // TODO: Fix being able to pass in sequenceid.<a name="line.139"></a>
+<span class="sourceLineNo">140</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename, final long now) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> init(encodedRegionName,<a name="line.141"></a>
+<span class="sourceLineNo">142</span> tablename,<a name="line.142"></a>
+<span class="sourceLineNo">143</span> NO_SEQUENCE_ID,<a name="line.143"></a>
+<span class="sourceLineNo">144</span> now,<a name="line.144"></a>
+<span class="sourceLineNo">145</span> EMPTY_UUIDS,<a name="line.145"></a>
+<span class="sourceLineNo">146</span> HConstants.NO_NONCE,<a name="line.146"></a>
+<span class="sourceLineNo">147</span> HConstants.NO_NONCE,<a name="line.147"></a>
+<span class="sourceLineNo">148</span> null, null);<a name="line.148"></a>
+<span class="sourceLineNo">149</span> }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span> // TODO: Fix being able to pass in sequenceid.<a name="line.151"></a>
+<span class="sourceLineNo">152</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename, final long now,<a name="line.152"></a>
+<span class="sourceLineNo">153</span> final NavigableMap<byte[], Integer> replicationScope) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> init(encodedRegionName, tablename, NO_SEQUENCE_ID, now, EMPTY_UUIDS, HConstants.NO_NONCE,<a name="line.154"></a>
+<span class="sourceLineNo">155</span> HConstants.NO_NONCE, null, replicationScope);<a name="line.155"></a>
+<span class="sourceLineNo">156</span> }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename, final long now,<a name="line.158"></a>
+<span class="sourceLineNo">159</span> MultiVersionConcurrencyControl mvcc, final NavigableMap<byte[], Integer> replicationScope) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span> init(encodedRegionName, tablename, NO_SEQUENCE_ID, now, EMPTY_UUIDS, HConstants.NO_NONCE,<a name="line.160"></a>
+<span class="sourceLineNo">161</span> HConstants.NO_NONCE, mvcc, replicationScope);<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>
+<span class="sourceLineNo">164</span> public WALKeyImpl(final byte[] encodedRegionName,<a name="line.164"></a>
+<span class="sourceLineNo">165</span> final TableName tablename,<a name="line.165"></a>
+<span class="sourceLineNo">166</span> final long now,<a name="line.166"></a>
+<span class="sourceLineNo">167</span> MultiVersionConcurrencyControl mvcc) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span> init(encodedRegionName,<a name="line.168"></a>
+<span class="sourceLineNo">169</span> tablename,<a name="line.169"></a>
+<span class="sourceLineNo">170</span> NO_SEQUENCE_ID,<a name="line.170"></a>
+<span class="sourceLineNo">171</span> now,<a name="line.171"></a>
+<span class="sourceLineNo">172</span> EMPTY_UUIDS,<a name="line.172"></a>
+<span class="sourceLineNo">173</span> HConstants.NO_NONCE,<a name="line.173"></a>
+<span class="sourceLineNo">174</span> HConstants.NO_NONCE,<a name="line.174"></a>
+<span class="sourceLineNo">175</span> mvcc, null);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span> /**<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * Create the log key for writing to somewhere.<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * We maintain the tablename mainly for debugging purposes.<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * A regionName is always a sub-table object.<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * <p>Used by log splitting and snapshots.<a name="line.182"></a>
+<span class="sourceLineNo">183</span> *<a name="line.183"></a>
+<span class="sourceLineNo">184</span> * @param encodedRegionName Encoded name of the region as returned by<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * <code>HRegionInfo#getEncodedNameAsBytes()</code>.<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * @param tablename - name of table<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * @param logSeqNum - log sequence number<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * @param now Time at which this edit was written.<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * @param clusterIds the clusters that have consumed the change(used in Replication)<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * @param nonceGroup the nonceGroup<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * @param nonce the nonce<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * @param mvcc the mvcc associate the WALKeyImpl<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * @param replicationScope the non-default replication scope<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * associated with the region's column families<a name="line.194"></a>
+<span class="sourceLineNo">195</span> */<a name="line.195"></a>
+<span class="sourceLineNo">196</span> // TODO: Fix being able to pass in sequenceid.<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename, long logSeqNum,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> final long now, List<UUID> clusterIds, long nonceGroup, long nonce,<a name="line.198"></a>
+<span class="sourceLineNo">199</span> MultiVersionConcurrencyControl mvcc, final NavigableMap<byte[], Integer> replicationScope) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span> init(encodedRegionName, tablename, logSeqNum, now, clusterIds, nonceGroup, nonce, mvcc,<a name="line.200"></a>
+<span class="sourceLineNo">201</span> replicationScope);<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> * Create the log key for writing to somewhere.<a name="line.205"></a>
+<span class="sourceLineNo">206</span> * We maintain the tablename mainly for debugging purposes.<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * A regionName is always a sub-table object.<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * <p>Used by log splitting and snapshots.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> *<a name="line.209"></a>
+<span class="sourceLineNo">210</span> * @param encodedRegionName Encoded name of the region as returned by<a name="line.210"></a>
+<span class="sourceLineNo">211</span> * <code>HRegionInfo#getEncodedNameAsBytes()</code>.<a name="line.211"></a>
+<span class="sourceLineNo">212</span> * @param tablename - name of table<a name="line.212"></a>
+<span class="sourceLineNo">213</span> * @param logSeqNum - log sequence number<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * @param now Time at which this edit was written.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> * @param clusterIds the clusters that have consumed the change(used in Replication)<a name="line.215"></a>
+<span class="sourceLineNo">216</span> */<a name="line.216"></a>
+<span class="sourceLineNo">217</span> // TODO: Fix being able to pass in sequenceid.<a name="line.217"></a>
+<span class="sourceLineNo">218</span> public WALKeyImpl(final byte[] encodedRegionName,<a name="line.218"></a>
+<span class="sourceLineNo">219</span> final TableName tablename,<a name="line.219"></a>
+<span class="sourceLineNo">220</span> long logSeqNum,<a name="line.220"></a>
+<span class="sourceLineNo">221</span> final long now,<a name="line.221"></a>
+<span class="sourceLineNo">222</span> List<UUID> clusterIds,<a name="line.222"></a>
+<span class="sourceLineNo">223</span> long nonceGroup,<a name="line.223"></a>
+<span class="sourceLineNo">224</span> long nonce,<a name="line.224"></a>
+<span class="sourceLineNo">225</span> MultiVersionConcurrencyControl mvcc) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span> init(encodedRegionName, tablename, logSeqNum, now, clusterIds, nonceGroup, nonce, mvcc, null);<a name="line.226"></a>
+<span class="sourceLineNo">227</span> }<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span> /**<a name="line.229"></a>
+<span class="sourceLineNo">230</span> * Create the log key for writing to somewhere.<a name="line.230"></a>
+<span class="sourceLineNo">231</span> * We maintain the tablename mainly for debugging purposes.<a name="line.231"></a>
+<span class="sourceLineNo">232</span> * A regionName is always a sub-table object.<a name="line.232"></a>
+<span class="sourceLineNo">233</span> *<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * @param encodedRegionName Encoded name of the region as returned by<a name="line.234"></a>
+<span class="sourceLineNo">235</span> * <code>HRegionInfo#getEncodedNameAsBytes()</code>.<a name="line.235"></a>
+<span class="sourceLineNo">236</span> * @param tablename the tablename<a name="line.236"></a>
+<span class="sourceLineNo">237</span> * @param now Time at which this edit was written.<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * @param clusterIds the clusters that have consumed the change(used in Replication)<a name="line.238"></a>
+<span class="sourceLineNo">239</span> * @param nonceGroup<a name="line.239"></a>
+<span class="sourceLineNo">240</span> * @param nonce<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * @param mvcc mvcc control used to generate sequence numbers and control read/write points<a name="line.241"></a>
+<span class="sourceLineNo">242</span> */<a name="line.242"></a>
+<span class="sourceLineNo">243</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename,<a name="line.243"></a>
+<span class="sourceLineNo">244</span> final long now, List<UUID> clusterIds, long nonceGroup,<a name="line.244"></a>
+<span class="sourceLineNo">245</span> final long nonce, final MultiVersionConcurrencyControl mvcc) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span> init(encodedRegionName, tablename, NO_SEQUENCE_ID, now, clusterIds, nonceGroup, nonce, mvcc,<a name="line.246"></a>
+<span class="sourceLineNo">247</span> null);<a name="line.247"></a>
+<span class="sourceLineNo">248</span> }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span> /**<a name="line.250"></a>
+<span class="sourceLineNo">251</span> * Create the log key for writing to somewhere.<a name="line.251"></a>
+<span class="sourceLineNo">252</span> * We maintain the tablename mainly for debugging purposes.<a name="line.252"></a>
+<span class="sourceLineNo">253</span> * A regionName is always a sub-table object.<a name="line.253"></a>
+<span class="sourceLineNo">254</span> *<a name="line.254"></a>
+<span class="sourceLineNo">255</span> * @param encodedRegionName Encoded name of the region as returned by<a name="line.255"></a>
+<span class="sourceLineNo">256</span> * <code>HRegionInfo#getEncodedNameAsBytes()</code>.<a name="line.256"></a>
+<span class="sourceLineNo">257</span> * @param tablename<a name="line.257"></a>
+<span class="sourceLineNo">258</span> * @param now Time at which this edit was written.<a name="line.258"></a>
+<span class="sourceLineNo">259</span> * @param clusterIds the clusters that have consumed the change(used in Replication)<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * @param nonceGroup the nonceGroup<a name="line.260"></a>
+<span class="sourceLineNo">261</span> * @param nonce the nonce<a name="line.261"></a>
+<span class="sourceLineNo">262</span> * @param mvcc mvcc control used to generate sequence numbers and control read/write points<a name="line.262"></a>
+<span class="sourceLineNo">263</span> * @param replicationScope the non-default replication scope of the column families<a name="line.263"></a>
+<span class="sourceLineNo">264</span> */<a name="line.264"></a>
+<span class="sourceLineNo">265</span> public WALKeyImpl(final byte[] encodedRegionName, final TableName tablename,<a name="line.265"></a>
+<span class="sourceLineNo">266</span> final long now, List<UUID> clusterIds, long nonceGroup,<a name="line.266"></a>
+<span class="sourceLineNo">267</span> final long nonce, final MultiVersionConcurrencyControl mvcc,<a name="line.267"></a>
+<span class="sourceLineNo">268</span> NavigableMap<byte[], Integer> replicationScope) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span> init(encodedRegionName, tablename, NO_SEQUENCE_ID, now, clusterIds, nonceGroup, nonce, mvcc,<a name="line.269"></a>
+<span class="sourceLineNo">270</span> replicationScope);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span> /**<a name="line.273"></a>
+<span class="sourceLineNo">274</span> * Create the log key for writing to somewhere.<a name="line.274"></a>
+<span class="sourceLineNo">275</span> * We maintain the tablename mainly for debugging purposes.<a name="line.275"></a>
+<span class="sourceLineNo">276</span> * A regionName is always a sub-table object.<a name="line.276"></a>
+<span class="sourceLineNo">277</span> *<a name="line.277"></a>
+<span class="sourceLineNo">278</span> * @param encodedRegionName Encoded name of the region as returned by<a name="line.278"></a>
+<span class="sourceLineNo">279</span> * <code>HRegionInfo#getEncodedNameAsBytes()</code>.<a name="line.279"></a>
+<span class="sourceLineNo">280</span> * @param tablename<a name="line.280"></a>
+<span class="sourceLineNo">281</span> * @param logSeqNum<a name="line.281"></a>
+<span class="sourceLineNo">282</span> * @param nonceGroup<a name="line.282"></a>
+<span class="sourceLineNo">283</span> * @param nonce<a name="line.283"></a>
+<span class="sourceLineNo">284</span> */<a name="line.284"></a>
+<span class="sourceLineNo">285</span> // TODO: Fix being able to pass in sequenceid.<a name="line.285"></a>
+<span class="sourceLineNo">286</span> public WALKeyImpl(final byte[] encodedRegionName,<a name="line.286"></a>
+<span class="sourceLineNo">287</span> final TableName tablename,<a name="line.287"></a>
+<span class="sourceLineNo">288</span> long logSeqNum,<a name="line.288"></a>
+<span class="sourceLineNo">289</span> long nonceGroup,<a name="line.289"></a>
+<span class="sourceLineNo">290</span> long nonce,<a name="line.290"></a>
+<span class="sourceLineNo">291</span> final MultiVersionConcurrencyControl mvcc) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span> init(encodedRegionName,<a name="line.292"></a>
+<span class="sourceLineNo">293</span> tablename,<a name="line.293"></a>
+<span class="sourceLineNo">294</span> logSeqNum,<a name="line.294"></a>
+<span class="sourceLineNo">295</span> EnvironmentEdgeManager.currentTime(),<a name="line.295"></a>
+<span class="sourceLineNo">296</span> EMPTY_UUIDS,<a name="line.296"></a>
+<span class="sourceLineNo">297</span> nonceGroup,<a name="line.297"></a>
+<span class="sourceLineNo">298</span> nonce,<a name="line.298"></a>
+<span class="sourceLineNo">299</span> mvcc, null);<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> @InterfaceAudience.Private<a name="line.302"></a>
+<span class="sourceLineNo">303</span> protected void init(final byte[] encodedRegionName,<a name="line.303"></a>
+<span class="sourceLineNo">304</span> final TableName tablename,<a name="line.304"></a>
+<span class="sourceLineNo">305</span> long logSeqNum,<a name="line.305"></a>
+<span class="sourceLineNo">306</span> final long now,<a name="line.306"></a>
+<span class="sourceLineNo">307</span> List<UUID> clusterIds,<a name="line.307"></a>
+<span class="sourceLineNo">308</span> long nonceGroup,<a name="line.308"></a>
+<span class="sourceLineNo">309</span> long nonce,<a name="line.309"></a>
+<span class="sourceLineNo">310</span> MultiVersionConcurrencyControl mvcc,<a name="line.310"></a>
+<span class="sourceLineNo">311</span> NavigableMap<byte[], Integer> replicationScope) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span> this.sequenceId = logSeqNum;<a name="line.312"></a>
+<span class="sourceLineNo">313</span> this.writeTime = now;<a name="line.313"></a>
+<span class="sourceLineNo">314</span> this.clusterIds = clusterIds;<a name="line.314"></a>
+<span class="sourceLineNo">315</span> this.encodedRegionName = encodedRegionName;<a name="line.315"></a>
+<span class="sourceLineNo">316</span> this.tablename = tablename;<a name="line.316"></a>
+<span class="sourceLineNo">317</span> this.nonceGroup = nonceGroup;<a name="line.317"></a>
+<span class="sourceLineNo">318</span> this.nonce = nonce;<a name="line.318"></a>
+<span class="sourceLineNo">319</span> this.mvcc = mvcc;<a name="line.319"></a>
+<span class="sourceLineNo">320</span> if (logSeqNum != NO_SEQUENCE_ID) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span> setSequenceId(logSeqNum);<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> this.replicationScope = replicationScope;<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> // For deserialization. DO NOT USE. See setWriteEntry below.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> @InterfaceAudience.Private<a name="line.327"></a>
+<span class="sourceLineNo">328</span> protected void setSequenceId(long sequenceId) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> this.sequenceId = sequenceId;<a name="line.329"></a>
+<span class="sourceLineNo">330</span> }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> /** @return encoded region name */<a name="line.332"></a>
+<span class="sourceLineNo">333</span> @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span> public byte [] getEncodedRegionName() {<a name="line.334"></a>
+<span class="sourceLineNo">335</span> return encodedRegionName;<a name="line.335"></a>
+<span class="sourceLineNo">336</span> }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> /** @return table name */<a name="line.338"></a>
+<span class="sourceLineNo">339</span> @Override<a name="line.339"></a>
+<span class="sourceLineNo">340</span> public TableName getTableName() {<a name="line.340"></a>
+<span class="sourceLineNo">341</span> return tablename;<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> /** @return log sequence number<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @deprecated Use {@link #getSequenceId()}<a name="line.345"></a>
+<span class="sourceLineNo">346</span> */<a name="line.346"></a>
+<span class="sourceLineNo">347</span> @Deprecated<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public long getLogSeqNum() {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> return getSequenceId();<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> /**<a name="line.352"></a>
+<span class="sourceLineNo">353</span> * Used to set original sequenceId for WALKeyImpl during WAL replay<a name="line.353"></a>
+<span class="sourceLineNo">354</span> */<a name="line.354"></a>
+<span class="sourceLineNo">355</span> public void setOrigLogSeqNum(final long sequenceId) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> this.origLogSeqNum = sequenceId;<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> /**<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * Return a positive long if current WALKeyImpl is created from a replay edit; a replay edit is an<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * edit that came in when replaying WALs of a crashed server.<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @return original sequence number of the WALEdit<a name="line.362"></a>
+<span class="sourceLineNo">363</span> */<a name="line.363"></a>
+<span class="sourceLineNo">364</span> @Override<a name="line.364"></a>
+<span class="sourceLineNo">365</span> public long getOrigLogSeqNum() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> return this.origLogSeqNum;<a name="line.366"></a>
<span class="sourceLineNo">367</span> }<a name="line.367"></a>
<span class="sourceLineNo">368</span><a name="line.368"></a>
<span class="sourceLineNo">369</span> /**<a name="line.369"></a>
-<span class="sourceLineNo">370</span> * Return a positive long if current WALKeyImpl is created from a replay edit; a replay edit is an<a name="line.370"></a>
-<span class="sourceLineNo">371</span> * edit that came in when replaying WALs of a crashed server.<a name="line.371"></a>
-<span class="sourceLineNo">372</span> * @return original sequence number of the WALEdit<a name="line.372"></a>
-<span class="sourceLineNo">373</span> */<a name="line.373"></a>
-<span class="sourceLineNo">374</span> @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span> public long getOrigLogSeqNum() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> return this.origLogSeqNum;<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> * SequenceId is only available post WAL-assign. Calls before this will get you a<a name="line.380"></a>
-<span class="sourceLineNo">381</span> * {@link SequenceId#NO_SEQUENCE_ID}. See the comment on FSHLog#append and #getWriteNumber in this<a name="line.381"></a>
-<span class="sourceLineNo">382</span> * method for more on when this sequenceId comes available.<a name="line.382"></a>
-<span class="sourceLineNo">383</span> * @return long the new assigned sequence number<a name="line.383"></a>
-<span class="sourceLineNo">384</span> */<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public long getSequenceId() {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> return this.sequenceId;<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> /**<a name="line.390"></a>
-<span class="sourceLineNo">391</span> * @return the write time<a name="line.391"></a>
-<span class="sourceLineNo">392</span> */<a name="line.392"></a>
+<span class="sourceLineNo">370</span> * SequenceId is only available post WAL-assign. Calls before this will get you a<a name="line.370"></a>
+<span class="sourceLineNo">371</span> * {@link SequenceId#NO_SEQUENCE_ID}. See the comment on FSHLog#append and #getWriteNumber in this<a name="line.371"></a>
+<span class="sourceLineNo">372</span> * method for more on when this sequenceId comes available.<a name="line.372"></a>
+<span class="sourceLineNo">373</span> * @return long the new assigned sequence number<a name="line.373"></a>
+<span class="sourceLineNo">374</span> */<a name="line.374"></a>
+<span class="sourceLineNo">375</span> @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span> public long getSequenceId() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span> return this.sequenceId;<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> * @return the write time<a name="line.381"></a>
+<span class="sourceLineNo">382</span> */<a name="line.382"></a>
+<span class="sourceLineNo">383</span> @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span> public long getWriteTime() {<a name="line.384"></a>
+<span class="sourceLineNo">385</span> return this.writeTime;<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span> public NavigableMap<byte[], Integer> getReplicationScopes() {<a name="line.388"></a>
+<span class="sourceLineNo">389</span> return replicationScope;<a name="line.389"></a>
+<span class="sourceLineNo">390</span> }<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> /** @return The nonce group */<a name="line.392"></a>
<span class="sourceLineNo">393</span> @Override<a name="line.393"></a>
-<span class="sourceLineNo">394</span> public long getWriteTime() {<a name="line.394"></a>
-<span class="sourceLineNo">395</span> return this.writeTime;<a name="line.395"></a>
+<span class="sourceLineNo">394</span> public long getNonceGroup() {<a name="line.394"></a>
+<span class="sourceLineNo">395</span> return nonceGroup;<a name="line.395"></a>
<span class="sourceLineNo">396</span> }<a name="line.396"></a>
<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span> public NavigableMap<byte[], Integer> getReplicationScopes() {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> return replicationScope;<a name="line.399"></a>
-<span class="sourceLineNo">400</span> }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> /** @return The nonce group */<a name="line.402"></a>
-<span class="sourceLineNo">403</span> @Override<a name="line.403"></a>
-<span class="sourceLineNo">404</span> public long getNonceGroup() {<a name="line.404"></a>
-<span class="sourceLineNo">405</span> return nonceGroup;<a name="line.405"></a>
+<span class="sourceLineNo">398</span> /** @return The nonce */<a name="line.398"></a>
+<span class="sourceLineNo">399</span> @Override<a name="line.399"></a>
+<span class="sourceLineNo">400</span> public long getNonce() {<a name="line.400"></a>
+<span class="sourceLineNo">401</span> return nonce;<a name="line.401"></a>
+<span class="sourceLineNo">402</span> }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span> private void setReplicationScope(NavigableMap<byte[], Integer> replicationScope) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span> this.replicationScope = replicationScope;<a name="line.405"></a>
<span class="sourceLineNo">406</span> }<a name="line.406"></a>
<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span> /** @return The nonce */<a name="line.408"></a>
-<span class="sourceLineNo">409</span> @Override<a name="line.409"></a>
-<span class="sourceLineNo">410</span> public long getNonce() {<a name="line.410"></a>
-<span class="sourceLineNo">411</span> return nonce;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span> private void setReplicationScope(NavigableMap<byte[], Integer> replicationScope) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span> this.replicationScope = replicationScope;<a name="line.415"></a>
-<span class="sourceLineNo">416</span> }<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span> public void clearReplicationScope() {<a name="line.418"></a>
-<span class="sourceLineNo">419</span> setReplicationScope(null);<a name="line.419"></a>
-<span class="sourceLineNo">420</span> }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span> /**<a name="line.422"></a>
-<span class="sourceLineNo">423</span> * Marks that the cluster with the given clusterId has consumed the change<a name="line.423"></a>
-<span class="sourceLineNo">424</span> */<a name="line.424"></a>
-<span class="sourceLineNo">425</span> public void addClusterId(UUID clusterId) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> if (!clusterIds.contains(clusterId)) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span> clusterIds.add(clusterId);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> /**<a name="line.431"></a>
-<span class="sourceLineNo">432</span> * @return the set of cluster Ids that have consumed the change<a name="line.432"></a>
-<span class="sourceLineNo">433</span> */<a name="line.433"></a>
-<span class="sourceLineNo">434</span> public List<UUID> getClusterIds() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span> return clusterIds;<a name="line.435"></a>
-<span class="sourceLineNo">436</span> }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span> /**<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return the cluster id on which the change has originated. It there is no such cluster, it<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * returns DEFAULT_CLUSTER_ID (cases where replication is not enabled)<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
+<span class="sourceLineNo">408</span> public void clearReplicationScope() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span> setReplicationScope(null);<a name="line.409"></a>
+<span class="sourceLineNo">410</span> }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span> /**<a name="line.412"></a>
+<span class="sourceLineNo">413</span> * Marks that the cluster with the given clusterId has consumed the change<a name="line.413"></a>
+<span class="sourceLineNo">414</span> */<a name="line.414"></a>
+<span class="sourceLineNo">415</span> public void addClusterId(UUID clusterId) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span> if (!clusterIds.contains(clusterId)) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span> clusterIds.add(clusterId);<a name="line.417"></a>
+<span class="sourceLineNo">418</span> }<a name="line.418"></a>
+<span class="sourceLineNo">419</span> }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span> /**<a name="line.421"></a>
+<span class="sourceLineNo">422</span> * @return the set of cluster Ids that have consumed the change<a name="line.422"></a>
+<span class="sourceLineNo">423</span> */<a name="line.423"></a>
+<span class="sourceLineNo">424</span> public List<UUID> getClusterIds() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span> return clusterIds;<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<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> * @return the cluster id on which the change has originated. It there is no such cluster, it<a name="line.429"></a>
+<span class="sourceLineNo">430</span> * returns DEFAULT_CLUSTER_ID (cases where replication is not enabled)<a name="line.430"></a>
+<span class="sourceLineNo">431</span> */<a name="line.431"></a>
+<span class="sourceLineNo">432</span> @Override<a name="line.432"></a>
+<span class="sourceLineNo">433</span> public UUID getOriginatingClusterId(){<a name="line.433"></a>
+<span class="sourceLineNo">434</span> return clusterIds.isEmpty()? HConstants.DEFAULT_CLUSTER_ID: clusterIds.get(0);<a name="line.434"></a>
+<span class="sourceLineNo">435</span> }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span> @Override<a name="line.437"></a>
+<span class="sourceLineNo">438</span> public String toString() {<a name="line.438"></a>
+<span class="sourceLineNo">439</span> return tablename + "/" + Bytes.toString(encodedRegionName) + "/" + sequenceId;<a name="line.439"></a>
+<span class="sourceLineNo">440</span> }<a name="line.440"></a>
+<span class="sourceLineNo">441</span><a name="line.441"></a>
<span class="sourceLineNo">442</span> @Override<a name="line.442"></a>
-<span class="sourceLineNo">443</span> public UUID getOriginatingClusterId(){<a name="line.443"></a>
-<span class="sourceLineNo">444</span> return clusterIds.isEmpty()? HConstants.DEFAULT_CLUSTER_ID: clusterIds.get(0);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> }<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span> @Override<a name="line.447"></a>
-<span class="sourceLineNo">448</span> public String toString() {<a name="line.448"></a>
-<span class="sourceLineNo">449</span> return tablename + "/" + Bytes.toString(encodedRegionName) + "/" + sequenceId;<a name="line.449"></a>
-<span class="sourceLineNo">450</span> }<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span> @Override<a name="line.452"></a>
-<span class="sourceLineNo">453</span> public boolean equals(Object obj) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> if (this == obj) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span> return true;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> }<a name="line.456"></a>
-<span class="sourceLineNo">457</span> if (obj == null || getClass() != obj.getClass()) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> return false;<a name="line.458"></a>
-<span class="sourceLineNo">459</span> }<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return compareTo((WALKey)obj) == 0;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span> public int hashCode() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> int result = Bytes.hashCode(this.encodedRegionName);<a name="line.465"></a>
-<span class="sourceLineNo">466</span> result = (int) (result ^ getSequenceId());<a name="line.466"></a>
-<span class="sourceLineNo">467</span> result = (int) (result ^ this.writeTime);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> return result;<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> @Override<a name="line.471"></a>
-<span class="sourceLineNo">472</span> public int compareTo(WALKey o) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> int result = Bytes.compareTo(this.encodedRegionName, o.getEncodedRegionName());<a name="line.473"></a>
-<span class="sourceLineNo">474</span> if (result == 0) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> long sid = getSequenceId();<a name="line.475"></a>
-<span class="sourceLineNo">476</span> long otherSid = o.getSequenceId();<a name="line.476"></a>
-<span class="sourceLineNo">477</span> if (sid < otherSid) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span> result = -1;<a name="line.478"></a>
-<span class="sourceLineNo">479</span> } else if (sid > otherSid) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span> result = 1;<a name="line.480"></a>
-<span class="sourceLineNo">481</span> }<a name="line.481"></a>
-<span class="sourceLineNo">482</span> if (result == 0) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> if (this.writeTime < o.getWriteTime()) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> result = -1;<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } else if (this.writeTime > o.getWriteTime()) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> return 1;<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span> }<a name="line.488"></a>
-<span class="sourceLineNo">489</span> }<a name="line.489"></a>
-<span class="sourceLineNo">490</span> // why isn't cluster id accounted for?<a name="line.490"></a>
-<span class="sourceLineNo">491</span> return result;<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span> /**<a name="line.494"></a>
-<span class="sourceLineNo">495</span> * Drop this instance's tablename byte array and instead<a name="line.495"></a>
-<span class="sourceLineNo">496</span> * hold a reference to the provided tablename. This is not<a name="line.496"></a>
-<span class="sourceLineNo">497</span> * meant to be a general purpose setter - it's only used<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * to collapse references to conserve memory.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> void internTableName(TableName tablename) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span> // We should not use this as a setter - only to swap<a name="line.501"></a>
-<span class="sourceLineNo">502</span> // in a new reference to the same table name.<a name="line.502"></a>
-<span class="sourceLineNo">503</span> assert tablename.equals(this.tablename);<a name="line.503"></a>
-<span class="sourceLineNo">504</span> this.tablename = tablename;<a name="line.504"></a>
-<span class="sourceLineNo">505</span> }<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span> /**<a name="line.507"></a>
-<span class="sourceLineNo">508</span> * Drop this instance's region name byte array and instead<a name="line.508"></a>
-<span class="sourceLineNo">509</span> * hold a reference to the provided region name. This is not<a name="line.509"></a>
-<span class="sourceLineNo">510</span> * meant to be a general purpose setter - it's only used<a name="line.510"></a>
-<span class="sourceLineNo">511</span> * to collapse references to conserve memory.<a name="line.511"></a>
-<span class="sourceLineNo">512</span> */<a name="line.512"></a>
-<span class="sourceLineNo">513</span> void internEncodedRegionName(byte []encodedRegionName) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> // We should not use this as a setter - only to swap<a name="line.514"></a>
-<span class="sourceLineNo">515</span> // in a new reference to the same table name.<a name="line.515"></a>
-<span class="sourceLineNo">516</span> assert Bytes.equals(this.encodedRegionName, encodedRegionName);<a name="line.516"></a>
-<span class="sourceLineNo">517</span> this.encodedRegionName = encodedRegionName;<a name="line.517"></a>
-<span class="sourceLineNo">518</span> }<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span> public WALProtos.WALKey.Builder getBuilder(<a name="line.520"></a>
-<span class="sourceLineNo">521</span> WALCellCodec.ByteStringCompressor compressor) throws IOException {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> WALProtos.WALKey.Builder builder = WALProtos.WALKey.newBuilder();<a name="line.522"></a>
-<span class="sourceLineNo">523</span> if (compressionContext == null) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> builder.setEncodedRegionName(UnsafeByteOperations.unsafeWrap(this.encodedRegionName));<a name="line.524"></a>
-<span class="sourceLineNo">525</span> builder.setTableName(UnsafeByteOperations.unsafeWrap(this.tablename.getName()));<a name="line.525"></a>
-<span class="sourceLineNo">526</span> } else {<a name="line.526"></a>
-<span class="sourceLineNo">527</span> builder.setEncodedRegionName(compressor.compress(this.encodedRegionName,<a name="line.527"></a>
-<span class="sourceLineNo">528</span> compressionContext.regionDict));<a name="line.528"></a>
-<span class="sourceLineNo">529</span> builder.setTableName(compressor.compress(this.tablename.getName(),<a name="line.529"></a>
-<span class="sourceLineNo">530</span> compressionContext.tableDict));<a name="line.530"></a>
-<span class="sourceLineNo">531</span> }<a name="line.531"></a>
-<span class="sourceLineNo">532</span> builder.setLogSequenceNumber(getSequenceId());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> builder.setWriteTime(writeTime);<a name="line.533"></a>
-<span class="sourceLineNo">534</span> if (this.origLogSeqNum > 0) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> builder.setOrigSequenceNumber(this.origLogSeqNum);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> }<a name="line.536"></a>
-<span class="sourceLineNo">537</span> if (this.nonce != HConstants.NO_NONCE) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span> builder.setNonce(nonce);<a name="line.538"></a>
-<span class="sourceLineNo">539</span> }<a name="line.539"></a>
-<span class="sourceLineNo">540</span> if (this.nonceGroup != HConstants.NO_NONCE) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span> builder.setNonceGroup(nonceGroup);<a name="line.541"></a>
-<span class="sourceLineNo">542</span> }<a name="line.542"></a>
-<span class="sourceLineNo">543</span> HBaseProtos.UUID.Builder uuidBuilder = HBaseProtos.UUID.newBuilder();<a name="line.543"></a>
-<span class="sourceLineNo">544</span> for (UUID clusterId : clusterIds) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span> uuidBuilder.setLeastSigBits(clusterId.getLeastSignificantBits());<a name="line.545"></a>
-<span class="sourceLineNo">546</span> uuidBuilder.setMostSigBits(clusterId.getMostSignificantBits());<a name="line.546"></a>
-<span class="sourceLineNo">547</span> builder.addClusterIds(uuidBuilder.build());<a name="line.547"></a>
-<span class="sourceLineNo">548</span> }<a name="line.548"></a>
-<span class="sourceLineNo">549</span> if (replicationScope != null) {<a name="line.549"></a>
-<span class="sourceLineNo">550</span> for (Map.Entry<byte[], Integer> e : replicationScope.entrySet()) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span> ByteString family = (compressionContext == null)<a name="line.551"></a>
-<span class="sourceLineNo">552</span> ? UnsafeByteOperations.unsafeWrap(e.getKey())<a name="line.552"></a>
-<span class="sourceLineNo">553</span> : compressor.compress(e.getKey(), compressionContext.familyDict);<a name="line.553"><
<TRUNCATED>
[46/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html
index 96d3860..bddfe7e 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.550">BackupCommands.DeleteCommand</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.553">BackupCommands.DeleteCommand</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></pre>
</li>
</ul>
@@ -181,14 +181,26 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#convertToBackupIds-java.util.List-">convertToBackupIds</a></span>(<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><<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>> history)</code> </td>
+</tr>
+<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#execute--">execute</a></span>()</code> </td>
</tr>
-<tr id="i1" class="rowColor">
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#executeDeleteListOfBackups-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">executeDeleteListOfBackups</a></span>(org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)</code> </td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#executeDeleteOlderThan-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">executeDeleteOlderThan</a></span>(org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)</code> </td>
+</tr>
+<tr id="i4" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#printUsage--">printUsage</a></span>()</code> </td>
</tr>
-<tr id="i2" class="altColor">
+<tr id="i5" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#requiresNoActiveSession--">requiresNoActiveSession</a></span>()</code>
<div class="block">The command can't be run if active backup session is in progress</div>
@@ -236,7 +248,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>DeleteCommand</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#line.551">DeleteCommand</a>(org.apache.hadoop.conf.Configuration conf,
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#line.554">DeleteCommand</a>(org.apache.hadoop.conf.Configuration conf,
org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)</pre>
</li>
</ul>
@@ -254,7 +266,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>requiresNoActiveSession</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#line.557">requiresNoActiveSession</a>()</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#line.560">requiresNoActiveSession</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#requiresNoActiveSession--">BackupCommands.Command</a></code></span></div>
<div class="block">The command can't be run if active backup session is in progress</div>
<dl>
@@ -271,7 +283,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#line.562">execute</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#line.565">execute</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -281,13 +293,50 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
</dl>
</li>
</ul>
+<a name="executeDeleteOlderThan-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>executeDeleteOlderThan</h4>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#line.584">executeDeleteOlderThan</a>(org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="convertToBackupIds-java.util.List-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>convertToBackupIds</h4>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#line.616">convertToBackupIds</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><<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>> history)</pre>
+</li>
+</ul>
+<a name="executeDeleteListOfBackups-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>executeDeleteListOfBackups</h4>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#line.624">executeDeleteListOfBackups</a>(org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
<a name="printUsage--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>printUsage</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#line.584">printUsage</a>()</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#line.640">printUsage</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#printUsage--">printUsage</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html
index dcfda4e..c150e20 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.457">BackupCommands.DescribeCommand</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.460">BackupCommands.DescribeCommand</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></pre>
</li>
</ul>
@@ -230,7 +230,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>DescribeCommand</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html#line.458">DescribeCommand</a>(org.apache.hadoop.conf.Configuration conf,
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html#line.461">DescribeCommand</a>(org.apache.hadoop.conf.Configuration conf,
org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)</pre>
</li>
</ul>
@@ -248,7 +248,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html#line.464">execute</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html#line.467">execute</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -264,7 +264,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>printUsage</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html#line.490">printUsage</a>()</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DescribeCommand.html#line.493">printUsage</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#printUsage--">printUsage</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html
index 769fc54..6026c94 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.406">BackupCommands.HelpCommand</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.409">BackupCommands.HelpCommand</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></pre>
</li>
</ul>
@@ -230,7 +230,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>HelpCommand</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html#line.407">HelpCommand</a>(org.apache.hadoop.conf.Configuration conf,
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html#line.410">HelpCommand</a>(org.apache.hadoop.conf.Configuration conf,
org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)</pre>
</li>
</ul>
@@ -248,7 +248,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html#line.413">execute</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html#line.416">execute</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -264,7 +264,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>printUsage</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html#line.452">printUsage</a>()</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html#line.455">printUsage</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#printUsage--">printUsage</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html
index 89762c6..e2d4019 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.778">BackupCommands.HistoryCommand</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.845">BackupCommands.HistoryCommand</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></pre>
</li>
</ul>
@@ -257,7 +257,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>DEFAULT_HISTORY_LENGTH</h4>
-<pre>private static final int <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.779">DEFAULT_HISTORY_LENGTH</a></pre>
+<pre>private static final int <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.846">DEFAULT_HISTORY_LENGTH</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.HistoryCommand.DEFAULT_HISTORY_LENGTH">Constant Field Values</a></dd>
@@ -278,7 +278,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>HistoryCommand</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.781">HistoryCommand</a>(org.apache.hadoop.conf.Configuration conf,
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.848">HistoryCommand</a>(org.apache.hadoop.conf.Configuration conf,
org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)</pre>
</li>
</ul>
@@ -296,7 +296,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.787">execute</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.854">execute</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -312,7 +312,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>getBackupRootPath</h4>
-<pre>private org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.831">getBackupRootPath</a>()
+<pre>private org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.898">getBackupRootPath</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -326,7 +326,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>getTableName</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.848">getTableName</a>()
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.915">getTableName</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -340,7 +340,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>getTableSetName</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.864">getTableSetName</a>()</pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.931">getTableSetName</a>()</pre>
</li>
</ul>
<a name="parseHistoryLength--">
@@ -349,7 +349,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>parseHistoryLength</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.868">parseHistoryLength</a>()
+<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.935">parseHistoryLength</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -363,7 +363,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>printUsage</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.884">printUsage</a>()</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html#line.951">printUsage</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#printUsage--">printUsage</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html
index 05d7bdd..a5fc236 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.729">BackupCommands.MergeCommand</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.796">BackupCommands.MergeCommand</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></pre>
</li>
</ul>
@@ -243,7 +243,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>MergeCommand</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html#line.730">MergeCommand</a>(org.apache.hadoop.conf.Configuration conf,
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html#line.797">MergeCommand</a>(org.apache.hadoop.conf.Configuration conf,
org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)</pre>
</li>
</ul>
@@ -261,7 +261,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>requiresNoActiveSession</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html#line.736">requiresNoActiveSession</a>()</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html#line.803">requiresNoActiveSession</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#requiresNoActiveSession--">BackupCommands.Command</a></code></span></div>
<div class="block">The command can't be run if active backup session is in progress</div>
<dl>
@@ -278,7 +278,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>requiresConsistentState</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html#line.741">requiresConsistentState</a>()</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html#line.808">requiresConsistentState</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#requiresConsistentState--">BackupCommands.Command</a></code></span></div>
<div class="block">Command requires consistent state of a backup system Backup system may become inconsistent
because of an abnormal termination of a backup session or delete command</div>
@@ -296,7 +296,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html#line.746">execute</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html#line.813">execute</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -312,7 +312,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>printUsage</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html#line.773">printUsage</a>()</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html#line.840">printUsage</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#printUsage--">printUsage</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html
index 5c0b7b9..7da9937 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.495">BackupCommands.ProgressCommand</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.498">BackupCommands.ProgressCommand</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></pre>
</li>
</ul>
@@ -230,7 +230,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>ProgressCommand</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html#line.496">ProgressCommand</a>(org.apache.hadoop.conf.Configuration conf,
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html#line.499">ProgressCommand</a>(org.apache.hadoop.conf.Configuration conf,
org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)</pre>
</li>
</ul>
@@ -248,7 +248,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html#line.502">execute</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html#line.505">execute</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -264,7 +264,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>printUsage</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html#line.545">printUsage</a>()</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.ProgressCommand.html#line.548">printUsage</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#printUsage--">printUsage</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html
index a9c57a6..f7ab7e9 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.589">BackupCommands.RepairCommand</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.656">BackupCommands.RepairCommand</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></pre>
</li>
</ul>
@@ -246,7 +246,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>RepairCommand</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html#line.590">RepairCommand</a>(org.apache.hadoop.conf.Configuration conf,
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html#line.657">RepairCommand</a>(org.apache.hadoop.conf.Configuration conf,
org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)</pre>
</li>
</ul>
@@ -264,7 +264,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html#line.596">execute</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html#line.663">execute</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -280,7 +280,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>repairFailedBackupDeletionIfAny</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html#line.643">repairFailedBackupDeletionIfAny</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> conn,
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html#line.710">repairFailedBackupDeletionIfAny</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> conn,
<a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupSystemTable</a> sysTable)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
@@ -295,7 +295,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>repairFailedBackupMergeIfAny</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html#line.664">repairFailedBackupMergeIfAny</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> conn,
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html#line.731">repairFailedBackupMergeIfAny</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> conn,
<a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupSystemTable</a> sysTable)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
@@ -310,7 +310,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockList">
<li class="blockList">
<h4>checkRemoveBackupImages</h4>
-<pre>private static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html#line.705">checkRemoveBackupImages</a>(org.apache.hadoop.fs.FileSystem fs,
+<pre>private static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html#line.772">checkRemoveBackupImages</a>(org.apache.hadoop.fs.FileSystem fs,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> backupRoot,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] backupIds)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -326,7 +326,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCom
<ul class="blockListLast">
<li class="blockList">
<h4>printUsage</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html#line.724">printUsage</a>()</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.RepairCommand.html#line.791">printUsage</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html#printUsage--">printUsage</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.html b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.html
index 6a5680e..b8b97a0 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/impl/BackupCommands.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.74">BackupCommands</a>
+public final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.78">BackupCommands</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">General backup commands, options and usage messages</div>
</li>
@@ -314,7 +314,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>INCORRECT_USAGE</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.75">INCORRECT_USAGE</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.79">INCORRECT_USAGE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.INCORRECT_USAGE">Constant Field Values</a></dd>
@@ -327,7 +327,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>TOP_LEVEL_NOT_ALLOWED</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.77">TOP_LEVEL_NOT_ALLOWED</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.81">TOP_LEVEL_NOT_ALLOWED</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.TOP_LEVEL_NOT_ALLOWED">Constant Field Values</a></dd>
@@ -340,7 +340,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>USAGE</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.80">USAGE</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.84">USAGE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.USAGE">Constant Field Values</a></dd>
@@ -353,7 +353,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>CREATE_CMD_USAGE</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.91">CREATE_CMD_USAGE</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.95">CREATE_CMD_USAGE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.CREATE_CMD_USAGE">Constant Field Values</a></dd>
@@ -366,7 +366,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>PROGRESS_CMD_USAGE</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.97">PROGRESS_CMD_USAGE</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.101">PROGRESS_CMD_USAGE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.PROGRESS_CMD_USAGE">Constant Field Values</a></dd>
@@ -379,7 +379,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>NO_INFO_FOUND</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.100">NO_INFO_FOUND</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.104">NO_INFO_FOUND</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.NO_INFO_FOUND">Constant Field Values</a></dd>
@@ -392,7 +392,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>NO_ACTIVE_SESSION_FOUND</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.101">NO_ACTIVE_SESSION_FOUND</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.105">NO_ACTIVE_SESSION_FOUND</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.NO_ACTIVE_SESSION_FOUND">Constant Field Values</a></dd>
@@ -405,7 +405,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>DESCRIBE_CMD_USAGE</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.103">DESCRIBE_CMD_USAGE</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.107">DESCRIBE_CMD_USAGE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.DESCRIBE_CMD_USAGE">Constant Field Values</a></dd>
@@ -418,7 +418,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>HISTORY_CMD_USAGE</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.106">HISTORY_CMD_USAGE</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.110">HISTORY_CMD_USAGE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.HISTORY_CMD_USAGE">Constant Field Values</a></dd>
@@ -431,7 +431,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>DELETE_CMD_USAGE</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.108">DELETE_CMD_USAGE</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.112">DELETE_CMD_USAGE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.DELETE_CMD_USAGE">Constant Field Values</a></dd>
@@ -444,7 +444,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>REPAIR_CMD_USAGE</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.111">REPAIR_CMD_USAGE</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.114">REPAIR_CMD_USAGE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.REPAIR_CMD_USAGE">Constant Field Values</a></dd>
@@ -457,7 +457,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>SET_CMD_USAGE</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.113">SET_CMD_USAGE</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.116">SET_CMD_USAGE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.SET_CMD_USAGE">Constant Field Values</a></dd>
@@ -470,7 +470,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>MERGE_CMD_USAGE</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.120">MERGE_CMD_USAGE</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.123">MERGE_CMD_USAGE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.MERGE_CMD_USAGE">Constant Field Values</a></dd>
@@ -483,7 +483,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>USAGE_FOOTER</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.123">USAGE_FOOTER</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.126">USAGE_FOOTER</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.impl.BackupCommands.USAGE_FOOTER">Constant Field Values</a></dd>
@@ -504,7 +504,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>BackupCommands</h4>
-<pre>private <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.205">BackupCommands</a>()</pre>
+<pre>private <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.208">BackupCommands</a>()</pre>
</li>
</ul>
</li>
@@ -521,7 +521,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>createCommand</h4>
-<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.209">createCommand</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.Command</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.212">createCommand</a>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup">BackupRestoreConstants.BackupCommand</a> type,
org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmdline)</pre>
</li>
@@ -532,7 +532,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>numOfArgs</h4>
-<pre>static int <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.244">numOfArgs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)</pre>
+<pre>static int <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html#line.247">numOfArgs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index ffd12ac..d0d625a 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,9 +167,9 @@
<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><E> (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><T>, 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.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
index d9169d1..97d7f19 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
@@ -3200,7 +3200,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
</td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo></code></td>
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></code></td>
<td class="colLast"><span class="typeNameLabel">RegionServerTracker.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#regionServers">regionServers</a></span></code> </td>
</tr>
<tr class="altColor">
@@ -3364,39 +3364,37 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
</tr>
<tr class="altColor">
<td class="colFirst"><code><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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></code></td>
-<td class="colLast"><span class="typeNameLabel">RegionServerTracker.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#getOnlineServers--">getOnlineServers</a></span>()</code>
-<div class="block">Gets the online servers.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></code></td>
<td class="colLast"><span class="typeNameLabel">ServerManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getOnlineServersList--">getOnlineServersList</a></span>()</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></code></td>
<td class="colLast"><span class="typeNameLabel">ServerManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getOnlineServersListWithPredicator-java.util.List-java.util.function.Predicate-">getOnlineServersListWithPredicator</a></span>(<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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> keys,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html?is-external=true" title="class or interface in java.util.function">Predicate</a><<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a>> idleServerPredicator)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><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><<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><<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>>></code></td>
<td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getPrimaryToRegionInfoMap--">getPrimaryToRegionInfoMap</a></span>()</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><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><<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><<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>>></code></td>
<td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getRegionServerToRegionMap--">getRegionServerToRegionMap</a></span>()</code>
<div class="block">Get regionserver to region map</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><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><<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></code></td>
<td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getRegionToRegionServerMap--">getRegionToRegionServerMap</a></span>()</code>
<div class="block">Get region to region server map</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><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><<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><<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>>></code></td>
<td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getSecondaryToRegionInfoMap--">getSecondaryToRegionInfoMap</a></span>()</code> </td>
</tr>
+<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><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo></code></td>
+<td class="colLast"><span class="typeNameLabel">RegionServerTracker.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#getServerInfo-java.lang.String-">getServerInfo</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</code> </td>
+</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></code></td>
<td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableRegionForRow-org.apache.hadoop.hbase.TableName-byte:A-">getTableRegionForRow</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
@@ -3533,20 +3531,20 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
<td class="colLast"><span class="typeNameLabel">DeadServer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/DeadServer.html#finish-org.apache.hadoop.hbase.ServerName-">finish</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</code> </td>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><span class="typeNameLabel">ServerManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getInfoPort-org.apache.hadoop.hbase.ServerName-">getInfoPort</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a></code></td>
<td class="colLast"><span class="typeNameLabel">ServerManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#getLoad-org.apache.hadoop.hbase.ServerName-">getLoad</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><span class="typeNameLabel">RackManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RackManager.html#getRack-org.apache.hadoop.hbase.ServerName-">getRack</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server)</code>
<div class="block">Get the name of the rack containing a server, according to the DNS to
switch mapping.</div>
</td>
</tr>
-<tr class="altColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo</code></td>
-<td class="colLast"><span class="typeNameLabel">RegionServerTracker.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#getRegionServerInfo-org.apache.hadoop.hbase.ServerName-">getRegionServerInfo</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</code> </td>
-</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionServerInfoPort-org.apache.hadoop.hbase.ServerName-">getRegionServerInfoPort</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</code> </td>
@@ -3724,58 +3722,54 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">RegionServerTracker.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#remove-org.apache.hadoop.hbase.ServerName-">remove</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</code> </td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">DrainingServerTracker.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/DrainingServerTracker.html#remove-org.apache.hadoop.hbase.ServerName-">remove</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">DeadServer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/DeadServer.html#removeDeadServer-org.apache.hadoop.hbase.ServerName-">removeDeadServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> deadServerName)</code>
<div class="block">remove the specified dead server</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">ServerManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#removeServerFromDrainList-org.apache.hadoop.hbase.ServerName-">removeServerFromDrainList</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">ServerManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#sendRegionWarmup-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.RegionInfo-">sendRegionWarmup</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server,
<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region)</code>
<div class="block">Sends a WARMUP RPC to the specified server to warmup the specified region.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>default void</code></td>
<td class="colLast"><span class="typeNameLabel">ServerListener.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html#serverAdded-org.apache.hadoop.hbase.ServerName-">serverAdded</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
<div class="block">The server has joined the cluster.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>default void</code></td>
<td class="colLast"><span class="typeNameLabel">ServerListener.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html#serverRemoved-org.apache.hadoop.hbase.ServerName-">serverRemoved</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
<div class="block">The server was removed from the cluster.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">RegionPlan.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionPlan.html#setDestination-org.apache.hadoop.hbase.ServerName-">setDestination</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> dest)</code>
<div class="block">Set the destination server for the plan for this region.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">MasterWalManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html#splitLog-org.apache.hadoop.hbase.ServerName-">splitLog</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">MasterWalManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html#splitMetaLog-org.apache.hadoop.hbase.ServerName-">splitMetaLog</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
<div class="block">Specialized method to handle the splitting for meta WAL</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">ServerManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#updateLastFlushedSequenceIds-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.ServerMetrics-">updateLastFlushedSequenceIds</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn,
<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a> hsl)</code>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/client/VersionInfoUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/VersionInfoUtil.html b/devapidocs/org/apache/hadoop/hbase/client/VersionInfoUtil.html
index b4ed106..ca3e995 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/VersionInfoUtil.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/VersionInfoUtil.html
@@ -179,7 +179,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</td>
</tr>
<tr id="i5" class="rowColor">
-<td class="colFirst"><code>private static int</code></td>
+<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/VersionInfoUtil.html#getVersionNumber-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.VersionInfo-">getVersionNumber</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.VersionInfo versionInfo)</code>
<div class="block">Pack the full number version in a int.</div>
</td>
@@ -303,7 +303,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getVersionNumber</h4>
-<pre>private static int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/VersionInfoUtil.html#line.105">getVersionNumber</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.VersionInfo versionInfo)</pre>
+<pre>public static int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/VersionInfoUtil.html#line.105">getVersionNumber</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.VersionInfo versionInfo)</pre>
<div class="block">Pack the full number version in a int. by shifting each component by 8bit,
except the dot release which has 12bit.
Examples: (1.3.4 is 0x0103004, 2.1.0 is 0x0201000)</div>
[38/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/CompressionContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/CompressionContext.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/CompressionContext.html
index 542438d..f837340 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/CompressionContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/CompressionContext.html
@@ -86,10 +86,6 @@
<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver.wal">org.apache.hadoop.hbase.regionserver.wal</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.wal">org.apache.hadoop.hbase.wal</a></td>
-<td class="colLast"> </td>
-</tr>
</tbody>
</table>
</li>
@@ -119,6 +115,14 @@
<td class="colLast"><span class="typeNameLabel">WALCellCodec.CompressedKvDecoder.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#compression">compression</a></span></code> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code>(package private) <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALCellCodec.StatelessUncompressor.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#compressionContext">compressionContext</a></span></code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALCellCodec.BaosAndCompressor.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#compressionContext">compressionContext</a></span></code> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></code></td>
<td class="colLast"><span class="typeNameLabel">ReaderBase.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#compressionContext">compressionContext</a></span></code>
<div class="block">Compression context to use reading.</div>
@@ -174,17 +178,23 @@
</tr>
<tbody>
<tr class="altColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#BaosAndCompressor-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">BaosAndCompressor</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compressionContext)</code> </td>
+</tr>
+<tr class="rowColor">
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#CompressedKvDecoder-java.io.InputStream-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">CompressedKvDecoder</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a> in,
<a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compression)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html#CompressedKvEncoder-java.io.OutputStream-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">CompressedKvEncoder</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> out,
<a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compression)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.html#SecureWALCellCodec-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">SecureWALCellCodec</a></span>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compression)</code> </td>
</tr>
+<tr class="altColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#StatelessUncompressor-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">StatelessUncompressor</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compressionContext)</code> </td>
+</tr>
<tr class="rowColor">
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#WALCellCodec-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">WALCellCodec</a></span>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compression)</code>
@@ -195,43 +205,6 @@
</tbody>
</table>
</li>
-<li class="blockList"><a name="org.apache.hadoop.hbase.wal">
-<!-- -->
-</a>
-<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> in <a href="../../../../../../../org/apache/hadoop/hbase/wal/package-summary.html">org.apache.hadoop.hbase.wal</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
-<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/wal/package-summary.html">org.apache.hadoop.hbase.wal</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></code></td>
-<td class="colLast"><span class="typeNameLabel">WALKeyImpl.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#compressionContext">compressionContext</a></span></code> </td>
-</tr>
-</tbody>
-</table>
-<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/wal/package-summary.html">org.apache.hadoop.hbase.wal</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></span><span class="tabEnd"> </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>void</code></td>
-<td class="colLast"><span class="typeNameLabel">WALKeyImpl.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html#setCompressionContext-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">setCompressionContext</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compressionContext)</code> </td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">WAL.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html#setCompressionContext-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">setCompressionContext</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compressionContext)</code>
-<div class="block">Set compression context for this entry.</div>
-</td>
-</tr>
-</tbody>
-</table>
-</li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringCompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringCompressor.html
index fbd2cf4..d48d069 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringCompressor.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringCompressor.html
@@ -110,6 +110,10 @@
<td class="colFirst"><code>(package private) static class </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.BaosAndCompressor</a></span></code> </td>
</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneCompressor</a></span></code> </td>
+</tr>
</tbody>
</table>
<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
@@ -136,6 +140,10 @@
<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a></code></td>
<td class="colLast"><span class="typeNameLabel">WALCellCodec.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getByteStringCompressor--">getByteStringCompressor</a></span>()</code> </td>
</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALCellCodec.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getNoneCompressor--">getNoneCompressor</a></span>()</code> </td>
+</tr>
</tbody>
</table>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringUncompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringUncompressor.html
index a8c113e..6534731 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringUncompressor.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringUncompressor.html
@@ -99,6 +99,23 @@
<!-- -->
</a>
<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a> in <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a></h3>
+<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/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a> that implement <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) static class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneUncompressor</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.StatelessUncompressor</a></span></code> </td>
+</tr>
+</tbody>
+</table>
<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></span><span class="tabEnd"> </span></caption>
<tr>
@@ -110,10 +127,6 @@
<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></code></td>
<td class="colLast"><span class="typeNameLabel">ProtobufLogReader.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html#byteStringUncompressor">byteStringUncompressor</a></span></code> </td>
</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></code></td>
-<td class="colLast"><span class="typeNameLabel">WALCellCodec.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#statelessUncompressor">statelessUncompressor</a></span></code> </td>
-</tr>
</tbody>
</table>
<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
@@ -127,6 +140,10 @@
<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></code></td>
<td class="colLast"><span class="typeNameLabel">WALCellCodec.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getByteStringUncompressor--">getByteStringUncompressor</a></span>()</code> </td>
</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALCellCodec.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getNoneUncompressor--">getNoneUncompressor</a></span>()</code> </td>
+</tr>
</tbody>
</table>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.NoneCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.NoneCompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.NoneCompressor.html
new file mode 100644
index 0000000..735d68a
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.NoneCompressor.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.NoneCompressor (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.NoneCompressor (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.NoneCompressor.html" target="_top">Frames</a></li>
+<li><a href="WALCellCodec.NoneCompressor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.NoneCompressor" class="title">Uses of Class<br>org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.NoneCompressor</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.NoneCompressor</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.NoneCompressor.html" target="_top">Frames</a></li>
+<li><a href="WALCellCodec.NoneCompressor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.NoneUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.NoneUncompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.NoneUncompressor.html
new file mode 100644
index 0000000..03b3a82
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.NoneUncompressor.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.NoneUncompressor (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.NoneUncompressor (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.NoneUncompressor.html" target="_top">Frames</a></li>
+<li><a href="WALCellCodec.NoneUncompressor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.NoneUncompressor" class="title">Uses of Class<br>org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.NoneUncompressor</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.NoneUncompressor</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.NoneUncompressor.html" target="_top">Frames</a></li>
+<li><a href="WALCellCodec.NoneUncompressor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.StatelessUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.StatelessUncompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.StatelessUncompressor.html
new file mode 100644
index 0000000..a57d4fa
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.StatelessUncompressor.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.StatelessUncompressor (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.StatelessUncompressor (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.StatelessUncompressor.html" target="_top">Frames</a></li>
+<li><a href="WALCellCodec.StatelessUncompressor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.StatelessUncompressor" class="title">Uses of Class<br>org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.StatelessUncompressor</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.StatelessUncompressor</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.StatelessUncompressor.html" target="_top">Frames</a></li>
+<li><a href="WALCellCodec.StatelessUncompressor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-frame.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-frame.html
index a236428..98b8b55 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-frame.html
@@ -52,12 +52,16 @@
<li><a href="WALCellCodec.CompressedKvDecoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCellCodec.CompressedKvDecoder</a></li>
<li><a href="WALCellCodec.CompressedKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCellCodec.CompressedKvEncoder</a></li>
<li><a href="WALCellCodec.EnsureKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCellCodec.EnsureKvEncoder</a></li>
+<li><a href="WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCellCodec.NoneCompressor</a></li>
+<li><a href="WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCellCodec.NoneUncompressor</a></li>
+<li><a href="WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCellCodec.StatelessUncompressor</a></li>
<li><a href="WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCoprocessorHost</a></li>
<li><a href="WALCoprocessorHost.WALEnvironment.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCoprocessorHost.WALEnvironment</a></li>
<li><a href="WALUtil.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALUtil</a></li>
</ul>
<h2 title="Enums">Enums</h2>
<ul title="Enums">
+<li><a href="CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">CompressionContext.DictionaryIndex</a></li>
<li><a href="ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">ProtobufLogReader.WALHdrResult</a></li>
<li><a href="RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">RingBufferTruck.Type</a></li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-summary.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-summary.html
index 26bc0b9..0c3b9df 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-summary.html
@@ -282,19 +282,31 @@
<td class="colLast"> </td>
</tr>
<tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneCompressor</a></td>
+<td class="colLast"> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneUncompressor</a></td>
+<td class="colLast"> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.StatelessUncompressor</a></td>
+<td class="colLast"> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost</a></td>
<td class="colLast">
<div class="block">Implements the coprocessor environment and runtime support for coprocessors
loaded within a <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal"><code>WAL</code></a>.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.WALEnvironment.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost.WALEnvironment</a></td>
<td class="colLast">
<div class="block">Encapsulation of the environment of each coprocessor</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALUtil.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALUtil</a></td>
<td class="colLast">
<div class="block">Helper methods to ease Region Server integration with the Write Ahead Log (WAL).</div>
@@ -312,10 +324,14 @@
</tr>
<tbody>
<tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">ProtobufLogReader.WALHdrResult</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a></td>
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">ProtobufLogReader.WALHdrResult</a></td>
+<td class="colLast"> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">RingBufferTruck.Type</a></td>
<td class="colLast"> </td>
</tr>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index a4ab1b7..78e6261 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -217,6 +217,9 @@
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">SecureWALCellCodec</span></a></li>
</ul>
</li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALCellCodec.NoneCompressor</span></a> (implements org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALCellCodec.NoneUncompressor</span></a> (implements org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALCellCodec.StatelessUncompressor</span></a> (implements org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a>)</li>
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALUtil.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALUtil</span></a></li>
</ul>
</li>
@@ -238,8 +241,9 @@
<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><E> (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><T>, 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.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-use.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-use.html
index 56106bd..66bd61e 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-use.html
@@ -174,102 +174,105 @@
</td>
</tr>
<tr class="rowColor">
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/CompressionContext.DictionaryIndex.html#org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a> </td>
+</tr>
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/FailedLogCloseException.html#org.apache.hadoop.hbase.regionserver.wal">FailedLogCloseException</a>
<div class="block">Thrown when we fail close of the write-ahead-log file.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/FailedSyncBeforeLogCloseException.html#org.apache.hadoop.hbase.regionserver.wal">FailedSyncBeforeLogCloseException</a>
<div class="block">Thrown when we fail close of the write-ahead-log file.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/FSHLog.RingBufferEventHandler.html#org.apache.hadoop.hbase.regionserver.wal">FSHLog.RingBufferEventHandler</a>
<div class="block">Handler that is run by the disruptor ringbuffer consumer.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/FSHLog.SafePointZigZagLatch.html#org.apache.hadoop.hbase.regionserver.wal">FSHLog.SafePointZigZagLatch</a>
<div class="block">This class is used coordinating two threads holding one thread at a 'safe point' while the
orchestrating thread does some work that requires the first thread paused: e.g.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/FSHLog.SyncRunner.html#org.apache.hadoop.hbase.regionserver.wal">FSHLog.SyncRunner</a>
<div class="block">Thread to runs the hdfs sync call.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/FSWALEntry.html#org.apache.hadoop.hbase.regionserver.wal">FSWALEntry</a>
<div class="block">A WAL Entry for <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><code>AbstractFSWAL</code></a> implementation.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/MetricsWALSource.html#org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a>
<div class="block">Interface of the source that will export metrics about the region server's WAL.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/ProtobufLogReader.html#org.apache.hadoop.hbase.regionserver.wal">ProtobufLogReader</a>
<div class="block">A Protobuf based WAL has the following structure:</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/ProtobufLogReader.WALHdrContext.html#org.apache.hadoop.hbase.regionserver.wal">ProtobufLogReader.WALHdrContext</a> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/ProtobufLogReader.WALHdrResult.html#org.apache.hadoop.hbase.regionserver.wal">ProtobufLogReader.WALHdrResult</a> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/ProtobufLogWriter.html#org.apache.hadoop.hbase.regionserver.wal">ProtobufLogWriter</a>
<div class="block">Writer for protobuf-based WAL.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/ReaderBase.html#org.apache.hadoop.hbase.regionserver.wal">ReaderBase</a> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/RingBufferTruck.html#org.apache.hadoop.hbase.regionserver.wal">RingBufferTruck</a>
<div class="block">A 'truck' to carry a payload across the ring buffer from Handler to WAL.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/RingBufferTruck.Type.html#org.apache.hadoop.hbase.regionserver.wal">RingBufferTruck.Type</a> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/SequenceIdAccounting.html#org.apache.hadoop.hbase.regionserver.wal">SequenceIdAccounting</a>
<div class="block">
Accounting of sequence ids per region and then by column family.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/SyncFuture.html#org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>
<div class="block">A Future on a filesystem sync call.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/WALActionsListener.html#org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>
<div class="block">Get notification of WAL events.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.html#org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a>
<div class="block">Compression in this class is lifted off Compressor/KeyValueCompression.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringCompressor.html#org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringUncompressor.html#org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/WALCoprocessorHost.html#org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost</a>
<div class="block">Implements the coprocessor environment and runtime support for coprocessors
loaded within a <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal"><code>WAL</code></a>.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/WALCoprocessorHost.WALEnvironment.html#org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost.WALEnvironment</a>
<div class="block">Encapsulation of the environment of each coprocessor</div>
</td>
@@ -314,32 +317,27 @@
</td>
</tr>
<tr class="altColor">
-<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/CompressionContext.html#org.apache.hadoop.hbase.wal">CompressionContext</a>
-<div class="block">Context that holds the various dictionaries for compression in WAL.</div>
-</td>
-</tr>
-<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/FailedLogCloseException.html#org.apache.hadoop.hbase.wal">FailedLogCloseException</a>
<div class="block">Thrown when we fail close of the write-ahead-log file.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/FSHLog.html#org.apache.hadoop.hbase.wal">FSHLog</a>
<div class="block">The default implementation of FSWAL.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/WALActionsListener.html#org.apache.hadoop.hbase.wal">WALActionsListener</a>
<div class="block">Get notification of WAL events.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringCompressor.html#org.apache.hadoop.hbase.wal">WALCellCodec.ByteStringCompressor</a> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/WALCellCodec.ByteStringUncompressor.html#org.apache.hadoop.hbase.wal">WALCellCodec.ByteStringUncompressor</a> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/WALCoprocessorHost.html#org.apache.hadoop.hbase.wal">WALCoprocessorHost</a>
<div class="block">Implements the coprocessor environment and runtime support for coprocessors
loaded within a <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal"><code>WAL</code></a>.</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationException.html b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationException.html
index 1157a3a..404d023 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationException.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationException.html
@@ -309,9 +309,10 @@
<td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html#getReplicationPeerConfig-java.lang.String-">getReplicationPeerConfig</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)</code> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
+<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html#initializeZKBasedSystemTrackers--">initializeZKBasedSystemTrackers</a></span>()</code>
-<div class="block">Initialize all ZK based system trackers.</div>
+<div class="block">
+ Initialize all ZK based system trackers.</div>
</td>
</tr>
<tr class="altColor">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
index 193a3a3032..d1e114d 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -198,8 +198,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><E> (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><T>, 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.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSourceShipper.WorkerState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSourceShipper.WorkerState</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index bf7ef69..d9fa142 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -137,8 +137,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><E> (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><T>, 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.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index dfa02b5..67b7e3a 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -191,9 +191,9 @@
<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><E> (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><T>, 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.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 4ade4c1..2cef8bd 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -199,8 +199,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><E> (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><T>, 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.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/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 0c9fc68..a486894 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
@@ -1077,6 +1077,10 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
</td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo></code></td>
+<td class="colLast"><span class="typeNameLabel">RegionServerTracker.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#getServerInfo-java.lang.String-">getServerInfo</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</code> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></code></td>
<td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableRegionForRow-org.apache.hadoop.hbase.TableName-byte:A-">getTableRegionForRow</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] rowKey)</code>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/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 7ee6a13..b5bd944 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -532,14 +532,14 @@
<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><E> (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><T>, 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/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.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><T>)</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><T>)</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/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/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/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><T>)</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/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/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/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/wal/WAL.Entry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WAL.Entry.html b/devapidocs/org/apache/hadoop/hbase/wal/WAL.Entry.html
index 951d475..57ceac3 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WAL.Entry.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WAL.Entry.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10};
+var methods = {"i0":10,"i1":10,"i2":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.244">WAL.Entry</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.243">WAL.Entry</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">Utility class that lets us keep track of the edit with it's key.</div>
</li>
@@ -197,12 +197,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</td>
</tr>
<tr id="i2" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html#setCompressionContext-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">setCompressionContext</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compressionContext)</code>
-<div class="block">Set compression context for this entry.</div>
-</td>
-</tr>
-<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html#toString--">toString</a></span>()</code> </td>
</tr>
@@ -234,7 +228,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>edit</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.245">edit</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.244">edit</a></pre>
</li>
</ul>
<a name="key">
@@ -243,7 +237,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>key</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.246">key</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.245">key</a></pre>
</li>
</ul>
</li>
@@ -260,7 +254,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>Entry</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.248">Entry</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.247">Entry</a>()</pre>
</li>
</ul>
<a name="Entry-org.apache.hadoop.hbase.wal.WALKeyImpl-org.apache.hadoop.hbase.wal.WALEdit-">
@@ -269,7 +263,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>Entry</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.258">Entry</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a> key,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.257">Entry</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a> key,
<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a> edit)</pre>
<div class="block">Constructor for both params</div>
<dl>
@@ -293,7 +287,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getEdit</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.268">getEdit</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.267">getEdit</a>()</pre>
<div class="block">Gets the edit</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -307,7 +301,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getKey</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.277">getKey</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.276">getKey</a>()</pre>
<div class="block">Gets the key</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -315,27 +309,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</dl>
</li>
</ul>
-<a name="setCompressionContext-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setCompressionContext</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.287">setCompressionContext</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compressionContext)</pre>
-<div class="block">Set compression context for this entry.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>compressionContext</code> - Compression context</dd>
-</dl>
-</li>
-</ul>
<a name="toString--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>toString</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.292">toString</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.281">toString</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code> in class <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/wal/WAL.Reader.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WAL.Reader.html b/devapidocs/org/apache/hadoop/hbase/wal/WAL.Reader.html
index 5985710..d2e24ee 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WAL.Reader.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WAL.Reader.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.233">WAL.Reader</a>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.232">WAL.Reader</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></pre>
<div class="block">When outside clients need to consume persisted WALs, they rely on a provided
Reader.</div>
@@ -187,7 +187,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>next</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.234">next</a>()
+<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.233">next</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -201,7 +201,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>next</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.235">next</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> reuse)
+<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.234">next</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> reuse)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -215,7 +215,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>seek</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.236">seek</a>(long pos)
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.235">seek</a>(long pos)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -229,7 +229,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockList">
<li class="blockList">
<h4>getPosition</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.237">getPosition</a>()
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.236">getPosition</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -243,7 +243,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
<ul class="blockListLast">
<li class="blockList">
<h4>reset</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.238">reset</a>()
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.237">reset</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
[05/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html
index e31f5c6..f4d1eb0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html
@@ -31,277 +31,266 @@
<span class="sourceLineNo">023</span>import java.util.Set;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HConstants;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.regionserver.wal.CompressionContext;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.regionserver.wal.WALCoprocessorHost;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.replication.regionserver.WALFileLengthProvider;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.32"></a>
-<span class="sourceLineNo">033</span><a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>/**<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * A Write Ahead Log (WAL) provides service for reading, writing waledits. This interface provides<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * APIs for WAL users (such as RegionServer) to use the WAL (do append, sync, etc).<a name="line.38"></a>
-<span class="sourceLineNo">039</span> *<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * Note that some internals, such as log rolling and performance evaluation tools, will use<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * WAL.equals to determine if they have already seen a given WAL.<a name="line.41"></a>
-<span class="sourceLineNo">042</span> */<a name="line.42"></a>
-<span class="sourceLineNo">043</span>@InterfaceAudience.Private<a name="line.43"></a>
-<span class="sourceLineNo">044</span>@InterfaceStability.Evolving<a name="line.44"></a>
-<span class="sourceLineNo">045</span>public interface WAL extends Closeable, WALFileLengthProvider {<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span> /**<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * Registers WALActionsListener<a name="line.48"></a>
-<span class="sourceLineNo">049</span> */<a name="line.49"></a>
-<span class="sourceLineNo">050</span> void registerWALActionsListener(final WALActionsListener listener);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span> /**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Unregisters WALActionsListener<a name="line.53"></a>
-<span class="sourceLineNo">054</span> */<a name="line.54"></a>
-<span class="sourceLineNo">055</span> boolean unregisterWALActionsListener(final WALActionsListener listener);<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> * Roll the log writer. That is, start writing log messages to a new file.<a name="line.58"></a>
-<span class="sourceLineNo">059</span> *<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * <p><a name="line.60"></a>
-<span class="sourceLineNo">061</span> * The implementation is synchronized in order to make sure there's one rollWriter<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * running at any given time.<a name="line.62"></a>
-<span class="sourceLineNo">063</span> *<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * @return If lots of logs, flush the returned regions so next time through we<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * can clean logs. Returns null if nothing to flush. Names are actual<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * region names as returned by {@link RegionInfo#getEncodedName()}<a name="line.66"></a>
-<span class="sourceLineNo">067</span> */<a name="line.67"></a>
-<span class="sourceLineNo">068</span> byte[][] rollWriter() throws FailedLogCloseException, IOException;<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> * Roll the log writer. That is, start writing log messages to a new file.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> *<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <p><a name="line.73"></a>
-<span class="sourceLineNo">074</span> * The implementation is synchronized in order to make sure there's one rollWriter<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * running at any given time.<a name="line.75"></a>
-<span class="sourceLineNo">076</span> *<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * @param force<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * If true, force creation of a new writer even if no entries have<a name="line.78"></a>
-<span class="sourceLineNo">079</span> * been written to the current writer<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * @return If lots of logs, flush the returned regions so next time through we<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * can clean logs. Returns null if nothing to flush. Names are actual<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * region names as returned by {@link RegionInfo#getEncodedName()}<a name="line.82"></a>
-<span class="sourceLineNo">083</span> */<a name="line.83"></a>
-<span class="sourceLineNo">084</span> byte[][] rollWriter(boolean force) throws FailedLogCloseException, IOException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span> /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span> * Stop accepting new writes. If we have unsynced writes still in buffer, sync them.<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * Extant edits are left in place in backing storage to be replayed later.<a name="line.88"></a>
-<span class="sourceLineNo">089</span> */<a name="line.89"></a>
-<span class="sourceLineNo">090</span> void shutdown() throws IOException;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span> /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * Caller no longer needs any edits from this WAL. Implementers are free to reclaim<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * underlying resources after this call; i.e. filesystem based WALs can archive or<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * delete files.<a name="line.95"></a>
-<span class="sourceLineNo">096</span> */<a name="line.96"></a>
-<span class="sourceLineNo">097</span> @Override<a name="line.97"></a>
-<span class="sourceLineNo">098</span> void close() throws IOException;<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> * Append a set of edits to the WAL. The WAL is not flushed/sync'd after this transaction<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * completes BUT on return this edit must have its region edit/sequence id assigned<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * else it messes up our unification of mvcc and sequenceid. On return <code>key</code> will<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * have the region edit/sequence id filled in.<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * @param info the regioninfo associated with append<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * @param key Modified by this call; we add to it this edits region edit/sequence id.<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * @param edits Edits to append. MAY CONTAIN NO EDITS for case where we want to get an edit<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * sequence id that is after all currently appended edits.<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * @param inMemstore Always true except for case where we are writing a compaction completion<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * record into the WAL; in this case the entry is just so we can finish an unfinished compaction<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * -- it is not an edit for memstore.<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * @return Returns a 'transaction id' and <code>key</code> will have the region edit/sequence id<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * in it.<a name="line.113"></a>
-<span class="sourceLineNo">114</span> */<a name="line.114"></a>
-<span class="sourceLineNo">115</span> long append(RegionInfo info, WALKeyImpl key, WALEdit edits, boolean inMemstore) throws IOException;<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span> /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * updates the seuence number of a specific store.<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * depending on the flag: replaces current seq number if the given seq id is bigger,<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * or even if it is lower than existing one<a name="line.120"></a>
-<span class="sourceLineNo">121</span> * @param encodedRegionName<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * @param familyName<a name="line.122"></a>
-<span class="sourceLineNo">123</span> * @param sequenceid<a name="line.123"></a>
-<span class="sourceLineNo">124</span> * @param onlyIfGreater<a name="line.124"></a>
-<span class="sourceLineNo">125</span> */<a name="line.125"></a>
-<span class="sourceLineNo">126</span> void updateStore(byte[] encodedRegionName, byte[] familyName, Long sequenceid,<a name="line.126"></a>
-<span class="sourceLineNo">127</span> boolean onlyIfGreater);<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> * Sync what we have in the WAL.<a name="line.130"></a>
-<span class="sourceLineNo">131</span> * @throws IOException<a name="line.131"></a>
-<span class="sourceLineNo">132</span> */<a name="line.132"></a>
-<span class="sourceLineNo">133</span> void sync() throws IOException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span> /**<a name="line.135"></a>
-<span class="sourceLineNo">136</span> * Sync the WAL if the txId was not already sync'd.<a name="line.136"></a>
-<span class="sourceLineNo">137</span> * @param txid Transaction id to sync to.<a name="line.137"></a>
-<span class="sourceLineNo">138</span> * @throws IOException<a name="line.138"></a>
-<span class="sourceLineNo">139</span> */<a name="line.139"></a>
-<span class="sourceLineNo">140</span> void sync(long txid) throws IOException;<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span> /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span> * @param forceSync Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush<a name="line.143"></a>
-<span class="sourceLineNo">144</span> * vs hsync.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> */<a name="line.145"></a>
-<span class="sourceLineNo">146</span> default void sync(boolean forceSync) throws IOException {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> sync();<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> /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span> * @param txid Transaction id to sync to.<a name="line.151"></a>
-<span class="sourceLineNo">152</span> * @param forceSync Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush<a name="line.152"></a>
-<span class="sourceLineNo">153</span> * vs hsync.<a name="line.153"></a>
-<span class="sourceLineNo">154</span> */<a name="line.154"></a>
-<span class="sourceLineNo">155</span> default void sync(long txid, boolean forceSync) throws IOException {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> sync(txid);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span> /**<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * WAL keeps track of the sequence numbers that are as yet not flushed im memstores<a name="line.160"></a>
-<span class="sourceLineNo">161</span> * in order to be able to do accounting to figure which WALs can be let go. This method tells WAL<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * that some region is about to flush. The flush can be the whole region or for a column family<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * of the region only.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> *<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * <p>Currently, it is expected that the update lock is held for the region; i.e. no<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * concurrent appends while we set up cache flush.<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * @param families Families to flush. May be a subset of all families in the region.<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * @return Returns {@link HConstants#NO_SEQNUM} if we are flushing the whole region OR if<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * we are flushing a subset of all families but there are no edits in those families not<a name="line.169"></a>
-<span class="sourceLineNo">170</span> * being flushed; in other words, this is effectively same as a flush of all of the region<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * though we were passed a subset of regions. Otherwise, it returns the sequence id of the<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * oldest/lowest outstanding edit.<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * @see #completeCacheFlush(byte[])<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * @see #abortCacheFlush(byte[])<a name="line.174"></a>
-<span class="sourceLineNo">175</span> */<a name="line.175"></a>
-<span class="sourceLineNo">176</span> Long startCacheFlush(final byte[] encodedRegionName, Set<byte[]> families);<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span> Long startCacheFlush(final byte[] encodedRegionName, Map<byte[], Long> familyToSeq);<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span> /**<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * Complete the cache flush.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * @param encodedRegionName Encoded region name.<a name="line.182"></a>
-<span class="sourceLineNo">183</span> * @see #startCacheFlush(byte[], Set)<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * @see #abortCacheFlush(byte[])<a name="line.184"></a>
-<span class="sourceLineNo">185</span> */<a name="line.185"></a>
-<span class="sourceLineNo">186</span> void completeCacheFlush(final byte[] encodedRegionName);<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span> /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * Abort a cache flush. Call if the flush fails. Note that the only recovery<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * for an aborted flush currently is a restart of the regionserver so the<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * snapshot content dropped by the failure gets restored to the memstore.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * @param encodedRegionName Encoded region name.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span> void abortCacheFlush(byte[] encodedRegionName);<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span> /**<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * @return Coprocessor host.<a name="line.197"></a>
-<span class="sourceLineNo">198</span> */<a name="line.198"></a>
-<span class="sourceLineNo">199</span> WALCoprocessorHost getCoprocessorHost();<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span> /**<a name="line.201"></a>
-<span class="sourceLineNo">202</span> * Gets the earliest unflushed sequence id in the memstore for the region.<a name="line.202"></a>
-<span class="sourceLineNo">203</span> * @param encodedRegionName The region to get the number for.<a name="line.203"></a>
-<span class="sourceLineNo">204</span> * @return The earliest/lowest/oldest sequence id if present, HConstants.NO_SEQNUM if absent.<a name="line.204"></a>
-<span class="sourceLineNo">205</span> * @deprecated Since version 1.2.0. Removing because not used and exposes subtle internal<a name="line.205"></a>
-<span class="sourceLineNo">206</span> * workings. Use {@link #getEarliestMemStoreSeqNum(byte[], byte[])}<a name="line.206"></a>
-<span class="sourceLineNo">207</span> */<a name="line.207"></a>
-<span class="sourceLineNo">208</span> @VisibleForTesting<a name="line.208"></a>
-<span class="sourceLineNo">209</span> @Deprecated<a name="line.209"></a>
-<span class="sourceLineNo">210</span> long getEarliestMemStoreSeqNum(byte[] encodedRegionName);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span> /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span> * Gets the earliest unflushed sequence id in the memstore for the store.<a name="line.213"></a>
-<span class="sourceLineNo">214</span> * @param encodedRegionName The region to get the number for.<a name="line.214"></a>
-<span class="sourceLineNo">215</span> * @param familyName The family to get the number for.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> * @return The earliest/lowest/oldest sequence id if present, HConstants.NO_SEQNUM if absent.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> */<a name="line.217"></a>
-<span class="sourceLineNo">218</span> long getEarliestMemStoreSeqNum(byte[] encodedRegionName, byte[] familyName);<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span> /**<a name="line.220"></a>
-<span class="sourceLineNo">221</span> * Human readable identifying information about the state of this WAL.<a name="line.221"></a>
-<span class="sourceLineNo">222</span> * Implementors are encouraged to include information appropriate for debugging.<a name="line.222"></a>
-<span class="sourceLineNo">223</span> * Consumers are advised not to rely on the details of the returned String; it does<a name="line.223"></a>
-<span class="sourceLineNo">224</span> * not have a defined structure.<a name="line.224"></a>
-<span class="sourceLineNo">225</span> */<a name="line.225"></a>
-<span class="sourceLineNo">226</span> @Override<a name="line.226"></a>
-<span class="sourceLineNo">227</span> String toString();<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span> /**<a name="line.229"></a>
-<span class="sourceLineNo">230</span> * When outside clients need to consume persisted WALs, they rely on a provided<a name="line.230"></a>
-<span class="sourceLineNo">231</span> * Reader.<a name="line.231"></a>
-<span class="sourceLineNo">232</span> */<a name="line.232"></a>
-<span class="sourceLineNo">233</span> interface Reader extends Closeable {<a name="line.233"></a>
-<span class="sourceLineNo">234</span> Entry next() throws IOException;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> Entry next(Entry reuse) throws IOException;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> void seek(long pos) throws IOException;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> long getPosition() throws IOException;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> void reset() throws IOException;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Utility class that lets us keep track of the edit with it's key.<a name="line.242"></a>
-<span class="sourceLineNo">243</span> */<a name="line.243"></a>
-<span class="sourceLineNo">244</span> class Entry {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> private final WALEdit edit;<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private final WALKeyImpl key;<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span> public Entry() {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> this(new WALKeyImpl(), new WALEdit());<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> /**<a name="line.252"></a>
-<span class="sourceLineNo">253</span> * Constructor for both params<a name="line.253"></a>
-<span class="sourceLineNo">254</span> *<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * @param edit log's edit<a name="line.255"></a>
-<span class="sourceLineNo">256</span> * @param key log's key<a name="line.256"></a>
-<span class="sourceLineNo">257</span> */<a name="line.257"></a>
-<span class="sourceLineNo">258</span> public Entry(WALKeyImpl key, WALEdit edit) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span> this.key = key;<a name="line.259"></a>
-<span class="sourceLineNo">260</span> this.edit = edit;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> /**<a name="line.263"></a>
-<span class="sourceLineNo">264</span> * Gets the edit<a name="line.264"></a>
-<span class="sourceLineNo">265</span> *<a name="line.265"></a>
-<span class="sourceLineNo">266</span> * @return edit<a name="line.266"></a>
-<span class="sourceLineNo">267</span> */<a name="line.267"></a>
-<span class="sourceLineNo">268</span> public WALEdit getEdit() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> return edit;<a name="line.269"></a>
-<span class="sourceLineNo">270</span> }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span> /**<a name="line.272"></a>
-<span class="sourceLineNo">273</span> * Gets the key<a name="line.273"></a>
-<span class="sourceLineNo">274</span> *<a name="line.274"></a>
-<span class="sourceLineNo">275</span> * @return key<a name="line.275"></a>
-<span class="sourceLineNo">276</span> */<a name="line.276"></a>
-<span class="sourceLineNo">277</span> public WALKeyImpl getKey() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> return key;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span> /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span> * Set compression context for this entry.<a name="line.282"></a>
-<span class="sourceLineNo">283</span> *<a name="line.283"></a>
-<span class="sourceLineNo">284</span> * @param compressionContext<a name="line.284"></a>
-<span class="sourceLineNo">285</span> * Compression context<a name="line.285"></a>
-<span class="sourceLineNo">286</span> */<a name="line.286"></a>
-<span class="sourceLineNo">287</span> public void setCompressionContext(CompressionContext compressionContext) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span> key.setCompressionContext(compressionContext);<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
-<span class="sourceLineNo">292</span> public String toString() {<a name="line.292"></a>
-<span class="sourceLineNo">293</span> return this.key + "=" + this.edit;<a name="line.293"></a>
-<span class="sourceLineNo">294</span> }<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span>}<a name="line.296"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.regionserver.wal.WALCoprocessorHost;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.replication.regionserver.WALFileLengthProvider;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>/**<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * A Write Ahead Log (WAL) provides service for reading, writing waledits. This interface provides<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * APIs for WAL users (such as RegionServer) to use the WAL (do append, sync, etc).<a name="line.37"></a>
+<span class="sourceLineNo">038</span> *<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * Note that some internals, such as log rolling and performance evaluation tools, will use<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * WAL.equals to determine if they have already seen a given WAL.<a name="line.40"></a>
+<span class="sourceLineNo">041</span> */<a name="line.41"></a>
+<span class="sourceLineNo">042</span>@InterfaceAudience.Private<a name="line.42"></a>
+<span class="sourceLineNo">043</span>@InterfaceStability.Evolving<a name="line.43"></a>
+<span class="sourceLineNo">044</span>public interface WAL extends Closeable, WALFileLengthProvider {<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span> /**<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * Registers WALActionsListener<a name="line.47"></a>
+<span class="sourceLineNo">048</span> */<a name="line.48"></a>
+<span class="sourceLineNo">049</span> void registerWALActionsListener(final WALActionsListener listener);<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span> /**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Unregisters WALActionsListener<a name="line.52"></a>
+<span class="sourceLineNo">053</span> */<a name="line.53"></a>
+<span class="sourceLineNo">054</span> boolean unregisterWALActionsListener(final WALActionsListener listener);<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span> /**<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * Roll the log writer. That is, start writing log messages to a new file.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * <p><a name="line.59"></a>
+<span class="sourceLineNo">060</span> * The implementation is synchronized in order to make sure there's one rollWriter<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * running at any given time.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> *<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * @return If lots of logs, flush the returned regions so next time through we<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * can clean logs. Returns null if nothing to flush. Names are actual<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * region names as returned by {@link RegionInfo#getEncodedName()}<a name="line.65"></a>
+<span class="sourceLineNo">066</span> */<a name="line.66"></a>
+<span class="sourceLineNo">067</span> byte[][] rollWriter() throws FailedLogCloseException, IOException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span> /**<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * Roll the log writer. That is, start writing log messages to a new file.<a name="line.70"></a>
+<span class="sourceLineNo">071</span> *<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * <p><a name="line.72"></a>
+<span class="sourceLineNo">073</span> * The implementation is synchronized in order to make sure there's one rollWriter<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * running at any given time.<a name="line.74"></a>
+<span class="sourceLineNo">075</span> *<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * @param force<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * If true, force creation of a new writer even if no entries have<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * been written to the current writer<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * @return If lots of logs, flush the returned regions so next time through we<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * can clean logs. Returns null if nothing to flush. Names are actual<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * region names as returned by {@link RegionInfo#getEncodedName()}<a name="line.81"></a>
+<span class="sourceLineNo">082</span> */<a name="line.82"></a>
+<span class="sourceLineNo">083</span> byte[][] rollWriter(boolean force) throws FailedLogCloseException, IOException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span> /**<a name="line.85"></a>
+<span class="sourceLineNo">086</span> * Stop accepting new writes. If we have unsynced writes still in buffer, sync them.<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * Extant edits are left in place in backing storage to be replayed later.<a name="line.87"></a>
+<span class="sourceLineNo">088</span> */<a name="line.88"></a>
+<span class="sourceLineNo">089</span> void shutdown() throws IOException;<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> * Caller no longer needs any edits from this WAL. Implementers are free to reclaim<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * underlying resources after this call; i.e. filesystem based WALs can archive or<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * delete files.<a name="line.94"></a>
+<span class="sourceLineNo">095</span> */<a name="line.95"></a>
+<span class="sourceLineNo">096</span> @Override<a name="line.96"></a>
+<span class="sourceLineNo">097</span> void close() throws IOException;<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span> /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * Append a set of edits to the WAL. The WAL is not flushed/sync'd after this transaction<a name="line.100"></a>
+<span class="sourceLineNo">101</span> * completes BUT on return this edit must have its region edit/sequence id assigned<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * else it messes up our unification of mvcc and sequenceid. On return <code>key</code> will<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * have the region edit/sequence id filled in.<a name="line.103"></a>
+<span class="sourceLineNo">104</span> * @param info the regioninfo associated with append<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * @param key Modified by this call; we add to it this edits region edit/sequence id.<a name="line.105"></a>
+<span class="sourceLineNo">106</span> * @param edits Edits to append. MAY CONTAIN NO EDITS for case where we want to get an edit<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * sequence id that is after all currently appended edits.<a name="line.107"></a>
+<span class="sourceLineNo">108</span> * @param inMemstore Always true except for case where we are writing a compaction completion<a name="line.108"></a>
+<span class="sourceLineNo">109</span> * record into the WAL; in this case the entry is just so we can finish an unfinished compaction<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * -- it is not an edit for memstore.<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * @return Returns a 'transaction id' and <code>key</code> will have the region edit/sequence id<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * in it.<a name="line.112"></a>
+<span class="sourceLineNo">113</span> */<a name="line.113"></a>
+<span class="sourceLineNo">114</span> long append(RegionInfo info, WALKeyImpl key, WALEdit edits, boolean inMemstore) throws IOException;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * updates the seuence number of a specific store.<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * depending on the flag: replaces current seq number if the given seq id is bigger,<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * or even if it is lower than existing one<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * @param encodedRegionName<a name="line.120"></a>
+<span class="sourceLineNo">121</span> * @param familyName<a name="line.121"></a>
+<span class="sourceLineNo">122</span> * @param sequenceid<a name="line.122"></a>
+<span class="sourceLineNo">123</span> * @param onlyIfGreater<a name="line.123"></a>
+<span class="sourceLineNo">124</span> */<a name="line.124"></a>
+<span class="sourceLineNo">125</span> void updateStore(byte[] encodedRegionName, byte[] familyName, Long sequenceid,<a name="line.125"></a>
+<span class="sourceLineNo">126</span> boolean onlyIfGreater);<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> /**<a name="line.128"></a>
+<span class="sourceLineNo">129</span> * Sync what we have in the WAL.<a name="line.129"></a>
+<span class="sourceLineNo">130</span> * @throws IOException<a name="line.130"></a>
+<span class="sourceLineNo">131</span> */<a name="line.131"></a>
+<span class="sourceLineNo">132</span> void sync() throws IOException;<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span> /**<a name="line.134"></a>
+<span class="sourceLineNo">135</span> * Sync the WAL if the txId was not already sync'd.<a name="line.135"></a>
+<span class="sourceLineNo">136</span> * @param txid Transaction id to sync to.<a name="line.136"></a>
+<span class="sourceLineNo">137</span> * @throws IOException<a name="line.137"></a>
+<span class="sourceLineNo">138</span> */<a name="line.138"></a>
+<span class="sourceLineNo">139</span> void sync(long txid) throws IOException;<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> * @param forceSync Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush<a name="line.142"></a>
+<span class="sourceLineNo">143</span> * vs hsync.<a name="line.143"></a>
+<span class="sourceLineNo">144</span> */<a name="line.144"></a>
+<span class="sourceLineNo">145</span> default void sync(boolean forceSync) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> sync();<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> * @param txid Transaction id to sync to.<a name="line.150"></a>
+<span class="sourceLineNo">151</span> * @param forceSync Flag to force sync rather than flushing to the buffer. Example - Hadoop hflush<a name="line.151"></a>
+<span class="sourceLineNo">152</span> * vs hsync.<a name="line.152"></a>
+<span class="sourceLineNo">153</span> */<a name="line.153"></a>
+<span class="sourceLineNo">154</span> default void sync(long txid, boolean forceSync) throws IOException {<a name="line.154"></a>
+<span class="sourceLineNo">155</span> sync(txid);<a name="line.155"></a>
+<span class="sourceLineNo">156</span> }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span> /**<a name="line.158"></a>
+<span class="sourceLineNo">159</span> * WAL keeps track of the sequence numbers that are as yet not flushed im memstores<a name="line.159"></a>
+<span class="sourceLineNo">160</span> * in order to be able to do accounting to figure which WALs can be let go. This method tells WAL<a name="line.160"></a>
+<span class="sourceLineNo">161</span> * that some region is about to flush. The flush can be the whole region or for a column family<a name="line.161"></a>
+<span class="sourceLineNo">162</span> * of the region only.<a name="line.162"></a>
+<span class="sourceLineNo">163</span> *<a name="line.163"></a>
+<span class="sourceLineNo">164</span> * <p>Currently, it is expected that the update lock is held for the region; i.e. no<a name="line.164"></a>
+<span class="sourceLineNo">165</span> * concurrent appends while we set up cache flush.<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * @param families Families to flush. May be a subset of all families in the region.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * @return Returns {@link HConstants#NO_SEQNUM} if we are flushing the whole region OR if<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * we are flushing a subset of all families but there are no edits in those families not<a name="line.168"></a>
+<span class="sourceLineNo">169</span> * being flushed; in other words, this is effectively same as a flush of all of the region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * though we were passed a subset of regions. Otherwise, it returns the sequence id of the<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * oldest/lowest outstanding edit.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * @see #completeCacheFlush(byte[])<a name="line.172"></a>
+<span class="sourceLineNo">173</span> * @see #abortCacheFlush(byte[])<a name="line.173"></a>
+<span class="sourceLineNo">174</span> */<a name="line.174"></a>
+<span class="sourceLineNo">175</span> Long startCacheFlush(final byte[] encodedRegionName, Set<byte[]> families);<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span> Long startCacheFlush(final byte[] encodedRegionName, Map<byte[], Long> familyToSeq);<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span> /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * Complete the cache flush.<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * @param encodedRegionName Encoded region name.<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * @see #startCacheFlush(byte[], Set)<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * @see #abortCacheFlush(byte[])<a name="line.183"></a>
+<span class="sourceLineNo">184</span> */<a name="line.184"></a>
+<span class="sourceLineNo">185</span> void completeCacheFlush(final byte[] encodedRegionName);<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * Abort a cache flush. Call if the flush fails. Note that the only recovery<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * for an aborted flush currently is a restart of the regionserver so the<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * snapshot content dropped by the failure gets restored to the memstore.<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * @param encodedRegionName Encoded region name.<a name="line.191"></a>
+<span class="sourceLineNo">192</span> */<a name="line.192"></a>
+<span class="sourceLineNo">193</span> void abortCacheFlush(byte[] encodedRegionName);<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
+<span class="sourceLineNo">196</span> * @return Coprocessor host.<a name="line.196"></a>
+<span class="sourceLineNo">197</span> */<a name="line.197"></a>
+<span class="sourceLineNo">198</span> WALCoprocessorHost getCoprocessorHost();<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span> /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Gets the earliest unflushed sequence id in the memstore for the region.<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * @param encodedRegionName The region to get the number for.<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * @return The earliest/lowest/oldest sequence id if present, HConstants.NO_SEQNUM if absent.<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * @deprecated Since version 1.2.0. Removing because not used and exposes subtle internal<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * workings. Use {@link #getEarliestMemStoreSeqNum(byte[], byte[])}<a name="line.205"></a>
+<span class="sourceLineNo">206</span> */<a name="line.206"></a>
+<span class="sourceLineNo">207</span> @VisibleForTesting<a name="line.207"></a>
+<span class="sourceLineNo">208</span> @Deprecated<a name="line.208"></a>
+<span class="sourceLineNo">209</span> long getEarliestMemStoreSeqNum(byte[] encodedRegionName);<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span> /**<a name="line.211"></a>
+<span class="sourceLineNo">212</span> * Gets the earliest unflushed sequence id in the memstore for the store.<a name="line.212"></a>
+<span class="sourceLineNo">213</span> * @param encodedRegionName The region to get the number for.<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * @param familyName The family to get the number for.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> * @return The earliest/lowest/oldest sequence id if present, HConstants.NO_SEQNUM if absent.<a name="line.215"></a>
+<span class="sourceLineNo">216</span> */<a name="line.216"></a>
+<span class="sourceLineNo">217</span> long getEarliestMemStoreSeqNum(byte[] encodedRegionName, byte[] familyName);<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span> /**<a name="line.219"></a>
+<span class="sourceLineNo">220</span> * Human readable identifying information about the state of this WAL.<a name="line.220"></a>
+<span class="sourceLineNo">221</span> * Implementors are encouraged to include information appropriate for debugging.<a name="line.221"></a>
+<span class="sourceLineNo">222</span> * Consumers are advised not to rely on the details of the returned String; it does<a name="line.222"></a>
+<span class="sourceLineNo">223</span> * not have a defined structure.<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> String toString();<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span> /**<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * When outside clients need to consume persisted WALs, they rely on a provided<a name="line.229"></a>
+<span class="sourceLineNo">230</span> * Reader.<a name="line.230"></a>
+<span class="sourceLineNo">231</span> */<a name="line.231"></a>
+<span class="sourceLineNo">232</span> interface Reader extends Closeable {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> Entry next() throws IOException;<a name="line.233"></a>
+<span class="sourceLineNo">234</span> Entry next(Entry reuse) throws IOException;<a name="line.234"></a>
+<span class="sourceLineNo">235</span> void seek(long pos) throws IOException;<a name="line.235"></a>
+<span class="sourceLineNo">236</span> long getPosition() throws IOException;<a name="line.236"></a>
+<span class="sourceLineNo">237</span> void reset() throws IOException;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span> /**<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * Utility class that lets us keep track of the edit with it's key.<a name="line.241"></a>
+<span class="sourceLineNo">242</span> */<a name="line.242"></a>
+<span class="sourceLineNo">243</span> class Entry {<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private final WALEdit edit;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private final WALKeyImpl key;<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> public Entry() {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> this(new WALKeyImpl(), new WALEdit());<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> * Constructor for both params<a name="line.252"></a>
+<span class="sourceLineNo">253</span> *<a name="line.253"></a>
+<span class="sourceLineNo">254</span> * @param edit log's edit<a name="line.254"></a>
+<span class="sourceLineNo">255</span> * @param key log's key<a name="line.255"></a>
+<span class="sourceLineNo">256</span> */<a name="line.256"></a>
+<span class="sourceLineNo">257</span> public Entry(WALKeyImpl key, WALEdit edit) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.key = key;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> this.edit = edit;<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> /**<a name="line.262"></a>
+<span class="sourceLineNo">263</span> * Gets the edit<a name="line.263"></a>
+<span class="sourceLineNo">264</span> *<a name="line.264"></a>
+<span class="sourceLineNo">265</span> * @return edit<a name="line.265"></a>
+<span class="sourceLineNo">266</span> */<a name="line.266"></a>
+<span class="sourceLineNo">267</span> public WALEdit getEdit() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return edit;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> /**<a name="line.271"></a>
+<span class="sourceLineNo">272</span> * Gets the key<a name="line.272"></a>
+<span class="sourceLineNo">273</span> *<a name="line.273"></a>
+<span class="sourceLineNo">274</span> * @return key<a name="line.274"></a>
+<span class="sourceLineNo">275</span> */<a name="line.275"></a>
+<span class="sourceLineNo">276</span> public WALKeyImpl getKey() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> return key;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span> @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span> public String toString() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span> return this.key + "=" + this.edit;<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>
[45/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index a7ea47e..63c7ead 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -552,24 +552,24 @@
<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><E> (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><T>, 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.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 3027730..27df980 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -183,14 +183,14 @@
<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><E> (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><T>, 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.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 7a15c5d..16dff46 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -273,12 +273,12 @@
<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><E> (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><T>, 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.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/io/util/class-use/Dictionary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/util/class-use/Dictionary.html b/devapidocs/org/apache/hadoop/hbase/io/util/class-use/Dictionary.html
index b515923..bfe3ca5 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/util/class-use/Dictionary.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/util/class-use/Dictionary.html
@@ -219,31 +219,28 @@
</a>
<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> in <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a></h3>
<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
-<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></span><span class="tabEnd"> </span></caption>
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a> with type parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tbody>
<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></code></td>
-<td class="colLast"><span class="typeNameLabel">CompressionContext.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#familyDict">familyDict</a></span></code> </td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></code></td>
-<td class="colLast"><span class="typeNameLabel">CompressionContext.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#qualifierDict">qualifierDict</a></span></code> </td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></code></td>
-<td class="colLast"><span class="typeNameLabel">CompressionContext.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#regionDict">regionDict</a></span></code> </td>
+<td class="colFirst"><code>private <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><<a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a>,<a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a>></code></td>
+<td class="colLast"><span class="typeNameLabel">CompressionContext.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#dictionaries">dictionaries</a></span></code> </td>
</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></code></td>
-<td class="colLast"><span class="typeNameLabel">CompressionContext.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#rowDict">rowDict</a></span></code> </td>
+</tbody>
+</table>
+<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/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a> that return <a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></span><span class="tabEnd"> </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><a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></code></td>
-<td class="colLast"><span class="typeNameLabel">CompressionContext.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#tableDict">tableDict</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">CompressionContext.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#getDictionary-java.lang.Enum-">getDictionary</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)</code> </td>
</tr>
</tbody>
</table>
@@ -255,16 +252,6 @@
</tr>
<tbody>
<tr class="altColor">
-<td class="colFirst"><code>org.apache.hbase.thirdparty.com.google.protobuf.ByteString</code></td>
-<td class="colLast"><span class="typeNameLabel">WALCellCodec.ByteStringCompressor.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html#compress-byte:A-org.apache.hadoop.hbase.io.util.Dictionary-">compress</a></span>(byte[] data,
- <a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)</code> </td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>org.apache.hbase.thirdparty.com.google.protobuf.ByteString</code></td>
-<td class="colLast"><span class="typeNameLabel">WALCellCodec.BaosAndCompressor.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#compress-byte:A-org.apache.hadoop.hbase.io.util.Dictionary-">compress</a></span>(byte[] data,
- <a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)</code> </td>
-</tr>
-<tr class="altColor">
<td class="colFirst"><code>(package private) static byte[]</code></td>
<td class="colLast"><span class="typeNameLabel">Compressor.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/Compressor.html#readCompressed-java.io.DataInput-org.apache.hadoop.hbase.io.util.Dictionary-">readCompressed</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a> in,
<a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)</code>
@@ -278,16 +265,11 @@
<a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)</code> </td>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>byte[]</code></td>
-<td class="colLast"><span class="typeNameLabel">WALCellCodec.ByteStringUncompressor.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html#uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-org.apache.hadoop.hbase.io.util.Dictionary-">uncompress</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString data,
- <a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)</code> </td>
-</tr>
-<tr class="rowColor">
<td class="colFirst"><code>private static byte[]</code></td>
<td class="colLast"><span class="typeNameLabel">WALCellCodec.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#uncompressByteString-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-org.apache.hadoop.hbase.io.util.Dictionary-">uncompressByteString</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString bs,
<a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>(package private) static int</code></td>
<td class="colLast"><span class="typeNameLabel">Compressor.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/Compressor.html#uncompressIntoArray-byte:A-int-java.io.DataInput-org.apache.hadoop.hbase.io.util.Dictionary-">uncompressIntoArray</a></span>(byte[] to,
int offset,
@@ -296,11 +278,6 @@
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</td>
</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">WALCellCodec.BaosAndCompressor.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#writeCompressed-byte:A-org.apache.hadoop.hbase.io.util.Dictionary-">writeCompressed</a></span>(byte[] data,
- <a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)</code> </td>
-</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) static void</code></td>
<td class="colLast"><span class="typeNameLabel">Compressor.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/Compressor.html#writeCompressed-byte:A-int-int-java.io.DataOutput-org.apache.hadoop.hbase.io.util.Dictionary-">writeCompressed</a></span>(byte[] data,
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 928ae20..6a2998c 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -349,9 +349,9 @@
<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><E> (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><T>, 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.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index a07a1d8..4335db6 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -295,8 +295,8 @@
<ul>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
index bcdf716..4ece744 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.245">HMaster.InitializationMonitor</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.244">HMaster.InitializationMonitor</a>
extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" title="class in org.apache.hadoop.hbase.util">HasThread</a></pre>
<div class="block">Protection against zombie master. Started once Master accepts active responsibility and
starts taking over responsibilities. Allows a finite time window before giving up ownership.</div>
@@ -250,7 +250,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
<ul class="blockList">
<li class="blockList">
<h4>TIMEOUT_KEY</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.247">TIMEOUT_KEY</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.246">TIMEOUT_KEY</a></pre>
<div class="block">The amount of time in milliseconds to sleep before checking initialization status.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
@@ -264,7 +264,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
<ul class="blockList">
<li class="blockList">
<h4>TIMEOUT_DEFAULT</h4>
-<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.248">TIMEOUT_DEFAULT</a></pre>
+<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.247">TIMEOUT_DEFAULT</a></pre>
</li>
</ul>
<a name="HALT_KEY">
@@ -273,7 +273,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
<ul class="blockList">
<li class="blockList">
<h4>HALT_KEY</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.254">HALT_KEY</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.253">HALT_KEY</a></pre>
<div class="block">When timeout expired and initialization has not complete, call <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html?is-external=true#exit-int-" title="class or interface in java.lang"><code>System.exit(int)</code></a> when
true, do nothing otherwise.</div>
<dl>
@@ -288,7 +288,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
<ul class="blockList">
<li class="blockList">
<h4>HALT_DEFAULT</h4>
-<pre>public static final boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.255">HALT_DEFAULT</a></pre>
+<pre>public static final boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.254">HALT_DEFAULT</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.InitializationMonitor.HALT_DEFAULT">Constant Field Values</a></dd>
@@ -301,7 +301,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
<ul class="blockList">
<li class="blockList">
<h4>master</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.257">master</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.256">master</a></pre>
</li>
</ul>
<a name="timeout">
@@ -310,7 +310,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
<ul class="blockList">
<li class="blockList">
<h4>timeout</h4>
-<pre>private final long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.258">timeout</a></pre>
+<pre>private final long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.257">timeout</a></pre>
</li>
</ul>
<a name="haltOnTimeout">
@@ -319,7 +319,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
<ul class="blockListLast">
<li class="blockList">
<h4>haltOnTimeout</h4>
-<pre>private final boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.259">haltOnTimeout</a></pre>
+<pre>private final boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.258">haltOnTimeout</a></pre>
</li>
</ul>
</li>
@@ -336,7 +336,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
<ul class="blockListLast">
<li class="blockList">
<h4>InitializationMonitor</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.262">InitializationMonitor</a>(<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> master)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.261">InitializationMonitor</a>(<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> master)</pre>
<div class="block">Creates a Thread that monitors the <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isInitialized--"><code>HMaster.isInitialized()</code></a> state.</div>
</li>
</ul>
@@ -354,7 +354,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
<ul class="blockListLast">
<li class="blockList">
<h4>run</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.271">run</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.270">run</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code> in interface <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
index 3bcc198..2f5def1 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
@@ -136,7 +136,7 @@
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2781">HMaster.MasterStoppedException</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2785">HMaster.MasterStoppedException</a>
extends <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
@@ -205,7 +205,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.ht
<ul class="blockListLast">
<li class="blockList">
<h4>MasterStoppedException</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html#line.2782">MasterStoppedException</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html#line.2786">MasterStoppedException</a>()</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
index d0ab335..629b62e 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.430">HMaster.RedirectServlet</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.429">HMaster.RedirectServlet</a>
extends javax.servlet.http.HttpServlet</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
@@ -243,7 +243,7 @@ extends javax.servlet.http.HttpServlet</pre>
<ul class="blockList">
<li class="blockList">
<h4>serialVersionUID</h4>
-<pre>private static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.431">serialVersionUID</a></pre>
+<pre>private static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.430">serialVersionUID</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.RedirectServlet.serialVersionUID">Constant Field Values</a></dd>
@@ -256,7 +256,7 @@ extends javax.servlet.http.HttpServlet</pre>
<ul class="blockList">
<li class="blockList">
<h4>regionServerInfoPort</h4>
-<pre>private final int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.432">regionServerInfoPort</a></pre>
+<pre>private final int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.431">regionServerInfoPort</a></pre>
</li>
</ul>
<a name="regionServerHostname">
@@ -265,7 +265,7 @@ extends javax.servlet.http.HttpServlet</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>regionServerHostname</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.433">regionServerHostname</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.432">regionServerHostname</a></pre>
</li>
</ul>
</li>
@@ -282,7 +282,7 @@ extends javax.servlet.http.HttpServlet</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>RedirectServlet</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.439">RedirectServlet</a>(<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a> infoServer,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.438">RedirectServlet</a>(<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a> infoServer,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> hostname)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -305,7 +305,7 @@ extends javax.servlet.http.HttpServlet</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>doGet</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.445">doGet</a>(javax.servlet.http.HttpServletRequest request,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.444">doGet</a>(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
throws javax.servlet.ServletException,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
[44/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
index fc94836..c6822d1 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.LimitedPrivate(value="Tools")
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.238">HMaster</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.237">HMaster</a>
extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>
implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></pre>
<div class="block">HMaster is the "master server" for HBase. An HBase cluster has one active
@@ -406,7 +406,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#regionNormalizerTracker">regionNormalizerTracker</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#regionServerTracker">regionServerTracker</a></span></code> </td>
</tr>
<tr class="altColor">
@@ -649,7 +649,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
</td>
</tr>
<tr id="i27" class="rowColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createQuotaSnapshotNotifier--">createQuotaSnapshotNotifier</a></span>()</code> </td>
</tr>
<tr id="i28" class="altColor">
@@ -657,9 +657,10 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createRpcServices--">createRpcServices</a></span>()</code> </td>
</tr>
<tr id="i29" class="rowColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></code></td>
+<td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createServerManager-org.apache.hadoop.hbase.master.MasterServices-">createServerManager</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> master)</code>
-<div class="block">Create a <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.</div>
+<div class="block">
+ Create a <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.</div>
</td>
</tr>
<tr id="i30" class="altColor">
@@ -1069,13 +1070,14 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
</td>
</tr>
<tr id="i113" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
+<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initClusterSchemaService--">initClusterSchemaService</a></span>()</code> </td>
</tr>
<tr id="i114" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
+<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initializeZKBasedSystemTrackers--">initializeZKBasedSystemTrackers</a></span>()</code>
-<div class="block">Initialize all ZK based system trackers.</div>
+<div class="block">
+ Initialize all ZK based system trackers.</div>
</td>
</tr>
<tr id="i115" class="rowColor">
@@ -1083,7 +1085,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initMobCleaner--">initMobCleaner</a></span>()</code> </td>
</tr>
<tr id="i116" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
+<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initQuotaManager--">initQuotaManager</a></span>()</code> </td>
</tr>
<tr id="i117" class="rowColor">
@@ -1493,7 +1495,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.239">LOG</a></pre>
+<pre>private static org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.238">LOG</a></pre>
</li>
</ul>
<a name="MASTER">
@@ -1502,7 +1504,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>MASTER</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.295">MASTER</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.294">MASTER</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.MASTER">Constant Field Values</a></dd>
@@ -1515,7 +1517,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>activeMasterManager</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/master/ActiveMasterManager.html" title="class in org.apache.hadoop.hbase.master">ActiveMasterManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.298">activeMasterManager</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/master/ActiveMasterManager.html" title="class in org.apache.hadoop.hbase.master">ActiveMasterManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.297">activeMasterManager</a></pre>
</li>
</ul>
<a name="regionServerTracker">
@@ -1524,7 +1526,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>regionServerTracker</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.300">regionServerTracker</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.299">regionServerTracker</a></pre>
</li>
</ul>
<a name="drainingServerTracker">
@@ -1533,7 +1535,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>drainingServerTracker</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/DrainingServerTracker.html" title="class in org.apache.hadoop.hbase.master">DrainingServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.302">drainingServerTracker</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/DrainingServerTracker.html" title="class in org.apache.hadoop.hbase.master">DrainingServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.301">drainingServerTracker</a></pre>
</li>
</ul>
<a name="loadBalancerTracker">
@@ -1542,7 +1544,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>loadBalancerTracker</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">LoadBalancerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.304">loadBalancerTracker</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">LoadBalancerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.303">loadBalancerTracker</a></pre>
</li>
</ul>
<a name="metaLocationSyncer">
@@ -1551,7 +1553,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>metaLocationSyncer</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MetaLocationSyncer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.306">metaLocationSyncer</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MetaLocationSyncer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.305">metaLocationSyncer</a></pre>
</li>
</ul>
<a name="masterAddressSyncer">
@@ -1560,7 +1562,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>masterAddressSyncer</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MasterAddressSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MasterAddressSyncer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.308">masterAddressSyncer</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MasterAddressSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MasterAddressSyncer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.307">masterAddressSyncer</a></pre>
</li>
</ul>
<a name="splitOrMergeTracker">
@@ -1569,7 +1571,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>splitOrMergeTracker</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master">SplitOrMergeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.311">splitOrMergeTracker</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master">SplitOrMergeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.310">splitOrMergeTracker</a></pre>
</li>
</ul>
<a name="regionNormalizerTracker">
@@ -1578,7 +1580,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>regionNormalizerTracker</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">RegionNormalizerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.314">regionNormalizerTracker</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">RegionNormalizerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.313">regionNormalizerTracker</a></pre>
</li>
</ul>
<a name="maintenanceModeTracker">
@@ -1587,7 +1589,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>maintenanceModeTracker</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterMaintenanceModeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.317">maintenanceModeTracker</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterMaintenanceModeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.316">maintenanceModeTracker</a></pre>
</li>
</ul>
<a name="clusterSchemaService">
@@ -1596,7 +1598,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>clusterSchemaService</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/ClusterSchemaService.html" title="interface in org.apache.hadoop.hbase.master">ClusterSchemaService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.319">clusterSchemaService</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/ClusterSchemaService.html" title="interface in org.apache.hadoop.hbase.master">ClusterSchemaService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.318">clusterSchemaService</a></pre>
</li>
</ul>
<a name="HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS">
@@ -1605,7 +1607,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.321">HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.320">HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS">Constant Field Values</a></dd>
@@ -1618,7 +1620,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</h4>
-<pre>public static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.323">DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a></pre>
+<pre>public static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.322">DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS">Constant Field Values</a></dd>
@@ -1631,7 +1633,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>metricsMaster</h4>
-<pre>final <a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.326">metricsMaster</a></pre>
+<pre>final <a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.325">metricsMaster</a></pre>
</li>
</ul>
<a name="fileSystemManager">
@@ -1640,7 +1642,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>fileSystemManager</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.328">fileSystemManager</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.327">fileSystemManager</a></pre>
</li>
</ul>
<a name="walManager">
@@ -1649,7 +1651,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>walManager</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.329">walManager</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.328">walManager</a></pre>
</li>
</ul>
<a name="serverManager">
@@ -1658,7 +1660,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>serverManager</h4>
-<pre>private volatile <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.332">serverManager</a></pre>
+<pre>private volatile <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.331">serverManager</a></pre>
</li>
</ul>
<a name="assignmentManager">
@@ -1667,7 +1669,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>assignmentManager</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.335">assignmentManager</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.334">assignmentManager</a></pre>
</li>
</ul>
<a name="replicationPeerManager">
@@ -1676,7 +1678,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>replicationPeerManager</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.338">replicationPeerManager</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.337">replicationPeerManager</a></pre>
</li>
</ul>
<a name="rsFatals">
@@ -1685,7 +1687,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>rsFatals</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.html" title="class in org.apache.hadoop.hbase.monitoring">MemoryBoundedLogMessageBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.343">rsFatals</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.html" title="class in org.apache.hadoop.hbase.monitoring">MemoryBoundedLogMessageBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.342">rsFatals</a></pre>
</li>
</ul>
<a name="activeMaster">
@@ -1694,7 +1696,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>activeMaster</h4>
-<pre>private volatile boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.346">activeMaster</a></pre>
+<pre>private volatile boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.345">activeMaster</a></pre>
</li>
</ul>
<a name="initialized">
@@ -1703,7 +1705,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>initialized</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a><?> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.349">initialized</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a><?> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.348">initialized</a></pre>
</li>
</ul>
<a name="serviceStarted">
@@ -1712,7 +1714,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>serviceStarted</h4>
-<pre>volatile boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.353">serviceStarted</a></pre>
+<pre>volatile boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.352">serviceStarted</a></pre>
</li>
</ul>
<a name="serverCrashProcessingEnabled">
@@ -1721,7 +1723,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>serverCrashProcessingEnabled</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a><?> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.356">serverCrashProcessingEnabled</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a><?> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.355">serverCrashProcessingEnabled</a></pre>
</li>
</ul>
<a name="maxBlancingTime">
@@ -1730,7 +1732,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>maxBlancingTime</h4>
-<pre>private final int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.360">maxBlancingTime</a></pre>
+<pre>private final int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.359">maxBlancingTime</a></pre>
</li>
</ul>
<a name="maxRitPercent">
@@ -1739,7 +1741,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>maxRitPercent</h4>
-<pre>private final double <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.362">maxRitPercent</a></pre>
+<pre>private final double <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.361">maxRitPercent</a></pre>
</li>
</ul>
<a name="lockManager">
@@ -1748,7 +1750,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>lockManager</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/master/locking/LockManager.html" title="class in org.apache.hadoop.hbase.master.locking">LockManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.364">lockManager</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/master/locking/LockManager.html" title="class in org.apache.hadoop.hbase.master.locking">LockManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.363">lockManager</a></pre>
</li>
</ul>
<a name="balancer">
@@ -1757,7 +1759,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>balancer</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.366">balancer</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.365">balancer</a></pre>
</li>
</ul>
<a name="normalizer">
@@ -1766,7 +1768,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>normalizer</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.367">normalizer</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.366">normalizer</a></pre>
</li>
</ul>
<a name="balancerChore">
@@ -1775,7 +1777,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>balancerChore</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/balancer/BalancerChore.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.368">balancerChore</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/balancer/BalancerChore.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.367">balancerChore</a></pre>
</li>
</ul>
<a name="normalizerChore">
@@ -1784,7 +1786,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>normalizerChore</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer">RegionNormalizerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.369">normalizerChore</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer">RegionNormalizerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.368">normalizerChore</a></pre>
</li>
</ul>
<a name="clusterStatusChore">
@@ -1793,7 +1795,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>clusterStatusChore</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.html" title="class in org.apache.hadoop.hbase.master.balancer">ClusterStatusChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.370">clusterStatusChore</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.html" title="class in org.apache.hadoop.hbase.master.balancer">ClusterStatusChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.369">clusterStatusChore</a></pre>
</li>
</ul>
<a name="clusterStatusPublisherChore">
@@ -1802,7 +1804,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>clusterStatusPublisherChore</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/ClusterStatusPublisher.html" title="class in org.apache.hadoop.hbase.master">ClusterStatusPublisher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.371">clusterStatusPublisherChore</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/ClusterStatusPublisher.html" title="class in org.apache.hadoop.hbase.master">ClusterStatusPublisher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.370">clusterStatusPublisherChore</a></pre>
</li>
</ul>
<a name="catalogJanitorChore">
@@ -1811,7 +1813,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>catalogJanitorChore</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.373">catalogJanitorChore</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.372">catalogJanitorChore</a></pre>
</li>
</ul>
<a name="logCleaner">
@@ -1820,7 +1822,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>logCleaner</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/cleaner/LogCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">LogCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.374">logCleaner</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/cleaner/LogCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">LogCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.373">logCleaner</a></pre>
</li>
</ul>
<a name="hfileCleaner">
@@ -1829,7 +1831,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>hfileCleaner</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.375">hfileCleaner</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.374">hfileCleaner</a></pre>
</li>
</ul>
<a name="replicationBarrierCleaner">
@@ -1838,7 +1840,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>replicationBarrierCleaner</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/cleaner/ReplicationBarrierCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">ReplicationBarrierCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.376">replicationBarrierCleaner</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/cleaner/ReplicationBarrierCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">ReplicationBarrierCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.375">replicationBarrierCleaner</a></pre>
</li>
</ul>
<a name="expiredMobFileCleanerChore">
@@ -1847,7 +1849,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>expiredMobFileCleanerChore</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/ExpiredMobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.master">ExpiredMobFileCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.377">expiredMobFileCleanerChore</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/ExpiredMobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.master">ExpiredMobFileCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.376">expiredMobFileCleanerChore</a></pre>
</li>
</ul>
<a name="mobCompactChore">
@@ -1856,7 +1858,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>mobCompactChore</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/MobCompactionChore.html" title="class in org.apache.hadoop.hbase.master">MobCompactionChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.378">mobCompactChore</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/MobCompactionChore.html" title="class in org.apache.hadoop.hbase.master">MobCompactionChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.377">mobCompactChore</a></pre>
</li>
</ul>
<a name="mobCompactThread">
@@ -1865,7 +1867,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>mobCompactThread</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/MasterMobCompactionThread.html" title="class in org.apache.hadoop.hbase.master">MasterMobCompactionThread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.379">mobCompactThread</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/MasterMobCompactionThread.html" title="class in org.apache.hadoop.hbase.master">MasterMobCompactionThread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.378">mobCompactThread</a></pre>
</li>
</ul>
<a name="mobCompactionLock">
@@ -1874,7 +1876,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>mobCompactionLock</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.381">mobCompactionLock</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.380">mobCompactionLock</a></pre>
</li>
</ul>
<a name="mobCompactionStates">
@@ -1883,7 +1885,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>mobCompactionStates</h4>
-<pre>private <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><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.384">mobCompactionStates</a></pre>
+<pre>private <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><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.383">mobCompactionStates</a></pre>
</li>
</ul>
<a name="cpHost">
@@ -1892,7 +1894,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>cpHost</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.386">cpHost</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.385">cpHost</a></pre>
</li>
</ul>
<a name="preLoadTableDescriptors">
@@ -1901,7 +1903,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>preLoadTableDescriptors</h4>
-<pre>private final boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.388">preLoadTableDescriptors</a></pre>
+<pre>private final boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.387">preLoadTableDescriptors</a></pre>
</li>
</ul>
<a name="masterActiveTime">
@@ -1910,7 +1912,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>masterActiveTime</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.391">masterActiveTime</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.390">masterActiveTime</a></pre>
</li>
</ul>
<a name="masterFinishedInitializationTime">
@@ -1919,7 +1921,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>masterFinishedInitializationTime</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.394">masterFinishedInitializationTime</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.393">masterFinishedInitializationTime</a></pre>
</li>
</ul>
<a name="masterCheckCompression">
@@ -1928,7 +1930,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>masterCheckCompression</h4>
-<pre>private final boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.397">masterCheckCompression</a></pre>
+<pre>private final boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.396">masterCheckCompression</a></pre>
</li>
</ul>
<a name="masterCheckEncryption">
@@ -1937,7 +1939,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>masterCheckEncryption</h4>
-<pre>private final boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.400">masterCheckEncryption</a></pre>
+<pre>private final boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.399">masterCheckEncryption</a></pre>
</li>
</ul>
<a name="coprocessorServiceHandlers">
@@ -1946,7 +1948,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>coprocessorServiceHandlers</h4>
-<pre><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><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,com.google.protobuf.Service> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.402">coprocessorServiceHandlers</a></pre>
+<pre><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><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,com.google.protobuf.Service> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.401">coprocessorServiceHandlers</a></pre>
</li>
</ul>
<a name="snapshotManager">
@@ -1955,7 +1957,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>snapshotManager</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.405">snapshotManager</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.404">snapshotManager</a></pre>
</li>
</ul>
<a name="mpmHost">
@@ -1964,7 +1966,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>mpmHost</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">MasterProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.407">mpmHost</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">MasterProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.406">mpmHost</a></pre>
</li>
</ul>
<a name="quotaManager">
@@ -1973,7 +1975,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>quotaManager</h4>
-<pre>private volatile <a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.410">quotaManager</a></pre>
+<pre>private volatile <a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.409">quotaManager</a></pre>
</li>
</ul>
<a name="spaceQuotaSnapshotNotifier">
@@ -1982,7 +1984,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>spaceQuotaSnapshotNotifier</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.411">spaceQuotaSnapshotNotifier</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.410">spaceQuotaSnapshotNotifier</a></pre>
</li>
</ul>
<a name="quotaObserverChore">
@@ -1991,7 +1993,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>quotaObserverChore</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.412">quotaObserverChore</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.411">quotaObserverChore</a></pre>
</li>
</ul>
<a name="snapshotQuotaChore">
@@ -2000,7 +2002,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>snapshotQuotaChore</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">SnapshotQuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.413">snapshotQuotaChore</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">SnapshotQuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.412">snapshotQuotaChore</a></pre>
</li>
</ul>
<a name="procedureExecutor">
@@ -2009,7 +2011,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>procedureExecutor</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a><<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.415">procedureExecutor</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a><<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.414">procedureExecutor</a></pre>
</li>
</ul>
<a name="procedureStore">
@@ -2018,7 +2020,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>procedureStore</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.416">procedureStore</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.415">procedureStore</a></pre>
</li>
</ul>
<a name="tableStateManager">
@@ -2027,7 +2029,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>tableStateManager</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.419">tableStateManager</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.418">tableStateManager</a></pre>
</li>
</ul>
<a name="splitPlanCount">
@@ -2036,7 +2038,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>splitPlanCount</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.421">splitPlanCount</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.420">splitPlanCount</a></pre>
</li>
</ul>
<a name="mergePlanCount">
@@ -2045,7 +2047,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>mergePlanCount</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.422">mergePlanCount</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.421">mergePlanCount</a></pre>
</li>
</ul>
<a name="favoredNodesManager">
@@ -2054,7 +2056,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>favoredNodesManager</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.425">favoredNodesManager</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.424">favoredNodesManager</a></pre>
</li>
</ul>
<a name="masterJettyServer">
@@ -2063,7 +2065,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockListLast">
<li class="blockList">
<h4>masterJettyServer</h4>
-<pre>private org.eclipse.jetty.server.Server <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.428">masterJettyServer</a></pre>
+<pre>private org.eclipse.jetty.server.Server <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.427">masterJettyServer</a></pre>
<div class="block">jetty server for master to redirect requests to regionserver infoServer</div>
</li>
</ul>
@@ -2081,7 +2083,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockListLast">
<li class="blockList">
<h4>HMaster</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.484">HMaster</a>(org.apache.hadoop.conf.Configuration conf)
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.483">HMaster</a>(org.apache.hadoop.conf.Configuration conf)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
org.apache.zookeeper.KeeperException</pre>
<div class="block">Initializes the HMaster. The steps are as follows:
@@ -2115,7 +2117,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getUseThisHostnameInstead</h4>
-<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.555">getUseThisHostnameInstead</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.554">getUseThisHostnameInstead</a>(org.apache.hadoop.conf.Configuration conf)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getUseThisHostnameInstead-org.apache.hadoop.conf.Configuration-">getUseThisHostnameInstead</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></dd>
@@ -2128,7 +2130,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>run</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.562">run</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.561">run</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#run--">HRegionServer</a></code></span></div>
<div class="block">The HRegionServer sticks in this loop until closed.</div>
<dl>
@@ -2145,7 +2147,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>putUpJettyServer</h4>
-<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.600">putUpJettyServer</a>()
+<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.599">putUpJettyServer</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2159,7 +2161,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getMetaTableObserver</h4>
-<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>,<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.650">getMetaTableObserver</a>()</pre>
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>,<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.649">getMetaTableObserver</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMetaTableObserver--">getMetaTableObserver</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></dd>
@@ -2172,7 +2174,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>login</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.657">login</a>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a> user,
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.656">login</a>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a> user,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> host)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">For compatibility, if failed with regionserver credentials, try the master one</div>
@@ -2190,7 +2192,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>waitForMasterActive</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.672">waitForMasterActive</a>()</pre>
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.671">waitForMasterActive</a>()</pre>
<div class="block">If configured to put regions on active master,
wait till a backup master becomes active.
Otherwise, loop till the server is stopped or aborted.</div>
@@ -2206,7 +2208,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getMasterRpcServices</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.680">getMasterRpcServices</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.679">getMasterRpcServices</a>()</pre>
</li>
</ul>
<a name="balanceSwitch-boolean-">
@@ -2215,7 +2217,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>balanceSwitch</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.684">balanceSwitch</a>(boolean b)
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.683">balanceSwitch</a>(boolean b)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2229,7 +2231,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getProcessName</h4>
-<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.689">getProcessName</a>()</pre>
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.688">getProcessName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getProcessName--">getProcessName</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></dd>
@@ -2242,7 +2244,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>canCreateBaseZNode</h4>
-<pre>protected boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.694">canCreateBaseZNode</a>()</pre>
+<pre>protected boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.693">canCreateBaseZNode</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#canCreateBaseZNode--">canCreateBaseZNode</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></dd>
@@ -2255,7 +2257,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>canUpdateTableDescriptor</h4>
-<pre>protected boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.699">canUpdateTableDescriptor</a>()</pre>
+<pre>protected boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.698">canUpdateTableDescriptor</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#canUpdateTableDescriptor--">canUpdateTableDescriptor</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></dd>
@@ -2268,7 +2270,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>createRpcServices</h4>
-<pre>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.704">createRpcServices</a>()
+<pre>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.703">createRpcServices</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -2284,7 +2286,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>configureInfoServer</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.709">configureInfoServer</a>()</pre>
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.708">configureInfoServer</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#configureInfoServer--">configureInfoServer</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></dd>
@@ -2297,7 +2299,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getDumpServlet</h4>
-<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends javax.servlet.http.HttpServlet> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.718">getDumpServlet</a>()</pre>
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends javax.servlet.http.HttpServlet> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.717">getDumpServlet</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getDumpServlet--">getDumpServlet</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></dd>
@@ -2310,7 +2312,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getMasterMetrics</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.723">getMasterMetrics</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.722">getMasterMetrics</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterMetrics--">getMasterMetrics</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2325,12 +2327,17 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>initializeZKBasedSystemTrackers</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.730">initializeZKBasedSystemTrackers</a>()
- throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
- org.apache.zookeeper.KeeperException,
- <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
-<div class="block">Initialize all ZK based system trackers.</div>
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.735">initializeZKBasedSystemTrackers</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
+ org.apache.zookeeper.KeeperException,
+ <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
+<div class="block"><p>
+ Initialize all ZK based system trackers.
+ </p>
+ <p>
+ Will be overridden in tests.
+ </p></div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
@@ -2346,7 +2353,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>finishActiveMasterInitialization</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.811">finishActiveMasterInitialization</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.816">finishActiveMasterInitialization</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
org.apache.zookeeper.KeeperException,
@@ -2379,7 +2386,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>updateConfigurationForSpaceQuotaObserver</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1024">updateConfigurationForSpaceQuotaObserver</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1029">updateConfigurationForSpaceQuotaObserver</a>(org.apache.hadoop.conf.Configuration conf)</pre>
<div class="block">Adds the <code>MasterSpaceQuotaObserver</code> to the list of configured Master observers to
automatically remove space quotas for a table when that table is deleted.</div>
</li>
@@ -2390,7 +2397,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>initMobCleaner</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1041">initMobCleaner</a>()</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1046">initMobCleaner</a>()</pre>
</li>
</ul>
<a name="createMetaBootstrap--">
@@ -2399,7 +2406,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>createMetaBootstrap</h4>
-<pre>protected <a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master">MasterMetaBootstrap</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1066">createMetaBootstrap</a>()</pre>
+<pre>protected <a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master">MasterMetaBootstrap</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1071">createMetaBootstrap</a>()</pre>
<div class="block"><p>
Create a <a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master"><code>MasterMetaBootstrap</code></a> instance.
</p>
@@ -2414,9 +2421,14 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>createServerManager</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1075">createServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> master)
- throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<div class="block">Create a <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.</div>
+<pre>protected <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1086">createServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> master)
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><p>
+ Create a <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.
+ </p>
+ <p>
+ Will be overridden in tests.
+ </p></div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
@@ -2429,7 +2441,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>waitForRegionServers</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1082">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1093">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<dl>
@@ -2445,9 +2457,9 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>initClusterSchemaService</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1095">initClusterSchemaService</a>()
- throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1100">initClusterSchemaService</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
@@ -2461,8 +2473,8 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>initQuotaManager</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1107">initQuotaManager</a>()
- throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1112">initQuotaManager</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
@@ -2475,7 +2487,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>createQuotaSnapshotNotifier</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1114">createQuotaSnapshotNotifier</a>()</pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1119">createQuotaSnapshotNotifier</a>()</pre>
</li>
</ul>
<a name="isCatalogJanitorEnabled--">
@@ -2484,7 +2496,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>isCatalogJanitorEnabled</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1120">isCatalogJanitorEnabled</a>()</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1125">isCatalogJanitorEnabled</a>()</pre>
</li>
</ul>
<a name="isCleanerChoreEnabled--">
@@ -2493,7 +2505,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>isCleanerChoreEnabled</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1125">isCleanerChoreEnabled</a>()</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1130">isCleanerChoreEnabled</a>()</pre>
</li>
</ul>
<a name="getTableDescriptors--">
@@ -2502,7 +2514,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getTableDescriptors</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1140">getTableDescriptors</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1145">getTableDescriptors</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getTableDescriptors--">getTableDescriptors</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2519,7 +2531,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getServerManager</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1145">getServerManager</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1150">getServerManager</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getServerManager--">getServerManager</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2534,7 +2546,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getMasterFileSystem</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1150">getMasterFileSystem</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1155">getMasterFileSystem</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterFileSystem--">getMasterFileSystem</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2549,7 +2561,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getMasterWalManager</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1155">getMasterWalManager</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1160">getMasterWalManager</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterWalManager--">getMasterWalManager</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2564,7 +2576,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul clas
<TRUNCATED>
[40/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html
index 6cf7da5..25c20c3 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10};
+var methods = {"i0":10,"i1":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.OutputStreamWrapper.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Compressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" target="_top">Frames</a></li>
@@ -74,7 +74,7 @@ var activeTableTab = "activeTableTab";
<div>
<ul class="subNavList">
<li>Summary: </li>
-<li>Nested | </li>
+<li><a href="#nested.class.summary">Nested</a> | </li>
<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.LimitedPrivate(value={"Coprocesssor","Phoenix"})
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.33">CompressionContext</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.35">CompressionContext</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">Context that holds the various dictionaries for compression in WAL.</div>
</li>
@@ -119,6 +119,25 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<div class="summary">
<ul class="blockList">
<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!-- -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a></span></code> </td>
+</tr>
+</table>
+</li>
+</ul>
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
@@ -132,28 +151,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#ENABLE_WAL_TAGS_COMPRESSION">ENABLE_WAL_TAGS_COMPRESSION</a></span></code> </td>
+<td class="colFirst"><code>private <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><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a>,<a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a>></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#dictionaries">dictionaries</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#familyDict">familyDict</a></span></code> </td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#qualifierDict">qualifierDict</a></span></code> </td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#regionDict">regionDict</a></span></code> </td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#rowDict">rowDict</a></span></code> </td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#tableDict">tableDict</a></span></code> </td>
+<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#ENABLE_WAL_TAGS_COMPRESSION">ENABLE_WAL_TAGS_COMPRESSION</a></span></code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/io/TagCompressionContext.html" title="class in org.apache.hadoop.hbase.io">TagCompressionContext</a></code></td>
@@ -197,6 +200,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#clear--">clear</a></span>()</code> </td>
</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#getDictionary-java.lang.Enum-">getDictionary</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)</code> </td>
+</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -225,56 +232,20 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>ENABLE_WAL_TAGS_COMPRESSION</h4>
-<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.35">ENABLE_WAL_TAGS_COMPRESSION</a></pre>
+<pre>static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.37">ENABLE_WAL_TAGS_COMPRESSION</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.CompressionContext.ENABLE_WAL_TAGS_COMPRESSION">Constant Field Values</a></dd>
</dl>
</li>
</ul>
-<a name="regionDict">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>regionDict</h4>
-<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.39">regionDict</a></pre>
-</li>
-</ul>
-<a name="tableDict">
+<a name="dictionaries">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>tableDict</h4>
-<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.40">tableDict</a></pre>
-</li>
-</ul>
-<a name="familyDict">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>familyDict</h4>
-<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.41">familyDict</a></pre>
-</li>
-</ul>
-<a name="qualifierDict">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>qualifierDict</h4>
-<pre>final <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.42">qualifierDict</a></pre>
-</li>
-</ul>
-<a name="rowDict">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>rowDict</h4>
-<pre>final <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.43">rowDict</a></pre>
+<h4>dictionaries</h4>
+<pre>private final <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><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a>,<a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.44">dictionaries</a></pre>
</li>
</ul>
<a name="tagCompressionContext">
@@ -283,7 +254,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>tagCompressionContext</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/io/TagCompressionContext.html" title="class in org.apache.hadoop.hbase.io">TagCompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.45">tagCompressionContext</a></pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/io/TagCompressionContext.html" title="class in org.apache.hadoop.hbase.io">TagCompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.47">tagCompressionContext</a></pre>
</li>
</ul>
</li>
@@ -300,7 +271,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>CompressionContext</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.47">CompressionContext</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a>> dictType,
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.49">CompressionContext</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a>> dictType,
boolean recoveredEdits,
boolean hasTagCompression)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/SecurityException.html?is-external=true" title="class or interface in java.lang">SecurityException</a>,
@@ -326,13 +297,22 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<!-- -->
</a>
<h3>Method Detail</h3>
+<a name="getDictionary-java.lang.Enum-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getDictionary</h4>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.75">getDictionary</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)</pre>
+</li>
+</ul>
<a name="clear--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>clear</h4>
-<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.73">clear</a>()</pre>
+<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.79">clear</a>()</pre>
</li>
</ul>
</li>
@@ -364,7 +344,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.OutputStreamWrapper.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Compressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" target="_top">Frames</a></li>
@@ -388,7 +368,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<div>
<ul class="subNavList">
<li>Summary: </li>
-<li>Nested | </li>
+<li><a href="#nested.class.summary">Nested</a> | </li>
<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/Compressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/Compressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/Compressor.html
index 6e9ea04..015e48b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/Compressor.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/Compressor.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/DamagedWALException.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
@@ -387,7 +387,7 @@ static void <a href="../../../../../../src-html/org/apache/hadoop/hbas
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/DamagedWALException.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html
index 981ea15..5bd65d8 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html
@@ -229,7 +229,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" t
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.wal.<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html#getEdit--">getEdit</a>, <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html#getKey--">getKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html#setCompressionContext-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">setCompressionContext</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html#getEdit--">getEdit</a>, <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html#getKey--">getKey</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html
index c777a6e..5dd2209 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html
@@ -821,7 +821,7 @@ public long <a href="../../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>hasCompression</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html#line.319">hasCompression</a>()</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html#line.321">hasCompression</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#hasCompression--">hasCompression</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html" title="class in org.apache.hadoop.hbase.regionserver.wal">ReaderBase</a></code></dd>
@@ -836,7 +836,7 @@ public long <a href="../../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>hasTagCompression</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html#line.324">hasTagCompression</a>()</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html#line.326">hasTagCompression</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#hasTagCompression--">hasTagCompression</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html" title="class in org.apache.hadoop.hbase.regionserver.wal">ReaderBase</a></code></dd>
@@ -851,7 +851,7 @@ public long <a href="../../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>readNext</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html#line.329">readNext</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> entry)
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html#line.331">readNext</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> entry)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#readNext-org.apache.hadoop.hbase.wal.WAL.Entry-">ReaderBase</a></code></span></div>
<div class="block">Read next entry.</div>
@@ -873,7 +873,7 @@ public long <a href="../../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>extractHiddenEof</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html#line.426">extractHiddenEof</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a> ex)</pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html#line.428">extractHiddenEof</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a> ex)</pre>
</li>
</ul>
<a name="seekOnFs-long-">
@@ -882,7 +882,7 @@ public long <a href="../../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockListLast">
<li class="blockList">
<h4>seekOnFs</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html#line.446">seekOnFs</a>(long pos)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.html#line.448">seekOnFs</a>(long pos)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#seekOnFs-long-">ReaderBase</a></code></span></div>
<div class="block">Performs a filesystem-level seek to a certain position in an underlying file.</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html
index 5b2c2a0..221b016 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html
@@ -341,7 +341,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/FSHLogProvider
<ul class="blockList">
<li class="blockList">
<h4>close</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.61">close</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.60">close</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -359,7 +359,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/FSHLogProvider
<ul class="blockList">
<li class="blockList">
<h4>sync</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.75">sync</a>(boolean forceSync)
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.74">sync</a>(boolean forceSync)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -375,7 +375,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/FSHLogProvider
<ul class="blockList">
<li class="blockList">
<h4>getStream</h4>
-<pre>public org.apache.hadoop.fs.FSDataOutputStream <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.86">getStream</a>()</pre>
+<pre>public org.apache.hadoop.fs.FSDataOutputStream <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.85">getStream</a>()</pre>
</li>
</ul>
<a name="initOutput-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-boolean-int-short-long-">
@@ -384,7 +384,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/FSHLogProvider
<ul class="blockList">
<li class="blockList">
<h4>initOutput</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.92">initOutput</a>(org.apache.hadoop.fs.FileSystem fs,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.91">initOutput</a>(org.apache.hadoop.fs.FileSystem fs,
org.apache.hadoop.fs.Path path,
boolean overwritable,
int bufferSize,
@@ -407,7 +407,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/FSHLogProvider
<ul class="blockList">
<li class="blockList">
<h4>writeMagicAndWALHeader</h4>
-<pre>protected long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.107">writeMagicAndWALHeader</a>(byte[] magic,
+<pre>protected long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.106">writeMagicAndWALHeader</a>(byte[] magic,
org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALHeader header)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#writeMagicAndWALHeader-byte:A-org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALHeader-">AbstractProtobufLogWriter</a></code></span></div>
@@ -426,7 +426,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/FSHLogProvider
<ul class="blockList">
<li class="blockList">
<h4>getOutputStreamForCellEncoder</h4>
-<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.114">getOutputStreamForCellEncoder</a>()</pre>
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.113">getOutputStreamForCellEncoder</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#getOutputStreamForCellEncoder--">getOutputStreamForCellEncoder</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractProtobufLogWriter</a></code></dd>
@@ -439,7 +439,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/FSHLogProvider
<ul class="blockListLast">
<li class="blockList">
<h4>writeWALTrailerAndMagic</h4>
-<pre>protected long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.119">writeWALTrailerAndMagic</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer trailer,
+<pre>protected long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.html#line.118">writeWALTrailerAndMagic</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer trailer,
byte[] magic)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html
index 4b869aa..22d7f7f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html
@@ -461,7 +461,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALP
<ul class="blockList">
<li class="blockList">
<h4>seek</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.119">seek</a>(long pos)
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.116">seek</a>(long pos)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -477,7 +477,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALP
<ul class="blockList">
<li class="blockList">
<h4>initReader</h4>
-<pre>protected abstract <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.136">initReader</a>(org.apache.hadoop.fs.FSDataInputStream stream)
+<pre>protected abstract <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.133">initReader</a>(org.apache.hadoop.fs.FSDataInputStream stream)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Initializes the log reader with a particular stream (may be null).
Reader assumes ownership of the stream if not null and may use it. Called once.</div>
@@ -495,7 +495,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALP
<ul class="blockList">
<li class="blockList">
<h4>initAfterCompression</h4>
-<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.141">initAfterCompression</a>()
+<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.138">initAfterCompression</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Initializes the compression after the shared stuff has been initialized. Called once.</div>
<dl>
@@ -510,7 +510,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALP
<ul class="blockList">
<li class="blockList">
<h4>initAfterCompression</h4>
-<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.147">initAfterCompression</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> cellCodecClsName)
+<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.144">initAfterCompression</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> cellCodecClsName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Initializes the compression after the shared stuff has been initialized. Called once.</div>
<dl>
@@ -527,7 +527,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALP
<ul class="blockList">
<li class="blockList">
<h4>hasCompression</h4>
-<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.151">hasCompression</a>()</pre>
+<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.148">hasCompression</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Whether compression is enabled for this log.</dd>
@@ -540,7 +540,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALP
<ul class="blockList">
<li class="blockList">
<h4>hasTagCompression</h4>
-<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.156">hasTagCompression</a>()</pre>
+<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.153">hasTagCompression</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Whether tag compression is enabled for this log.</dd>
@@ -553,7 +553,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALP
<ul class="blockList">
<li class="blockList">
<h4>readNext</h4>
-<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.163">readNext</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> e)
+<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.160">readNext</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> e)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Read next entry.</div>
<dl>
@@ -572,7 +572,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALP
<ul class="blockListLast">
<li class="blockList">
<h4>seekOnFs</h4>
-<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.168">seekOnFs</a>(long pos)
+<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/ReaderBase.html#line.165">seekOnFs</a>(long pos)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Performs a filesystem-level seek to a certain position in an underlying file.</div>
<dl>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.html
index 18e1a2b..dea6e78 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.html
@@ -154,7 +154,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALC
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from class org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.BaosAndCompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.CompressedKvDecoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WA
LCellCodec.CompressedKvEncoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.EnsureKvEncoder</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.BaosAndCompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.CompressedKvDecoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WA
LCellCodec.CompressedKvEncoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.EnsureKvEncoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneCompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneUncompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.StatelessUncompressor</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.codec.Codec">
@@ -191,7 +191,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALC
<!-- -->
</a>
<h3>Fields inherited from class org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#compression">compression</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#statelessUncompressor">statelessUncompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#WAL_CELL_CODEC_CLASS_KEY">WAL_CELL_CODEC_CLASS_KEY</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#compression">compression</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#WAL_CELL_CODEC_CLASS_KEY">WAL_CELL_CODEC_CLASS_KEY</a></code></li>
</ul>
</li>
</ul>
@@ -257,7 +257,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALC
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#create-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">create</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#create-org.apache.hadoop.conf.Configuration-java.lang.String-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">create</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getByteStringCompressor--">getByteStringCompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getByteStringUncompressor--">getByteStringUncompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getDecoder-org.apache.hadoop.hbase.nio.ByteBuff-">getDecoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getWALCellCodecClass-org.apache.hadoop.c
onf.Configuration-">getWALCellCodecClass</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#create-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">create</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#create-org.apache.hadoop.conf.Configuration-java.lang.String-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">create</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getByteStringCompressor--">getByteStringCompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getByteStringUncompressor--">getByteStringUncompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getDecoder-org.apache.hadoop.hbase.nio.ByteBuff-">getDecoder</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getNoneCompressor--">getNoneCompressor</
a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getNoneUncompressor--">getNoneUncompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getWALCellCodecClass-org.apache.hadoop.conf.Configuration-">getWALCellCodecClass</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
index d5306e1..c7f1a45 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
@@ -75,13 +75,13 @@ var activeTableTab = "activeTableTab";
<ul class="subNavList">
<li>Summary: </li>
<li>Nested | </li>
-<li><a href="#fields.inherited.from.class.java.io.ByteArrayOutputStream">Field</a> | </li>
+<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
-<li>Field | </li>
+<li><a href="#field.detail">Field</a> | </li>
<li><a href="#constructor.detail">Constr</a> | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.145">WALCellCodec.BaosAndCompressor</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.150">WALCellCodec.BaosAndCompressor</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/ByteArrayOutputStream.html?is-external=true" title="class or interface in java.io">ByteArrayOutputStream</a>
implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a></pre>
</li>
@@ -142,6 +142,17 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
<!-- -->
</a>
<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#compressionContext">compressionContext</a></span></code> </td>
+</tr>
+</table>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.java.io.ByteArrayOutputStream">
<!-- -->
@@ -163,7 +174,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#BaosAndCompressor--">BaosAndCompressor</a></span>()</code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#BaosAndCompressor-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">BaosAndCompressor</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compressionContext)</code> </td>
</tr>
</table>
</li>
@@ -182,8 +193,8 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>org.apache.hbase.thirdparty.com.google.protobuf.ByteString</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#compress-byte:A-org.apache.hadoop.hbase.io.util.Dictionary-">compress</a></span>(byte[] data,
- <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)</code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#compress-byte:A-java.lang.Enum-">compress</a></span>(byte[] data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)</code> </td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>org.apache.hbase.thirdparty.com.google.protobuf.ByteString</code></td>
@@ -191,8 +202,8 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#writeCompressed-byte:A-org.apache.hadoop.hbase.io.util.Dictionary-">writeCompressed</a></span>(byte[] data,
- <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)</code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#writeCompressed-byte:A-java.lang.Enum-">writeCompressed</a></span>(byte[] data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)</code> </td>
</tr>
</table>
<ul class="blockList">
@@ -224,19 +235,36 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
<div class="details">
<ul class="blockList">
<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="compressionContext">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>compressionContext</h4>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.151">compressionContext</a></pre>
+</li>
+</ul>
+</li>
+</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
-<a name="BaosAndCompressor--">
+<a name="BaosAndCompressor-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>BaosAndCompressor</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.145">BaosAndCompressor</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.153">BaosAndCompressor</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compressionContext)</pre>
</li>
</ul>
</li>
@@ -253,34 +281,34 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
<ul class="blockList">
<li class="blockList">
<h4>toByteString</h4>
-<pre>public org.apache.hbase.thirdparty.com.google.protobuf.ByteString <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.146">toByteString</a>()</pre>
+<pre>public org.apache.hbase.thirdparty.com.google.protobuf.ByteString <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.156">toByteString</a>()</pre>
</li>
</ul>
-<a name="compress-byte:A-org.apache.hadoop.hbase.io.util.Dictionary-">
+<a name="compress-byte:A-java.lang.Enum-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>compress</h4>
-<pre>public org.apache.hbase.thirdparty.com.google.protobuf.ByteString <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.153">compress</a>(byte[] data,
- <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)
+<pre>public org.apache.hbase.thirdparty.com.google.protobuf.ByteString <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.163">compress</a>(byte[] data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html#compress-byte:A-org.apache.hadoop.hbase.io.util.Dictionary-">compress</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a></code></dd>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html#compress-byte:A-java.lang.Enum-">compress</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a></code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
</dl>
</li>
</ul>
-<a name="writeCompressed-byte:A-org.apache.hadoop.hbase.io.util.Dictionary-">
+<a name="writeCompressed-byte:A-java.lang.Enum-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>writeCompressed</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.162">writeCompressed</a>(byte[] data,
- <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.172">writeCompressed</a>(byte[] data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -342,13 +370,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
<ul class="subNavList">
<li>Summary: </li>
<li>Nested | </li>
-<li><a href="#fields.inherited.from.class.java.io.ByteArrayOutputStream">Field</a> | </li>
+<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
-<li>Field | </li>
+<li><a href="#field.detail">Field</a> | </li>
<li><a href="#constructor.detail">Constr</a> | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
index 2b1b103..3aea17a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
@@ -101,7 +101,7 @@ var activeTableTab = "activeTableTab";
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.BaosAndCompressor</a></dd>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.BaosAndCompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneCompressor</a></dd>
</dl>
<dl>
<dt>Enclosing class:</dt>
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.134">WALCellCodec.ByteStringCompressor</a></pre>
+<pre>public static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.129">WALCellCodec.ByteStringCompressor</a></pre>
</li>
</ul>
</div>
@@ -130,8 +130,8 @@ var activeTableTab = "activeTableTab";
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>org.apache.hbase.thirdparty.com.google.protobuf.ByteString</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html#compress-byte:A-org.apache.hadoop.hbase.io.util.Dictionary-">compress</a></span>(byte[] data,
- <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)</code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html#compress-byte:A-java.lang.Enum-">compress</a></span>(byte[] data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)</code> </td>
</tr>
</table>
</li>
@@ -148,14 +148,14 @@ var activeTableTab = "activeTableTab";
<!-- -->
</a>
<h3>Method Detail</h3>
-<a name="compress-byte:A-org.apache.hadoop.hbase.io.util.Dictionary-">
+<a name="compress-byte:A-java.lang.Enum-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>compress</h4>
-<pre>org.apache.hbase.thirdparty.com.google.protobuf.ByteString <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html#line.135">compress</a>(byte[] data,
- <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)
+<pre>org.apache.hbase.thirdparty.com.google.protobuf.ByteString <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html#line.130">compress</a>(byte[] data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
index eae5f40..730c1e0 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
@@ -100,12 +100,16 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<dl>
+<dt>All Known Implementing Classes:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneUncompressor</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.StatelessUncompressor</a></dd>
+</dl>
+<dl>
<dt>Enclosing class:</dt>
<dd><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a></dd>
</dl>
<hr>
<br>
-<pre>public static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.138">WALCellCodec.ByteStringUncompressor</a></pre>
+<pre>public static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.133">WALCellCodec.ByteStringUncompressor</a></pre>
</li>
</ul>
</div>
@@ -126,8 +130,8 @@ var activeTableTab = "activeTableTab";
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>byte[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html#uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-org.apache.hadoop.hbase.io.util.Dictionary-">uncompress</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString data,
- <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)</code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html#uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-java.lang.Enum-">uncompress</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)</code> </td>
</tr>
</table>
</li>
@@ -144,14 +148,14 @@ var activeTableTab = "activeTableTab";
<!-- -->
</a>
<h3>Method Detail</h3>
-<a name="uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-org.apache.hadoop.hbase.io.util.Dictionary-">
+<a name="uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-java.lang.Enum-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>uncompress</h4>
-<pre>byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html#line.139">uncompress</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString data,
- <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)
+<pre>byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html#line.134">uncompress</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
index 5aadb34..836904e 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.232">WALCellCodec.CompressedKvDecoder</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.262">WALCellCodec.CompressedKvDecoder</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.html" title="class in org.apache.hadoop.hbase.codec">BaseDecoder</a></pre>
</li>
</ul>
@@ -253,7 +253,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.htm
<ul class="blockListLast">
<li class="blockList">
<h4>compression</h4>
-<pre>private final <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.233">compression</a></pre>
+<pre>private final <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.263">compression</a></pre>
</li>
</ul>
</li>
@@ -270,7 +270,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.htm
<ul class="blockListLast">
<li class="blockList">
<h4>CompressedKvDecoder</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.234">CompressedKvDecoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a> in,
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.264">CompressedKvDecoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a> in,
<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compression)</pre>
</li>
</ul>
@@ -288,7 +288,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.htm
<ul class="blockList">
<li class="blockList">
<h4>parseCell</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.240">parseCell</a>()
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.270">parseCell</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.html#parseCell--">BaseDecoder</a></code></span></div>
<div class="block">Extract a Cell.</div>
@@ -309,7 +309,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.htm
<ul class="blockList">
<li class="blockList">
<h4>readIntoArray</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.293">readIntoArray</a>(byte[] to,
+<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.326">readIntoArray</a>(byte[] to,
int offset,
<a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -325,7 +325,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.htm
<ul class="blockListLast">
<li class="blockList">
<h4>checkLength</h4>
-<pre>private static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.315">checkLength</a>(int len,
+<pre>private static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.348">checkLength</a>(int len,
int max)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
index 323a41c..fef9770 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.197">WALCellCodec.CompressedKvEncoder</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.224">WALCellCodec.CompressedKvEncoder</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.html" title="class in org.apache.hadoop.hbase.codec">BaseEncoder</a></pre>
</li>
</ul>
@@ -227,7 +227,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.htm
<ul class="blockListLast">
<li class="blockList">
<h4>compression</h4>
-<pre>private final <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html#line.198">compression</a></pre>
+<pre>private final <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html#line.225">compression</a></pre>
</li>
</ul>
</li>
@@ -244,7 +244,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.htm
<ul class="blockListLast">
<li class="blockList">
<h4>CompressedKvEncoder</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html#line.199">CompressedKvEncoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> out,
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html#line.226">CompressedKvEncoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> out,
<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compression)</pre>
</li>
</ul>
@@ -262,7 +262,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.htm
<ul class="blockListLast">
<li class="blockList">
<h4>write</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html#line.205">write</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html#line.232">write</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/io/CellOutputStream.html#write-org.apache.hadoop.hbase.Cell-">CellOutputStream</a></code></span></div>
<div class="block">Implementation must copy the entire state of the Cell. If the written Cell is modified
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
index d20f029..713352c 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html" target="_top">Frames</a></li>
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.322">WALCellCodec.EnsureKvEncoder</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.355">WALCellCodec.EnsureKvEncoder</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.html" title="class in org.apache.hadoop.hbase.codec">BaseEncoder</a></pre>
</li>
</ul>
@@ -215,7 +215,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.htm
<ul class="blockListLast">
<li class="blockList">
<h4>EnsureKvEncoder</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html#line.323">EnsureKvEncoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> out)</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html#line.356">EnsureKvEncoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> out)</pre>
</li>
</ul>
</li>
@@ -232,7 +232,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.htm
<ul class="blockListLast">
<li class="blockList">
<h4>write</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html#line.327">write</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html#line.360">write</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/io/CellOutputStream.html#write-org.apache.hadoop.hbase.Cell-">CellOutputStream</a></code></span></div>
<div class="block">Implementation must copy the entire state of the Cell. If the written Cell is modified
@@ -279,7 +279,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.htm
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html" target="_top">Frames</a></li>
[34/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html
index f236300..513d2ad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.Command.html
@@ -26,1048 +26,1115 @@
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.backup.impl;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.io.IOException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.net.URI;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.List;<a name="line.42"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.lang3.StringUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configured;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<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> * General backup commands, options and usage messages<a name="line.71"></a>
-<span class="sourceLineNo">072</span> */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceAudience.Private<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public final class BackupCommands {<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.77"></a>
-<span class="sourceLineNo">078</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.80"></a>
-<span class="sourceLineNo">081</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.81"></a>
-<span class="sourceLineNo">082</span> + " delete delete an existing backup image\n"<a name="line.82"></a>
-<span class="sourceLineNo">083</span> + " describe show the detailed information of a backup image\n"<a name="line.83"></a>
-<span class="sourceLineNo">084</span> + " history show history of all successful backups\n"<a name="line.84"></a>
-<span class="sourceLineNo">085</span> + " progress show the progress of the latest backup request\n"<a name="line.85"></a>
-<span class="sourceLineNo">086</span> + " set backup set management\n"<a name="line.86"></a>
-<span class="sourceLineNo">087</span> + " repair repair backup system table\n"<a name="line.87"></a>
-<span class="sourceLineNo">088</span> + " merge merge backup images\n"<a name="line.88"></a>
-<span class="sourceLineNo">089</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> public static final String CREATE_CMD_USAGE =<a name="line.91"></a>
-<span class="sourceLineNo">092</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.92"></a>
-<span class="sourceLineNo">093</span> + " type \"full\" to create a full backup image\n"<a name="line.93"></a>
-<span class="sourceLineNo">094</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.94"></a>
-<span class="sourceLineNo">095</span> + " backup_path Full path to store the backup image\n";<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.97"></a>
-<span class="sourceLineNo">098</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.98"></a>
-<span class="sourceLineNo">099</span> + " progress for currently running backup session.";<a name="line.99"></a>
-<span class="sourceLineNo">100</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.100"></a>
-<span class="sourceLineNo">101</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.103"></a>
-<span class="sourceLineNo">104</span> + " backup_id Backup image id\n";<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete <backup_id>\n"<a name="line.108"></a>
-<span class="sourceLineNo">109</span> + " backup_id Backup image id\n";<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.113"></a>
-<span class="sourceLineNo">114</span> + " name Backup set name\n"<a name="line.114"></a>
-<span class="sourceLineNo">115</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.115"></a>
-<span class="sourceLineNo">116</span> + " add add tables to a set, create a set if needed\n"<a name="line.116"></a>
-<span class="sourceLineNo">117</span> + " remove remove tables from a set\n"<a name="line.117"></a>
-<span class="sourceLineNo">118</span> + " list list all backup sets in the system\n"<a name="line.118"></a>
-<span class="sourceLineNo">119</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.119"></a>
-<span class="sourceLineNo">120</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.120"></a>
-<span class="sourceLineNo">121</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span> public static final String USAGE_FOOTER = "";<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> public static abstract class Command extends Configured {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> CommandLine cmdline;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> Connection conn;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> Command(Configuration conf) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (conf == null) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> conf = HBaseConfiguration.create();<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span> setConf(conf);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span> public void execute() throws IOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> printUsage();<a name="line.138"></a>
-<span class="sourceLineNo">139</span> throw new IOException(INCORRECT_USAGE);<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> // Create connection<a name="line.142"></a>
-<span class="sourceLineNo">143</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.143"></a>
-<span class="sourceLineNo">144</span> if (requiresNoActiveSession()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> // Check active session<a name="line.145"></a>
-<span class="sourceLineNo">146</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span> if (sessions.size() > 0) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.150"></a>
-<span class="sourceLineNo">151</span> System.err.println(sessions.get(0));<a name="line.151"></a>
-<span class="sourceLineNo">152</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.152"></a>
-<span class="sourceLineNo">153</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.153"></a>
-<span class="sourceLineNo">154</span> throw new IOException("Active session found, aborted command execution");<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> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> if (requiresConsistentState()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span> // Check failed delete<a name="line.159"></a>
-<span class="sourceLineNo">160</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (ids != null && ids.length > 0) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> System.err.println("Backup system recovery is required.");<a name="line.165"></a>
-<span class="sourceLineNo">166</span> throw new IOException("Failed backup DELETE found, aborted command execution");<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.169"></a>
-<span class="sourceLineNo">170</span> if (ids != null && ids.length > 0) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.171"></a>
-<span class="sourceLineNo">172</span> System.err.println("Backup system recovery is required.");<a name="line.172"></a>
-<span class="sourceLineNo">173</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> }<a name="line.175"></a>
-<span class="sourceLineNo">176</span> }<a name="line.176"></a>
-<span class="sourceLineNo">177</span> }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span> public void finish() throws IOException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (conn != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> conn.close();<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> protected abstract void printUsage();<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * The command can't be run if active backup session is in progress<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * @return true if no active sessions are in progress<a name="line.189"></a>
-<span class="sourceLineNo">190</span> */<a name="line.190"></a>
-<span class="sourceLineNo">191</span> protected boolean requiresNoActiveSession() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span> return false;<a name="line.192"></a>
-<span class="sourceLineNo">193</span> }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * because of an abnormal termination of a backup session or delete command<a name="line.197"></a>
-<span class="sourceLineNo">198</span> * @return true, if yes<a name="line.198"></a>
-<span class="sourceLineNo">199</span> */<a name="line.199"></a>
-<span class="sourceLineNo">200</span> protected boolean requiresConsistentState() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> return false;<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 BackupCommands() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> throw new AssertionError("Instantiating utility class...");<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> Command cmd;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> switch (type) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> case CREATE:<a name="line.212"></a>
-<span class="sourceLineNo">213</span> cmd = new CreateCommand(conf, cmdline);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span> case DESCRIBE:<a name="line.215"></a>
-<span class="sourceLineNo">216</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.216"></a>
+<span class="sourceLineNo">044</span>import java.io.IOException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.net.URI;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.List;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.lang3.StringUtils;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.conf.Configured;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.FileSystem;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.fs.Path;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.TableName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.yetus.audience.InterfaceAudience;<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> * General backup commands, options and usage messages<a name="line.75"></a>
+<span class="sourceLineNo">076</span> */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceAudience.Private<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public final class BackupCommands {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.81"></a>
+<span class="sourceLineNo">082</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.84"></a>
+<span class="sourceLineNo">085</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.85"></a>
+<span class="sourceLineNo">086</span> + " delete delete an existing backup image\n"<a name="line.86"></a>
+<span class="sourceLineNo">087</span> + " describe show the detailed information of a backup image\n"<a name="line.87"></a>
+<span class="sourceLineNo">088</span> + " history show history of all successful backups\n"<a name="line.88"></a>
+<span class="sourceLineNo">089</span> + " progress show the progress of the latest backup request\n"<a name="line.89"></a>
+<span class="sourceLineNo">090</span> + " set backup set management\n"<a name="line.90"></a>
+<span class="sourceLineNo">091</span> + " repair repair backup system table\n"<a name="line.91"></a>
+<span class="sourceLineNo">092</span> + " merge merge backup images\n"<a name="line.92"></a>
+<span class="sourceLineNo">093</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span> public static final String CREATE_CMD_USAGE =<a name="line.95"></a>
+<span class="sourceLineNo">096</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.96"></a>
+<span class="sourceLineNo">097</span> + " type \"full\" to create a full backup image\n"<a name="line.97"></a>
+<span class="sourceLineNo">098</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.98"></a>
+<span class="sourceLineNo">099</span> + " backup_path Full path to store the backup image\n";<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.101"></a>
+<span class="sourceLineNo">102</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.102"></a>
+<span class="sourceLineNo">103</span> + " progress for currently running backup session.";<a name="line.103"></a>
+<span class="sourceLineNo">104</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.104"></a>
+<span class="sourceLineNo">105</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.107"></a>
+<span class="sourceLineNo">108</span> + " backup_id Backup image id\n";<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete [options]";<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.116"></a>
+<span class="sourceLineNo">117</span> + " name Backup set name\n"<a name="line.117"></a>
+<span class="sourceLineNo">118</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.118"></a>
+<span class="sourceLineNo">119</span> + " add add tables to a set, create a set if needed\n"<a name="line.119"></a>
+<span class="sourceLineNo">120</span> + " remove remove tables from a set\n"<a name="line.120"></a>
+<span class="sourceLineNo">121</span> + " list list all backup sets in the system\n"<a name="line.121"></a>
+<span class="sourceLineNo">122</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.122"></a>
+<span class="sourceLineNo">123</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.123"></a>
+<span class="sourceLineNo">124</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static final String USAGE_FOOTER = "";<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> public static abstract class Command extends Configured {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> CommandLine cmdline;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> Connection conn;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span> Command(Configuration conf) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span> if (conf == null) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> conf = HBaseConfiguration.create();<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> setConf(conf);<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> public void execute() throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> printUsage();<a name="line.141"></a>
+<span class="sourceLineNo">142</span> throw new IOException(INCORRECT_USAGE);<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">145</span> // Create connection<a name="line.145"></a>
+<span class="sourceLineNo">146</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (requiresNoActiveSession()) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // Check active session<a name="line.148"></a>
+<span class="sourceLineNo">149</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span> if (sessions.size() > 0) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.153"></a>
+<span class="sourceLineNo">154</span> System.err.println(sessions.get(0));<a name="line.154"></a>
+<span class="sourceLineNo">155</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.155"></a>
+<span class="sourceLineNo">156</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.156"></a>
+<span class="sourceLineNo">157</span> throw new IOException("Active session found, aborted command execution");<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span> }<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span> if (requiresConsistentState()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span> // Check failed delete<a name="line.162"></a>
+<span class="sourceLineNo">163</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span> if (ids != null && ids.length > 0) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.167"></a>
+<span class="sourceLineNo">168</span> System.err.println("Backup system recovery is required.");<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throw new IOException("Failed backup DELETE found, aborted command execution");<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> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> if (ids != null && ids.length > 0) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.174"></a>
+<span class="sourceLineNo">175</span> System.err.println("Backup system recovery is required.");<a name="line.175"></a>
+<span class="sourceLineNo">176</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> }<a name="line.179"></a>
+<span class="sourceLineNo">180</span> }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span> public void finish() throws IOException {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> if (conn != null) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> conn.close();<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> protected abstract void printUsage();<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * The command can't be run if active backup session is in progress<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * @return true if no active sessions are in progress<a name="line.192"></a>
+<span class="sourceLineNo">193</span> */<a name="line.193"></a>
+<span class="sourceLineNo">194</span> protected boolean requiresNoActiveSession() {<a name="line.194"></a>
+<span class="sourceLineNo">195</span> return false;<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * because of an abnormal termination of a backup session or delete command<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * @return true, if yes<a name="line.201"></a>
+<span class="sourceLineNo">202</span> */<a name="line.202"></a>
+<span class="sourceLineNo">203</span> protected boolean requiresConsistentState() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return false;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> private BackupCommands() {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new AssertionError("Instantiating utility class...");<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> Command cmd;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> switch (type) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> case CREATE:<a name="line.215"></a>
+<span class="sourceLineNo">216</span> cmd = new CreateCommand(conf, cmdline);<a name="line.216"></a>
<span class="sourceLineNo">217</span> break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span> case PROGRESS:<a name="line.218"></a>
-<span class="sourceLineNo">219</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.219"></a>
+<span class="sourceLineNo">218</span> case DESCRIBE:<a name="line.218"></a>
+<span class="sourceLineNo">219</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.219"></a>
<span class="sourceLineNo">220</span> break;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> case DELETE:<a name="line.221"></a>
-<span class="sourceLineNo">222</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.222"></a>
+<span class="sourceLineNo">221</span> case PROGRESS:<a name="line.221"></a>
+<span class="sourceLineNo">222</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.222"></a>
<span class="sourceLineNo">223</span> break;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> case HISTORY:<a name="line.224"></a>
-<span class="sourceLineNo">225</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.225"></a>
+<span class="sourceLineNo">224</span> case DELETE:<a name="line.224"></a>
+<span class="sourceLineNo">225</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.225"></a>
<span class="sourceLineNo">226</span> break;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> case SET:<a name="line.227"></a>
-<span class="sourceLineNo">228</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.228"></a>
+<span class="sourceLineNo">227</span> case HISTORY:<a name="line.227"></a>
+<span class="sourceLineNo">228</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.228"></a>
<span class="sourceLineNo">229</span> break;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> case REPAIR:<a name="line.230"></a>
-<span class="sourceLineNo">231</span> cmd = new RepairCommand(conf, cmdline);<a name="line.231"></a>
+<span class="sourceLineNo">230</span> case SET:<a name="line.230"></a>
+<span class="sourceLineNo">231</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.231"></a>
<span class="sourceLineNo">232</span> break;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> case MERGE:<a name="line.233"></a>
-<span class="sourceLineNo">234</span> cmd = new MergeCommand(conf, cmdline);<a name="line.234"></a>
+<span class="sourceLineNo">233</span> case REPAIR:<a name="line.233"></a>
+<span class="sourceLineNo">234</span> cmd = new RepairCommand(conf, cmdline);<a name="line.234"></a>
<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> case HELP:<a name="line.236"></a>
-<span class="sourceLineNo">237</span> default:<a name="line.237"></a>
-<span class="sourceLineNo">238</span> cmd = new HelpCommand(conf, cmdline);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> break;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return cmd;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> static int numOfArgs(String[] args) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> if (args == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> return 0;<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> return args.length;<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
+<span class="sourceLineNo">236</span> case MERGE:<a name="line.236"></a>
+<span class="sourceLineNo">237</span> cmd = new MergeCommand(conf, cmdline);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> break;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> case HELP:<a name="line.239"></a>
+<span class="sourceLineNo">240</span> default:<a name="line.240"></a>
+<span class="sourceLineNo">241</span> cmd = new HelpCommand(conf, cmdline);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> break;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> return cmd;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> static int numOfArgs(String[] args) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> if (args == null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span> return 0;<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> public static class CreateCommand extends Command {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span> super(conf);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> this.cmdline = cmdline;<a name="line.255"></a>
-<span class="sourceLineNo">256</span> }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span> @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span> protected boolean requiresNoActiveSession() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> return true;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span> protected boolean requiresConsistentState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> return true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span> }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span> @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span> public void execute() throws IOException {<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> printUsage();<a name="line.271"></a>
-<span class="sourceLineNo">272</span> throw new IOException(INCORRECT_USAGE);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span> String[] args = cmdline.getArgs();<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (args.length != 3) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> printUsage();<a name="line.276"></a>
-<span class="sourceLineNo">277</span> throw new IOException(INCORRECT_USAGE);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.280"></a>
-<span class="sourceLineNo">281</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> printUsage();<a name="line.283"></a>
-<span class="sourceLineNo">284</span> throw new IOException(INCORRECT_USAGE);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span> if (!verifyPath(args[2])) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> printUsage();<a name="line.288"></a>
-<span class="sourceLineNo">289</span> throw new IOException(INCORRECT_USAGE);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> String targetBackupDir = args[2];<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.292"></a>
-<span class="sourceLineNo">293</span> if (isRootFolder(targetBackupDir)) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> String tables;<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span> // Check if we have both: backup set and list of tables<a name="line.298"></a>
-<span class="sourceLineNo">299</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.300"></a>
-<span class="sourceLineNo">301</span> + " of tables, but not both");<a name="line.301"></a>
-<span class="sourceLineNo">302</span> printUsage();<a name="line.302"></a>
-<span class="sourceLineNo">303</span> throw new IOException(INCORRECT_USAGE);<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Creates connection<a name="line.305"></a>
-<span class="sourceLineNo">306</span> super.execute();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Check backup set<a name="line.307"></a>
-<span class="sourceLineNo">308</span> String setName = null;<a name="line.308"></a>
-<span class="sourceLineNo">309</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> tables = getTablesForSet(setName, getConf());<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> if (tables == null) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> System.out.println("ERROR: Backup set '" + setName<a name="line.314"></a>
-<span class="sourceLineNo">315</span> + "' is either empty or does not exist");<a name="line.315"></a>
-<span class="sourceLineNo">316</span> printUsage();<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException(INCORRECT_USAGE);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span> int bandwidth =<a name="line.322"></a>
-<span class="sourceLineNo">323</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.323"></a>
-<span class="sourceLineNo">324</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> int workers =<a name="line.325"></a>
-<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.326"></a>
-<span class="sourceLineNo">327</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // Set system property value for MR job<a name="line.331"></a>
-<span class="sourceLineNo">332</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> BackupRequest request =<a name="line.337"></a>
-<span class="sourceLineNo">338</span> builder<a name="line.338"></a>
-<span class="sourceLineNo">339</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.339"></a>
-<span class="sourceLineNo">340</span> .withTableList(<a name="line.340"></a>
-<span class="sourceLineNo">341</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.341"></a>
-<span class="sourceLineNo">342</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.342"></a>
-<span class="sourceLineNo">343</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> String backupId = admin.backupTables(request);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.345"></a>
-<span class="sourceLineNo">346</span> } catch (IOException e) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.347"></a>
-<span class="sourceLineNo">348</span> throw e;<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> Path p = new Path(targetBackupDir);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> return p.isRoot();<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> private boolean verifyPath(String path) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> Path p = new Path(path);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> URI uri = p.toUri();<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (uri.getScheme() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> return false;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> FileSystem.get(uri, conf);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> return true;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> } catch (Exception e) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> return false;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> }<a name="line.371"></a>
-<span class="sourceLineNo">372</span> }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (tables == null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> return null;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span> protected void printUsage() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> System.out.println(CREATE_CMD_USAGE);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> Options options = new Options();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.397"></a>
-<span class="sourceLineNo">398</span> helpFormatter.setLeftPadding(2);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> helpFormatter.setDescPadding(8);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> helpFormatter.setWidth(100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.401"></a>
-<span class="sourceLineNo">402</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> public static class HelpCommand extends Command {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span> super(conf);<a name="line.408"></a>
-<span class="sourceLineNo">409</span> this.cmdline = cmdline;<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void execute() throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> if (cmdline == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span> printUsage();<a name="line.415"></a>
-<span class="sourceLineNo">416</span> throw new IOException(INCORRECT_USAGE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span> }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span> String[] args = cmdline.getArgs();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> if (args == null || args.length == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span> printUsage();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> throw new IOException(INCORRECT_USAGE);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> if (args.length != 2) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.426"></a>
-<span class="sourceLineNo">427</span> printUsage();<a name="line.427"></a>
-<span class="sourceLineNo">428</span> throw new IOException(INCORRECT_USAGE);<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> String type = args[1];<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (BackupCommand.CREATE.name().equalsIgnoreCase(type)) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> System.out.println(CREATE_CMD_USAGE);<a name="line.434"></a>
-<span class="sourceLineNo">435</span> } else if (BackupCommand.DESCRIBE.name().equalsIgnoreCase(type)) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.436"></a>
-<span class="sourceLineNo">437</span> } else if (BackupCommand.HISTORY.name().equalsIgnoreCase(type)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> System.out.println(HISTORY_CMD_USAGE);<a name="line.438"></a>
-<span class="sourceLineNo">439</span> } else if (BackupCommand.PROGRESS.name().equalsIgnoreCase(type)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> System.out.println(PROGRESS_CMD_USAGE);<a name="line.440"></a>
-<span class="sourceLineNo">441</span> } else if (BackupCommand.DELETE.name().equalsIgnoreCase(type)) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> System.out.println(DELETE_CMD_USAGE);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> } else if (BackupCommand.SET.name().equalsIgnoreCase(type)) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> System.out.println(SET_CMD_USAGE);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> } else {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> System.out.println("Unknown command : " + type);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> printUsage();<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span> @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected void printUsage() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> System.out.println(USAGE);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> }<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span> public static class DescribeCommand extends Command {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> DescribeCommand(Configuration conf, CommandLine cmdline) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> super(conf);<a name="line.459"></a>
-<span class="sourceLineNo">460</span> this.cmdline = cmdline;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span> public void execute() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> printUsage();<a name="line.466"></a>
-<span class="sourceLineNo">467</span> throw new IOException(INCORRECT_USAGE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span> String[] args = cmdline.getArgs();<a name="line.469"></a>
-<span class="sourceLineNo">470</span> if (args.length != 2) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> printUsage();<a name="line.471"></a>
-<span class="sourceLineNo">472</span> throw new IOException(INCORRECT_USAGE);<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> super.execute();<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> String backupId = args[1];<a name="line.477"></a>
-<span class="sourceLineNo">478</span> try (final BackupSystemTable sysTable = new BackupSystemTable(conn)) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> BackupInfo info = sysTable.readBackupInfo(backupId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span> if (info == null) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> System.out.println("ERROR: " + backupId + " does not exist");<a name="line.481"></a>
-<span class="sourceLineNo">482</span> printUsage();<a name="line.482"></a>
-<span class="sourceLineNo">483</span> throw new IOException(INCORRECT_USAGE);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> System.out.println(info.getShortDescription());<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> @Override<a name="line.489"></a>
-<span class="sourceLineNo">490</span> protected void printUsage() {<a name="line.490"></a>
-<span class="sourceLineNo">491</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<a name="line.492"></a>
-<span class="sourceLineNo">493</span> }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span> public static class ProgressCommand extends Command {<a name="line.495"></a>
-<span class="sourceLineNo">496</span> ProgressCommand(Configuration conf, CommandLine cmdline) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span> super(conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> this.cmdline = cmdline;<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public void execute() throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">252</span> return args.length;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> public static class CreateCommand extends Command {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> super(conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.cmdline = cmdline;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span> @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span> protected boolean requiresNoActiveSession() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return true;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span> protected boolean requiresConsistentState() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return true;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span> public void execute() throws IOException {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> printUsage();<a name="line.274"></a>
+<span class="sourceLineNo">275</span> throw new IOException(INCORRECT_USAGE);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span> String[] args = cmdline.getArgs();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> if (args.length != 3) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> printUsage();<a name="line.279"></a>
+<span class="sourceLineNo">280</span> throw new IOException(INCORRECT_USAGE);<a name="line.280"></a>
+<span class="sourceLineNo">281</span> }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.283"></a>
+<span class="sourceLineNo">284</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> printUsage();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> throw new IOException(INCORRECT_USAGE);<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> if (!verifyPath(args[2])) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> printUsage();<a name="line.291"></a>
+<span class="sourceLineNo">292</span> throw new IOException(INCORRECT_USAGE);<a name="line.292"></a>
+<span class="sourceLineNo">293</span> }<a name="line.293"></a>
+<span class="sourceLineNo">294</span> String targetBackupDir = args[2];<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (isRootFolder(targetBackupDir)) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> String tables;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // Check if we have both: backup set and list of tables<a name="line.301"></a>
+<span class="sourceLineNo">302</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.303"></a>
+<span class="sourceLineNo">304</span> + " of tables, but not both");<a name="line.304"></a>
+<span class="sourceLineNo">305</span> printUsage();<a name="line.305"></a>
+<span class="sourceLineNo">306</span> throw new IOException(INCORRECT_USAGE);<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span> // Creates connection<a name="line.308"></a>
+<span class="sourceLineNo">309</span> super.execute();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Check backup set<a name="line.310"></a>
+<span class="sourceLineNo">311</span> String setName = null;<a name="line.311"></a>
+<span class="sourceLineNo">312</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> tables = getTablesForSet(setName, getConf());<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span> if (tables == null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> System.out.println("ERROR: Backup set '" + setName<a name="line.317"></a>
+<span class="sourceLineNo">318</span> + "' is either empty or does not exist");<a name="line.318"></a>
+<span class="sourceLineNo">319</span> printUsage();<a name="line.319"></a>
+<span class="sourceLineNo">320</span> throw new IOException(INCORRECT_USAGE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> } else {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span> int bandwidth =<a name="line.325"></a>
+<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.326"></a>
+<span class="sourceLineNo">327</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> int workers =<a name="line.328"></a>
+<span class="sourceLineNo">329</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.329"></a>
+<span class="sourceLineNo">330</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> // Set system property value for MR job<a name="line.334"></a>
+<span class="sourceLineNo">335</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.339"></a>
+<span class="sourceLineNo">340</span> BackupRequest request =<a name="line.340"></a>
+<span class="sourceLineNo">341</span> builder<a name="line.341"></a>
+<span class="sourceLineNo">342</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.342"></a>
+<span class="sourceLineNo">343</span> .withTableList(<a name="line.343"></a>
+<span class="sourceLineNo">344</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.345"></a>
+<span class="sourceLineNo">346</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String backupId = admin.backupTables(request);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> } catch (IOException e) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.350"></a>
+<span class="sourceLineNo">351</span> throw e;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> Path p = new Path(targetBackupDir);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return p.isRoot();<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span> private boolean verifyPath(String path) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> try {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> Path p = new Path(path);<a name="line.362"></a>
+<span class="sourceLineNo">363</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.363"></a>
+<span class="sourceLineNo">364</span> URI uri = p.toUri();<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> if (uri.getScheme() == null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span> return false;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> FileSystem.get(uri, conf);<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return true;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> } catch (Exception e) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return false;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.377"></a>
+<span class="sourceLineNo">378</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span> if (tables == null) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span> return null;<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> @Override<a name="line.389"></a>
+<span class="sourceLineNo">390</span> protected void printUsage() {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> System.out.println(CREATE_CMD_USAGE);<a name="line.391"></a>
+<span class="sourceLineNo">392</span> Options options = new Options();<a name="line.392"></a>
+<span class="sourceLineNo">393</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.400"></a>
+<span class="sourceLineNo">401</span> helpFormatter.setLeftPadding(2);<a name="line.401"></a>
+<span class="sourceLineNo">402</span> helpFormatter.setDescPadding(8);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> helpFormatter.setWidth(100);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.404"></a>
+<span class="sourceLineNo">405</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<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> public static class HelpCommand extends Command {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> super(conf);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> this.cmdline = cmdline;<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span> @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span> public void execute() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span> if (cmdline == null) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> printUsage();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> throw new IOException(INCORRECT_USAGE);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> String[] args = cmdline.getArgs();<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (args == null || args.length == 0) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> printUsage();<a name="line.424"></a>
+<span class="sourceLineNo">425</span> throw new IOException(INCORRECT_USAGE);<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> if (args.length != 2) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.429"></a>
+<span class="sourceLineNo">430</span> printUsage();<a name="line.430"></a>
+<span class="sourceLineNo">431</span> throw new IOException(INCORRECT_USAGE);<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a name="line.432"></a>
+<span cl
<TRUNCATED>
[39/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
new file mode 100644
index 0000000..8b4cbf7
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
@@ -0,0 +1,287 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>WALCellCodec.NoneCompressor (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="WALCellCodec.NoneCompressor (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/WALCellCodec.NoneCompressor.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" target="_top">Frames</a></li>
+<li><a href="WALCellCodec.NoneCompressor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.regionserver.wal</div>
+<h2 title="Class WALCellCodec.NoneCompressor" class="title">Class WALCellCodec.NoneCompressor</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.NoneCompressor</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a></dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a></dd>
+</dl>
+<hr>
+<br>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.186">WALCellCodec.NoneCompressor</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
+implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html#NoneCompressor--">NoneCompressor</a></span>()</code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>org.apache.hbase.thirdparty.com.google.protobuf.ByteString</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html#compress-byte:A-java.lang.Enum-">compress</a></span>(byte[] data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)</code> </td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="NoneCompressor--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>NoneCompressor</h4>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html#line.186">NoneCompressor</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="compress-byte:A-java.lang.Enum-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>compress</h4>
+<pre>public org.apache.hbase.thirdparty.com.google.protobuf.ByteString <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html#line.189">compress</a>(byte[] data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html#compress-byte:A-java.lang.Enum-">compress</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/WALCellCodec.NoneCompressor.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" target="_top">Frames</a></li>
+<li><a href="WALCellCodec.NoneCompressor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
new file mode 100644
index 0000000..ba23cca
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
@@ -0,0 +1,287 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>WALCellCodec.NoneUncompressor (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="WALCellCodec.NoneUncompressor (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/WALCellCodec.NoneUncompressor.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" target="_top">Frames</a></li>
+<li><a href="WALCellCodec.NoneUncompressor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.regionserver.wal</div>
+<h2 title="Class WALCellCodec.NoneUncompressor" class="title">Class WALCellCodec.NoneUncompressor</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.NoneUncompressor</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a></dd>
+</dl>
+<hr>
+<br>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.194">WALCellCodec.NoneUncompressor</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
+implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html#NoneUncompressor--">NoneUncompressor</a></span>()</code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html#uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-java.lang.Enum-">uncompress</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)</code> </td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="NoneUncompressor--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>NoneUncompressor</h4>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html#line.194">NoneUncompressor</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-java.lang.Enum-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>uncompress</h4>
+<pre>public byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html#line.197">uncompress</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html#uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-java.lang.Enum-">uncompress</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/WALCellCodec.NoneUncompressor.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" target="_top">Frames</a></li>
+<li><a href="WALCellCodec.NoneUncompressor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
new file mode 100644
index 0000000..b281d0d
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
@@ -0,0 +1,326 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>WALCellCodec.StatelessUncompressor (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="WALCellCodec.StatelessUncompressor (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/WALCellCodec.StatelessUncompressor.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" target="_top">Frames</a></li>
+<li><a href="WALCellCodec.StatelessUncompressor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.regionserver.wal</div>
+<h2 title="Class WALCellCodec.StatelessUncompressor" class="title">Class WALCellCodec.StatelessUncompressor</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.StatelessUncompressor</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a></dd>
+</dl>
+<hr>
+<br>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.137">WALCellCodec.StatelessUncompressor</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
+implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#compressionContext">compressionContext</a></span></code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#StatelessUncompressor-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">StatelessUncompressor</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compressionContext)</code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-java.lang.Enum-">uncompress</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)</code> </td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="compressionContext">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>compressionContext</h4>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#line.138">compressionContext</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="StatelessUncompressor-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>StatelessUncompressor</h4>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#line.140">StatelessUncompressor</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compressionContext)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-java.lang.Enum-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>uncompress</h4>
+<pre>public byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#line.145">uncompress</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString data,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a> dictIndex)
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html#uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-java.lang.Enum-">uncompress</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/WALCellCodec.StatelessUncompressor.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" target="_top">Frames</a></li>
+<li><a href="WALCellCodec.StatelessUncompressor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
index c152fd4..d42a3bc 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":9,"i8":9};
+var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":9,"i8":9,"i9":9,"i10":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.LimitedPrivate(value={"Coprocesssor","Phoenix","Configuration"})
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.60">WALCellCodec</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.61">WALCellCodec</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html" title="interface in org.apache.hadoop.hbase.codec">Codec</a></pre>
<div class="block">Compression in this class is lifted off Compressor/KeyValueCompression.
@@ -168,6 +168,18 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<td class="colFirst"><code>static class </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.EnsureKvEncoder</a></span></code> </td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) static class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneCompressor</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneUncompressor</a></span></code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) static class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.StatelessUncompressor</a></span></code> </td>
+</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.codec.Codec">
@@ -195,10 +207,6 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#compression">compression</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#statelessUncompressor">statelessUncompressor</a></span></code> </td>
-</tr>
-<tr class="altColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#WAL_CELL_CODEC_CLASS_KEY">WAL_CELL_CODEC_CLASS_KEY</a></span></code>
<div class="block">Configuration key for the class to use when encoding cells in the WAL</div>
@@ -283,10 +291,18 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getEncoder-java.io.OutputStream-">getEncoder</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> os)</code> </td>
</tr>
<tr id="i7" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getNoneCompressor--">getNoneCompressor</a></span>()</code> </td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getNoneUncompressor--">getNoneUncompressor</a></span>()</code> </td>
+</tr>
+<tr id="i9" class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getWALCellCodecClass-org.apache.hadoop.conf.Configuration-">getWALCellCodecClass</a></span>(org.apache.hadoop.conf.Configuration conf)</code> </td>
</tr>
-<tr id="i8" class="altColor">
+<tr id="i10" class="altColor">
<td class="colFirst"><code>private static byte[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#uncompressByteString-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-org.apache.hadoop.hbase.io.util.Dictionary-">uncompressByteString</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString bs,
<a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)</code> </td>
@@ -319,7 +335,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<ul class="blockList">
<li class="blockList">
<h4>WAL_CELL_CODEC_CLASS_KEY</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.62">WAL_CELL_CODEC_CLASS_KEY</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.63">WAL_CELL_CODEC_CLASS_KEY</a></pre>
<div class="block">Configuration key for the class to use when encoding cells in the WAL</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
@@ -330,19 +346,10 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<a name="compression">
<!-- -->
</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>compression</h4>
-<pre>protected final <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.64">compression</a></pre>
-</li>
-</ul>
-<a name="statelessUncompressor">
-<!-- -->
-</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>statelessUncompressor</h4>
-<pre>protected final <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.65">statelessUncompressor</a></pre>
+<h4>compression</h4>
+<pre>protected final <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.65">compression</a></pre>
</li>
</ul>
</li>
@@ -359,7 +366,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<ul class="blockList">
<li class="blockList">
<h4>WALCellCodec</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.75">WALCellCodec</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.70">WALCellCodec</a>()</pre>
<div class="block"><b>All subclasses must implement a no argument constructor</b></div>
</li>
</ul>
@@ -369,7 +376,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<ul class="blockListLast">
<li class="blockList">
<h4>WALCellCodec</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.86">WALCellCodec</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.81">WALCellCodec</a>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compression)</pre>
<div class="block">Default constructor - <b>all subclasses must implement a constructor with this signature </b>
if they are to be dynamically loaded from the <code>Configuration</code>.</div>
@@ -395,7 +402,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<ul class="blockList">
<li class="blockList">
<h4>getWALCellCodecClass</h4>
-<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.90">getWALCellCodecClass</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.85">getWALCellCodecClass</a>(org.apache.hadoop.conf.Configuration conf)</pre>
</li>
</ul>
<a name="create-org.apache.hadoop.conf.Configuration-java.lang.String-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">
@@ -404,7 +411,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<ul class="blockList">
<li class="blockList">
<h4>create</h4>
-<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.107">create</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.102">create</a>(org.apache.hadoop.conf.Configuration conf,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> cellCodecClsName,
<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compression)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</a></pre>
@@ -431,7 +438,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<ul class="blockList">
<li class="blockList">
<h4>create</h4>
-<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.127">create</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.122">create</a>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> compression)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</a></pre>
<div class="block">Create and setup a <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><code>WALCellCodec</code></a> from the
@@ -456,7 +463,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<ul class="blockList">
<li class="blockList">
<h4>uncompressByteString</h4>
-<pre>private static byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.175">uncompressByteString</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString bs,
+<pre>private static byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.202">uncompressByteString</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString bs,
<a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a> dict)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
@@ -471,7 +478,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<ul class="blockList">
<li class="blockList">
<h4>getDecoder</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Decoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Decoder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.336">getDecoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a> is)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Decoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Decoder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.369">getDecoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a> is)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html#getDecoder-java.io.InputStream-">getDecoder</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html" title="interface in org.apache.hadoop.hbase.codec">Codec</a></code></dd>
@@ -484,7 +491,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<ul class="blockList">
<li class="blockList">
<h4>getDecoder</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Decoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Decoder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.342">getDecoder</a>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a> buf)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Decoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Decoder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.375">getDecoder</a>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a> buf)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html#getDecoder-org.apache.hadoop.hbase.nio.ByteBuff-">getDecoder</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html" title="interface in org.apache.hadoop.hbase.codec">Codec</a></code></dd>
@@ -497,7 +504,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<ul class="blockList">
<li class="blockList">
<h4>getEncoder</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Encoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Encoder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.347">getEncoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> os)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Encoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Encoder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.380">getEncoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> os)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html#getEncoder-java.io.OutputStream-">getEncoder</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html" title="interface in org.apache.hadoop.hbase.codec">Codec</a></code></dd>
@@ -510,16 +517,34 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
<ul class="blockList">
<li class="blockList">
<h4>getByteStringCompressor</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.356">getByteStringCompressor</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.389">getByteStringCompressor</a>()</pre>
</li>
</ul>
<a name="getByteStringUncompressor--">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>getByteStringUncompressor</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.361">getByteStringUncompressor</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.393">getByteStringUncompressor</a>()</pre>
+</li>
+</ul>
+<a name="getNoneCompressor--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNoneCompressor</h4>
+<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.397">getNoneCompressor</a>()</pre>
+</li>
+</ul>
+<a name="getNoneUncompressor--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getNoneUncompressor</h4>
+<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.401">getNoneUncompressor</a>()</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html
index 6bae4eb..7a07fed 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.WALEnvironment.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
@@ -492,7 +492,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Coprocess
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.WALEnvironment.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/CompressionContext.DictionaryIndex.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/CompressionContext.DictionaryIndex.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/CompressionContext.DictionaryIndex.html
new file mode 100644
index 0000000..5b196d1
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/CompressionContext.DictionaryIndex.html
@@ -0,0 +1,187 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.regionserver.wal.CompressionContext.DictionaryIndex (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class org.apache.hadoop.hbase.regionserver.wal.CompressionContext.DictionaryIndex (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/class-use/CompressionContext.DictionaryIndex.html" target="_top">Frames</a></li>
+<li><a href="CompressionContext.DictionaryIndex.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.regionserver.wal.CompressionContext.DictionaryIndex" class="title">Uses of Class<br>org.apache.hadoop.hbase.regionserver.wal.CompressionContext.DictionaryIndex</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver.wal">org.apache.hadoop.hbase.regionserver.wal</a></td>
+<td class="colLast"> </td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.regionserver.wal">
+<!-- -->
+</a>
+<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a> in <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a> with type parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <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><<a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a>,<a href="../../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a>></code></td>
+<td class="colLast"><span class="typeNameLabel">CompressionContext.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#dictionaries">dictionaries</a></span></code> </td>
+</tr>
+</tbody>
+</table>
+<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/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a> that return <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a></span><span class="tabEnd"> </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>static <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a></code></td>
+<td class="colLast"><span class="typeNameLabel">CompressionContext.DictionaryIndex.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#valueOf-java.lang.String-">valueOf</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a>[]</code></td>
+<td class="colLast"><span class="typeNameLabel">CompressionContext.DictionaryIndex.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#values--">values</a></span>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/class-use/CompressionContext.DictionaryIndex.html" target="_top">Frames</a></li>
+<li><a href="CompressionContext.DictionaryIndex.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
[23/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
index 42d0637..eb16038 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
@@ -80,21 +80,21 @@
<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.72"></a>
<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.73"></a>
<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.ScheduledChore;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ServerName;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.Result;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.89"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ServerName;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableName;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.Result;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.89"></a>
<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.90"></a>
<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.91"></a>
<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.92"></a>
@@ -220,3477 +220,3481 @@
<span class="sourceLineNo">212</span><a name="line.212"></a>
<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.213"></a>
<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>/**<a name="line.221"></a>
-<span class="sourceLineNo">222</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.222"></a>
-<span class="sourceLineNo">223</span> * master. If many masters are started, all compete. Whichever wins goes on to<a name="line.223"></a>
-<span class="sourceLineNo">224</span> * run the cluster. All others park themselves in their constructor until<a name="line.224"></a>
-<span class="sourceLineNo">225</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * zookeeper. Thereafter, all running master jostle to take over master role.<a name="line.226"></a>
-<span class="sourceLineNo">227</span> *<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * <p>The Master can be asked shutdown the cluster. See {@link #shutdown()}. In<a name="line.228"></a>
-<span class="sourceLineNo">229</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.229"></a>
-<span class="sourceLineNo">230</span> * all reporting in that they are down. This master will then shut itself down.<a name="line.230"></a>
-<span class="sourceLineNo">231</span> *<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * <p>You can also shutdown just this master. Call {@link #stopMaster()}.<a name="line.232"></a>
-<span class="sourceLineNo">233</span> *<a name="line.233"></a>
-<span class="sourceLineNo">234</span> * @see org.apache.zookeeper.Watcher<a name="line.234"></a>
-<span class="sourceLineNo">235</span> */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.236"></a>
-<span class="sourceLineNo">237</span>@SuppressWarnings("deprecation")<a name="line.237"></a>
-<span class="sourceLineNo">238</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private static Logger LOG = LoggerFactory.getLogger(HMaster.class.getName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.243"></a>
-<span class="sourceLineNo">244</span> */<a name="line.244"></a>
-<span class="sourceLineNo">245</span> private static class InitializationMonitor extends HasThread {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.246"></a>
-<span class="sourceLineNo">247</span> public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.247"></a>
-<span class="sourceLineNo">248</span> public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<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> * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * true, do nothing otherwise.<a name="line.252"></a>
-<span class="sourceLineNo">253</span> */<a name="line.253"></a>
-<span class="sourceLineNo">254</span> public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.254"></a>
-<span class="sourceLineNo">255</span> public static final boolean HALT_DEFAULT = false;<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span> private final HMaster master;<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private final long timeout;<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private final boolean haltOnTimeout;<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span> /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.261"></a>
-<span class="sourceLineNo">262</span> InitializationMonitor(HMaster master) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span> super("MasterInitializationMonitor");<a name="line.263"></a>
-<span class="sourceLineNo">264</span> this.master = master;<a name="line.264"></a>
-<span class="sourceLineNo">265</span> this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.265"></a>
-<span class="sourceLineNo">266</span> this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> this.setDaemon(true);<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> @Override<a name="line.270"></a>
-<span class="sourceLineNo">271</span> public void run() {<a name="line.271"></a>
-<span class="sourceLineNo">272</span> try {<a name="line.272"></a>
-<span class="sourceLineNo">273</span> while (!master.isStopped() && master.isActiveMaster()) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span> Thread.sleep(timeout);<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (master.isInitialized()) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.276"></a>
-<span class="sourceLineNo">277</span> } else {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.278"></a>
-<span class="sourceLineNo">279</span> + " consider submitting a bug report including a thread dump of this process.");<a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (haltOnTimeout) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span> LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.281"></a>
-<span class="sourceLineNo">282</span> Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.282"></a>
-<span class="sourceLineNo">283</span> System.exit(-1);<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> } catch (InterruptedException ie) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span> LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span> // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.293"></a>
-<span class="sourceLineNo">294</span> //instance into web context.<a name="line.294"></a>
-<span class="sourceLineNo">295</span> public static final String MASTER = "master";<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span> // Manager and zk listener for master election<a name="line.297"></a>
-<span class="sourceLineNo">298</span> private final ActiveMasterManager activeMasterManager;<a name="line.298"></a>
-<span class="sourceLineNo">299</span> // Region server tracker<a name="line.299"></a>
-<span class="sourceLineNo">300</span> RegionServerTracker regionServerTracker;<a name="line.300"></a>
-<span class="sourceLineNo">301</span> // Draining region server tracker<a name="line.301"></a>
-<span class="sourceLineNo">302</span> private DrainingServerTracker drainingServerTracker;<a name="line.302"></a>
-<span class="sourceLineNo">303</span> // Tracker for load balancer state<a name="line.303"></a>
-<span class="sourceLineNo">304</span> LoadBalancerTracker loadBalancerTracker;<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Tracker for meta location, if any client ZK quorum specified<a name="line.305"></a>
-<span class="sourceLineNo">306</span> MetaLocationSyncer metaLocationSyncer;<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Tracker for active master location, if any client ZK quorum specified<a name="line.307"></a>
-<span class="sourceLineNo">308</span> MasterAddressSyncer masterAddressSyncer;<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span> // Tracker for split and merge state<a name="line.310"></a>
-<span class="sourceLineNo">311</span> private SplitOrMergeTracker splitOrMergeTracker;<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> // Tracker for region normalizer state<a name="line.313"></a>
-<span class="sourceLineNo">314</span> private RegionNormalizerTracker regionNormalizerTracker;<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span> //Tracker for master maintenance mode setting<a name="line.316"></a>
-<span class="sourceLineNo">317</span> private MasterMaintenanceModeTracker maintenanceModeTracker;<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span> private ClusterSchemaService clusterSchemaService;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.321"></a>
-<span class="sourceLineNo">322</span> "hbase.master.wait.on.service.seconds";<a name="line.322"></a>
-<span class="sourceLineNo">323</span> public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> // Metrics for the HMaster<a name="line.325"></a>
-<span class="sourceLineNo">326</span> final MetricsMaster metricsMaster;<a name="line.326"></a>
-<span class="sourceLineNo">327</span> // file system manager for the master FS operations<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private MasterFileSystem fileSystemManager;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private MasterWalManager walManager;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> // server manager to deal with region server info<a name="line.331"></a>
-<span class="sourceLineNo">332</span> private volatile ServerManager serverManager;<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span> // manager of assignment nodes in zookeeper<a name="line.334"></a>
-<span class="sourceLineNo">335</span> private AssignmentManager assignmentManager;<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span> // manager of replication<a name="line.337"></a>
-<span class="sourceLineNo">338</span> private ReplicationPeerManager replicationPeerManager;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span> // buffer for "fatal error" notices from region servers<a name="line.340"></a>
-<span class="sourceLineNo">341</span> // in the cluster. This is only used for assisting<a name="line.341"></a>
-<span class="sourceLineNo">342</span> // operations/debugging.<a name="line.342"></a>
-<span class="sourceLineNo">343</span> MemoryBoundedLogMessageBuffer rsFatals;<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span> // flag set after we become the active master (used for testing)<a name="line.345"></a>
-<span class="sourceLineNo">346</span> private volatile boolean activeMaster = false;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span> // flag set after we complete initialization once active<a name="line.348"></a>
-<span class="sourceLineNo">349</span> private final ProcedureEvent<?> initialized = new ProcedureEvent<>("master initialized");<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span> // flag set after master services are started,<a name="line.351"></a>
-<span class="sourceLineNo">352</span> // initialization may have not completed yet.<a name="line.352"></a>
-<span class="sourceLineNo">353</span> volatile boolean serviceStarted = false;<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span> // flag set after we complete assignMeta.<a name="line.355"></a>
-<span class="sourceLineNo">356</span> private final ProcedureEvent<?> serverCrashProcessingEnabled =<a name="line.356"></a>
-<span class="sourceLineNo">357</span> new ProcedureEvent<>("server crash processing");<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span> // Maximum time we should run balancer for<a name="line.359"></a>
-<span class="sourceLineNo">360</span> private final int maxBlancingTime;<a name="line.360"></a>
-<span class="sourceLineNo">361</span> // Maximum percent of regions in transition when balancing<a name="line.361"></a>
-<span class="sourceLineNo">362</span> private final double maxRitPercent;<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span> private final LockManager lockManager = new LockManager(this);<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span> private LoadBalancer balancer;<a name="line.366"></a>
-<span class="sourceLineNo">367</span> private RegionNormalizer normalizer;<a name="line.367"></a>
-<span class="sourceLineNo">368</span> private BalancerChore balancerChore;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> private RegionNormalizerChore normalizerChore;<a name="line.369"></a>
-<span class="sourceLineNo">370</span> private ClusterStatusChore clusterStatusChore;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span> CatalogJanitor catalogJanitorChore;<a name="line.373"></a>
-<span class="sourceLineNo">374</span> private LogCleaner logCleaner;<a name="line.374"></a>
-<span class="sourceLineNo">375</span> private HFileCleaner hfileCleaner;<a name="line.375"></a>
-<span class="sourceLineNo">376</span> private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.376"></a>
-<span class="sourceLineNo">377</span> private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.377"></a>
-<span class="sourceLineNo">378</span> private MobCompactionChore mobCompactChore;<a name="line.378"></a>
-<span class="sourceLineNo">379</span> private MasterMobCompactionThread mobCompactThread;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> // used to synchronize the mobCompactionStates<a name="line.380"></a>
-<span class="sourceLineNo">381</span> private final IdLock mobCompactionLock = new IdLock();<a name="line.381"></a>
-<span class="sourceLineNo">382</span> // save the information of mob compactions in tables.<a name="line.382"></a>
-<span class="sourceLineNo">383</span> // the key is table name, the value is the number of compactions in that table.<a name="line.383"></a>
-<span class="sourceLineNo">384</span> private Map<TableName, AtomicInteger> mobCompactionStates = Maps.newConcurrentMap();<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> MasterCoprocessorHost cpHost;<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span> private final boolean preLoadTableDescriptors;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> // Time stamps for when a hmaster became active<a name="line.390"></a>
-<span class="sourceLineNo">391</span> private long masterActiveTime;<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span> // Time stamp for when HMaster finishes becoming Active Master<a name="line.393"></a>
-<span class="sourceLineNo">394</span> private long masterFinishedInitializationTime;<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span> //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.396"></a>
-<span class="sourceLineNo">397</span> private final boolean masterCheckCompression;<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span> //should we check encryption settings at master side, default true<a name="line.399"></a>
-<span class="sourceLineNo">400</span> private final boolean masterCheckEncryption;<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> Map<String, Service> coprocessorServiceHandlers = Maps.newHashMap();<a name="line.402"></a>
-<span class="sourceLineNo">403</span><a name="line.403"></a>
-<span class="sourceLineNo">404</span> // monitor for snapshot of hbase tables<a name="line.404"></a>
-<span class="sourceLineNo">405</span> SnapshotManager snapshotManager;<a name="line.405"></a>
-<span class="sourceLineNo">406</span> // monitor for distributed procedures<a name="line.406"></a>
-<span class="sourceLineNo">407</span> private MasterProcedureManagerHost mpmHost;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span> // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.409"></a>
-<span class="sourceLineNo">410</span> private volatile MasterQuotaManager quotaManager;<a name="line.410"></a>
-<span class="sourceLineNo">411</span> private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> private QuotaObserverChore quotaObserverChore;<a name="line.412"></a>
-<span class="sourceLineNo">413</span> private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span> private ProcedureExecutor<MasterProcedureEnv> procedureExecutor;<a name="line.415"></a>
-<span class="sourceLineNo">416</span> private WALProcedureStore procedureStore;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span> // handle table states<a name="line.418"></a>
-<span class="sourceLineNo">419</span> private TableStateManager tableStateManager;<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> private long splitPlanCount;<a name="line.421"></a>
-<span class="sourceLineNo">422</span> private long mergePlanCount;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span> /* Handle favored nodes information */<a name="line.424"></a>
-<span class="sourceLineNo">425</span> private FavoredNodesManager favoredNodesManager;<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span> /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.427"></a>
-<span class="sourceLineNo">428</span> private Server masterJettyServer;<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span> public static class RedirectServlet extends HttpServlet {<a name="line.430"></a>
-<span class="sourceLineNo">431</span> private static final long serialVersionUID = 2894774810058302473L;<a name="line.431"></a>
-<span class="sourceLineNo">432</span> private final int regionServerInfoPort;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> private final String regionServerHostname;<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span> /**<a name="line.435"></a>
-<span class="sourceLineNo">436</span> * @param infoServer that we're trying to send all requests to<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.437"></a>
-<span class="sourceLineNo">438</span> */<a name="line.438"></a>
-<span class="sourceLineNo">439</span> public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> regionServerInfoPort = infoServer.getPort();<a name="line.440"></a>
-<span class="sourceLineNo">441</span> regionServerHostname = hostname;<a name="line.441"></a>
-<span class="sourceLineNo">442</span> }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span> @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span> public void doGet(HttpServletRequest request,<a name="line.445"></a>
-<span class="sourceLineNo">446</span> HttpServletResponse response) throws ServletException, IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span> String redirectHost = regionServerHostname;<a name="line.447"></a>
-<span class="sourceLineNo">448</span> if(redirectHost == null) {<a name="line.448"></a>
-<span class="sourceLineNo">449</span> redirectHost = request.getServerName();<a name="line.449"></a>
-<span class="sourceLineNo">450</span> if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.451"></a>
-<span class="sourceLineNo">452</span> MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.452"></a>
-<span class="sourceLineNo">453</span> "your HBase deployment relies on client accessible names that the region server process " +<a name="line.453"></a>
-<span class="sourceLineNo">454</span> "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.454"></a>
-<span class="sourceLineNo">455</span> "to an appropriate hostname.");<a name="line.455"></a>
-<span class="sourceLineNo">456</span> // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.456"></a>
-<span class="sourceLineNo">457</span> response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.457"></a>
-<span class="sourceLineNo">458</span> "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.458"></a>
-<span class="sourceLineNo">459</span> "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span> }<a name="line.462"></a>
-<span class="sourceLineNo">463</span> // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.463"></a>
-<span class="sourceLineNo">464</span> // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.464"></a>
-<span class="sourceLineNo">465</span> String redirectUrl = request.getScheme() + "://"<a name="line.465"></a>
-<span class="sourceLineNo">466</span> + redirectHost + ":" + regionServerInfoPort<a name="line.466"></a>
-<span class="sourceLineNo">467</span> + request.getRequestURI();<a name="line.467"></a>
-<span class="sourceLineNo">468</span> response.sendRedirect(redirectUrl);<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><a name="line.471"></a>
-<span class="sourceLineNo">472</span> /**<a name="line.472"></a>
-<span class="sourceLineNo">473</span> * Initializes the HMaster. The steps are as follows:<a name="line.473"></a>
-<span class="sourceLineNo">474</span> * <p><a name="line.474"></a>
-<span class="sourceLineNo">475</span> * <ol><a name="line.475"></a>
-<span class="sourceLineNo">476</span> * <li>Initialize the local HRegionServer<a name="line.476"></a>
-<span class="sourceLineNo">477</span> * <li>Start the ActiveMasterManager.<a name="line.477"></a>
-<span class="sourceLineNo">478</span> * </ol><a name="line.478"></a>
-<span class="sourceLineNo">479</span> * <p><a name="line.479"></a>
-<span class="sourceLineNo">480</span> * Remaining steps of initialization occur in<a name="line.480"></a>
-<span class="sourceLineNo">481</span> * #finishActiveMasterInitialization(MonitoredTask) after<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * the master becomes the active one.<a name="line.482"></a>
-<span class="sourceLineNo">483</span> */<a name="line.483"></a>
-<span class="sourceLineNo">484</span> public HMaster(final Configuration conf)<a name="line.484"></a>
-<span class="sourceLineNo">485</span> throws IOException, KeeperException {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> super(conf);<a name="line.486"></a>
-<span class="sourceLineNo">487</span> TraceUtil.initTracer(conf);<a name="line.487"></a>
-<span class="sourceLineNo">488</span> try {<a name="line.488"></a>
-<span class="sourceLineNo">489</span> this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.489"></a>
-<span class="sourceLineNo">490</span> conf.getLong("hbase.master.buffer.for.rs.fatals", 1 * 1024 * 1024));<a name="line.490"></a>
-<span class="sourceLineNo">491</span> LOG.info("hbase.rootdir=" + getRootDir() +<a name="line.491"></a>
-<span class="sourceLineNo">492</span> ", hbase.cluster.distributed=" + this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span> // Disable usage of meta replicas in the master<a name="line.494"></a>
-<span class="sourceLineNo">495</span> this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span> decorateMasterConfiguration(this.conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span> // Hack! Maps DFSClient => Master for logs. HDFS made this<a name="line.499"></a>
-<span class="sourceLineNo">500</span> // config param for task trackers, but we can piggyback off of it.<a name="line.500"></a>
-<span class="sourceLineNo">501</span> if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span> this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.502"></a>
-<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span> // should we check the compression codec type at master side, default true, HBASE-6370<a name="line.505"></a>
-<span class="sourceLineNo">506</span> this.masterCheckCompression = conf.getBoolean("hbase.master.check.compression", true);<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span> // should we check encryption settings at master side, default true<a name="line.508"></a>
-<span class="sourceLineNo">509</span> this.masterCheckEncryption = conf.getBoolean("hbase.master.check.encryption", true);<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // preload table descriptor at startup<a name="line.513"></a>
-<span class="sourceLineNo">514</span> this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span> this.maxBlancingTime = getMaxBalancingTime();<a name="line.516"></a>
-<span class="sourceLineNo">517</span> this.maxRitPercent = conf.getDouble(HConstants.HBASE_MASTER_BALANCER_MAX_RIT_PERCENT,<a name="line.517"></a>
-<span class="sourceLineNo">518</span> HConstants.DEFAULT_HBASE_MASTER_BALANCER_MAX_RIT_PERCENT);<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span> // Do we publish the status?<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span> boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.522"></a>
-<span class="sourceLineNo">523</span> HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> Class<? extends ClusterStatusPublisher.Publisher> publisherClass =<a name="line.524"></a>
-<span class="sourceLineNo">525</span> conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.525"></a>
-<span class="sourceLineNo">526</span> ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS,<a name="line.526"></a>
-<span class="sourceLineNo">527</span> ClusterStatusPublisher.Publisher.class);<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span> if (shouldPublish) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span> if (publisherClass == null) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.531"></a>
-<span class="sourceLineNo">532</span> ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS +<a name="line.532"></a>
-<span class="sourceLineNo">533</span> " is not set - not publishing status");<a name="line.533"></a>
-<span class="sourceLineNo">534</span> } else {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> clusterStatusPublisherChore = new ClusterStatusPublisher(this, conf, publisherClass);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> getChoreService().scheduleChore(clusterStatusPublisherChore);<a name="line.536"></a>
-<span class="sourceLineNo">537</span> }<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span> // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.540"></a>
-<span class="sourceLineNo">541</span> if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span> this.activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, this);<a name="line.542"></a>
-<span class="sourceLineNo">543</span> } else {<a name="line.543"></a>
-<span class="sourceLineNo">544</span> this.activeMasterManager = null;<a name="line.544"></a>
-<span class="sourceLineNo">545</span> }<a name="line.545"></a>
-<span class="sourceLineNo">546</span> } catch (Throwable t) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span> // Make sure we log the exception. HMaster is often started via reflection and the<a name="line.547"></a>
-<span class="sourceLineNo">548</span> // cause of failed startup is lost.<a name="line.548"></a>
-<span class="sourceLineNo">549</span> LOG.error("Failed construction of Master", t);<a name="line.549"></a>
-<span class="sourceLineNo">550</span> throw t;<a name="line.550"></a>
-<span class="sourceLineNo">551</span> }<a name="line.551"></a>
-<span class="sourceLineNo">552</span> }<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span> @Override<a name="line.554"></a>
-<span class="sourceLineNo">555</span> protected String getUseThisHostnameInstead(Configuration conf) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span> return conf.get(MASTER_HOSTNAME_KEY);<a name="line.556"></a>
-<span class="sourceLineNo">557</span> }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span> // Main run loop. Calls through to the regionserver run loop AFTER becoming active Master; will<a name="line.559"></a>
-<span class="sourceLineNo">560</span> // block in here until then.<a name="line.560"></a>
-<span class="sourceLineNo">561</span> @Override<a name="line.561"></a>
-<span class="sourceLineNo">562</span> public void run() {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> try {<a name="line.563"></a>
-<span class="sourceLineNo">564</span> if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span> Threads.setDaemonThreadRunning(new Thread(() -> {<a name="line.565"></a>
-<span class="sourceLineNo">566</span> try {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> int infoPort = putUpJettyServer();<a name="line.567"></a>
-<span class="sourceLineNo">568</span> startActiveMasterManager(infoPort);<a name="line.568"></a>
-<span class="sourceLineNo">569</span> } catch (Throwable t) {<a name="line.569"></a>
-<span class="sourceLineNo">570</span> // Make sure we log the exception.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> String error = "Failed to become Active Master";<a name="line.571"></a>
-<span class="sourceLineNo">572</span> LOG.error(error, t);<a name="line.572"></a>
-<span class="sourceLineNo">573</span> // Abort should have been called already.<a name="line.573"></a>
-<span class="sourceLineNo">574</span> if (!isAborted()) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span> abort(error, t);<a name="line.575"></a>
-<span class="sourceLineNo">576</span> }<a name="line.576"></a>
-<span class="sourceLineNo">577</span> }<a name="line.577"></a>
-<span class="sourceLineNo">578</span> }));<a name="line.578"></a>
-<span class="sourceLineNo">579</span> }<a name="line.579"></a>
-<span class="sourceLineNo">580</span> // Fall in here even if we have been aborted. Need to run the shutdown services and<a name="line.580"></a>
-<span class="sourceLineNo">581</span> // the super run call will do this for us.<a name="line.581"></a>
-<span class="sourceLineNo">582</span> super.run();<a name="line.582"></a>
-<span class="sourceLineNo">583</span> } finally {<a name="line.583"></a>
-<span class="sourceLineNo">584</span> if (this.clusterSchemaService != null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> // If on way out, then we are no longer active master.<a name="line.585"></a>
-<span class="sourceLineNo">586</span> this.clusterSchemaService.stopAsync();<a name="line.586"></a>
-<span class="sourceLineNo">587</span> try {<a name="line.587"></a>
-<span class="sourceLineNo">588</span> this.clusterSchemaService.awaitTerminated(<a name="line.588"></a>
-<span class="sourceLineNo">589</span> getConfiguration().getInt(HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.589"></a>
-<span class="sourceLineNo">590</span> DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.590"></a>
-<span class="sourceLineNo">591</span> } catch (TimeoutException te) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span> LOG.warn("Failed shutdown of clusterSchemaService", te);<a name="line.592"></a>
-<span class="sourceLineNo">593</span> }<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> this.activeMaster = false;<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span> }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span> // return the actual infoPort, -1 means disable info server.<a name="line.599"></a>
-<span class="sourceLineNo">600</span> private int putUpJettyServer() throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> if (!conf.getBoolean("hbase.master.infoserver.redirect", true)) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span> return -1;<a name="line.602"></a>
-<span class="sourceLineNo">603</span> }<a name="line.603"></a>
-<span class="sourceLineNo">604</span> final int infoPort = conf.getInt("hbase.master.info.port.orig",<a name="line.604"></a>
-<span class="sourceLineNo">605</span> HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.605"></a>
-<span class="sourceLineNo">606</span> // -1 is for disabling info server, so no redirecting<a name="line.606"></a>
-<span class="sourceLineNo">607</span> if (infoPort < 0 || infoServer == null) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span> return -1;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span> if(infoPort == infoServer.getPort()) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span> return infoPort;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span> final String addr = conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.613"></a>
-<span class="sourceLineNo">614</span> if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span> String msg =<a name="line.615"></a>
-<span class="sourceLineNo">616</span> "Failed to start redirecting jetty server. Address " + addr<a name="line.616"></a>
-<span class="sourceLineNo">617</span> + " does not belong to this host. Correct configuration parameter: "<a name="line.617"></a>
-<span class="sourceLineNo">618</span> + "hbase.master.info.bindAddress";<a name="line.618"></a>
-<span class="sourceLineNo">619</span> LOG.error(msg);<a name="line.619"></a>
-<span class="sourceLineNo">620</span> throw new IOException(msg);<a name="line.620"></a>
-<span class="sourceLineNo">621</span> }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span> // TODO I'm pretty sure we could just add another binding to the InfoServer run by<a name="line.623"></a>
-<span class="sourceLineNo">624</span> // the RegionServer and have it run the RedirectServlet instead of standing up<a name="line.624"></a>
-<span class="sourceLineNo">625</span> // a second entire stack here.<a name="line.625"></a>
-<span class="sourceLineNo">626</span> masterJettyServer = new Server();<a name="line.626"></a>
-<span class="sourceLineNo">627</span> final ServerConnector connector = new ServerConnector(masterJettyServer);<a name="line.627"></a>
-<span class="sourceLineNo">628</span> connector.setHost(addr);<a name="line.628"></a>
-<span class="sourceLineNo">629</span> connector.setPort(infoPort);<a name="line.629"></a>
-<span class="sourceLineNo">630</span> masterJettyServer.addConnector(connector);<a name="line.630"></a>
-<span class="sourceLineNo">631</span> masterJettyServer.setStopAtShutdown(true);<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span> final String redirectHostname =<a name="line.633"></a>
-<span class="sourceLineNo">634</span> StringUtils.isBlank(useThisHostnameInstead) ? null : useThisHostnameInstead;<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span> final RedirectServlet redirect = new RedirectServlet(infoServer, redirectHostname);<a name="line.636"></a>
-<span class="sourceLineNo">637</span> final WebAppContext context = new WebAppContext(null, "/", null, null, null, null, WebAppContext.NO_SESSIONS);<a name="line.637"></a>
-<span class="sourceLineNo">638</span> context.addServlet(new ServletHolder(redirect), "/*");<a name="line.638"></a>
-<span class="sourceLineNo">639</span> context.setServer(masterJettyServer);<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span> try {<a name="line.641"></a>
-<span class="sourceLineNo">642</span> masterJettyServer.start();<a name="line.642"></a>
-<span class="sourceLineNo">643</span> } catch (Exception e) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span> throw new IOException("Failed to start redirecting jetty server", e);<a name="line.644"></a>
-<span class="sourceLineNo">645</span> }<a name="line.645"></a>
-<span class="sourceLineNo">646</span> return connector.getLocalPort();<a name="line.646"></a>
-<span class="sourceLineNo">647</span> }<a name="line.647"></a>
-<span class="sourceLineNo">648</span><a name="line.648"></a>
-<span class="sourceLineNo">649</span> @Override<a name="line.649"></a>
-<span class="sourceLineNo">650</span> protected Function<TableDescriptorBuilder, TableDescriptorBuilder> getMetaTableObserver() {<a name="line.650"></a>
-<span class="sourceLineNo">651</span> return builder -> builder.setRegionReplication(conf.getInt(HConstants.META_REPLICAS_NUM, HConstants.DEFAULT_META_REPLICA_NUM));<a name="line.651"></a>
-<span class="sourceLineNo">652</span> }<a name="line.652"></a>
-<span class="sourceLineNo">653</span> /**<a name="line.653"></a>
-<span class="sourceLineNo">654</span> * For compatibility, if failed with regionserver credentials, try the master one<a name="line.654"></a>
-<span class="sourceLineNo">655</span> */<a name="line.655"></a>
-<span class="sourceLineNo">656</span> @Override<a name="line.656"></a>
-<span class="sourceLineNo">657</span> protected void login(UserProvider user, String host) throws IOException {<a name="line.657"></a>
-<span class="sourceLineNo">658</span> try {<a name="line.658"></a>
-<span class="sourceLineNo">659</span> super.login(user, host);<a name="line.659"></a>
-<span class="sourceLineNo">660</span> } catch (IOException ie) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span> user.login("hbase.master.keytab.file",<a name="line.661"></a>
-<span class="sourceLineNo">662</span> "hbase.master.kerberos.principal", host);<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><a name="line.665"></a>
-<span class="sourceLineNo">666</span> /**<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * If configured to put regions on active master,<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * wait till a backup master becomes active.<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * Otherwise, loop till the server is stopped or aborted.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> @Override<a name="line.671"></a>
-<span class="sourceLineNo">672</span> protected void waitForMasterActive(){<a name="line.672"></a>
-<span class="sourceLineNo">673</span> boolean tablesOnMaster = LoadBalancer.isTablesOnMaster(conf);<a name="line.673"></a>
-<span class="sourceLineNo">674</span> while (!(tablesOnMaster && activeMaster) && !isStopped() && !isAborted()) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span> sleeper.sleep();<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> @VisibleForTesting<a name="line.679"></a>
-<span class="sourceLineNo">680</span> public MasterRpcServices getMasterRpcServices() {<a name="line.680"></a>
-<span class="sourceLineNo">681</span> return (MasterRpcServices)rpcServices;<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> public boolean balanceSwitch(final boolean b) throws IOException {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> return getMasterRpcServices().switchBalancer(b, BalanceSwitchMode.ASYNC);<a name="line.685"></a>
-<span class="sourceLineNo">686</span> }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span> @Override<a name="line.688"></a>
-<span class="sourceLineNo">689</span> protected String getProcessName() {<a name="line.689"></a>
-<span class="sourceLineNo">690</span> return MASTER;<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> @Override<a name="line.693"></a>
-<span class="sourceLineNo">694</span> protected boolean canCreateBaseZNode() {<a name="line.694"></a>
-<span class="sourceLineNo">695</span> return true;<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> @Override<a name="line.698"></a>
-<span class="sourceLineNo">699</span> protected boolean canUpdateTableDescriptor() {<a name="line.699"></a>
-<span class="sourceLineNo">700</span> return true;<a name="line.700"></a>
-<span class="sourceLineNo">701</span> }<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span> @Override<a name="line.703"></a>
-<span class="sourceLineNo">704</span> protected RSRpcServices createRpcServices() throws IOException {<a name="line.704"></a>
-<span class="sourceLineNo">705</span> return new MasterRpcServices(this);<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> @Override<a name="line.708"></a>
-<span class="sourceLineNo">709</span> protected void configureInfoServer() {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> infoServer.addServlet("master-status", "/master-status", MasterStatusServlet.class);<a name="line.710"></a>
-<span class="sourceLineNo">711</span> infoServer.setAttribute(MASTER, this);<a name="line.711"></a>
-<span class="sourceLineNo">712</span> if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span> super.configureInfoServer();<a name="line.713"></a>
-<span class="sourceLineNo">714</span> }<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
-<span class="sourceLineNo">716</span><a name="line.716"></a>
-<span class="sourceLineNo">717</span> @Override<a name="line.717"></a>
-<span class="sourceLineNo">718</span> protected Class<? extends HttpServlet> getDumpServlet() {<a name="line.718"></a>
-<span class="sourceLineNo">719</span> return MasterDumpServlet.class;<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span><a name="line.721"></a>
-<span class="sourceLineNo">722</span> @Override<a name="line.722"></a>
-<span class="sourceLineNo">723</span> public MetricsMaster getMasterMetrics() {<a name="line.723"></a>
-<span class="sourceLineNo">724</span> return metricsMaster;<a name="line.724"></a>
-<span class="sourceLineNo">725</span> }<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span> /**<a name="line.727"></a>
+<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>/**<a name="line.220"></a>
+<span class="sourceLineNo">221</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.221"></a>
+<span class="sourceLineNo">222</span> * master. If many masters are started, all compete. Whichever wins goes on to<a name="line.222"></a>
+<span class="sourceLineNo">223</span> * run the cluster. All others park themselves in their constructor until<a name="line.223"></a>
+<span class="sourceLineNo">224</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.224"></a>
+<span class="sourceLineNo">225</span> * zookeeper. Thereafter, all running master jostle to take over master role.<a name="line.225"></a>
+<span class="sourceLineNo">226</span> *<a name="line.226"></a>
+<span class="sourceLineNo">227</span> * <p>The Master can be asked shutdown the cluster. See {@link #shutdown()}. In<a name="line.227"></a>
+<span class="sourceLineNo">228</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * all reporting in that they are down. This master will then shut itself down.<a name="line.229"></a>
+<span class="sourceLineNo">230</span> *<a name="line.230"></a>
+<span class="sourceLineNo">231</span> * <p>You can also shutdown just this master. Call {@link #stopMaster()}.<a name="line.231"></a>
+<span class="sourceLineNo">232</span> *<a name="line.232"></a>
+<span class="sourceLineNo">233</span> * @see org.apache.zookeeper.Watcher<a name="line.233"></a>
+<span class="sourceLineNo">234</span> */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.235"></a>
+<span class="sourceLineNo">236</span>@SuppressWarnings("deprecation")<a name="line.236"></a>
+<span class="sourceLineNo">237</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private static Logger LOG = LoggerFactory.getLogger(HMaster.class.getName());<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span> /**<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.241"></a>
+<span class="sourceLineNo">242</span> * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.242"></a>
+<span class="sourceLineNo">243</span> */<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private static class InitializationMonitor extends HasThread {<a name="line.244"></a>
+<span class="sourceLineNo">245</span> /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.245"></a>
+<span class="sourceLineNo">246</span> public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.246"></a>
+<span class="sourceLineNo">247</span> public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span> /**<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.250"></a>
+<span class="sourceLineNo">251</span> * true, do nothing otherwise.<a name="line.251"></a>
+<span class="sourceLineNo">252</span> */<a name="line.252"></a>
+<span class="sourceLineNo">253</span> public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.253"></a>
+<span class="sourceLineNo">254</span> public static final boolean HALT_DEFAULT = false;<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span> private final HMaster master;<a name="line.256"></a>
+<span class="sourceLineNo">257</span> private final long timeout;<a name="line.257"></a>
+<span class="sourceLineNo">258</span> private final boolean haltOnTimeout;<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span> /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.260"></a>
+<span class="sourceLineNo">261</span> InitializationMonitor(HMaster master) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span> super("MasterInitializationMonitor");<a name="line.262"></a>
+<span class="sourceLineNo">263</span> this.master = master;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.264"></a>
+<span class="sourceLineNo">265</span> this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.setDaemon(true);<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> public void run() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> try {<a name="line.271"></a>
+<span class="sourceLineNo">272</span> while (!master.isStopped() && master.isActiveMaster()) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> Thread.sleep(timeout);<a name="line.273"></a>
+<span class="sourceLineNo">274</span> if (master.isInitialized()) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span> LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.275"></a>
+<span class="sourceLineNo">276</span> } else {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.277"></a>
+<span class="sourceLineNo">278</span> + " consider submitting a bug report including a thread dump of this process.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span> if (haltOnTimeout) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span> LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.280"></a>
+<span class="sourceLineNo">281</span> Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.281"></a>
+<span class="sourceLineNo">282</span> System.exit(-1);<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> } catch (InterruptedException ie) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span> LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span> }<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.292"></a>
+<span class="sourceLineNo">293</span> //instance into web context.<a name="line.293"></a>
+<span class="sourceLineNo">294</span> public static final String MASTER = "master";<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span> // Manager and zk listener for master election<a name="line.296"></a>
+<span class="sourceLineNo">297</span> private final ActiveMasterManager activeMasterManager;<a name="line.297"></a>
+<span class="sourceLineNo">298</span> // Region server tracker<a name="line.298"></a>
+<span class="sourceLineNo">299</span> private RegionServerTracker regionServerTracker;<a name="line.299"></a>
+<span class="sourceLineNo">300</span> // Draining region server tracker<a name="line.300"></a>
+<span class="sourceLineNo">301</span> private DrainingServerTracker drainingServerTracker;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> // Tracker for load balancer state<a name="line.302"></a>
+<span class="sourceLineNo">303</span> LoadBalancerTracker loadBalancerTracker;<a name="line.303"></a>
+<span class="sourceLineNo">304</span> // Tracker for meta location, if any client ZK quorum specified<a name="line.304"></a>
+<span class="sourceLineNo">305</span> MetaLocationSyncer metaLocationSyncer;<a name="line.305"></a>
+<span class="sourceLineNo">306</span> // Tracker for active master location, if any client ZK quorum specified<a name="line.306"></a>
+<span class="sourceLineNo">307</span> MasterAddressSyncer masterAddressSyncer;<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span> // Tracker for split and merge state<a name="line.309"></a>
+<span class="sourceLineNo">310</span> private SplitOrMergeTracker splitOrMergeTracker;<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span> // Tracker for region normalizer state<a name="line.312"></a>
+<span class="sourceLineNo">313</span> private RegionNormalizerTracker regionNormalizerTracker;<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span> //Tracker for master maintenance mode setting<a name="line.315"></a>
+<span class="sourceLineNo">316</span> private MasterMaintenanceModeTracker maintenanceModeTracker;<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span> private ClusterSchemaService clusterSchemaService;<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.320"></a>
+<span class="sourceLineNo">321</span> "hbase.master.wait.on.service.seconds";<a name="line.321"></a>
+<span class="sourceLineNo">322</span> public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span> // Metrics for the HMaster<a name="line.324"></a>
+<span class="sourceLineNo">325</span> final MetricsMaster metricsMaster;<a name="line.325"></a>
+<span class="sourceLineNo">326</span> // file system manager for the master FS operations<a name="line.326"></a>
+<span class="sourceLineNo">327</span> private MasterFileSystem fileSystemManager;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private MasterWalManager walManager;<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> // server manager to deal with region server info<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private volatile ServerManager serverManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span> // manager of assignment nodes in zookeeper<a name="line.333"></a>
+<span class="sourceLineNo">334</span> private AssignmentManager assignmentManager;<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> // manager of replication<a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ReplicationPeerManager replicationPeerManager;<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span> // buffer for "fatal error" notices from region servers<a name="line.339"></a>
+<span class="sourceLineNo">340</span> // in the cluster. This is only used for assisting<a name="line.340"></a>
+<span class="sourceLineNo">341</span> // operations/debugging.<a name="line.341"></a>
+<span class="sourceLineNo">342</span> MemoryBoundedLogMessageBuffer rsFatals;<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span> // flag set after we become the active master (used for testing)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> private volatile boolean activeMaster = false;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span> // flag set after we complete initialization once active<a name="line.347"></a>
+<span class="sourceLineNo">348</span> private final ProcedureEvent<?> initialized = new ProcedureEvent<>("master initialized");<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span> // flag set after master services are started,<a name="line.350"></a>
+<span class="sourceLineNo">351</span> // initialization may have not completed yet.<a name="line.351"></a>
+<span class="sourceLineNo">352</span> volatile boolean serviceStarted = false;<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span> // flag set after we complete assignMeta.<a name="line.354"></a>
+<span class="sourceLineNo">355</span> private final ProcedureEvent<?> serverCrashProcessingEnabled =<a name="line.355"></a>
+<span class="sourceLineNo">356</span> new ProcedureEvent<>("server crash processing");<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> // Maximum time we should run balancer for<a name="line.358"></a>
+<span class="sourceLineNo">359</span> private final int maxBlancingTime;<a name="line.359"></a>
+<span class="sourceLineNo">360</span> // Maximum percent of regions in transition when balancing<a name="line.360"></a>
+<span class="sourceLineNo">361</span> private final double maxRitPercent;<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span> private final LockManager lockManager = new LockManager(this);<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span> private LoadBalancer balancer;<a name="line.365"></a>
+<span class="sourceLineNo">366</span> private RegionNormalizer normalizer;<a name="line.366"></a>
+<span class="sourceLineNo">367</span> private BalancerChore balancerChore;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> private RegionNormalizerChore normalizerChore;<a name="line.368"></a>
+<span class="sourceLineNo">369</span> private ClusterStatusChore clusterStatusChore;<a name="line.369"></a>
+<span class="sourceLineNo">370</span> private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span> CatalogJanitor catalogJanitorChore;<a name="line.372"></a>
+<span class="sourceLineNo">373</span> private LogCleaner logCleaner;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> private HFileCleaner hfileCleaner;<a name="line.374"></a>
+<span class="sourceLineNo">375</span> private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.375"></a>
+<span class="sourceLineNo">376</span> private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.376"></a>
+<span class="sourceLineNo">377</span> private MobCompactionChore mobCompactChore;<a name="line.377"></a>
+<span class="sourceLineNo">378</span> private MasterMobCompactionThread mobCompactThread;<a name="line.378"></a>
+<span class="sourceLineNo">379</span> // used to synchronize the mobCompactionStates<a name="line.379"></a>
+<span class="sourceLineNo">380</span> private final IdLock mobCompactionLock = new IdLock();<a name="line.380"></a>
+<span class="sourceLineNo">381</span> // save the information of mob compactions in tables.<a name="line.381"></a>
+<span class="sourceLineNo">382</span> // the key is table name, the value is the number of compactions in that table.<a name="line.382"></a>
+<span class="sourceLineNo">383</span> private Map<TableName, AtomicInteger> mobCompactionStates = Maps.newConcurrentMap();<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> MasterCoprocessorHost cpHost;<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span> private final boolean preLoadTableDescriptors;<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> // Time stamps for when a hmaster became active<a name="line.389"></a>
+<span class="sourceLineNo">390</span> private long masterActiveTime;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> // Time stamp for when HMaster finishes becoming Active Master<a name="line.392"></a>
+<span class="sourceLineNo">393</span> private long masterFinishedInitializationTime;<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span> //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.395"></a>
+<span class="sourceLineNo">396</span> private final boolean masterCheckCompression;<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span> //should we check encryption settings at master side, default true<a name="line.398"></a>
+<span class="sourceLineNo">399</span> private final boolean masterCheckEncryption;<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> Map<String, Service> coprocessorServiceHandlers = Maps.newHashMap();<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span> // monitor for snapshot of hbase tables<a name="line.403"></a>
+<span class="sourceLineNo">404</span> SnapshotManager snapshotManager;<a name="line.404"></a>
+<span class="sourceLineNo">405</span> // monitor for distributed procedures<a name="line.405"></a>
+<span class="sourceLineNo">406</span> private MasterProcedureManagerHost mpmHost;<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span> // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.408"></a>
+<span class="sourceLineNo">409</span> private volatile MasterQuotaManager quotaManager;<a name="line.409"></a>
+<span class="sourceLineNo">410</span> private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.410"></a>
+<span class="sourceLineNo">411</span> private QuotaObserverChore quotaObserverChore;<a name="line.411"></a>
+<span class="sourceLineNo">412</span> private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span> private ProcedureExecutor<MasterProcedureEnv> procedureExecutor;<a name="line.414"></a>
+<span class="sourceLineNo">415</span> private WALProcedureStore procedureStore;<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span> // handle table states<a name="line.417"></a>
+<span class="sourceLineNo">418</span> private TableStateManager tableStateManager;<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span> private long splitPlanCount;<a name="line.420"></a>
+<span class="sourceLineNo">421</span> private long mergePlanCount;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span> /* Handle favored nodes information */<a name="line.423"></a>
+<span class="sourceLineNo">424</span> private FavoredNodesManager favoredNodesManager;<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span> /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.426"></a>
+<span class="sourceLineNo">427</span> private Server masterJettyServer;<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span> public static class RedirectServlet extends HttpServlet {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> private static final long serialVersionUID = 2894774810058302473L;<a name="line.430"></a>
+<span class="sourceLineNo">431</span> private final int regionServerInfoPort;<a name="line.431"></a>
+<span class="sourceLineNo">432</span> private final String regionServerHostname;<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span> /**<a name="line.434"></a>
+<span class="sourceLineNo">435</span> * @param infoServer that we're trying to send all requests to<a name="line.435"></a>
+<span class="sourceLineNo">436</span> * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.436"></a>
+<span class="sourceLineNo">437</span> */<a name="line.437"></a>
+<span class="sourceLineNo">438</span> public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span> regionServerInfoPort = infoServer.getPort();<a name="line.439"></a>
+<span class="sourceLineNo">440</span> regionServerHostname = hostname;<a name="line.440"></a>
+<span class="sourceLineNo">441</span> }<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span> @Override<a name="line.443"></a>
+<span class="sourceLineNo">444</span> public void doGet(HttpServletRequest request,<a name="line.444"></a>
+<span class="sourceLineNo">445</span> HttpServletResponse response) throws ServletException, IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span> String redirectHost = regionServerHostname;<a name="line.446"></a>
+<span class="sourceLineNo">447</span> if(redirectHost == null) {<a name="line.447"></a>
+<span class="sourceLineNo">448</span> redirectHost = request.getServerName();<a name="line.448"></a>
+<span class="sourceLineNo">449</span> if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.449"></a>
+<span class="sourceLineNo">450</span> LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.450"></a>
+<span class="sourceLineNo">451</span> MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.451"></a>
+<span class="sourceLineNo">452</span> "your HBase deployment relies on client accessible names that the region server process " +<a name="line.452"></a>
+<span class="sourceLineNo">453</span> "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.453"></a>
+<span class="sourceLineNo">454</span> "to an appropriate hostname.");<a name="line.454"></a>
+<span class="sourceLineNo">455</span> // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.455"></a>
+<span class="sourceLineNo">456</span> response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.456"></a>
+<span class="sourceLineNo">457</span> "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.457"></a>
+<span class="sourceLineNo">458</span> "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.458"></a>
+<span class="sourceLineNo">459</span> return;<a name="line.459"></a>
+<span class="sourceLineNo">460</span> }<a name="line.460"></a>
+<span class="sourceLineNo">461</span> }<a name="line.461"></a>
+<span class="sourceLineNo">462</span> // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.462"></a>
+<span class="sourceLineNo">463</span> // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.463"></a>
+<span class="sourceLineNo">464</span> String redirectUrl = request.getScheme() + "://"<a name="line.464"></a>
+<span class="sourceLineNo">465</span> + redirectHost + ":" + regionServerInfoPort<a name="line.465"></a>
+<span class="sourceLineNo">466</span> + request.getRequestURI();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> response.sendRedirect(redirectUrl);<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> /**<a name="line.471"></a>
+<span class="sourceLineNo">472</span> * Initializes the HMaster. The steps are as follows:<a name="line.472"></a>
+<span class="sourceLineNo">473</span> * <p><a name="line.473"></a>
+<span class="sourceLineNo">474</span> * <ol><a name="line.474"></a>
+<span class="sourceLineNo">475</span> * <li>Initialize the local HRegionServer<a name="line.475"></a>
+<span class="sourceLineNo">476</span> * <li>Start the ActiveMasterManager.<a name="line.476"></a>
+<span class="sourceLineNo">477</span> * </ol><a name="line.477"></a>
+<span class="sourceLineNo">478</span> * <p><a name="line.478"></a>
+<span class="sourceLineNo">479</span> * Remaining steps of initialization occur in<a name="line.479"></a>
+<span class="sourceLineNo">480</span> * #finishActiveMasterInitialization(MonitoredTask) after<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * the master becomes the active one.<a name="line.481"></a>
+<span class="sourceLineNo">482</span> */<a name="line.482"></a>
+<span class="sourceLineNo">483</span> public HMaster(final Configuration conf)<a name="line.483"></a>
+<span class="sourceLineNo">484</span> throws IOException, KeeperException {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> super(conf);<a name="line.485"></a>
+<span class="sourceLineNo">486</span> TraceUtil.initTracer(conf);<a name="line.486"></a>
+<span class="sourceLineNo">487</span> try {<a name="line.487"></a>
+<span class="sourceLineNo">488</span> this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.488"></a>
+<span class="sourceLineNo">489</span> conf.getLong("hbase.master.buffer.for.rs.fatals", 1 * 1024 * 1024));<a name="line.489"></a>
+<span class="sourceLineNo">490</span> LOG.info("hbase.rootdir=" + getRootDir() +<a name="line.490"></a>
+<span class="sourceLineNo">491</span> ", hbase.cluster.distributed=" + this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span> // Disable usage of meta replicas in the master<a name="line.493"></a>
+<span class="sourceLineNo">494</span> this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span> decorateMasterConfiguration(this.conf);<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span> // Hack! Maps DFSClient => Master for logs. HDFS made this<a name="line.498"></a>
+<span class="sourceLineNo">499</span> // config param for task trackers, but we can piggyback off of it.<a name="line.499"></a>
+<span class="sourceLineNo">500</span> if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span> this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.501"></a>
+<span class="sourceLineNo">502</span> }<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span> // should we check the compression codec type at master side, default true, HBASE-6370<a name="line.504"></a>
+<span class="sourceLineNo">505</span> this.masterCheckCompression = conf.getBoolean("hbase.master.check.compression", true);<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span> // should we check encryption settings at master side, default true<a name="line.507"></a>
+<span class="sourceLineNo">508</span> this.masterCheckEncryption = conf.getBoolean("hbase.master.check.encryption", true);<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span> this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span> // preload table descriptor at startup<a name="line.512"></a>
+<span class="sourceLineNo">513</span> this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span> this.maxBlancingTime = getMaxBalancingTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span> this.maxRitPercent = conf.getDouble(HConstants.HBASE_MASTER_BALANCER_MAX_RIT_PERCENT,<a name="line.516"></a>
+<span class="sourceLineNo">517</span> HConstants.DEFAULT_HBASE_MASTER_BALANCER_MAX_RIT_PERCENT);<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span> // Do we publish the status?<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span> boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.521"></a>
+<span class="sourceLineNo">522</span> HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.522"></a>
+<span class="sourceLineNo">523</span> Class<? extends ClusterStatusPublisher.Publisher> publisherClass =<a name="line.523"></a>
+<span class="sourceLineNo">524</span> conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.524"></a>
+<span class="sourceLineNo">525</sp
<TRUNCATED>
[24/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/client/VersionInfoUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/VersionInfoUtil.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/VersionInfoUtil.html
index 027f0d4..5c7f786 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/VersionInfoUtil.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/VersionInfoUtil.html
@@ -110,7 +110,7 @@
<span class="sourceLineNo">102</span> * @param versionInfo the VersionInfo object to pack<a name="line.102"></a>
<span class="sourceLineNo">103</span> * @return the version number as int. (e.g. 0x0103004 is 1.3.4)<a name="line.103"></a>
<span class="sourceLineNo">104</span> */<a name="line.104"></a>
-<span class="sourceLineNo">105</span> private static int getVersionNumber(final HBaseProtos.VersionInfo versionInfo) {<a name="line.105"></a>
+<span class="sourceLineNo">105</span> public static int getVersionNumber(final HBaseProtos.VersionInfo versionInfo) {<a name="line.105"></a>
<span class="sourceLineNo">106</span> if (versionInfo != null) {<a name="line.106"></a>
<span class="sourceLineNo">107</span> try {<a name="line.107"></a>
<span class="sourceLineNo">108</span> final String[] components = getVersionComponents(versionInfo);<a name="line.108"></a>
[51/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
Published site at 0b28155d274910b4e667b949d51f78809a1eff0b.
Project: http://git-wip-us.apache.org/repos/asf/hbase-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase-site/commit/e11cf2cb
Tree: http://git-wip-us.apache.org/repos/asf/hbase-site/tree/e11cf2cb
Diff: http://git-wip-us.apache.org/repos/asf/hbase-site/diff/e11cf2cb
Branch: refs/heads/asf-site
Commit: e11cf2cbadbdd9ff7a2e97fe53b761752bb8452f
Parents: 436b0b1
Author: jenkins <bu...@apache.org>
Authored: Thu Jun 14 22:21:56 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Thu Jun 14 22:21:56 2018 +0000
----------------------------------------------------------------------
acid-semantics.html | 4 +-
apache_hbase_reference_guide.pdf | 4 +-
book.html | 2 +-
bulk-loads.html | 4 +-
checkstyle-aggregate.html | 30234 ++++++++---------
checkstyle.rss | 12 +-
coc.html | 4 +-
dependencies.html | 4 +-
dependency-convergence.html | 4 +-
dependency-info.html | 4 +-
dependency-management.html | 4 +-
devapidocs/allclasses-frame.html | 4 +
devapidocs/allclasses-noframe.html | 4 +
devapidocs/constant-values.html | 71 +-
devapidocs/index-all.html | 121 +-
.../hadoop/hbase/backup/BackupDriver.html | 24 +-
.../BackupRestoreConstants.BackupCommand.html | 44 +-
.../hbase/backup/BackupRestoreConstants.html | 135 +-
.../hbase/backup/class-use/BackupInfo.html | 13 +
.../impl/BackupCommands.BackupSetCommand.html | 32 +-
.../backup/impl/BackupCommands.Command.html | 18 +-
.../impl/BackupCommands.CreateCommand.html | 18 +-
.../impl/BackupCommands.DeleteCommand.html | 65 +-
.../impl/BackupCommands.DescribeCommand.html | 8 +-
.../backup/impl/BackupCommands.HelpCommand.html | 8 +-
.../impl/BackupCommands.HistoryCommand.html | 18 +-
.../impl/BackupCommands.MergeCommand.html | 12 +-
.../impl/BackupCommands.ProgressCommand.html | 8 +-
.../impl/BackupCommands.RepairCommand.html | 14 +-
.../hbase/backup/impl/BackupCommands.html | 36 +-
.../hadoop/hbase/backup/package-tree.html | 4 +-
.../hadoop/hbase/class-use/ServerName.html | 54 +-
.../hadoop/hbase/client/VersionInfoUtil.html | 4 +-
.../hadoop/hbase/client/package-tree.html | 26 +-
.../hadoop/hbase/filter/package-tree.html | 8 +-
.../hadoop/hbase/io/hfile/package-tree.html | 8 +-
.../hbase/io/util/class-use/Dictionary.html | 49 +-
.../apache/hadoop/hbase/ipc/package-tree.html | 2 +-
.../hadoop/hbase/mapreduce/package-tree.html | 2 +-
.../master/HMaster.InitializationMonitor.html | 20 +-
.../master/HMaster.MasterStoppedException.html | 4 +-
.../hbase/master/HMaster.RedirectServlet.html | 12 +-
.../org/apache/hadoop/hbase/master/HMaster.html | 524 +-
.../master/HMasterCommandLine.LocalHMaster.html | 4 +-
.../hbase/master/RegionServerTracker.html | 190 +-
.../hadoop/hbase/master/ServerManager.html | 245 +-
.../hbase/master/balancer/package-tree.html | 2 +-
.../hbase/master/class-use/MasterServices.html | 13 +-
.../master/class-use/RegionServerTracker.html | 2 +-
.../hbase/master/class-use/ServerManager.html | 5 +-
.../hadoop/hbase/master/package-summary.html | 3 +-
.../hadoop/hbase/master/package-tree.html | 6 +-
.../apache/hadoop/hbase/master/package-use.html | 3 +-
.../hbase/master/procedure/package-tree.html | 2 +-
.../org/apache/hadoop/hbase/package-tree.html | 16 +-
.../hadoop/hbase/procedure2/package-tree.html | 4 +-
.../class-use/SpaceQuotaSnapshotNotifier.html | 2 +-
.../hadoop/hbase/quotas/package-tree.html | 8 +-
.../hadoop/hbase/regionserver/package-tree.html | 20 +-
.../regionserver/querymatcher/package-tree.html | 4 +-
.../wal/AbstractProtobufLogWriter.html | 20 +-
.../wal/AsyncProtobufLogWriter.html | 16 +-
.../wal/CompressionContext.DictionaryIndex.html | 382 +
.../regionserver/wal/CompressionContext.html | 118 +-
.../hbase/regionserver/wal/Compressor.html | 4 +-
.../hbase/regionserver/wal/FSWALEntry.html | 2 +-
.../regionserver/wal/ProtobufLogReader.html | 10 +-
.../regionserver/wal/ProtobufLogWriter.html | 14 +-
.../hbase/regionserver/wal/ReaderBase.html | 16 +-
.../regionserver/wal/SecureWALCellCodec.html | 6 +-
.../wal/WALCellCodec.BaosAndCompressor.html | 68 +-
.../wal/WALCellCodec.ByteStringCompressor.html | 14 +-
.../WALCellCodec.ByteStringUncompressor.html | 16 +-
.../wal/WALCellCodec.CompressedKvDecoder.html | 12 +-
.../wal/WALCellCodec.CompressedKvEncoder.html | 8 +-
.../wal/WALCellCodec.EnsureKvEncoder.html | 10 +-
.../wal/WALCellCodec.NoneCompressor.html | 287 +
.../wal/WALCellCodec.NoneUncompressor.html | 287 +
.../wal/WALCellCodec.StatelessUncompressor.html | 326 +
.../hbase/regionserver/wal/WALCellCodec.html | 87 +-
.../regionserver/wal/WALCoprocessorHost.html | 4 +-
.../CompressionContext.DictionaryIndex.html | 187 +
.../wal/class-use/CompressionContext.html | 59 +-
.../WALCellCodec.ByteStringCompressor.html | 8 +
.../WALCellCodec.ByteStringUncompressor.html | 25 +-
.../class-use/WALCellCodec.NoneCompressor.html | 125 +
.../WALCellCodec.NoneUncompressor.html | 125 +
.../WALCellCodec.StatelessUncompressor.html | 125 +
.../hbase/regionserver/wal/package-frame.html | 4 +
.../hbase/regionserver/wal/package-summary.html | 22 +-
.../hbase/regionserver/wal/package-tree.html | 6 +-
.../hbase/regionserver/wal/package-use.html | 60 +-
.../class-use/ReplicationException.html | 5 +-
.../replication/regionserver/package-tree.html | 2 +-
.../hbase/security/access/package-tree.html | 2 +-
.../hadoop/hbase/security/package-tree.html | 2 +-
.../hadoop/hbase/thrift/package-tree.html | 2 +-
.../hadoop/hbase/util/class-use/Pair.html | 4 +
.../apache/hadoop/hbase/util/package-tree.html | 8 +-
.../org/apache/hadoop/hbase/wal/WAL.Entry.html | 38 +-
.../org/apache/hadoop/hbase/wal/WAL.Reader.html | 12 +-
devapidocs/org/apache/hadoop/hbase/wal/WAL.html | 42 +-
.../org/apache/hadoop/hbase/wal/WALKeyImpl.html | 170 +-
.../hbase/zookeeper/class-use/ZKListener.html | 3 +-
devapidocs/overview-tree.html | 4 +
.../org/apache/hadoop/hbase/Version.html | 6 +-
.../hadoop/hbase/backup/BackupDriver.html | 383 +-
.../BackupRestoreConstants.BackupCommand.html | 115 +-
.../hbase/backup/BackupRestoreConstants.html | 115 +-
.../impl/BackupCommands.BackupSetCommand.html | 2115 +-
.../backup/impl/BackupCommands.Command.html | 2115 +-
.../impl/BackupCommands.CreateCommand.html | 2115 +-
.../impl/BackupCommands.DeleteCommand.html | 2115 +-
.../impl/BackupCommands.DescribeCommand.html | 2115 +-
.../backup/impl/BackupCommands.HelpCommand.html | 2115 +-
.../impl/BackupCommands.HistoryCommand.html | 2115 +-
.../impl/BackupCommands.MergeCommand.html | 2115 +-
.../impl/BackupCommands.ProgressCommand.html | 2115 +-
.../impl/BackupCommands.RepairCommand.html | 2115 +-
.../hbase/backup/impl/BackupCommands.html | 2115 +-
.../hadoop/hbase/client/VersionInfoUtil.html | 2 +-
.../master/HMaster.InitializationMonitor.html | 6804 ++--
.../master/HMaster.MasterStoppedException.html | 6804 ++--
.../hbase/master/HMaster.RedirectServlet.html | 6804 ++--
.../org/apache/hadoop/hbase/master/HMaster.html | 6804 ++--
.../hbase/master/RegionServerTracker.html | 355 +-
.../hadoop/hbase/master/ServerManager.html | 2019 +-
.../wal/AbstractProtobufLogWriter.html | 129 +-
...ncProtobufLogWriter.OutputStreamWrapper.html | 221 +-
.../wal/AsyncProtobufLogWriter.html | 221 +-
.../wal/CompressionContext.DictionaryIndex.html | 159 +
.../regionserver/wal/CompressionContext.html | 122 +-
.../wal/ProtobufLogReader.WALHdrContext.html | 272 +-
.../wal/ProtobufLogReader.WALHdrResult.html | 272 +-
.../regionserver/wal/ProtobufLogReader.html | 272 +-
.../regionserver/wal/ProtobufLogWriter.html | 151 +-
.../hbase/regionserver/wal/ReaderBase.html | 147 +-
.../wal/SecureProtobufLogReader.html | 15 +-
.../wal/WALCellCodec.BaosAndCompressor.html | 661 +-
.../wal/WALCellCodec.ByteStringCompressor.html | 661 +-
.../WALCellCodec.ByteStringUncompressor.html | 661 +-
.../wal/WALCellCodec.CompressedKvDecoder.html | 661 +-
.../wal/WALCellCodec.CompressedKvEncoder.html | 661 +-
.../wal/WALCellCodec.EnsureKvEncoder.html | 661 +-
.../wal/WALCellCodec.NoneCompressor.html | 476 +
.../wal/WALCellCodec.NoneUncompressor.html | 476 +
.../wal/WALCellCodec.StatelessUncompressor.html | 476 +
.../hbase/regionserver/wal/WALCellCodec.html | 661 +-
.../replication/ClusterMarkingEntryFilter.html | 14 +-
.../org/apache/hadoop/hbase/wal/WAL.Entry.html | 531 +-
.../org/apache/hadoop/hbase/wal/WAL.Reader.html | 531 +-
.../org/apache/hadoop/hbase/wal/WAL.html | 531 +-
.../org/apache/hadoop/hbase/wal/WALKeyImpl.html | 1134 +-
downloads.html | 4 +-
export_control.html | 4 +-
index.html | 4 +-
integration.html | 4 +-
issue-tracking.html | 4 +-
license.html | 4 +-
mail-lists.html | 4 +-
metrics.html | 4 +-
old_news.html | 4 +-
plugin-management.html | 4 +-
plugins.html | 4 +-
poweredbyhbase.html | 4 +-
project-info.html | 4 +-
project-reports.html | 4 +-
project-summary.html | 4 +-
pseudo-distributed.html | 4 +-
replication.html | 4 +-
resources.html | 4 +-
source-repository.html | 4 +-
sponsors.html | 4 +-
supportingprojects.html | 4 +-
team-list.html | 4 +-
testdevapidocs/index-all.html | 6 +-
.../hbase/TestLocalHBaseCluster.MyHMaster.html | 2 +-
.../hadoop/hbase/backup/TestBackupDelete.html | 34 +-
.../hadoop/hbase/backup/package-tree.html | 2 +-
.../hadoop/hbase/io/hfile/package-tree.html | 2 +-
...ignmentListener.DummyAssignmentListener.html | 18 +-
.../TestAssignmentListener.DummyListener.html | 8 +-
...tAssignmentListener.DummyServerListener.html | 18 +-
.../hbase/master/TestAssignmentListener.html | 67 +-
.../master/TestMasterMetrics.MyMaster.html | 4 +-
.../hbase/master/TestMasterNoCluster.html | 28 +-
.../TestShutdownBackupMaster.MockHMaster.html | 12 +-
.../org/apache/hadoop/hbase/package-tree.html | 10 +-
...egionMergeTransactionOnCluster.MyMaster.html | 2 +-
.../TestSplitTransactionOnCluster.MyMaster.html | 2 +-
.../hadoop/hbase/regionserver/package-tree.html | 4 +-
.../FaultyProtobufLogReader.FailureType.html | 4 +-
...stCustomWALCellCodec.CustomWALCellCodec.html | 6 +-
...stReplicationProcedureRetry.MockHMaster.html | 2 +-
.../apache/hadoop/hbase/test/package-tree.html | 4 +-
.../apache/hadoop/hbase/wal/package-tree.html | 4 +-
.../hadoop/hbase/backup/TestBackupDelete.html | 206 +-
...ignmentListener.DummyAssignmentListener.html | 618 +-
.../TestAssignmentListener.DummyListener.html | 618 +-
...tAssignmentListener.DummyServerListener.html | 618 +-
.../hbase/master/TestAssignmentListener.html | 618 +-
.../hbase/master/TestClockSkewDetection.html | 2 +-
.../hbase/master/TestMasterNoCluster.html | 654 +-
.../TestShutdownBackupMaster.MockHMaster.html | 2 +-
.../hbase/master/TestShutdownBackupMaster.html | 2 +-
.../FaultyProtobufLogReader.FailureType.html | 55 +-
.../wal/FaultyProtobufLogReader.html | 55 +-
207 files changed, 53562 insertions(+), 49392 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 15ef00e..5a1b7d1 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180613" />
+ <meta name="Date-Revision-yyyymmdd" content="20180614" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Apache HBase (TM) ACID Properties
@@ -601,7 +601,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-13</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-14</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 17d23cb..1686bc3 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
/Author (Apache HBase Team)
/Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
/Producer (Apache HBase Team)
-/ModDate (D:20180613142954+00'00')
-/CreationDate (D:20180613144611+00'00')
+/ModDate (D:20180614220316+00'00')
+/CreationDate (D:20180614221851+00'00')
>>
endobj
2 0 obj
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index d14ec07..59143f8 100644
--- a/book.html
+++ b/book.html
@@ -38085,7 +38085,7 @@ The server will return cellblocks compressed using this same compressor as long
<div id="footer">
<div id="footer-text">
Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-06-13 14:29:54 UTC
+Last updated 2018-06-14 22:03:16 UTC
</div>
</div>
</body>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 7941948..3159e18 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180613" />
+ <meta name="Date-Revision-yyyymmdd" content="20180614" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Bulk Loads in Apache HBase (TM)
@@ -306,7 +306,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-13</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-14</li>
</p>
</div>
[30/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html
index f236300..513d2ad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HelpCommand.html
@@ -26,1048 +26,1115 @@
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.backup.impl;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.io.IOException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.net.URI;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.List;<a name="line.42"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.lang3.StringUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configured;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<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> * General backup commands, options and usage messages<a name="line.71"></a>
-<span class="sourceLineNo">072</span> */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceAudience.Private<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public final class BackupCommands {<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.77"></a>
-<span class="sourceLineNo">078</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.80"></a>
-<span class="sourceLineNo">081</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.81"></a>
-<span class="sourceLineNo">082</span> + " delete delete an existing backup image\n"<a name="line.82"></a>
-<span class="sourceLineNo">083</span> + " describe show the detailed information of a backup image\n"<a name="line.83"></a>
-<span class="sourceLineNo">084</span> + " history show history of all successful backups\n"<a name="line.84"></a>
-<span class="sourceLineNo">085</span> + " progress show the progress of the latest backup request\n"<a name="line.85"></a>
-<span class="sourceLineNo">086</span> + " set backup set management\n"<a name="line.86"></a>
-<span class="sourceLineNo">087</span> + " repair repair backup system table\n"<a name="line.87"></a>
-<span class="sourceLineNo">088</span> + " merge merge backup images\n"<a name="line.88"></a>
-<span class="sourceLineNo">089</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> public static final String CREATE_CMD_USAGE =<a name="line.91"></a>
-<span class="sourceLineNo">092</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.92"></a>
-<span class="sourceLineNo">093</span> + " type \"full\" to create a full backup image\n"<a name="line.93"></a>
-<span class="sourceLineNo">094</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.94"></a>
-<span class="sourceLineNo">095</span> + " backup_path Full path to store the backup image\n";<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.97"></a>
-<span class="sourceLineNo">098</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.98"></a>
-<span class="sourceLineNo">099</span> + " progress for currently running backup session.";<a name="line.99"></a>
-<span class="sourceLineNo">100</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.100"></a>
-<span class="sourceLineNo">101</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.103"></a>
-<span class="sourceLineNo">104</span> + " backup_id Backup image id\n";<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete <backup_id>\n"<a name="line.108"></a>
-<span class="sourceLineNo">109</span> + " backup_id Backup image id\n";<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.113"></a>
-<span class="sourceLineNo">114</span> + " name Backup set name\n"<a name="line.114"></a>
-<span class="sourceLineNo">115</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.115"></a>
-<span class="sourceLineNo">116</span> + " add add tables to a set, create a set if needed\n"<a name="line.116"></a>
-<span class="sourceLineNo">117</span> + " remove remove tables from a set\n"<a name="line.117"></a>
-<span class="sourceLineNo">118</span> + " list list all backup sets in the system\n"<a name="line.118"></a>
-<span class="sourceLineNo">119</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.119"></a>
-<span class="sourceLineNo">120</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.120"></a>
-<span class="sourceLineNo">121</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span> public static final String USAGE_FOOTER = "";<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> public static abstract class Command extends Configured {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> CommandLine cmdline;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> Connection conn;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> Command(Configuration conf) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (conf == null) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> conf = HBaseConfiguration.create();<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span> setConf(conf);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span> public void execute() throws IOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> printUsage();<a name="line.138"></a>
-<span class="sourceLineNo">139</span> throw new IOException(INCORRECT_USAGE);<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> // Create connection<a name="line.142"></a>
-<span class="sourceLineNo">143</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.143"></a>
-<span class="sourceLineNo">144</span> if (requiresNoActiveSession()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> // Check active session<a name="line.145"></a>
-<span class="sourceLineNo">146</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span> if (sessions.size() > 0) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.150"></a>
-<span class="sourceLineNo">151</span> System.err.println(sessions.get(0));<a name="line.151"></a>
-<span class="sourceLineNo">152</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.152"></a>
-<span class="sourceLineNo">153</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.153"></a>
-<span class="sourceLineNo">154</span> throw new IOException("Active session found, aborted command execution");<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> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> if (requiresConsistentState()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span> // Check failed delete<a name="line.159"></a>
-<span class="sourceLineNo">160</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (ids != null && ids.length > 0) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> System.err.println("Backup system recovery is required.");<a name="line.165"></a>
-<span class="sourceLineNo">166</span> throw new IOException("Failed backup DELETE found, aborted command execution");<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.169"></a>
-<span class="sourceLineNo">170</span> if (ids != null && ids.length > 0) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.171"></a>
-<span class="sourceLineNo">172</span> System.err.println("Backup system recovery is required.");<a name="line.172"></a>
-<span class="sourceLineNo">173</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> }<a name="line.175"></a>
-<span class="sourceLineNo">176</span> }<a name="line.176"></a>
-<span class="sourceLineNo">177</span> }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span> public void finish() throws IOException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (conn != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> conn.close();<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> protected abstract void printUsage();<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * The command can't be run if active backup session is in progress<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * @return true if no active sessions are in progress<a name="line.189"></a>
-<span class="sourceLineNo">190</span> */<a name="line.190"></a>
-<span class="sourceLineNo">191</span> protected boolean requiresNoActiveSession() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span> return false;<a name="line.192"></a>
-<span class="sourceLineNo">193</span> }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * because of an abnormal termination of a backup session or delete command<a name="line.197"></a>
-<span class="sourceLineNo">198</span> * @return true, if yes<a name="line.198"></a>
-<span class="sourceLineNo">199</span> */<a name="line.199"></a>
-<span class="sourceLineNo">200</span> protected boolean requiresConsistentState() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> return false;<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 BackupCommands() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> throw new AssertionError("Instantiating utility class...");<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> Command cmd;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> switch (type) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> case CREATE:<a name="line.212"></a>
-<span class="sourceLineNo">213</span> cmd = new CreateCommand(conf, cmdline);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span> case DESCRIBE:<a name="line.215"></a>
-<span class="sourceLineNo">216</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.216"></a>
+<span class="sourceLineNo">044</span>import java.io.IOException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.net.URI;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.List;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.lang3.StringUtils;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.conf.Configured;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.FileSystem;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.fs.Path;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.TableName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.yetus.audience.InterfaceAudience;<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> * General backup commands, options and usage messages<a name="line.75"></a>
+<span class="sourceLineNo">076</span> */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceAudience.Private<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public final class BackupCommands {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.81"></a>
+<span class="sourceLineNo">082</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.84"></a>
+<span class="sourceLineNo">085</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.85"></a>
+<span class="sourceLineNo">086</span> + " delete delete an existing backup image\n"<a name="line.86"></a>
+<span class="sourceLineNo">087</span> + " describe show the detailed information of a backup image\n"<a name="line.87"></a>
+<span class="sourceLineNo">088</span> + " history show history of all successful backups\n"<a name="line.88"></a>
+<span class="sourceLineNo">089</span> + " progress show the progress of the latest backup request\n"<a name="line.89"></a>
+<span class="sourceLineNo">090</span> + " set backup set management\n"<a name="line.90"></a>
+<span class="sourceLineNo">091</span> + " repair repair backup system table\n"<a name="line.91"></a>
+<span class="sourceLineNo">092</span> + " merge merge backup images\n"<a name="line.92"></a>
+<span class="sourceLineNo">093</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span> public static final String CREATE_CMD_USAGE =<a name="line.95"></a>
+<span class="sourceLineNo">096</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.96"></a>
+<span class="sourceLineNo">097</span> + " type \"full\" to create a full backup image\n"<a name="line.97"></a>
+<span class="sourceLineNo">098</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.98"></a>
+<span class="sourceLineNo">099</span> + " backup_path Full path to store the backup image\n";<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.101"></a>
+<span class="sourceLineNo">102</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.102"></a>
+<span class="sourceLineNo">103</span> + " progress for currently running backup session.";<a name="line.103"></a>
+<span class="sourceLineNo">104</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.104"></a>
+<span class="sourceLineNo">105</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.107"></a>
+<span class="sourceLineNo">108</span> + " backup_id Backup image id\n";<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete [options]";<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.116"></a>
+<span class="sourceLineNo">117</span> + " name Backup set name\n"<a name="line.117"></a>
+<span class="sourceLineNo">118</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.118"></a>
+<span class="sourceLineNo">119</span> + " add add tables to a set, create a set if needed\n"<a name="line.119"></a>
+<span class="sourceLineNo">120</span> + " remove remove tables from a set\n"<a name="line.120"></a>
+<span class="sourceLineNo">121</span> + " list list all backup sets in the system\n"<a name="line.121"></a>
+<span class="sourceLineNo">122</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.122"></a>
+<span class="sourceLineNo">123</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.123"></a>
+<span class="sourceLineNo">124</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static final String USAGE_FOOTER = "";<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> public static abstract class Command extends Configured {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> CommandLine cmdline;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> Connection conn;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span> Command(Configuration conf) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span> if (conf == null) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> conf = HBaseConfiguration.create();<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> setConf(conf);<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> public void execute() throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> printUsage();<a name="line.141"></a>
+<span class="sourceLineNo">142</span> throw new IOException(INCORRECT_USAGE);<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">145</span> // Create connection<a name="line.145"></a>
+<span class="sourceLineNo">146</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (requiresNoActiveSession()) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // Check active session<a name="line.148"></a>
+<span class="sourceLineNo">149</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span> if (sessions.size() > 0) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.153"></a>
+<span class="sourceLineNo">154</span> System.err.println(sessions.get(0));<a name="line.154"></a>
+<span class="sourceLineNo">155</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.155"></a>
+<span class="sourceLineNo">156</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.156"></a>
+<span class="sourceLineNo">157</span> throw new IOException("Active session found, aborted command execution");<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span> }<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span> if (requiresConsistentState()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span> // Check failed delete<a name="line.162"></a>
+<span class="sourceLineNo">163</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span> if (ids != null && ids.length > 0) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.167"></a>
+<span class="sourceLineNo">168</span> System.err.println("Backup system recovery is required.");<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throw new IOException("Failed backup DELETE found, aborted command execution");<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> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> if (ids != null && ids.length > 0) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.174"></a>
+<span class="sourceLineNo">175</span> System.err.println("Backup system recovery is required.");<a name="line.175"></a>
+<span class="sourceLineNo">176</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> }<a name="line.179"></a>
+<span class="sourceLineNo">180</span> }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span> public void finish() throws IOException {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> if (conn != null) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> conn.close();<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> protected abstract void printUsage();<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * The command can't be run if active backup session is in progress<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * @return true if no active sessions are in progress<a name="line.192"></a>
+<span class="sourceLineNo">193</span> */<a name="line.193"></a>
+<span class="sourceLineNo">194</span> protected boolean requiresNoActiveSession() {<a name="line.194"></a>
+<span class="sourceLineNo">195</span> return false;<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * because of an abnormal termination of a backup session or delete command<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * @return true, if yes<a name="line.201"></a>
+<span class="sourceLineNo">202</span> */<a name="line.202"></a>
+<span class="sourceLineNo">203</span> protected boolean requiresConsistentState() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return false;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> private BackupCommands() {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new AssertionError("Instantiating utility class...");<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> Command cmd;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> switch (type) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> case CREATE:<a name="line.215"></a>
+<span class="sourceLineNo">216</span> cmd = new CreateCommand(conf, cmdline);<a name="line.216"></a>
<span class="sourceLineNo">217</span> break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span> case PROGRESS:<a name="line.218"></a>
-<span class="sourceLineNo">219</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.219"></a>
+<span class="sourceLineNo">218</span> case DESCRIBE:<a name="line.218"></a>
+<span class="sourceLineNo">219</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.219"></a>
<span class="sourceLineNo">220</span> break;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> case DELETE:<a name="line.221"></a>
-<span class="sourceLineNo">222</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.222"></a>
+<span class="sourceLineNo">221</span> case PROGRESS:<a name="line.221"></a>
+<span class="sourceLineNo">222</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.222"></a>
<span class="sourceLineNo">223</span> break;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> case HISTORY:<a name="line.224"></a>
-<span class="sourceLineNo">225</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.225"></a>
+<span class="sourceLineNo">224</span> case DELETE:<a name="line.224"></a>
+<span class="sourceLineNo">225</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.225"></a>
<span class="sourceLineNo">226</span> break;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> case SET:<a name="line.227"></a>
-<span class="sourceLineNo">228</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.228"></a>
+<span class="sourceLineNo">227</span> case HISTORY:<a name="line.227"></a>
+<span class="sourceLineNo">228</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.228"></a>
<span class="sourceLineNo">229</span> break;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> case REPAIR:<a name="line.230"></a>
-<span class="sourceLineNo">231</span> cmd = new RepairCommand(conf, cmdline);<a name="line.231"></a>
+<span class="sourceLineNo">230</span> case SET:<a name="line.230"></a>
+<span class="sourceLineNo">231</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.231"></a>
<span class="sourceLineNo">232</span> break;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> case MERGE:<a name="line.233"></a>
-<span class="sourceLineNo">234</span> cmd = new MergeCommand(conf, cmdline);<a name="line.234"></a>
+<span class="sourceLineNo">233</span> case REPAIR:<a name="line.233"></a>
+<span class="sourceLineNo">234</span> cmd = new RepairCommand(conf, cmdline);<a name="line.234"></a>
<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> case HELP:<a name="line.236"></a>
-<span class="sourceLineNo">237</span> default:<a name="line.237"></a>
-<span class="sourceLineNo">238</span> cmd = new HelpCommand(conf, cmdline);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> break;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return cmd;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> static int numOfArgs(String[] args) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> if (args == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> return 0;<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> return args.length;<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
+<span class="sourceLineNo">236</span> case MERGE:<a name="line.236"></a>
+<span class="sourceLineNo">237</span> cmd = new MergeCommand(conf, cmdline);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> break;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> case HELP:<a name="line.239"></a>
+<span class="sourceLineNo">240</span> default:<a name="line.240"></a>
+<span class="sourceLineNo">241</span> cmd = new HelpCommand(conf, cmdline);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> break;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> return cmd;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> static int numOfArgs(String[] args) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> if (args == null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span> return 0;<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> public static class CreateCommand extends Command {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span> super(conf);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> this.cmdline = cmdline;<a name="line.255"></a>
-<span class="sourceLineNo">256</span> }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span> @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span> protected boolean requiresNoActiveSession() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> return true;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span> protected boolean requiresConsistentState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> return true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span> }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span> @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span> public void execute() throws IOException {<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> printUsage();<a name="line.271"></a>
-<span class="sourceLineNo">272</span> throw new IOException(INCORRECT_USAGE);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span> String[] args = cmdline.getArgs();<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (args.length != 3) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> printUsage();<a name="line.276"></a>
-<span class="sourceLineNo">277</span> throw new IOException(INCORRECT_USAGE);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.280"></a>
-<span class="sourceLineNo">281</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> printUsage();<a name="line.283"></a>
-<span class="sourceLineNo">284</span> throw new IOException(INCORRECT_USAGE);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span> if (!verifyPath(args[2])) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> printUsage();<a name="line.288"></a>
-<span class="sourceLineNo">289</span> throw new IOException(INCORRECT_USAGE);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> String targetBackupDir = args[2];<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.292"></a>
-<span class="sourceLineNo">293</span> if (isRootFolder(targetBackupDir)) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> String tables;<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span> // Check if we have both: backup set and list of tables<a name="line.298"></a>
-<span class="sourceLineNo">299</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.300"></a>
-<span class="sourceLineNo">301</span> + " of tables, but not both");<a name="line.301"></a>
-<span class="sourceLineNo">302</span> printUsage();<a name="line.302"></a>
-<span class="sourceLineNo">303</span> throw new IOException(INCORRECT_USAGE);<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Creates connection<a name="line.305"></a>
-<span class="sourceLineNo">306</span> super.execute();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Check backup set<a name="line.307"></a>
-<span class="sourceLineNo">308</span> String setName = null;<a name="line.308"></a>
-<span class="sourceLineNo">309</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> tables = getTablesForSet(setName, getConf());<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> if (tables == null) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> System.out.println("ERROR: Backup set '" + setName<a name="line.314"></a>
-<span class="sourceLineNo">315</span> + "' is either empty or does not exist");<a name="line.315"></a>
-<span class="sourceLineNo">316</span> printUsage();<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException(INCORRECT_USAGE);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span> int bandwidth =<a name="line.322"></a>
-<span class="sourceLineNo">323</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.323"></a>
-<span class="sourceLineNo">324</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> int workers =<a name="line.325"></a>
-<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.326"></a>
-<span class="sourceLineNo">327</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // Set system property value for MR job<a name="line.331"></a>
-<span class="sourceLineNo">332</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> BackupRequest request =<a name="line.337"></a>
-<span class="sourceLineNo">338</span> builder<a name="line.338"></a>
-<span class="sourceLineNo">339</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.339"></a>
-<span class="sourceLineNo">340</span> .withTableList(<a name="line.340"></a>
-<span class="sourceLineNo">341</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.341"></a>
-<span class="sourceLineNo">342</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.342"></a>
-<span class="sourceLineNo">343</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> String backupId = admin.backupTables(request);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.345"></a>
-<span class="sourceLineNo">346</span> } catch (IOException e) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.347"></a>
-<span class="sourceLineNo">348</span> throw e;<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> Path p = new Path(targetBackupDir);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> return p.isRoot();<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> private boolean verifyPath(String path) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> Path p = new Path(path);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> URI uri = p.toUri();<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (uri.getScheme() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> return false;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> FileSystem.get(uri, conf);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> return true;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> } catch (Exception e) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> return false;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> }<a name="line.371"></a>
-<span class="sourceLineNo">372</span> }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (tables == null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> return null;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span> protected void printUsage() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> System.out.println(CREATE_CMD_USAGE);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> Options options = new Options();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.397"></a>
-<span class="sourceLineNo">398</span> helpFormatter.setLeftPadding(2);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> helpFormatter.setDescPadding(8);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> helpFormatter.setWidth(100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.401"></a>
-<span class="sourceLineNo">402</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> public static class HelpCommand extends Command {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span> super(conf);<a name="line.408"></a>
-<span class="sourceLineNo">409</span> this.cmdline = cmdline;<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void execute() throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> if (cmdline == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span> printUsage();<a name="line.415"></a>
-<span class="sourceLineNo">416</span> throw new IOException(INCORRECT_USAGE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span> }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span> String[] args = cmdline.getArgs();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> if (args == null || args.length == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span> printUsage();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> throw new IOException(INCORRECT_USAGE);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> if (args.length != 2) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.426"></a>
-<span class="sourceLineNo">427</span> printUsage();<a name="line.427"></a>
-<span class="sourceLineNo">428</span> throw new IOException(INCORRECT_USAGE);<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> String type = args[1];<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (BackupCommand.CREATE.name().equalsIgnoreCase(type)) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> System.out.println(CREATE_CMD_USAGE);<a name="line.434"></a>
-<span class="sourceLineNo">435</span> } else if (BackupCommand.DESCRIBE.name().equalsIgnoreCase(type)) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.436"></a>
-<span class="sourceLineNo">437</span> } else if (BackupCommand.HISTORY.name().equalsIgnoreCase(type)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> System.out.println(HISTORY_CMD_USAGE);<a name="line.438"></a>
-<span class="sourceLineNo">439</span> } else if (BackupCommand.PROGRESS.name().equalsIgnoreCase(type)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> System.out.println(PROGRESS_CMD_USAGE);<a name="line.440"></a>
-<span class="sourceLineNo">441</span> } else if (BackupCommand.DELETE.name().equalsIgnoreCase(type)) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> System.out.println(DELETE_CMD_USAGE);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> } else if (BackupCommand.SET.name().equalsIgnoreCase(type)) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> System.out.println(SET_CMD_USAGE);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> } else {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> System.out.println("Unknown command : " + type);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> printUsage();<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span> @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected void printUsage() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> System.out.println(USAGE);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> }<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span> public static class DescribeCommand extends Command {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> DescribeCommand(Configuration conf, CommandLine cmdline) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> super(conf);<a name="line.459"></a>
-<span class="sourceLineNo">460</span> this.cmdline = cmdline;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span> public void execute() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> printUsage();<a name="line.466"></a>
-<span class="sourceLineNo">467</span> throw new IOException(INCORRECT_USAGE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span> String[] args = cmdline.getArgs();<a name="line.469"></a>
-<span class="sourceLineNo">470</span> if (args.length != 2) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> printUsage();<a name="line.471"></a>
-<span class="sourceLineNo">472</span> throw new IOException(INCORRECT_USAGE);<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> super.execute();<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> String backupId = args[1];<a name="line.477"></a>
-<span class="sourceLineNo">478</span> try (final BackupSystemTable sysTable = new BackupSystemTable(conn)) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> BackupInfo info = sysTable.readBackupInfo(backupId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span> if (info == null) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> System.out.println("ERROR: " + backupId + " does not exist");<a name="line.481"></a>
-<span class="sourceLineNo">482</span> printUsage();<a name="line.482"></a>
-<span class="sourceLineNo">483</span> throw new IOException(INCORRECT_USAGE);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> System.out.println(info.getShortDescription());<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> @Override<a name="line.489"></a>
-<span class="sourceLineNo">490</span> protected void printUsage() {<a name="line.490"></a>
-<span class="sourceLineNo">491</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<a name="line.492"></a>
-<span class="sourceLineNo">493</span> }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span> public static class ProgressCommand extends Command {<a name="line.495"></a>
-<span class="sourceLineNo">496</span> ProgressCommand(Configuration conf, CommandLine cmdline) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span> super(conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> this.cmdline = cmdline;<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public void execute() throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">252</span> return args.length;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> public static class CreateCommand extends Command {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> super(conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.cmdline = cmdline;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span> @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span> protected boolean requiresNoActiveSession() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return true;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span> protected boolean requiresConsistentState() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return true;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span> public void execute() throws IOException {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> printUsage();<a name="line.274"></a>
+<span class="sourceLineNo">275</span> throw new IOException(INCORRECT_USAGE);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span> String[] args = cmdline.getArgs();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> if (args.length != 3) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> printUsage();<a name="line.279"></a>
+<span class="sourceLineNo">280</span> throw new IOException(INCORRECT_USAGE);<a name="line.280"></a>
+<span class="sourceLineNo">281</span> }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.283"></a>
+<span class="sourceLineNo">284</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> printUsage();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> throw new IOException(INCORRECT_USAGE);<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> if (!verifyPath(args[2])) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> printUsage();<a name="line.291"></a>
+<span class="sourceLineNo">292</span> throw new IOException(INCORRECT_USAGE);<a name="line.292"></a>
+<span class="sourceLineNo">293</span> }<a name="line.293"></a>
+<span class="sourceLineNo">294</span> String targetBackupDir = args[2];<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (isRootFolder(targetBackupDir)) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> String tables;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // Check if we have both: backup set and list of tables<a name="line.301"></a>
+<span class="sourceLineNo">302</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.303"></a>
+<span class="sourceLineNo">304</span> + " of tables, but not both");<a name="line.304"></a>
+<span class="sourceLineNo">305</span> printUsage();<a name="line.305"></a>
+<span class="sourceLineNo">306</span> throw new IOException(INCORRECT_USAGE);<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span> // Creates connection<a name="line.308"></a>
+<span class="sourceLineNo">309</span> super.execute();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Check backup set<a name="line.310"></a>
+<span class="sourceLineNo">311</span> String setName = null;<a name="line.311"></a>
+<span class="sourceLineNo">312</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> tables = getTablesForSet(setName, getConf());<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span> if (tables == null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> System.out.println("ERROR: Backup set '" + setName<a name="line.317"></a>
+<span class="sourceLineNo">318</span> + "' is either empty or does not exist");<a name="line.318"></a>
+<span class="sourceLineNo">319</span> printUsage();<a name="line.319"></a>
+<span class="sourceLineNo">320</span> throw new IOException(INCORRECT_USAGE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> } else {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span> int bandwidth =<a name="line.325"></a>
+<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.326"></a>
+<span class="sourceLineNo">327</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> int workers =<a name="line.328"></a>
+<span class="sourceLineNo">329</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.329"></a>
+<span class="sourceLineNo">330</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> // Set system property value for MR job<a name="line.334"></a>
+<span class="sourceLineNo">335</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.339"></a>
+<span class="sourceLineNo">340</span> BackupRequest request =<a name="line.340"></a>
+<span class="sourceLineNo">341</span> builder<a name="line.341"></a>
+<span class="sourceLineNo">342</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.342"></a>
+<span class="sourceLineNo">343</span> .withTableList(<a name="line.343"></a>
+<span class="sourceLineNo">344</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.345"></a>
+<span class="sourceLineNo">346</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String backupId = admin.backupTables(request);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> } catch (IOException e) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.350"></a>
+<span class="sourceLineNo">351</span> throw e;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> Path p = new Path(targetBackupDir);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return p.isRoot();<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span> private boolean verifyPath(String path) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> try {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> Path p = new Path(path);<a name="line.362"></a>
+<span class="sourceLineNo">363</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.363"></a>
+<span class="sourceLineNo">364</span> URI uri = p.toUri();<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> if (uri.getScheme() == null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span> return false;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> FileSystem.get(uri, conf);<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return true;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> } catch (Exception e) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return false;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.377"></a>
+<span class="sourceLineNo">378</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span> if (tables == null) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span> return null;<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> @Override<a name="line.389"></a>
+<span class="sourceLineNo">390</span> protected void printUsage() {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> System.out.println(CREATE_CMD_USAGE);<a name="line.391"></a>
+<span class="sourceLineNo">392</span> Options options = new Options();<a name="line.392"></a>
+<span class="sourceLineNo">393</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.400"></a>
+<span class="sourceLineNo">401</span> helpFormatter.setLeftPadding(2);<a name="line.401"></a>
+<span class="sourceLineNo">402</span> helpFormatter.setDescPadding(8);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> helpFormatter.setWidth(100);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.404"></a>
+<span class="sourceLineNo">405</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<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> public static class HelpCommand extends Command {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> super(conf);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> this.cmdline = cmdline;<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span> @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span> public void execute() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span> if (cmdline == null) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> printUsage();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> throw new IOException(INCORRECT_USAGE);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> String[] args = cmdline.getArgs();<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (args == null || args.length == 0) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> printUsage();<a name="line.424"></a>
+<span class="sourceLineNo">425</span> throw new IOException(INCORRECT_USAGE);<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> if (args.length != 2) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.429"></a>
+<span class="sourceLineNo">430</span> printUsage();<a name="line.430"></a>
+<span class="sourceLineNo">431</span> throw new IOException(INCORRECT_USAGE);<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a name="line
<TRUNCATED>
[09/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
index 83c17c0..9df0225 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
@@ -54,323 +54,362 @@
<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> */<a name="line.57"></a>
-<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
-<span class="sourceLineNo">059</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
-<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
-<span class="sourceLineNo">061</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
-<span class="sourceLineNo">062</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span> protected final CompressionContext compression;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> protected final ByteStringUncompressor statelessUncompressor = new ByteStringUncompressor() {<a name="line.65"></a>
-<span class="sourceLineNo">066</span> @Override<a name="line.66"></a>
-<span class="sourceLineNo">067</span> public byte[] uncompress(ByteString data, Dictionary dict) throws IOException {<a name="line.67"></a>
-<span class="sourceLineNo">068</span> return WALCellCodec.uncompressByteString(data, dict);<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><a name="line.71"></a>
-<span class="sourceLineNo">072</span> /**<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.73"></a>
-<span class="sourceLineNo">074</span> */<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public WALCellCodec() {<a name="line.75"></a>
-<span class="sourceLineNo">076</span> this.compression = null;<a name="line.76"></a>
-<span class="sourceLineNo">077</span> }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span> /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.80"></a>
-<span class="sourceLineNo">081</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * @param conf configuration to configure <tt>this</tt><a name="line.82"></a>
-<span class="sourceLineNo">083</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * compression<a name="line.84"></a>
-<span class="sourceLineNo">085</span> */<a name="line.85"></a>
-<span class="sourceLineNo">086</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.86"></a>
-<span class="sourceLineNo">087</span> this.compression = compression;<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 String getWALCellCodecClass(Configuration conf) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * Fully prepares the codec for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * uses a {@link WALCellCodec}.<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * @param cellCodecClsName name of codec<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * @param compression compression the codec should use<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * @return a {@link WALCellCodec} ready for use.<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.104"></a>
-<span class="sourceLineNo">105</span> */<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.107"></a>
-<span class="sourceLineNo">108</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> if (cellCodecClsName == null) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.112"></a>
-<span class="sourceLineNo">113</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.113"></a>
-<span class="sourceLineNo">114</span> }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> /**<a name="line.116"></a>
-<span class="sourceLineNo">117</span> * Create and setup a {@link WALCellCodec} from the<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * CompressionContext.<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * Fully prepares the codec for use.<a name="line.120"></a>
-<span class="sourceLineNo">121</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * uses a {@link WALCellCodec}.<a name="line.122"></a>
-<span class="sourceLineNo">123</span> * @param compression compression the codec should use<a name="line.123"></a>
-<span class="sourceLineNo">124</span> * @return a {@link WALCellCodec} ready for use.<a name="line.124"></a>
-<span class="sourceLineNo">125</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.125"></a>
-<span class="sourceLineNo">126</span> */<a name="line.126"></a>
-<span class="sourceLineNo">127</span> public static WALCellCodec create(Configuration conf,<a name="line.127"></a>
-<span class="sourceLineNo">128</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.128"></a>
-<span class="sourceLineNo">129</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.129"></a>
-<span class="sourceLineNo">130</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.130"></a>
-<span class="sourceLineNo">131</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span> public interface ByteStringCompressor {<a name="line.134"></a>
-<span class="sourceLineNo">135</span> ByteString compress(byte[] data, Dictionary dict) throws IOException;<a name="line.135"></a>
-<span class="sourceLineNo">136</span> }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span> public interface ByteStringUncompressor {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> byte[] uncompress(ByteString data, Dictionary dict) throws IOException;<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> // TODO: it sucks that compression context is in WAL.Entry. It'd be nice if it was here.<a name="line.142"></a>
-<span class="sourceLineNo">143</span> // Dictionary could be gotten by enum; initially, based on enum, context would create<a name="line.143"></a>
-<span class="sourceLineNo">144</span> // an array of dictionaries.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> public ByteString toByteString() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.147"></a>
-<span class="sourceLineNo">148</span> // them.<a name="line.148"></a>
-<span class="sourceLineNo">149</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.149"></a>
-<span class="sourceLineNo">150</span> }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> @Override<a name="line.152"></a>
-<span class="sourceLineNo">153</span> public ByteString compress(byte[] data, Dictionary dict) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span> writeCompressed(data, dict);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.155"></a>
-<span class="sourceLineNo">156</span> // them.<a name="line.156"></a>
-<span class="sourceLineNo">157</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.157"></a>
-<span class="sourceLineNo">158</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.158"></a>
-<span class="sourceLineNo">159</span> return result;<a name="line.159"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
+<span class="sourceLineNo">060</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
+<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
+<span class="sourceLineNo">062</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
+<span class="sourceLineNo">063</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span> protected final CompressionContext compression;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.68"></a>
+<span class="sourceLineNo">069</span> */<a name="line.69"></a>
+<span class="sourceLineNo">070</span> public WALCellCodec() {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> this.compression = null;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<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> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.75"></a>
+<span class="sourceLineNo">076</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * @param conf configuration to configure <tt>this</tt><a name="line.77"></a>
+<span class="sourceLineNo">078</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * compression<a name="line.79"></a>
+<span class="sourceLineNo">080</span> */<a name="line.80"></a>
+<span class="sourceLineNo">081</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span> this.compression = compression;<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 getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * Fully prepares the codec for use.<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * uses a {@link WALCellCodec}.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * @param cellCodecClsName name of codec<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * @param compression compression the codec should use<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.99"></a>
+<span class="sourceLineNo">100</span> */<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
+<span class="sourceLineNo">103</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span> if (cellCodecClsName == null) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
+<span class="sourceLineNo">106</span> }<a name="line.106"></a>
+<span class="sourceLineNo">107</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
+<span class="sourceLineNo">108</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * CompressionContext.<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * Fully prepares the codec for use.<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * uses a {@link WALCellCodec}.<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * @param compression compression the codec should use<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
+<span class="sourceLineNo">121</span> */<a name="line.121"></a>
+<span class="sourceLineNo">122</span> public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
+<span class="sourceLineNo">123</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
+<span class="sourceLineNo">125</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
+<span class="sourceLineNo">126</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> public interface ByteStringCompressor {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> ByteString compress(byte[] data, Enum dictIndex) throws IOException;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> public interface ByteStringUncompressor {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span> static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> CompressionContext compressionContext;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> this.compressionContext = compressionContext;<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> @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span> public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> private CompressionContext compressionContext;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> this.compressionContext = compressionContext;<a name="line.154"></a>
+<span class="sourceLineNo">155</span> }<a name="line.155"></a>
+<span class="sourceLineNo">156</span> public ByteString toByteString() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
+<span class="sourceLineNo">158</span> // them.<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
<span class="sourceLineNo">160</span> }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span> private void writeCompressed(byte[] data, Dictionary dict) throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span> assert dict != null;<a name="line.163"></a>
-<span class="sourceLineNo">164</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.164"></a>
-<span class="sourceLineNo">165</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.166"></a>
-<span class="sourceLineNo">167</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> write(data, 0, data.length);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> } else {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> StreamUtils.writeShort(this, dictIdx);<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> }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.175"></a>
-<span class="sourceLineNo">176</span> InputStream in = bs.newInput();<a name="line.176"></a>
-<span class="sourceLineNo">177</span> byte status = (byte)in.read();<a name="line.177"></a>
-<span class="sourceLineNo">178</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.179"></a>
-<span class="sourceLineNo">180</span> int bytesRead = in.read(arr);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> if (bytesRead != arr.length) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.184"></a>
-<span class="sourceLineNo">185</span> return arr;<a name="line.185"></a>
-<span class="sourceLineNo">186</span> } else {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.187"></a>
-<span class="sourceLineNo">188</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.188"></a>
-<span class="sourceLineNo">189</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.189"></a>
-<span class="sourceLineNo">190</span> if (entry == null) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.191"></a>
-<span class="sourceLineNo">192</span> }<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return entry;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.197"></a>
-<span class="sourceLineNo">198</span> private final CompressionContext compression;<a name="line.198"></a>
-<span class="sourceLineNo">199</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> super(out);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> this.compression = compression;<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> @Override<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public void write(Cell cell) throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> // We first write the KeyValue infrastructure as VInts.<a name="line.206"></a>
-<span class="sourceLineNo">207</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.207"></a>
-<span class="sourceLineNo">208</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.208"></a>
-<span class="sourceLineNo">209</span> // To support tags<a name="line.209"></a>
-<span class="sourceLineNo">210</span> int tagsLength = cell.getTagsLength();<a name="line.210"></a>
-<span class="sourceLineNo">211</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.211"></a>
-<span class="sourceLineNo">212</span> PrivateCellUtil.compressRow(out, cell, compression.rowDict);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> PrivateCellUtil.compressFamily(out, cell, compression.familyDict);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> PrivateCellUtil.compressQualifier(out, cell, compression.qualifierDict);<a name="line.214"></a>
-<span class="sourceLineNo">215</span> // Write timestamp, type and value as uncompressed.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.216"></a>
-<span class="sourceLineNo">217</span> out.write(cell.getTypeByte());<a name="line.217"></a>
-<span class="sourceLineNo">218</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.218"></a>
-<span class="sourceLineNo">219</span> if (tagsLength > 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span> if (compression.tagCompressionContext != null) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span> // Write tags using Dictionary compression<a name="line.221"></a>
-<span class="sourceLineNo">222</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.222"></a>
-<span class="sourceLineNo">223</span> } else {<a name="line.223"></a>
-<span class="sourceLineNo">224</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.224"></a>
-<span class="sourceLineNo">225</span> // it is.<a name="line.225"></a>
-<span class="sourceLineNo">226</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.226"></a>
-<span class="sourceLineNo">227</span> }<a name="line.227"></a>
-<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span> public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> writeCompressed(data, dictIndex);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
+<span class="sourceLineNo">166</span> // them.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
+<span class="sourceLineNo">168</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> return result;<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> private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> assert dict != null;<a name="line.174"></a>
+<span class="sourceLineNo">175</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> write(data, 0, data.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> }<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> }<a name="line.191"></a>
+<span class="sourceLineNo">192</span> }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span> static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span> @Override<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> return data.toByteArray();<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span> }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> InputStream in = bs.newInput();<a name="line.203"></a>
+<span class="sourceLineNo">204</span> byte status = (byte)in.read();<a name="line.204"></a>
+<span class="sourceLineNo">205</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
+<span class="sourceLineNo">207</span> int bytesRead = in.read(arr);<a name="line.207"></a>
+<span class="sourceLineNo">208</span> if (bytesRead != arr.length) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
+<span class="sourceLineNo">212</span> return arr;<a name="line.212"></a>
+<span class="sourceLineNo">213</span> } else {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
+<span class="sourceLineNo">216</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
+<span class="sourceLineNo">217</span> if (entry == null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> }<a name="line.219"></a>
+<span class="sourceLineNo">220</span> return entry;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> private final CompressionContext compression;<a name="line.225"></a>
+<span class="sourceLineNo">226</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> super(out);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> this.compression = compression;<a name="line.228"></a>
<span class="sourceLineNo">229</span> }<a name="line.229"></a>
-<span class="sourceLineNo">230</span> }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.232"></a>
-<span class="sourceLineNo">233</span> private final CompressionContext compression;<a name="line.233"></a>
-<span class="sourceLineNo">234</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> super(in);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> this.compression = compression;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> }<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span> @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span> protected Cell parseCell() throws IOException {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.241"></a>
-<span class="sourceLineNo">242</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> int length = 0;<a name="line.245"></a>
-<span class="sourceLineNo">246</span> if(tagsLength == 0) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.247"></a>
-<span class="sourceLineNo">248</span> } else {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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> byte[] backingArray = new byte[length];<a name="line.252"></a>
-<span class="sourceLineNo">253</span> int pos = 0;<a name="line.253"></a>
-<span class="sourceLineNo">254</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span> // the row<a name="line.257"></a>
-<span class="sourceLineNo">258</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT, compression.rowDict);<a name="line.258"></a>
-<span class="sourceLineNo">259</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.259"></a>
-<span class="sourceLineNo">260</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.260"></a>
-<span class="sourceLineNo">261</span> pos += elemLen;<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> // family<a name="line.263"></a>
-<span class="sourceLineNo">264</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE, compression.familyDict);<a name="line.264"></a>
-<span class="sourceLineNo">265</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> pos += elemLen;<a name="line.267"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span> public void write(Cell cell) throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
+<span class="sourceLineNo">235</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
+<span class="sourceLineNo">236</span> // To support tags<a name="line.236"></a>
+<span class="sourceLineNo">237</span> int tagsLength = cell.getTagsLength();<a name="line.237"></a>
+<span class="sourceLineNo">238</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
+<span class="sourceLineNo">240</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
+<span class="sourceLineNo">241</span> PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
+<span class="sourceLineNo">242</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
+<span class="sourceLineNo">243</span> PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
+<span class="sourceLineNo">244</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
+<span class="sourceLineNo">245</span> // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
+<span class="sourceLineNo">246</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
+<span class="sourceLineNo">247</span> out.write(cell.getTypeByte());<a name="line.247"></a>
+<span class="sourceLineNo">248</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
+<span class="sourceLineNo">249</span> if (tagsLength > 0) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> if (compression.tagCompressionContext != null) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span> // Write tags using Dictionary compression<a name="line.251"></a>
+<span class="sourceLineNo">252</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> } else {<a name="line.253"></a>
+<span class="sourceLineNo">254</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
+<span class="sourceLineNo">255</span> // it is.<a name="line.255"></a>
+<span class="sourceLineNo">256</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
+<span class="sourceLineNo">257</span> }<a name="line.257"></a>
+<span class="sourceLineNo">258</span> }<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private final CompressionContext compression;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span> super(in);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.compression = compression;<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span> // qualifier<a name="line.269"></a>
-<span class="sourceLineNo">270</span> elemLen = readIntoArray(backingArray, pos, compression.qualifierDict);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> pos += elemLen;<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // timestamp, type and value<a name="line.273"></a>
-<span class="sourceLineNo">274</span> int tsTypeValLen = length - pos;<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (tagsLength > 0) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.276"></a>
-<span class="sourceLineNo">277</span> }<a name="line.277"></a>
-<span class="sourceLineNo">278</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.278"></a>
-<span class="sourceLineNo">279</span> pos += tsTypeValLen;<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span> // tags<a name="line.281"></a>
-<span class="sourceLineNo">282</span> if (tagsLength > 0) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.283"></a>
-<span class="sourceLineNo">284</span> if (compression.tagCompressionContext != null) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> } else {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span> return new KeyValue(backingArray, 0, length);<a name="line.290"></a>
-<span class="sourceLineNo">291</span> }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> byte status = (byte)in.read();<a name="line.294"></a>
-<span class="sourceLineNo">295</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span> // status byte indicating that data to be read is not in dictionary.<a name="line.296"></a>
-<span class="sourceLineNo">297</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> int length = StreamUtils.readRawVarint32(in);<a name="line.298"></a>
-<span class="sourceLineNo">299</span> IOUtils.readFully(in, to, offset, length);<a name="line.299"></a>
-<span class="sourceLineNo">300</span> dict.addEntry(to, offset, length);<a name="line.300"></a>
-<span class="sourceLineNo">301</span> return length;<a name="line.301"></a>
-<span class="sourceLineNo">302</span> } else {<a name="line.302"></a>
-<span class="sourceLineNo">303</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.303"></a>
-<span class="sourceLineNo">304</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.304"></a>
-<span class="sourceLineNo">305</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.305"></a>
-<span class="sourceLineNo">306</span> if (entry == null) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span> // now we write the uncompressed value.<a name="line.309"></a>
-<span class="sourceLineNo">310</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> return entry.length;<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span> }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private static void checkLength(int len, int max) throws IOException {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> if (len < 0 || len > max) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> }<a name="line.319"></a>
-<span class="sourceLineNo">320</span> }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.322"></a>
-<span class="sourceLineNo">323</span> public EnsureKvEncoder(OutputStream out) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> super(out);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> @Override<a name="line.326"></a>
-<span class="sourceLineNo">327</span> public void write(Cell cell) throws IOException {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> checkFlushed();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> // Make sure to write tags into WAL<a name="line.329"></a>
-<span class="sourceLineNo">330</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.330"></a>
-<span class="sourceLineNo">331</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> @Override<a name="line.335"></a>
-<span class="sourceLineNo">336</span> public Decoder getDecoder(InputStream is) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span> return (compression == null)<a name="line.337"></a>
-<span class="sourceLineNo">338</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.338"></a>
-<span class="sourceLineNo">339</span> }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span> @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> return getDecoder(new ByteBuffInputStream(buf));<a name="line.343"></a>
-<span class="sourceLineNo">344</span> }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span> public Encoder getEncoder(OutputStream os) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.348"></a>
-<span class="sourceLineNo">349</span> : new ByteBufferWriterOutputStream(os);<a name="line.349"></a>
-<span class="sourceLineNo">350</span> if (compression == null) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span> return new EnsureKvEncoder(os);<a name="line.351"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> protected Cell parseCell() throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
+<span class="sourceLineNo">275</span> int length = 0;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> if(tagsLength == 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span> byte[] backingArray = new byte[length];<a name="line.282"></a>
+<span class="sourceLineNo">283</span> int pos = 0;<a name="line.283"></a>
+<span class="sourceLineNo">284</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> // the row<a name="line.287"></a>
+<span class="sourceLineNo">288</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
+<span class="sourceLineNo">289</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
+<span class="sourceLineNo">290</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
+<span class="sourceLineNo">292</span> pos += elemLen;<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span> // family<a name="line.294"></a>
+<span class="sourceLineNo">295</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
+<span class="sourceLineNo">296</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
+<span class="sourceLineNo">297</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> pos += elemLen;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // qualifier<a name="line.301"></a>
+<span class="sourceLineNo">302</span> elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
+<span class="sourceLineNo">303</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
+<span class="sourceLineNo">304</span> pos += elemLen;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span> // timestamp, type and value<a name="line.306"></a>
+<span class="sourceLineNo">307</span> int tsTypeValLen = length - pos;<a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (tagsLength > 0) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
+<span class="sourceLineNo">310</span> }<a name="line.310"></a>
+<span class="sourceLineNo">311</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> pos += tsTypeValLen;<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span> // tags<a name="line.314"></a>
+<span class="sourceLineNo">315</span> if (tagsLength > 0) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> if (compression.tagCompressionContext != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> byte status = (byte)in.read();<a name="line.327"></a>
+<span class="sourceLineNo">328</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
+<span class="sourceLineNo">331</span> int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span> dict.addEntry(to, offset, length);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> return length;<a name="line.334"></a>
+<span class="sourceLineNo">335</span> } else {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
+<span class="sourceLineNo">337</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
+<span class="sourceLineNo">338</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (entry == null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> // now we write the uncompressed value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> return entry.length;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> }<a name="line.345"></a>
+<span class="sourceLineNo">346</span> }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span> private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> if (len < 0 || len > max) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span> }<a name="line.352"></a>
-<span class="sourceLineNo">353</span> return new CompressedKvEncoder(os, compression);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.357"></a>
-<span class="sourceLineNo">358</span> return new BaosAndCompressor();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.362"></a>
-<span class="sourceLineNo">363</span> return this.statelessUncompressor;<a name="line.363"></a>
-<span class="sourceLineNo">364</span> }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>}<a name="line.365"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span> super(out);<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span> @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span> public void write(Cell cell) throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> checkFlushed();<a name="line.361"></a>
+<span class="sourceLineNo">362</span> // Make sure to write tags into WAL<a name="line.362"></a>
+<span class="sourceLineNo">363</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
+<span class="sourceLineNo">364</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span> @Override<a name="line.368"></a>
+<span class="sourceLineNo">369</span> public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> return (compression == null)<a name="line.370"></a>
+<span class="sourceLineNo">371</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return getDecoder(new ByteBuffInputStream(buf));<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> @Override<a name="line.379"></a>
+<span class="sourceLineNo">380</span> public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
+<span class="sourceLineNo">382</span> : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
+<span class="sourceLineNo">383</span> if (compression == null) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> return new EnsureKvEncoder(os);<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span> return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> return new BaosAndCompressor(compression);<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span> return new StatelessUncompressor(compression);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span> public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return new NoneCompressor();<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> return new NoneUncompressor();<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>}<a name="line.404"></a>
[28/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html
index f236300..513d2ad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.MergeCommand.html
@@ -26,1048 +26,1115 @@
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.backup.impl;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.io.IOException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.net.URI;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.List;<a name="line.42"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.lang3.StringUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configured;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<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> * General backup commands, options and usage messages<a name="line.71"></a>
-<span class="sourceLineNo">072</span> */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceAudience.Private<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public final class BackupCommands {<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.77"></a>
-<span class="sourceLineNo">078</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.80"></a>
-<span class="sourceLineNo">081</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.81"></a>
-<span class="sourceLineNo">082</span> + " delete delete an existing backup image\n"<a name="line.82"></a>
-<span class="sourceLineNo">083</span> + " describe show the detailed information of a backup image\n"<a name="line.83"></a>
-<span class="sourceLineNo">084</span> + " history show history of all successful backups\n"<a name="line.84"></a>
-<span class="sourceLineNo">085</span> + " progress show the progress of the latest backup request\n"<a name="line.85"></a>
-<span class="sourceLineNo">086</span> + " set backup set management\n"<a name="line.86"></a>
-<span class="sourceLineNo">087</span> + " repair repair backup system table\n"<a name="line.87"></a>
-<span class="sourceLineNo">088</span> + " merge merge backup images\n"<a name="line.88"></a>
-<span class="sourceLineNo">089</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> public static final String CREATE_CMD_USAGE =<a name="line.91"></a>
-<span class="sourceLineNo">092</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.92"></a>
-<span class="sourceLineNo">093</span> + " type \"full\" to create a full backup image\n"<a name="line.93"></a>
-<span class="sourceLineNo">094</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.94"></a>
-<span class="sourceLineNo">095</span> + " backup_path Full path to store the backup image\n";<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.97"></a>
-<span class="sourceLineNo">098</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.98"></a>
-<span class="sourceLineNo">099</span> + " progress for currently running backup session.";<a name="line.99"></a>
-<span class="sourceLineNo">100</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.100"></a>
-<span class="sourceLineNo">101</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.103"></a>
-<span class="sourceLineNo">104</span> + " backup_id Backup image id\n";<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete <backup_id>\n"<a name="line.108"></a>
-<span class="sourceLineNo">109</span> + " backup_id Backup image id\n";<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.113"></a>
-<span class="sourceLineNo">114</span> + " name Backup set name\n"<a name="line.114"></a>
-<span class="sourceLineNo">115</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.115"></a>
-<span class="sourceLineNo">116</span> + " add add tables to a set, create a set if needed\n"<a name="line.116"></a>
-<span class="sourceLineNo">117</span> + " remove remove tables from a set\n"<a name="line.117"></a>
-<span class="sourceLineNo">118</span> + " list list all backup sets in the system\n"<a name="line.118"></a>
-<span class="sourceLineNo">119</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.119"></a>
-<span class="sourceLineNo">120</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.120"></a>
-<span class="sourceLineNo">121</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span> public static final String USAGE_FOOTER = "";<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> public static abstract class Command extends Configured {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> CommandLine cmdline;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> Connection conn;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> Command(Configuration conf) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (conf == null) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> conf = HBaseConfiguration.create();<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span> setConf(conf);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span> public void execute() throws IOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> printUsage();<a name="line.138"></a>
-<span class="sourceLineNo">139</span> throw new IOException(INCORRECT_USAGE);<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> // Create connection<a name="line.142"></a>
-<span class="sourceLineNo">143</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.143"></a>
-<span class="sourceLineNo">144</span> if (requiresNoActiveSession()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> // Check active session<a name="line.145"></a>
-<span class="sourceLineNo">146</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span> if (sessions.size() > 0) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.150"></a>
-<span class="sourceLineNo">151</span> System.err.println(sessions.get(0));<a name="line.151"></a>
-<span class="sourceLineNo">152</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.152"></a>
-<span class="sourceLineNo">153</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.153"></a>
-<span class="sourceLineNo">154</span> throw new IOException("Active session found, aborted command execution");<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> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> if (requiresConsistentState()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span> // Check failed delete<a name="line.159"></a>
-<span class="sourceLineNo">160</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (ids != null && ids.length > 0) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> System.err.println("Backup system recovery is required.");<a name="line.165"></a>
-<span class="sourceLineNo">166</span> throw new IOException("Failed backup DELETE found, aborted command execution");<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.169"></a>
-<span class="sourceLineNo">170</span> if (ids != null && ids.length > 0) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.171"></a>
-<span class="sourceLineNo">172</span> System.err.println("Backup system recovery is required.");<a name="line.172"></a>
-<span class="sourceLineNo">173</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> }<a name="line.175"></a>
-<span class="sourceLineNo">176</span> }<a name="line.176"></a>
-<span class="sourceLineNo">177</span> }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span> public void finish() throws IOException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (conn != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> conn.close();<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> protected abstract void printUsage();<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * The command can't be run if active backup session is in progress<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * @return true if no active sessions are in progress<a name="line.189"></a>
-<span class="sourceLineNo">190</span> */<a name="line.190"></a>
-<span class="sourceLineNo">191</span> protected boolean requiresNoActiveSession() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span> return false;<a name="line.192"></a>
-<span class="sourceLineNo">193</span> }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * because of an abnormal termination of a backup session or delete command<a name="line.197"></a>
-<span class="sourceLineNo">198</span> * @return true, if yes<a name="line.198"></a>
-<span class="sourceLineNo">199</span> */<a name="line.199"></a>
-<span class="sourceLineNo">200</span> protected boolean requiresConsistentState() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> return false;<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 BackupCommands() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> throw new AssertionError("Instantiating utility class...");<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> Command cmd;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> switch (type) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> case CREATE:<a name="line.212"></a>
-<span class="sourceLineNo">213</span> cmd = new CreateCommand(conf, cmdline);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span> case DESCRIBE:<a name="line.215"></a>
-<span class="sourceLineNo">216</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.216"></a>
+<span class="sourceLineNo">044</span>import java.io.IOException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.net.URI;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.List;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.lang3.StringUtils;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.conf.Configured;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.FileSystem;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.fs.Path;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.TableName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.yetus.audience.InterfaceAudience;<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> * General backup commands, options and usage messages<a name="line.75"></a>
+<span class="sourceLineNo">076</span> */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceAudience.Private<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public final class BackupCommands {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.81"></a>
+<span class="sourceLineNo">082</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.84"></a>
+<span class="sourceLineNo">085</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.85"></a>
+<span class="sourceLineNo">086</span> + " delete delete an existing backup image\n"<a name="line.86"></a>
+<span class="sourceLineNo">087</span> + " describe show the detailed information of a backup image\n"<a name="line.87"></a>
+<span class="sourceLineNo">088</span> + " history show history of all successful backups\n"<a name="line.88"></a>
+<span class="sourceLineNo">089</span> + " progress show the progress of the latest backup request\n"<a name="line.89"></a>
+<span class="sourceLineNo">090</span> + " set backup set management\n"<a name="line.90"></a>
+<span class="sourceLineNo">091</span> + " repair repair backup system table\n"<a name="line.91"></a>
+<span class="sourceLineNo">092</span> + " merge merge backup images\n"<a name="line.92"></a>
+<span class="sourceLineNo">093</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span> public static final String CREATE_CMD_USAGE =<a name="line.95"></a>
+<span class="sourceLineNo">096</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.96"></a>
+<span class="sourceLineNo">097</span> + " type \"full\" to create a full backup image\n"<a name="line.97"></a>
+<span class="sourceLineNo">098</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.98"></a>
+<span class="sourceLineNo">099</span> + " backup_path Full path to store the backup image\n";<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.101"></a>
+<span class="sourceLineNo">102</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.102"></a>
+<span class="sourceLineNo">103</span> + " progress for currently running backup session.";<a name="line.103"></a>
+<span class="sourceLineNo">104</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.104"></a>
+<span class="sourceLineNo">105</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.107"></a>
+<span class="sourceLineNo">108</span> + " backup_id Backup image id\n";<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete [options]";<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.116"></a>
+<span class="sourceLineNo">117</span> + " name Backup set name\n"<a name="line.117"></a>
+<span class="sourceLineNo">118</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.118"></a>
+<span class="sourceLineNo">119</span> + " add add tables to a set, create a set if needed\n"<a name="line.119"></a>
+<span class="sourceLineNo">120</span> + " remove remove tables from a set\n"<a name="line.120"></a>
+<span class="sourceLineNo">121</span> + " list list all backup sets in the system\n"<a name="line.121"></a>
+<span class="sourceLineNo">122</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.122"></a>
+<span class="sourceLineNo">123</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.123"></a>
+<span class="sourceLineNo">124</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static final String USAGE_FOOTER = "";<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> public static abstract class Command extends Configured {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> CommandLine cmdline;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> Connection conn;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span> Command(Configuration conf) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span> if (conf == null) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> conf = HBaseConfiguration.create();<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> setConf(conf);<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> public void execute() throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> printUsage();<a name="line.141"></a>
+<span class="sourceLineNo">142</span> throw new IOException(INCORRECT_USAGE);<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">145</span> // Create connection<a name="line.145"></a>
+<span class="sourceLineNo">146</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (requiresNoActiveSession()) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // Check active session<a name="line.148"></a>
+<span class="sourceLineNo">149</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span> if (sessions.size() > 0) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.153"></a>
+<span class="sourceLineNo">154</span> System.err.println(sessions.get(0));<a name="line.154"></a>
+<span class="sourceLineNo">155</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.155"></a>
+<span class="sourceLineNo">156</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.156"></a>
+<span class="sourceLineNo">157</span> throw new IOException("Active session found, aborted command execution");<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span> }<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span> if (requiresConsistentState()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span> // Check failed delete<a name="line.162"></a>
+<span class="sourceLineNo">163</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span> if (ids != null && ids.length > 0) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.167"></a>
+<span class="sourceLineNo">168</span> System.err.println("Backup system recovery is required.");<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throw new IOException("Failed backup DELETE found, aborted command execution");<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> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> if (ids != null && ids.length > 0) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.174"></a>
+<span class="sourceLineNo">175</span> System.err.println("Backup system recovery is required.");<a name="line.175"></a>
+<span class="sourceLineNo">176</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> }<a name="line.179"></a>
+<span class="sourceLineNo">180</span> }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span> public void finish() throws IOException {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> if (conn != null) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> conn.close();<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> protected abstract void printUsage();<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * The command can't be run if active backup session is in progress<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * @return true if no active sessions are in progress<a name="line.192"></a>
+<span class="sourceLineNo">193</span> */<a name="line.193"></a>
+<span class="sourceLineNo">194</span> protected boolean requiresNoActiveSession() {<a name="line.194"></a>
+<span class="sourceLineNo">195</span> return false;<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * because of an abnormal termination of a backup session or delete command<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * @return true, if yes<a name="line.201"></a>
+<span class="sourceLineNo">202</span> */<a name="line.202"></a>
+<span class="sourceLineNo">203</span> protected boolean requiresConsistentState() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return false;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> private BackupCommands() {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new AssertionError("Instantiating utility class...");<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> Command cmd;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> switch (type) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> case CREATE:<a name="line.215"></a>
+<span class="sourceLineNo">216</span> cmd = new CreateCommand(conf, cmdline);<a name="line.216"></a>
<span class="sourceLineNo">217</span> break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span> case PROGRESS:<a name="line.218"></a>
-<span class="sourceLineNo">219</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.219"></a>
+<span class="sourceLineNo">218</span> case DESCRIBE:<a name="line.218"></a>
+<span class="sourceLineNo">219</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.219"></a>
<span class="sourceLineNo">220</span> break;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> case DELETE:<a name="line.221"></a>
-<span class="sourceLineNo">222</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.222"></a>
+<span class="sourceLineNo">221</span> case PROGRESS:<a name="line.221"></a>
+<span class="sourceLineNo">222</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.222"></a>
<span class="sourceLineNo">223</span> break;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> case HISTORY:<a name="line.224"></a>
-<span class="sourceLineNo">225</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.225"></a>
+<span class="sourceLineNo">224</span> case DELETE:<a name="line.224"></a>
+<span class="sourceLineNo">225</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.225"></a>
<span class="sourceLineNo">226</span> break;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> case SET:<a name="line.227"></a>
-<span class="sourceLineNo">228</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.228"></a>
+<span class="sourceLineNo">227</span> case HISTORY:<a name="line.227"></a>
+<span class="sourceLineNo">228</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.228"></a>
<span class="sourceLineNo">229</span> break;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> case REPAIR:<a name="line.230"></a>
-<span class="sourceLineNo">231</span> cmd = new RepairCommand(conf, cmdline);<a name="line.231"></a>
+<span class="sourceLineNo">230</span> case SET:<a name="line.230"></a>
+<span class="sourceLineNo">231</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.231"></a>
<span class="sourceLineNo">232</span> break;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> case MERGE:<a name="line.233"></a>
-<span class="sourceLineNo">234</span> cmd = new MergeCommand(conf, cmdline);<a name="line.234"></a>
+<span class="sourceLineNo">233</span> case REPAIR:<a name="line.233"></a>
+<span class="sourceLineNo">234</span> cmd = new RepairCommand(conf, cmdline);<a name="line.234"></a>
<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> case HELP:<a name="line.236"></a>
-<span class="sourceLineNo">237</span> default:<a name="line.237"></a>
-<span class="sourceLineNo">238</span> cmd = new HelpCommand(conf, cmdline);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> break;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return cmd;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> static int numOfArgs(String[] args) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> if (args == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> return 0;<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> return args.length;<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
+<span class="sourceLineNo">236</span> case MERGE:<a name="line.236"></a>
+<span class="sourceLineNo">237</span> cmd = new MergeCommand(conf, cmdline);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> break;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> case HELP:<a name="line.239"></a>
+<span class="sourceLineNo">240</span> default:<a name="line.240"></a>
+<span class="sourceLineNo">241</span> cmd = new HelpCommand(conf, cmdline);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> break;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> return cmd;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> static int numOfArgs(String[] args) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> if (args == null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span> return 0;<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> public static class CreateCommand extends Command {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span> super(conf);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> this.cmdline = cmdline;<a name="line.255"></a>
-<span class="sourceLineNo">256</span> }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span> @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span> protected boolean requiresNoActiveSession() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> return true;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span> protected boolean requiresConsistentState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> return true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span> }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span> @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span> public void execute() throws IOException {<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> printUsage();<a name="line.271"></a>
-<span class="sourceLineNo">272</span> throw new IOException(INCORRECT_USAGE);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span> String[] args = cmdline.getArgs();<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (args.length != 3) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> printUsage();<a name="line.276"></a>
-<span class="sourceLineNo">277</span> throw new IOException(INCORRECT_USAGE);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.280"></a>
-<span class="sourceLineNo">281</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> printUsage();<a name="line.283"></a>
-<span class="sourceLineNo">284</span> throw new IOException(INCORRECT_USAGE);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span> if (!verifyPath(args[2])) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> printUsage();<a name="line.288"></a>
-<span class="sourceLineNo">289</span> throw new IOException(INCORRECT_USAGE);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> String targetBackupDir = args[2];<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.292"></a>
-<span class="sourceLineNo">293</span> if (isRootFolder(targetBackupDir)) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> String tables;<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span> // Check if we have both: backup set and list of tables<a name="line.298"></a>
-<span class="sourceLineNo">299</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.300"></a>
-<span class="sourceLineNo">301</span> + " of tables, but not both");<a name="line.301"></a>
-<span class="sourceLineNo">302</span> printUsage();<a name="line.302"></a>
-<span class="sourceLineNo">303</span> throw new IOException(INCORRECT_USAGE);<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Creates connection<a name="line.305"></a>
-<span class="sourceLineNo">306</span> super.execute();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Check backup set<a name="line.307"></a>
-<span class="sourceLineNo">308</span> String setName = null;<a name="line.308"></a>
-<span class="sourceLineNo">309</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> tables = getTablesForSet(setName, getConf());<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> if (tables == null) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> System.out.println("ERROR: Backup set '" + setName<a name="line.314"></a>
-<span class="sourceLineNo">315</span> + "' is either empty or does not exist");<a name="line.315"></a>
-<span class="sourceLineNo">316</span> printUsage();<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException(INCORRECT_USAGE);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span> int bandwidth =<a name="line.322"></a>
-<span class="sourceLineNo">323</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.323"></a>
-<span class="sourceLineNo">324</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> int workers =<a name="line.325"></a>
-<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.326"></a>
-<span class="sourceLineNo">327</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // Set system property value for MR job<a name="line.331"></a>
-<span class="sourceLineNo">332</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> BackupRequest request =<a name="line.337"></a>
-<span class="sourceLineNo">338</span> builder<a name="line.338"></a>
-<span class="sourceLineNo">339</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.339"></a>
-<span class="sourceLineNo">340</span> .withTableList(<a name="line.340"></a>
-<span class="sourceLineNo">341</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.341"></a>
-<span class="sourceLineNo">342</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.342"></a>
-<span class="sourceLineNo">343</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> String backupId = admin.backupTables(request);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.345"></a>
-<span class="sourceLineNo">346</span> } catch (IOException e) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.347"></a>
-<span class="sourceLineNo">348</span> throw e;<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> Path p = new Path(targetBackupDir);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> return p.isRoot();<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> private boolean verifyPath(String path) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> Path p = new Path(path);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> URI uri = p.toUri();<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (uri.getScheme() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> return false;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> FileSystem.get(uri, conf);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> return true;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> } catch (Exception e) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> return false;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> }<a name="line.371"></a>
-<span class="sourceLineNo">372</span> }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (tables == null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> return null;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span> protected void printUsage() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> System.out.println(CREATE_CMD_USAGE);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> Options options = new Options();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.397"></a>
-<span class="sourceLineNo">398</span> helpFormatter.setLeftPadding(2);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> helpFormatter.setDescPadding(8);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> helpFormatter.setWidth(100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.401"></a>
-<span class="sourceLineNo">402</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> public static class HelpCommand extends Command {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span> super(conf);<a name="line.408"></a>
-<span class="sourceLineNo">409</span> this.cmdline = cmdline;<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void execute() throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> if (cmdline == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span> printUsage();<a name="line.415"></a>
-<span class="sourceLineNo">416</span> throw new IOException(INCORRECT_USAGE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span> }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span> String[] args = cmdline.getArgs();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> if (args == null || args.length == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span> printUsage();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> throw new IOException(INCORRECT_USAGE);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> if (args.length != 2) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.426"></a>
-<span class="sourceLineNo">427</span> printUsage();<a name="line.427"></a>
-<span class="sourceLineNo">428</span> throw new IOException(INCORRECT_USAGE);<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> String type = args[1];<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (BackupCommand.CREATE.name().equalsIgnoreCase(type)) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> System.out.println(CREATE_CMD_USAGE);<a name="line.434"></a>
-<span class="sourceLineNo">435</span> } else if (BackupCommand.DESCRIBE.name().equalsIgnoreCase(type)) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.436"></a>
-<span class="sourceLineNo">437</span> } else if (BackupCommand.HISTORY.name().equalsIgnoreCase(type)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> System.out.println(HISTORY_CMD_USAGE);<a name="line.438"></a>
-<span class="sourceLineNo">439</span> } else if (BackupCommand.PROGRESS.name().equalsIgnoreCase(type)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> System.out.println(PROGRESS_CMD_USAGE);<a name="line.440"></a>
-<span class="sourceLineNo">441</span> } else if (BackupCommand.DELETE.name().equalsIgnoreCase(type)) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> System.out.println(DELETE_CMD_USAGE);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> } else if (BackupCommand.SET.name().equalsIgnoreCase(type)) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> System.out.println(SET_CMD_USAGE);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> } else {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> System.out.println("Unknown command : " + type);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> printUsage();<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span> @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected void printUsage() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> System.out.println(USAGE);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> }<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span> public static class DescribeCommand extends Command {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> DescribeCommand(Configuration conf, CommandLine cmdline) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> super(conf);<a name="line.459"></a>
-<span class="sourceLineNo">460</span> this.cmdline = cmdline;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span> public void execute() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> printUsage();<a name="line.466"></a>
-<span class="sourceLineNo">467</span> throw new IOException(INCORRECT_USAGE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span> String[] args = cmdline.getArgs();<a name="line.469"></a>
-<span class="sourceLineNo">470</span> if (args.length != 2) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> printUsage();<a name="line.471"></a>
-<span class="sourceLineNo">472</span> throw new IOException(INCORRECT_USAGE);<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> super.execute();<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> String backupId = args[1];<a name="line.477"></a>
-<span class="sourceLineNo">478</span> try (final BackupSystemTable sysTable = new BackupSystemTable(conn)) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> BackupInfo info = sysTable.readBackupInfo(backupId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span> if (info == null) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> System.out.println("ERROR: " + backupId + " does not exist");<a name="line.481"></a>
-<span class="sourceLineNo">482</span> printUsage();<a name="line.482"></a>
-<span class="sourceLineNo">483</span> throw new IOException(INCORRECT_USAGE);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> System.out.println(info.getShortDescription());<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> @Override<a name="line.489"></a>
-<span class="sourceLineNo">490</span> protected void printUsage() {<a name="line.490"></a>
-<span class="sourceLineNo">491</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<a name="line.492"></a>
-<span class="sourceLineNo">493</span> }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span> public static class ProgressCommand extends Command {<a name="line.495"></a>
-<span class="sourceLineNo">496</span> ProgressCommand(Configuration conf, CommandLine cmdline) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span> super(conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> this.cmdline = cmdline;<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public void execute() throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">252</span> return args.length;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> public static class CreateCommand extends Command {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> super(conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.cmdline = cmdline;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span> @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span> protected boolean requiresNoActiveSession() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return true;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span> protected boolean requiresConsistentState() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return true;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span> public void execute() throws IOException {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> printUsage();<a name="line.274"></a>
+<span class="sourceLineNo">275</span> throw new IOException(INCORRECT_USAGE);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span> String[] args = cmdline.getArgs();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> if (args.length != 3) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> printUsage();<a name="line.279"></a>
+<span class="sourceLineNo">280</span> throw new IOException(INCORRECT_USAGE);<a name="line.280"></a>
+<span class="sourceLineNo">281</span> }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.283"></a>
+<span class="sourceLineNo">284</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> printUsage();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> throw new IOException(INCORRECT_USAGE);<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> if (!verifyPath(args[2])) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> printUsage();<a name="line.291"></a>
+<span class="sourceLineNo">292</span> throw new IOException(INCORRECT_USAGE);<a name="line.292"></a>
+<span class="sourceLineNo">293</span> }<a name="line.293"></a>
+<span class="sourceLineNo">294</span> String targetBackupDir = args[2];<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (isRootFolder(targetBackupDir)) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> String tables;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // Check if we have both: backup set and list of tables<a name="line.301"></a>
+<span class="sourceLineNo">302</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.303"></a>
+<span class="sourceLineNo">304</span> + " of tables, but not both");<a name="line.304"></a>
+<span class="sourceLineNo">305</span> printUsage();<a name="line.305"></a>
+<span class="sourceLineNo">306</span> throw new IOException(INCORRECT_USAGE);<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span> // Creates connection<a name="line.308"></a>
+<span class="sourceLineNo">309</span> super.execute();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Check backup set<a name="line.310"></a>
+<span class="sourceLineNo">311</span> String setName = null;<a name="line.311"></a>
+<span class="sourceLineNo">312</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> tables = getTablesForSet(setName, getConf());<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span> if (tables == null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> System.out.println("ERROR: Backup set '" + setName<a name="line.317"></a>
+<span class="sourceLineNo">318</span> + "' is either empty or does not exist");<a name="line.318"></a>
+<span class="sourceLineNo">319</span> printUsage();<a name="line.319"></a>
+<span class="sourceLineNo">320</span> throw new IOException(INCORRECT_USAGE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> } else {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span> int bandwidth =<a name="line.325"></a>
+<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.326"></a>
+<span class="sourceLineNo">327</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> int workers =<a name="line.328"></a>
+<span class="sourceLineNo">329</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.329"></a>
+<span class="sourceLineNo">330</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> // Set system property value for MR job<a name="line.334"></a>
+<span class="sourceLineNo">335</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.339"></a>
+<span class="sourceLineNo">340</span> BackupRequest request =<a name="line.340"></a>
+<span class="sourceLineNo">341</span> builder<a name="line.341"></a>
+<span class="sourceLineNo">342</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.342"></a>
+<span class="sourceLineNo">343</span> .withTableList(<a name="line.343"></a>
+<span class="sourceLineNo">344</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.345"></a>
+<span class="sourceLineNo">346</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String backupId = admin.backupTables(request);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> } catch (IOException e) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.350"></a>
+<span class="sourceLineNo">351</span> throw e;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> Path p = new Path(targetBackupDir);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return p.isRoot();<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span> private boolean verifyPath(String path) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> try {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> Path p = new Path(path);<a name="line.362"></a>
+<span class="sourceLineNo">363</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.363"></a>
+<span class="sourceLineNo">364</span> URI uri = p.toUri();<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> if (uri.getScheme() == null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span> return false;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> FileSystem.get(uri, conf);<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return true;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> } catch (Exception e) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return false;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.377"></a>
+<span class="sourceLineNo">378</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span> if (tables == null) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span> return null;<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> @Override<a name="line.389"></a>
+<span class="sourceLineNo">390</span> protected void printUsage() {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> System.out.println(CREATE_CMD_USAGE);<a name="line.391"></a>
+<span class="sourceLineNo">392</span> Options options = new Options();<a name="line.392"></a>
+<span class="sourceLineNo">393</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.400"></a>
+<span class="sourceLineNo">401</span> helpFormatter.setLeftPadding(2);<a name="line.401"></a>
+<span class="sourceLineNo">402</span> helpFormatter.setDescPadding(8);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> helpFormatter.setWidth(100);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.404"></a>
+<span class="sourceLineNo">405</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<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> public static class HelpCommand extends Command {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> super(conf);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> this.cmdline = cmdline;<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span> @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span> public void execute() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span> if (cmdline == null) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> printUsage();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> throw new IOException(INCORRECT_USAGE);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> String[] args = cmdline.getArgs();<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (args == null || args.length == 0) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> printUsage();<a name="line.424"></a>
+<span class="sourceLineNo">425</span> throw new IOException(INCORRECT_USAGE);<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> if (args.length != 2) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.429"></a>
+<span class="sourceLineNo">430</span> printUsage();<a name="line.430"></a>
+<span class="sourceLineNo">431</span> throw new IOException(INCORRECT_USAGE);<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a name=
<TRUNCATED>
[41/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index eb945fb..ad40e69 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -197,8 +197,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><E> (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><T>, 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.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html b/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html
index 76ca590..559c744 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html
@@ -382,9 +382,10 @@
<td class="colLast"><span class="typeNameLabel">TableNamespaceManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/TableNamespaceManager.html#createNamespaceTable-org.apache.hadoop.hbase.master.MasterServices-">createNamespaceTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> masterServices)</code> </td>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></code></td>
+<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></code></td>
<td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html#createServerManager-org.apache.hadoop.hbase.master.MasterServices-">createServerManager</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> master)</code>
-<div class="block">Create a <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.</div>
+<div class="block">
+ Create a <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.</div>
</td>
</tr>
<tr class="rowColor">
@@ -450,19 +451,15 @@
</td>
</tr>
<tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html#ServerManager-org.apache.hadoop.hbase.master.MasterServices-boolean-">ServerManager</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> master,
- boolean connect)</code> </td>
-</tr>
-<tr class="rowColor">
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/SplitLogManager.html#SplitLogManager-org.apache.hadoop.hbase.master.MasterServices-org.apache.hadoop.conf.Configuration-">SplitLogManager</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> master,
org.apache.hadoop.conf.Configuration conf)</code>
<div class="block">Its OK to construct this object even when region-servers are not online.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/TableNamespaceManager.html#TableNamespaceManager-org.apache.hadoop.hbase.master.MasterServices-">TableNamespaceManager</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> masterServices)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/TableStateManager.html#TableStateManager-org.apache.hadoop.hbase.master.MasterServices-">TableStateManager</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> master)</code> </td>
</tr>
</tbody>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/class-use/RegionServerTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/class-use/RegionServerTracker.html b/devapidocs/org/apache/hadoop/hbase/master/class-use/RegionServerTracker.html
index 2a8bf6c..e51f116 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/class-use/RegionServerTracker.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/class-use/RegionServerTracker.html
@@ -103,7 +103,7 @@
</tr>
<tbody>
<tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></code></td>
<td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html#regionServerTracker">regionServerTracker</a></span></code> </td>
</tr>
</tbody>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/class-use/ServerManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/class-use/ServerManager.html b/devapidocs/org/apache/hadoop/hbase/master/class-use/ServerManager.html
index 7d1b3ed..db31e5d 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/class-use/ServerManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/class-use/ServerManager.html
@@ -128,9 +128,10 @@
</tr>
<tbody>
<tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></code></td>
+<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></code></td>
<td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html#createServerManager-org.apache.hadoop.hbase.master.MasterServices-">createServerManager</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> master)</code>
-<div class="block">Create a <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.</div>
+<div class="block">
+ Create a <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.</div>
</td>
</tr>
<tr class="rowColor">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-summary.html b/devapidocs/org/apache/hadoop/hbase/master/package-summary.html
index 81462ad..46e06a9 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-summary.html
@@ -477,7 +477,8 @@
<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></td>
<td class="colLast">
-<div class="block">Tracks the online region servers via ZK.</div>
+<div class="block">
+ Tracks the online region servers via ZK.</div>
</td>
</tr>
<tr class="altColor">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 23075b7..e37f9f8 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -346,11 +346,11 @@
<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><E> (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><T>, 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.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-use.html b/devapidocs/org/apache/hadoop/hbase/master/package-use.html
index ba318bd..6c12d0f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-use.html
@@ -529,7 +529,8 @@
</tr>
<tr class="altColor">
<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/RegionServerTracker.html#org.apache.hadoop.hbase.master">RegionServerTracker</a>
-<div class="block">Tracks the online region servers via ZK.</div>
+<div class="block">
+ Tracks the online region servers via ZK.</div>
</td>
</tr>
<tr class="rowColor">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 81c4bf7..63d4992 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -217,8 +217,8 @@
<ul>
<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index e6aeb77..d399839 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -437,19 +437,19 @@
<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><E> (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><T>, 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.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index ccbce3a..242350b 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -219,11 +219,11 @@
<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><E> (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><T>, 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.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/quotas/class-use/SpaceQuotaSnapshotNotifier.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/class-use/SpaceQuotaSnapshotNotifier.html b/devapidocs/org/apache/hadoop/hbase/quotas/class-use/SpaceQuotaSnapshotNotifier.html
index ef403c2..3fb498d 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/class-use/SpaceQuotaSnapshotNotifier.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/class-use/SpaceQuotaSnapshotNotifier.html
@@ -120,7 +120,7 @@
</tr>
<tbody>
<tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a></code></td>
<td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html#createQuotaSnapshotNotifier--">createQuotaSnapshotNotifier</a></span>()</code> </td>
</tr>
<tr class="rowColor">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 93b380c..3d7a909 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -229,13 +229,13 @@
<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><E> (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><T>, 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.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 8f96907..add27c6 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -704,20 +704,20 @@
<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><E> (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><T>, 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.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 3bd22b5..858ccf6 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,9 @@
<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><E> (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><T>, 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.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
index 531ddc6..7c0004c 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
@@ -554,7 +554,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>initAfterHeader</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.189">initAfterHeader</a>(boolean doCompress)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.191">initAfterHeader</a>(boolean doCompress)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -568,7 +568,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>secureInitAfterHeader</h4>
-<pre>protected final void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.194">secureInitAfterHeader</a>(boolean doCompress,
+<pre>protected final void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.196">secureInitAfterHeader</a>(boolean doCompress,
<a href="../../../../../../org/apache/hadoop/hbase/io/crypto/Encryptor.html" title="interface in org.apache.hadoop.hbase.io.crypto">Encryptor</a> encryptor)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
@@ -583,7 +583,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>setWALTrailer</h4>
-<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.206">setWALTrailer</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer walTrailer)</pre>
+<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.209">setWALTrailer</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer walTrailer)</pre>
</li>
</ul>
<a name="getLength--">
@@ -592,7 +592,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getLength</h4>
-<pre>public long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.210">getLength</a>()</pre>
+<pre>public long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.213">getLength</a>()</pre>
</li>
</ul>
<a name="buildWALTrailer-org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer.Builder-">
@@ -601,7 +601,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>buildWALTrailer</h4>
-<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.214">buildWALTrailer</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer.Builder builder)</pre>
+<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.217">buildWALTrailer</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer.Builder builder)</pre>
</li>
</ul>
<a name="writeWALTrailer--">
@@ -610,7 +610,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>writeWALTrailer</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.218">writeWALTrailer</a>()</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.221">writeWALTrailer</a>()</pre>
</li>
</ul>
<a name="initOutput-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-boolean-int-short-long-">
@@ -619,7 +619,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>initOutput</h4>
-<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.238">initOutput</a>(org.apache.hadoop.fs.FileSystem fs,
+<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.241">initOutput</a>(org.apache.hadoop.fs.FileSystem fs,
org.apache.hadoop.fs.Path path,
boolean overwritable,
int bufferSize,
@@ -640,7 +640,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>writeMagicAndWALHeader</h4>
-<pre>protected abstract long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.244">writeMagicAndWALHeader</a>(byte[] magic,
+<pre>protected abstract long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.247">writeMagicAndWALHeader</a>(byte[] magic,
org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALHeader header)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">return the file length after written.</div>
@@ -656,7 +656,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>writeWALTrailerAndMagic</h4>
-<pre>protected abstract long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.246">writeWALTrailerAndMagic</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer trailer,
+<pre>protected abstract long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.249">writeWALTrailerAndMagic</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer trailer,
byte[] magic)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
@@ -671,7 +671,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>getOutputStreamForCellEncoder</h4>
-<pre>protected abstract <a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.249">getOutputStreamForCellEncoder</a>()</pre>
+<pre>protected abstract <a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.252">getOutputStreamForCellEncoder</a>()</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html
index 9fd0c7e..c4b8455 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html
@@ -419,7 +419,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AsyncFSWALProv
<ul class="blockList">
<li class="blockList">
<h4>sync</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.142">sync</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.141">sync</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html#sync--">sync</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a></code></dd>
@@ -432,7 +432,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AsyncFSWALProv
<ul class="blockList">
<li class="blockList">
<h4>close</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.147">close</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.146">close</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -450,7 +450,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AsyncFSWALProv
<ul class="blockList">
<li class="blockList">
<h4>getOutput</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/io/asyncfs/AsyncFSOutput.html" title="interface in org.apache.hadoop.hbase.io.asyncfs">AsyncFSOutput</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.161">getOutput</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/io/asyncfs/AsyncFSOutput.html" title="interface in org.apache.hadoop.hbase.io.asyncfs">AsyncFSOutput</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.160">getOutput</a>()</pre>
</li>
</ul>
<a name="initOutput-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-boolean-int-short-long-">
@@ -459,7 +459,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AsyncFSWALProv
<ul class="blockList">
<li class="blockList">
<h4>initOutput</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.166">initOutput</a>(org.apache.hadoop.fs.FileSystem fs,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.165">initOutput</a>(org.apache.hadoop.fs.FileSystem fs,
org.apache.hadoop.fs.Path path,
boolean overwritable,
int bufferSize,
@@ -482,7 +482,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AsyncFSWALProv
<ul class="blockList">
<li class="blockList">
<h4>write</h4>
-<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.173">write</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function">Consumer</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>>> action)
+<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.172">write</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function">Consumer</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>>> action)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -496,7 +496,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AsyncFSWALProv
<ul class="blockList">
<li class="blockList">
<h4>writeMagicAndWALHeader</h4>
-<pre>protected long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.189">writeMagicAndWALHeader</a>(byte[] magic,
+<pre>protected long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.188">writeMagicAndWALHeader</a>(byte[] magic,
org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALHeader header)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#writeMagicAndWALHeader-byte:A-org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALHeader-">AbstractProtobufLogWriter</a></code></span></div>
@@ -515,7 +515,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AsyncFSWALProv
<ul class="blockList">
<li class="blockList">
<h4>writeWALTrailerAndMagic</h4>
-<pre>protected long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.209">writeWALTrailerAndMagic</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer trailer,
+<pre>protected long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.208">writeWALTrailerAndMagic</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer trailer,
byte[] magic)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
@@ -532,7 +532,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/AsyncFSWALProv
<ul class="blockListLast">
<li class="blockList">
<h4>getOutputStreamForCellEncoder</h4>
-<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.230">getOutputStreamForCellEncoder</a>()</pre>
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html#line.229">getOutputStreamForCellEncoder</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#getOutputStreamForCellEncoder--">getOutputStreamForCellEncoder</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractProtobufLogWriter</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html
new file mode 100644
index 0000000..54bc5ec
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html
@@ -0,0 +1,382 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>CompressionContext.DictionaryIndex (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="CompressionContext.DictionaryIndex (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":9,"i1":9};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/CompressionContext.DictionaryIndex.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Compressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" target="_top">Frames</a></li>
+<li><a href="CompressionContext.DictionaryIndex.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li><a href="#enum.constant.summary">Enum Constants</a> | </li>
+<li>Field | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#enum.constant.detail">Enum Constants</a> | </li>
+<li>Field | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.regionserver.wal</div>
+<h2 title="Enum CompressionContext.DictionaryIndex" class="title">Enum CompressionContext.DictionaryIndex</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a>></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.regionserver.wal.CompressionContext.DictionaryIndex</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><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>, <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><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a>></dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#line.40">CompressionContext.DictionaryIndex</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a>></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.summary">
+<!-- -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#FAMILY">FAMILY</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#QUALIFIER">QUALIFIER</a></span></code> </td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#REGION">REGION</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#ROW">ROW</a></span></code> </td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#TABLE">TABLE</a></span></code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#valueOf-java.lang.String-">valueOf</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#values--">values</a></span>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Enum">
+<!-- -->
+</a>
+<h3>Methods inherited from class 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">Enum</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#compareTo-E-" title="class or interface in java.lang">compareTo</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass--" title="class or interface in java.lang">getDeclaringClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/
8/docs/api/java/lang/Enum.html?is-external=true#name--" title="class or interface in java.lang">name</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#ordinal--" title="class or interface in java.lang">ordinal</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#valueOf-java.lang.Class-java.lang.String-" title="class or interface in java.lang">valueOf</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.detail">
+<!-- -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="REGION">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>REGION</h4>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#line.41">REGION</a></pre>
+</li>
+</ul>
+<a name="TABLE">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TABLE</h4>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#line.41">TABLE</a></pre>
+</li>
+</ul>
+<a name="FAMILY">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FAMILY</h4>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#line.41">FAMILY</a></pre>
+</li>
+</ul>
+<a name="QUALIFIER">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>QUALIFIER</h4>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#line.41">QUALIFIER</a></pre>
+</li>
+</ul>
+<a name="ROW">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ROW</h4>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#line.41">ROW</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="values--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#line.41">values</a>()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared. This method may be used to iterate
+over the constants as follows:
+<pre>
+for (CompressionContext.DictionaryIndex c : CompressionContext.DictionaryIndex.values())
+ System.out.println(c);
+</pre></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>an array containing the constants of this enum type, in the order they are declared</dd>
+</dl>
+</li>
+</ul>
+<a name="valueOf-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#line.41">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the enum constant with the specified name</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if this enum type has no constant with the specified name</dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/CompressionContext.DictionaryIndex.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Compressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" target="_top">Frames</a></li>
+<li><a href="CompressionContext.DictionaryIndex.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li><a href="#enum.constant.summary">Enum Constants</a> | </li>
+<li>Field | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#enum.constant.detail">Enum Constants</a> | </li>
+<li>Field | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
[29/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html
index f236300..513d2ad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.HistoryCommand.html
@@ -26,1048 +26,1115 @@
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.backup.impl;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.io.IOException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.net.URI;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.List;<a name="line.42"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.lang3.StringUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configured;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<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> * General backup commands, options and usage messages<a name="line.71"></a>
-<span class="sourceLineNo">072</span> */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceAudience.Private<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public final class BackupCommands {<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.77"></a>
-<span class="sourceLineNo">078</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.80"></a>
-<span class="sourceLineNo">081</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.81"></a>
-<span class="sourceLineNo">082</span> + " delete delete an existing backup image\n"<a name="line.82"></a>
-<span class="sourceLineNo">083</span> + " describe show the detailed information of a backup image\n"<a name="line.83"></a>
-<span class="sourceLineNo">084</span> + " history show history of all successful backups\n"<a name="line.84"></a>
-<span class="sourceLineNo">085</span> + " progress show the progress of the latest backup request\n"<a name="line.85"></a>
-<span class="sourceLineNo">086</span> + " set backup set management\n"<a name="line.86"></a>
-<span class="sourceLineNo">087</span> + " repair repair backup system table\n"<a name="line.87"></a>
-<span class="sourceLineNo">088</span> + " merge merge backup images\n"<a name="line.88"></a>
-<span class="sourceLineNo">089</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> public static final String CREATE_CMD_USAGE =<a name="line.91"></a>
-<span class="sourceLineNo">092</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.92"></a>
-<span class="sourceLineNo">093</span> + " type \"full\" to create a full backup image\n"<a name="line.93"></a>
-<span class="sourceLineNo">094</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.94"></a>
-<span class="sourceLineNo">095</span> + " backup_path Full path to store the backup image\n";<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.97"></a>
-<span class="sourceLineNo">098</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.98"></a>
-<span class="sourceLineNo">099</span> + " progress for currently running backup session.";<a name="line.99"></a>
-<span class="sourceLineNo">100</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.100"></a>
-<span class="sourceLineNo">101</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.103"></a>
-<span class="sourceLineNo">104</span> + " backup_id Backup image id\n";<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete <backup_id>\n"<a name="line.108"></a>
-<span class="sourceLineNo">109</span> + " backup_id Backup image id\n";<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.113"></a>
-<span class="sourceLineNo">114</span> + " name Backup set name\n"<a name="line.114"></a>
-<span class="sourceLineNo">115</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.115"></a>
-<span class="sourceLineNo">116</span> + " add add tables to a set, create a set if needed\n"<a name="line.116"></a>
-<span class="sourceLineNo">117</span> + " remove remove tables from a set\n"<a name="line.117"></a>
-<span class="sourceLineNo">118</span> + " list list all backup sets in the system\n"<a name="line.118"></a>
-<span class="sourceLineNo">119</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.119"></a>
-<span class="sourceLineNo">120</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.120"></a>
-<span class="sourceLineNo">121</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span> public static final String USAGE_FOOTER = "";<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> public static abstract class Command extends Configured {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> CommandLine cmdline;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> Connection conn;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> Command(Configuration conf) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (conf == null) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> conf = HBaseConfiguration.create();<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span> setConf(conf);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span> public void execute() throws IOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> printUsage();<a name="line.138"></a>
-<span class="sourceLineNo">139</span> throw new IOException(INCORRECT_USAGE);<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> // Create connection<a name="line.142"></a>
-<span class="sourceLineNo">143</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.143"></a>
-<span class="sourceLineNo">144</span> if (requiresNoActiveSession()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> // Check active session<a name="line.145"></a>
-<span class="sourceLineNo">146</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span> if (sessions.size() > 0) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.150"></a>
-<span class="sourceLineNo">151</span> System.err.println(sessions.get(0));<a name="line.151"></a>
-<span class="sourceLineNo">152</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.152"></a>
-<span class="sourceLineNo">153</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.153"></a>
-<span class="sourceLineNo">154</span> throw new IOException("Active session found, aborted command execution");<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> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> if (requiresConsistentState()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span> // Check failed delete<a name="line.159"></a>
-<span class="sourceLineNo">160</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (ids != null && ids.length > 0) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> System.err.println("Backup system recovery is required.");<a name="line.165"></a>
-<span class="sourceLineNo">166</span> throw new IOException("Failed backup DELETE found, aborted command execution");<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.169"></a>
-<span class="sourceLineNo">170</span> if (ids != null && ids.length > 0) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.171"></a>
-<span class="sourceLineNo">172</span> System.err.println("Backup system recovery is required.");<a name="line.172"></a>
-<span class="sourceLineNo">173</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> }<a name="line.175"></a>
-<span class="sourceLineNo">176</span> }<a name="line.176"></a>
-<span class="sourceLineNo">177</span> }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span> public void finish() throws IOException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (conn != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> conn.close();<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> protected abstract void printUsage();<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * The command can't be run if active backup session is in progress<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * @return true if no active sessions are in progress<a name="line.189"></a>
-<span class="sourceLineNo">190</span> */<a name="line.190"></a>
-<span class="sourceLineNo">191</span> protected boolean requiresNoActiveSession() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span> return false;<a name="line.192"></a>
-<span class="sourceLineNo">193</span> }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * because of an abnormal termination of a backup session or delete command<a name="line.197"></a>
-<span class="sourceLineNo">198</span> * @return true, if yes<a name="line.198"></a>
-<span class="sourceLineNo">199</span> */<a name="line.199"></a>
-<span class="sourceLineNo">200</span> protected boolean requiresConsistentState() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> return false;<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 BackupCommands() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> throw new AssertionError("Instantiating utility class...");<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> Command cmd;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> switch (type) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> case CREATE:<a name="line.212"></a>
-<span class="sourceLineNo">213</span> cmd = new CreateCommand(conf, cmdline);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span> case DESCRIBE:<a name="line.215"></a>
-<span class="sourceLineNo">216</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.216"></a>
+<span class="sourceLineNo">044</span>import java.io.IOException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.net.URI;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.List;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.lang3.StringUtils;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.conf.Configured;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.FileSystem;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.fs.Path;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.TableName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.yetus.audience.InterfaceAudience;<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> * General backup commands, options and usage messages<a name="line.75"></a>
+<span class="sourceLineNo">076</span> */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceAudience.Private<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public final class BackupCommands {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.81"></a>
+<span class="sourceLineNo">082</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.84"></a>
+<span class="sourceLineNo">085</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.85"></a>
+<span class="sourceLineNo">086</span> + " delete delete an existing backup image\n"<a name="line.86"></a>
+<span class="sourceLineNo">087</span> + " describe show the detailed information of a backup image\n"<a name="line.87"></a>
+<span class="sourceLineNo">088</span> + " history show history of all successful backups\n"<a name="line.88"></a>
+<span class="sourceLineNo">089</span> + " progress show the progress of the latest backup request\n"<a name="line.89"></a>
+<span class="sourceLineNo">090</span> + " set backup set management\n"<a name="line.90"></a>
+<span class="sourceLineNo">091</span> + " repair repair backup system table\n"<a name="line.91"></a>
+<span class="sourceLineNo">092</span> + " merge merge backup images\n"<a name="line.92"></a>
+<span class="sourceLineNo">093</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span> public static final String CREATE_CMD_USAGE =<a name="line.95"></a>
+<span class="sourceLineNo">096</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.96"></a>
+<span class="sourceLineNo">097</span> + " type \"full\" to create a full backup image\n"<a name="line.97"></a>
+<span class="sourceLineNo">098</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.98"></a>
+<span class="sourceLineNo">099</span> + " backup_path Full path to store the backup image\n";<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.101"></a>
+<span class="sourceLineNo">102</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.102"></a>
+<span class="sourceLineNo">103</span> + " progress for currently running backup session.";<a name="line.103"></a>
+<span class="sourceLineNo">104</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.104"></a>
+<span class="sourceLineNo">105</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.107"></a>
+<span class="sourceLineNo">108</span> + " backup_id Backup image id\n";<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete [options]";<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.116"></a>
+<span class="sourceLineNo">117</span> + " name Backup set name\n"<a name="line.117"></a>
+<span class="sourceLineNo">118</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.118"></a>
+<span class="sourceLineNo">119</span> + " add add tables to a set, create a set if needed\n"<a name="line.119"></a>
+<span class="sourceLineNo">120</span> + " remove remove tables from a set\n"<a name="line.120"></a>
+<span class="sourceLineNo">121</span> + " list list all backup sets in the system\n"<a name="line.121"></a>
+<span class="sourceLineNo">122</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.122"></a>
+<span class="sourceLineNo">123</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.123"></a>
+<span class="sourceLineNo">124</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static final String USAGE_FOOTER = "";<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> public static abstract class Command extends Configured {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> CommandLine cmdline;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> Connection conn;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span> Command(Configuration conf) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span> if (conf == null) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> conf = HBaseConfiguration.create();<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> setConf(conf);<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> public void execute() throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> printUsage();<a name="line.141"></a>
+<span class="sourceLineNo">142</span> throw new IOException(INCORRECT_USAGE);<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">145</span> // Create connection<a name="line.145"></a>
+<span class="sourceLineNo">146</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (requiresNoActiveSession()) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // Check active session<a name="line.148"></a>
+<span class="sourceLineNo">149</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span> if (sessions.size() > 0) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.153"></a>
+<span class="sourceLineNo">154</span> System.err.println(sessions.get(0));<a name="line.154"></a>
+<span class="sourceLineNo">155</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.155"></a>
+<span class="sourceLineNo">156</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.156"></a>
+<span class="sourceLineNo">157</span> throw new IOException("Active session found, aborted command execution");<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span> }<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span> if (requiresConsistentState()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span> // Check failed delete<a name="line.162"></a>
+<span class="sourceLineNo">163</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span> if (ids != null && ids.length > 0) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.167"></a>
+<span class="sourceLineNo">168</span> System.err.println("Backup system recovery is required.");<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throw new IOException("Failed backup DELETE found, aborted command execution");<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> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> if (ids != null && ids.length > 0) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.174"></a>
+<span class="sourceLineNo">175</span> System.err.println("Backup system recovery is required.");<a name="line.175"></a>
+<span class="sourceLineNo">176</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> }<a name="line.179"></a>
+<span class="sourceLineNo">180</span> }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span> public void finish() throws IOException {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> if (conn != null) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> conn.close();<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> protected abstract void printUsage();<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * The command can't be run if active backup session is in progress<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * @return true if no active sessions are in progress<a name="line.192"></a>
+<span class="sourceLineNo">193</span> */<a name="line.193"></a>
+<span class="sourceLineNo">194</span> protected boolean requiresNoActiveSession() {<a name="line.194"></a>
+<span class="sourceLineNo">195</span> return false;<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * because of an abnormal termination of a backup session or delete command<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * @return true, if yes<a name="line.201"></a>
+<span class="sourceLineNo">202</span> */<a name="line.202"></a>
+<span class="sourceLineNo">203</span> protected boolean requiresConsistentState() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return false;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> private BackupCommands() {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new AssertionError("Instantiating utility class...");<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> Command cmd;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> switch (type) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> case CREATE:<a name="line.215"></a>
+<span class="sourceLineNo">216</span> cmd = new CreateCommand(conf, cmdline);<a name="line.216"></a>
<span class="sourceLineNo">217</span> break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span> case PROGRESS:<a name="line.218"></a>
-<span class="sourceLineNo">219</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.219"></a>
+<span class="sourceLineNo">218</span> case DESCRIBE:<a name="line.218"></a>
+<span class="sourceLineNo">219</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.219"></a>
<span class="sourceLineNo">220</span> break;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> case DELETE:<a name="line.221"></a>
-<span class="sourceLineNo">222</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.222"></a>
+<span class="sourceLineNo">221</span> case PROGRESS:<a name="line.221"></a>
+<span class="sourceLineNo">222</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.222"></a>
<span class="sourceLineNo">223</span> break;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> case HISTORY:<a name="line.224"></a>
-<span class="sourceLineNo">225</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.225"></a>
+<span class="sourceLineNo">224</span> case DELETE:<a name="line.224"></a>
+<span class="sourceLineNo">225</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.225"></a>
<span class="sourceLineNo">226</span> break;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> case SET:<a name="line.227"></a>
-<span class="sourceLineNo">228</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.228"></a>
+<span class="sourceLineNo">227</span> case HISTORY:<a name="line.227"></a>
+<span class="sourceLineNo">228</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.228"></a>
<span class="sourceLineNo">229</span> break;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> case REPAIR:<a name="line.230"></a>
-<span class="sourceLineNo">231</span> cmd = new RepairCommand(conf, cmdline);<a name="line.231"></a>
+<span class="sourceLineNo">230</span> case SET:<a name="line.230"></a>
+<span class="sourceLineNo">231</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.231"></a>
<span class="sourceLineNo">232</span> break;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> case MERGE:<a name="line.233"></a>
-<span class="sourceLineNo">234</span> cmd = new MergeCommand(conf, cmdline);<a name="line.234"></a>
+<span class="sourceLineNo">233</span> case REPAIR:<a name="line.233"></a>
+<span class="sourceLineNo">234</span> cmd = new RepairCommand(conf, cmdline);<a name="line.234"></a>
<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> case HELP:<a name="line.236"></a>
-<span class="sourceLineNo">237</span> default:<a name="line.237"></a>
-<span class="sourceLineNo">238</span> cmd = new HelpCommand(conf, cmdline);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> break;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return cmd;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> static int numOfArgs(String[] args) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> if (args == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> return 0;<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> return args.length;<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
+<span class="sourceLineNo">236</span> case MERGE:<a name="line.236"></a>
+<span class="sourceLineNo">237</span> cmd = new MergeCommand(conf, cmdline);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> break;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> case HELP:<a name="line.239"></a>
+<span class="sourceLineNo">240</span> default:<a name="line.240"></a>
+<span class="sourceLineNo">241</span> cmd = new HelpCommand(conf, cmdline);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> break;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> return cmd;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> static int numOfArgs(String[] args) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> if (args == null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span> return 0;<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> public static class CreateCommand extends Command {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span> super(conf);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> this.cmdline = cmdline;<a name="line.255"></a>
-<span class="sourceLineNo">256</span> }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span> @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span> protected boolean requiresNoActiveSession() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> return true;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span> protected boolean requiresConsistentState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> return true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span> }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span> @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span> public void execute() throws IOException {<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> printUsage();<a name="line.271"></a>
-<span class="sourceLineNo">272</span> throw new IOException(INCORRECT_USAGE);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span> String[] args = cmdline.getArgs();<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (args.length != 3) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> printUsage();<a name="line.276"></a>
-<span class="sourceLineNo">277</span> throw new IOException(INCORRECT_USAGE);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.280"></a>
-<span class="sourceLineNo">281</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> printUsage();<a name="line.283"></a>
-<span class="sourceLineNo">284</span> throw new IOException(INCORRECT_USAGE);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span> if (!verifyPath(args[2])) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> printUsage();<a name="line.288"></a>
-<span class="sourceLineNo">289</span> throw new IOException(INCORRECT_USAGE);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> String targetBackupDir = args[2];<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.292"></a>
-<span class="sourceLineNo">293</span> if (isRootFolder(targetBackupDir)) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> String tables;<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span> // Check if we have both: backup set and list of tables<a name="line.298"></a>
-<span class="sourceLineNo">299</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.300"></a>
-<span class="sourceLineNo">301</span> + " of tables, but not both");<a name="line.301"></a>
-<span class="sourceLineNo">302</span> printUsage();<a name="line.302"></a>
-<span class="sourceLineNo">303</span> throw new IOException(INCORRECT_USAGE);<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Creates connection<a name="line.305"></a>
-<span class="sourceLineNo">306</span> super.execute();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Check backup set<a name="line.307"></a>
-<span class="sourceLineNo">308</span> String setName = null;<a name="line.308"></a>
-<span class="sourceLineNo">309</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> tables = getTablesForSet(setName, getConf());<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> if (tables == null) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> System.out.println("ERROR: Backup set '" + setName<a name="line.314"></a>
-<span class="sourceLineNo">315</span> + "' is either empty or does not exist");<a name="line.315"></a>
-<span class="sourceLineNo">316</span> printUsage();<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException(INCORRECT_USAGE);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span> int bandwidth =<a name="line.322"></a>
-<span class="sourceLineNo">323</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.323"></a>
-<span class="sourceLineNo">324</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> int workers =<a name="line.325"></a>
-<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.326"></a>
-<span class="sourceLineNo">327</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // Set system property value for MR job<a name="line.331"></a>
-<span class="sourceLineNo">332</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> BackupRequest request =<a name="line.337"></a>
-<span class="sourceLineNo">338</span> builder<a name="line.338"></a>
-<span class="sourceLineNo">339</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.339"></a>
-<span class="sourceLineNo">340</span> .withTableList(<a name="line.340"></a>
-<span class="sourceLineNo">341</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.341"></a>
-<span class="sourceLineNo">342</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.342"></a>
-<span class="sourceLineNo">343</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> String backupId = admin.backupTables(request);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.345"></a>
-<span class="sourceLineNo">346</span> } catch (IOException e) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.347"></a>
-<span class="sourceLineNo">348</span> throw e;<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> Path p = new Path(targetBackupDir);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> return p.isRoot();<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> private boolean verifyPath(String path) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> Path p = new Path(path);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> URI uri = p.toUri();<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (uri.getScheme() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> return false;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> FileSystem.get(uri, conf);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> return true;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> } catch (Exception e) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> return false;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> }<a name="line.371"></a>
-<span class="sourceLineNo">372</span> }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (tables == null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> return null;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span> protected void printUsage() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> System.out.println(CREATE_CMD_USAGE);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> Options options = new Options();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.397"></a>
-<span class="sourceLineNo">398</span> helpFormatter.setLeftPadding(2);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> helpFormatter.setDescPadding(8);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> helpFormatter.setWidth(100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.401"></a>
-<span class="sourceLineNo">402</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> public static class HelpCommand extends Command {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span> super(conf);<a name="line.408"></a>
-<span class="sourceLineNo">409</span> this.cmdline = cmdline;<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void execute() throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> if (cmdline == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span> printUsage();<a name="line.415"></a>
-<span class="sourceLineNo">416</span> throw new IOException(INCORRECT_USAGE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span> }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span> String[] args = cmdline.getArgs();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> if (args == null || args.length == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span> printUsage();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> throw new IOException(INCORRECT_USAGE);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> if (args.length != 2) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.426"></a>
-<span class="sourceLineNo">427</span> printUsage();<a name="line.427"></a>
-<span class="sourceLineNo">428</span> throw new IOException(INCORRECT_USAGE);<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> String type = args[1];<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (BackupCommand.CREATE.name().equalsIgnoreCase(type)) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> System.out.println(CREATE_CMD_USAGE);<a name="line.434"></a>
-<span class="sourceLineNo">435</span> } else if (BackupCommand.DESCRIBE.name().equalsIgnoreCase(type)) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.436"></a>
-<span class="sourceLineNo">437</span> } else if (BackupCommand.HISTORY.name().equalsIgnoreCase(type)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> System.out.println(HISTORY_CMD_USAGE);<a name="line.438"></a>
-<span class="sourceLineNo">439</span> } else if (BackupCommand.PROGRESS.name().equalsIgnoreCase(type)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> System.out.println(PROGRESS_CMD_USAGE);<a name="line.440"></a>
-<span class="sourceLineNo">441</span> } else if (BackupCommand.DELETE.name().equalsIgnoreCase(type)) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> System.out.println(DELETE_CMD_USAGE);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> } else if (BackupCommand.SET.name().equalsIgnoreCase(type)) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> System.out.println(SET_CMD_USAGE);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> } else {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> System.out.println("Unknown command : " + type);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> printUsage();<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span> @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected void printUsage() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> System.out.println(USAGE);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> }<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span> public static class DescribeCommand extends Command {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> DescribeCommand(Configuration conf, CommandLine cmdline) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> super(conf);<a name="line.459"></a>
-<span class="sourceLineNo">460</span> this.cmdline = cmdline;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span> public void execute() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> printUsage();<a name="line.466"></a>
-<span class="sourceLineNo">467</span> throw new IOException(INCORRECT_USAGE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span> String[] args = cmdline.getArgs();<a name="line.469"></a>
-<span class="sourceLineNo">470</span> if (args.length != 2) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> printUsage();<a name="line.471"></a>
-<span class="sourceLineNo">472</span> throw new IOException(INCORRECT_USAGE);<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> super.execute();<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> String backupId = args[1];<a name="line.477"></a>
-<span class="sourceLineNo">478</span> try (final BackupSystemTable sysTable = new BackupSystemTable(conn)) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> BackupInfo info = sysTable.readBackupInfo(backupId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span> if (info == null) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> System.out.println("ERROR: " + backupId + " does not exist");<a name="line.481"></a>
-<span class="sourceLineNo">482</span> printUsage();<a name="line.482"></a>
-<span class="sourceLineNo">483</span> throw new IOException(INCORRECT_USAGE);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> System.out.println(info.getShortDescription());<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> @Override<a name="line.489"></a>
-<span class="sourceLineNo">490</span> protected void printUsage() {<a name="line.490"></a>
-<span class="sourceLineNo">491</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<a name="line.492"></a>
-<span class="sourceLineNo">493</span> }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span> public static class ProgressCommand extends Command {<a name="line.495"></a>
-<span class="sourceLineNo">496</span> ProgressCommand(Configuration conf, CommandLine cmdline) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span> super(conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> this.cmdline = cmdline;<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public void execute() throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">252</span> return args.length;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> public static class CreateCommand extends Command {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> super(conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.cmdline = cmdline;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span> @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span> protected boolean requiresNoActiveSession() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return true;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span> protected boolean requiresConsistentState() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return true;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span> public void execute() throws IOException {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> printUsage();<a name="line.274"></a>
+<span class="sourceLineNo">275</span> throw new IOException(INCORRECT_USAGE);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span> String[] args = cmdline.getArgs();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> if (args.length != 3) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> printUsage();<a name="line.279"></a>
+<span class="sourceLineNo">280</span> throw new IOException(INCORRECT_USAGE);<a name="line.280"></a>
+<span class="sourceLineNo">281</span> }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.283"></a>
+<span class="sourceLineNo">284</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> printUsage();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> throw new IOException(INCORRECT_USAGE);<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> if (!verifyPath(args[2])) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> printUsage();<a name="line.291"></a>
+<span class="sourceLineNo">292</span> throw new IOException(INCORRECT_USAGE);<a name="line.292"></a>
+<span class="sourceLineNo">293</span> }<a name="line.293"></a>
+<span class="sourceLineNo">294</span> String targetBackupDir = args[2];<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (isRootFolder(targetBackupDir)) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> String tables;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // Check if we have both: backup set and list of tables<a name="line.301"></a>
+<span class="sourceLineNo">302</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.303"></a>
+<span class="sourceLineNo">304</span> + " of tables, but not both");<a name="line.304"></a>
+<span class="sourceLineNo">305</span> printUsage();<a name="line.305"></a>
+<span class="sourceLineNo">306</span> throw new IOException(INCORRECT_USAGE);<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span> // Creates connection<a name="line.308"></a>
+<span class="sourceLineNo">309</span> super.execute();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Check backup set<a name="line.310"></a>
+<span class="sourceLineNo">311</span> String setName = null;<a name="line.311"></a>
+<span class="sourceLineNo">312</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> tables = getTablesForSet(setName, getConf());<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span> if (tables == null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> System.out.println("ERROR: Backup set '" + setName<a name="line.317"></a>
+<span class="sourceLineNo">318</span> + "' is either empty or does not exist");<a name="line.318"></a>
+<span class="sourceLineNo">319</span> printUsage();<a name="line.319"></a>
+<span class="sourceLineNo">320</span> throw new IOException(INCORRECT_USAGE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> } else {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span> int bandwidth =<a name="line.325"></a>
+<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.326"></a>
+<span class="sourceLineNo">327</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> int workers =<a name="line.328"></a>
+<span class="sourceLineNo">329</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.329"></a>
+<span class="sourceLineNo">330</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> // Set system property value for MR job<a name="line.334"></a>
+<span class="sourceLineNo">335</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.339"></a>
+<span class="sourceLineNo">340</span> BackupRequest request =<a name="line.340"></a>
+<span class="sourceLineNo">341</span> builder<a name="line.341"></a>
+<span class="sourceLineNo">342</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.342"></a>
+<span class="sourceLineNo">343</span> .withTableList(<a name="line.343"></a>
+<span class="sourceLineNo">344</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.345"></a>
+<span class="sourceLineNo">346</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String backupId = admin.backupTables(request);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> } catch (IOException e) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.350"></a>
+<span class="sourceLineNo">351</span> throw e;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> Path p = new Path(targetBackupDir);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return p.isRoot();<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span> private boolean verifyPath(String path) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> try {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> Path p = new Path(path);<a name="line.362"></a>
+<span class="sourceLineNo">363</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.363"></a>
+<span class="sourceLineNo">364</span> URI uri = p.toUri();<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> if (uri.getScheme() == null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span> return false;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> FileSystem.get(uri, conf);<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return true;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> } catch (Exception e) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return false;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.377"></a>
+<span class="sourceLineNo">378</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span> if (tables == null) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span> return null;<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> @Override<a name="line.389"></a>
+<span class="sourceLineNo">390</span> protected void printUsage() {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> System.out.println(CREATE_CMD_USAGE);<a name="line.391"></a>
+<span class="sourceLineNo">392</span> Options options = new Options();<a name="line.392"></a>
+<span class="sourceLineNo">393</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.400"></a>
+<span class="sourceLineNo">401</span> helpFormatter.setLeftPadding(2);<a name="line.401"></a>
+<span class="sourceLineNo">402</span> helpFormatter.setDescPadding(8);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> helpFormatter.setWidth(100);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.404"></a>
+<span class="sourceLineNo">405</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<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> public static class HelpCommand extends Command {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> super(conf);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> this.cmdline = cmdline;<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span> @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span> public void execute() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span> if (cmdline == null) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> printUsage();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> throw new IOException(INCORRECT_USAGE);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> String[] args = cmdline.getArgs();<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (args == null || args.length == 0) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> printUsage();<a name="line.424"></a>
+<span class="sourceLineNo">425</span> throw new IOException(INCORRECT_USAGE);<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> if (args.length != 2) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.429"></a>
+<span class="sourceLineNo">430</span> printUsage();<a name="line.430"></a>
+<span class="sourceLineNo">431</span> throw new IOException(INCORRECT_USAGE);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>
<TRUNCATED>
[11/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
index 83c17c0..9df0225 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
@@ -54,323 +54,362 @@
<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> */<a name="line.57"></a>
-<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
-<span class="sourceLineNo">059</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
-<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
-<span class="sourceLineNo">061</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
-<span class="sourceLineNo">062</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span> protected final CompressionContext compression;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> protected final ByteStringUncompressor statelessUncompressor = new ByteStringUncompressor() {<a name="line.65"></a>
-<span class="sourceLineNo">066</span> @Override<a name="line.66"></a>
-<span class="sourceLineNo">067</span> public byte[] uncompress(ByteString data, Dictionary dict) throws IOException {<a name="line.67"></a>
-<span class="sourceLineNo">068</span> return WALCellCodec.uncompressByteString(data, dict);<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><a name="line.71"></a>
-<span class="sourceLineNo">072</span> /**<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.73"></a>
-<span class="sourceLineNo">074</span> */<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public WALCellCodec() {<a name="line.75"></a>
-<span class="sourceLineNo">076</span> this.compression = null;<a name="line.76"></a>
-<span class="sourceLineNo">077</span> }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span> /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.80"></a>
-<span class="sourceLineNo">081</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * @param conf configuration to configure <tt>this</tt><a name="line.82"></a>
-<span class="sourceLineNo">083</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * compression<a name="line.84"></a>
-<span class="sourceLineNo">085</span> */<a name="line.85"></a>
-<span class="sourceLineNo">086</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.86"></a>
-<span class="sourceLineNo">087</span> this.compression = compression;<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 String getWALCellCodecClass(Configuration conf) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * Fully prepares the codec for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * uses a {@link WALCellCodec}.<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * @param cellCodecClsName name of codec<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * @param compression compression the codec should use<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * @return a {@link WALCellCodec} ready for use.<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.104"></a>
-<span class="sourceLineNo">105</span> */<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.107"></a>
-<span class="sourceLineNo">108</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> if (cellCodecClsName == null) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.112"></a>
-<span class="sourceLineNo">113</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.113"></a>
-<span class="sourceLineNo">114</span> }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> /**<a name="line.116"></a>
-<span class="sourceLineNo">117</span> * Create and setup a {@link WALCellCodec} from the<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * CompressionContext.<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * Fully prepares the codec for use.<a name="line.120"></a>
-<span class="sourceLineNo">121</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * uses a {@link WALCellCodec}.<a name="line.122"></a>
-<span class="sourceLineNo">123</span> * @param compression compression the codec should use<a name="line.123"></a>
-<span class="sourceLineNo">124</span> * @return a {@link WALCellCodec} ready for use.<a name="line.124"></a>
-<span class="sourceLineNo">125</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.125"></a>
-<span class="sourceLineNo">126</span> */<a name="line.126"></a>
-<span class="sourceLineNo">127</span> public static WALCellCodec create(Configuration conf,<a name="line.127"></a>
-<span class="sourceLineNo">128</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.128"></a>
-<span class="sourceLineNo">129</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.129"></a>
-<span class="sourceLineNo">130</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.130"></a>
-<span class="sourceLineNo">131</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span> public interface ByteStringCompressor {<a name="line.134"></a>
-<span class="sourceLineNo">135</span> ByteString compress(byte[] data, Dictionary dict) throws IOException;<a name="line.135"></a>
-<span class="sourceLineNo">136</span> }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span> public interface ByteStringUncompressor {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> byte[] uncompress(ByteString data, Dictionary dict) throws IOException;<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> // TODO: it sucks that compression context is in WAL.Entry. It'd be nice if it was here.<a name="line.142"></a>
-<span class="sourceLineNo">143</span> // Dictionary could be gotten by enum; initially, based on enum, context would create<a name="line.143"></a>
-<span class="sourceLineNo">144</span> // an array of dictionaries.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> public ByteString toByteString() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.147"></a>
-<span class="sourceLineNo">148</span> // them.<a name="line.148"></a>
-<span class="sourceLineNo">149</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.149"></a>
-<span class="sourceLineNo">150</span> }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> @Override<a name="line.152"></a>
-<span class="sourceLineNo">153</span> public ByteString compress(byte[] data, Dictionary dict) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span> writeCompressed(data, dict);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.155"></a>
-<span class="sourceLineNo">156</span> // them.<a name="line.156"></a>
-<span class="sourceLineNo">157</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.157"></a>
-<span class="sourceLineNo">158</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.158"></a>
-<span class="sourceLineNo">159</span> return result;<a name="line.159"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
+<span class="sourceLineNo">060</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
+<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
+<span class="sourceLineNo">062</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
+<span class="sourceLineNo">063</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span> protected final CompressionContext compression;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.68"></a>
+<span class="sourceLineNo">069</span> */<a name="line.69"></a>
+<span class="sourceLineNo">070</span> public WALCellCodec() {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> this.compression = null;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<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> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.75"></a>
+<span class="sourceLineNo">076</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * @param conf configuration to configure <tt>this</tt><a name="line.77"></a>
+<span class="sourceLineNo">078</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * compression<a name="line.79"></a>
+<span class="sourceLineNo">080</span> */<a name="line.80"></a>
+<span class="sourceLineNo">081</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span> this.compression = compression;<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 getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * Fully prepares the codec for use.<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * uses a {@link WALCellCodec}.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * @param cellCodecClsName name of codec<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * @param compression compression the codec should use<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.99"></a>
+<span class="sourceLineNo">100</span> */<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
+<span class="sourceLineNo">103</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span> if (cellCodecClsName == null) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
+<span class="sourceLineNo">106</span> }<a name="line.106"></a>
+<span class="sourceLineNo">107</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
+<span class="sourceLineNo">108</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * CompressionContext.<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * Fully prepares the codec for use.<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * uses a {@link WALCellCodec}.<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * @param compression compression the codec should use<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
+<span class="sourceLineNo">121</span> */<a name="line.121"></a>
+<span class="sourceLineNo">122</span> public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
+<span class="sourceLineNo">123</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
+<span class="sourceLineNo">125</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
+<span class="sourceLineNo">126</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> public interface ByteStringCompressor {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> ByteString compress(byte[] data, Enum dictIndex) throws IOException;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> public interface ByteStringUncompressor {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span> static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> CompressionContext compressionContext;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> this.compressionContext = compressionContext;<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> @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span> public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> private CompressionContext compressionContext;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> this.compressionContext = compressionContext;<a name="line.154"></a>
+<span class="sourceLineNo">155</span> }<a name="line.155"></a>
+<span class="sourceLineNo">156</span> public ByteString toByteString() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
+<span class="sourceLineNo">158</span> // them.<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
<span class="sourceLineNo">160</span> }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span> private void writeCompressed(byte[] data, Dictionary dict) throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span> assert dict != null;<a name="line.163"></a>
-<span class="sourceLineNo">164</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.164"></a>
-<span class="sourceLineNo">165</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.166"></a>
-<span class="sourceLineNo">167</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> write(data, 0, data.length);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> } else {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> StreamUtils.writeShort(this, dictIdx);<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> }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.175"></a>
-<span class="sourceLineNo">176</span> InputStream in = bs.newInput();<a name="line.176"></a>
-<span class="sourceLineNo">177</span> byte status = (byte)in.read();<a name="line.177"></a>
-<span class="sourceLineNo">178</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.179"></a>
-<span class="sourceLineNo">180</span> int bytesRead = in.read(arr);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> if (bytesRead != arr.length) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.184"></a>
-<span class="sourceLineNo">185</span> return arr;<a name="line.185"></a>
-<span class="sourceLineNo">186</span> } else {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.187"></a>
-<span class="sourceLineNo">188</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.188"></a>
-<span class="sourceLineNo">189</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.189"></a>
-<span class="sourceLineNo">190</span> if (entry == null) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.191"></a>
-<span class="sourceLineNo">192</span> }<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return entry;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.197"></a>
-<span class="sourceLineNo">198</span> private final CompressionContext compression;<a name="line.198"></a>
-<span class="sourceLineNo">199</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> super(out);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> this.compression = compression;<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> @Override<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public void write(Cell cell) throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> // We first write the KeyValue infrastructure as VInts.<a name="line.206"></a>
-<span class="sourceLineNo">207</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.207"></a>
-<span class="sourceLineNo">208</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.208"></a>
-<span class="sourceLineNo">209</span> // To support tags<a name="line.209"></a>
-<span class="sourceLineNo">210</span> int tagsLength = cell.getTagsLength();<a name="line.210"></a>
-<span class="sourceLineNo">211</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.211"></a>
-<span class="sourceLineNo">212</span> PrivateCellUtil.compressRow(out, cell, compression.rowDict);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> PrivateCellUtil.compressFamily(out, cell, compression.familyDict);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> PrivateCellUtil.compressQualifier(out, cell, compression.qualifierDict);<a name="line.214"></a>
-<span class="sourceLineNo">215</span> // Write timestamp, type and value as uncompressed.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.216"></a>
-<span class="sourceLineNo">217</span> out.write(cell.getTypeByte());<a name="line.217"></a>
-<span class="sourceLineNo">218</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.218"></a>
-<span class="sourceLineNo">219</span> if (tagsLength > 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span> if (compression.tagCompressionContext != null) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span> // Write tags using Dictionary compression<a name="line.221"></a>
-<span class="sourceLineNo">222</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.222"></a>
-<span class="sourceLineNo">223</span> } else {<a name="line.223"></a>
-<span class="sourceLineNo">224</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.224"></a>
-<span class="sourceLineNo">225</span> // it is.<a name="line.225"></a>
-<span class="sourceLineNo">226</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.226"></a>
-<span class="sourceLineNo">227</span> }<a name="line.227"></a>
-<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span> public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> writeCompressed(data, dictIndex);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
+<span class="sourceLineNo">166</span> // them.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
+<span class="sourceLineNo">168</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> return result;<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> private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> assert dict != null;<a name="line.174"></a>
+<span class="sourceLineNo">175</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> write(data, 0, data.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> }<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> }<a name="line.191"></a>
+<span class="sourceLineNo">192</span> }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span> static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span> @Override<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> return data.toByteArray();<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span> }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> InputStream in = bs.newInput();<a name="line.203"></a>
+<span class="sourceLineNo">204</span> byte status = (byte)in.read();<a name="line.204"></a>
+<span class="sourceLineNo">205</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
+<span class="sourceLineNo">207</span> int bytesRead = in.read(arr);<a name="line.207"></a>
+<span class="sourceLineNo">208</span> if (bytesRead != arr.length) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
+<span class="sourceLineNo">212</span> return arr;<a name="line.212"></a>
+<span class="sourceLineNo">213</span> } else {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
+<span class="sourceLineNo">216</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
+<span class="sourceLineNo">217</span> if (entry == null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> }<a name="line.219"></a>
+<span class="sourceLineNo">220</span> return entry;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> private final CompressionContext compression;<a name="line.225"></a>
+<span class="sourceLineNo">226</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> super(out);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> this.compression = compression;<a name="line.228"></a>
<span class="sourceLineNo">229</span> }<a name="line.229"></a>
-<span class="sourceLineNo">230</span> }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.232"></a>
-<span class="sourceLineNo">233</span> private final CompressionContext compression;<a name="line.233"></a>
-<span class="sourceLineNo">234</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> super(in);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> this.compression = compression;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> }<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span> @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span> protected Cell parseCell() throws IOException {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.241"></a>
-<span class="sourceLineNo">242</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> int length = 0;<a name="line.245"></a>
-<span class="sourceLineNo">246</span> if(tagsLength == 0) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.247"></a>
-<span class="sourceLineNo">248</span> } else {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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> byte[] backingArray = new byte[length];<a name="line.252"></a>
-<span class="sourceLineNo">253</span> int pos = 0;<a name="line.253"></a>
-<span class="sourceLineNo">254</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span> // the row<a name="line.257"></a>
-<span class="sourceLineNo">258</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT, compression.rowDict);<a name="line.258"></a>
-<span class="sourceLineNo">259</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.259"></a>
-<span class="sourceLineNo">260</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.260"></a>
-<span class="sourceLineNo">261</span> pos += elemLen;<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> // family<a name="line.263"></a>
-<span class="sourceLineNo">264</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE, compression.familyDict);<a name="line.264"></a>
-<span class="sourceLineNo">265</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> pos += elemLen;<a name="line.267"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span> public void write(Cell cell) throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
+<span class="sourceLineNo">235</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
+<span class="sourceLineNo">236</span> // To support tags<a name="line.236"></a>
+<span class="sourceLineNo">237</span> int tagsLength = cell.getTagsLength();<a name="line.237"></a>
+<span class="sourceLineNo">238</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
+<span class="sourceLineNo">240</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
+<span class="sourceLineNo">241</span> PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
+<span class="sourceLineNo">242</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
+<span class="sourceLineNo">243</span> PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
+<span class="sourceLineNo">244</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
+<span class="sourceLineNo">245</span> // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
+<span class="sourceLineNo">246</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
+<span class="sourceLineNo">247</span> out.write(cell.getTypeByte());<a name="line.247"></a>
+<span class="sourceLineNo">248</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
+<span class="sourceLineNo">249</span> if (tagsLength > 0) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> if (compression.tagCompressionContext != null) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span> // Write tags using Dictionary compression<a name="line.251"></a>
+<span class="sourceLineNo">252</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> } else {<a name="line.253"></a>
+<span class="sourceLineNo">254</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
+<span class="sourceLineNo">255</span> // it is.<a name="line.255"></a>
+<span class="sourceLineNo">256</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
+<span class="sourceLineNo">257</span> }<a name="line.257"></a>
+<span class="sourceLineNo">258</span> }<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private final CompressionContext compression;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span> super(in);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.compression = compression;<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span> // qualifier<a name="line.269"></a>
-<span class="sourceLineNo">270</span> elemLen = readIntoArray(backingArray, pos, compression.qualifierDict);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> pos += elemLen;<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // timestamp, type and value<a name="line.273"></a>
-<span class="sourceLineNo">274</span> int tsTypeValLen = length - pos;<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (tagsLength > 0) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.276"></a>
-<span class="sourceLineNo">277</span> }<a name="line.277"></a>
-<span class="sourceLineNo">278</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.278"></a>
-<span class="sourceLineNo">279</span> pos += tsTypeValLen;<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span> // tags<a name="line.281"></a>
-<span class="sourceLineNo">282</span> if (tagsLength > 0) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.283"></a>
-<span class="sourceLineNo">284</span> if (compression.tagCompressionContext != null) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> } else {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span> return new KeyValue(backingArray, 0, length);<a name="line.290"></a>
-<span class="sourceLineNo">291</span> }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> byte status = (byte)in.read();<a name="line.294"></a>
-<span class="sourceLineNo">295</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span> // status byte indicating that data to be read is not in dictionary.<a name="line.296"></a>
-<span class="sourceLineNo">297</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> int length = StreamUtils.readRawVarint32(in);<a name="line.298"></a>
-<span class="sourceLineNo">299</span> IOUtils.readFully(in, to, offset, length);<a name="line.299"></a>
-<span class="sourceLineNo">300</span> dict.addEntry(to, offset, length);<a name="line.300"></a>
-<span class="sourceLineNo">301</span> return length;<a name="line.301"></a>
-<span class="sourceLineNo">302</span> } else {<a name="line.302"></a>
-<span class="sourceLineNo">303</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.303"></a>
-<span class="sourceLineNo">304</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.304"></a>
-<span class="sourceLineNo">305</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.305"></a>
-<span class="sourceLineNo">306</span> if (entry == null) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span> // now we write the uncompressed value.<a name="line.309"></a>
-<span class="sourceLineNo">310</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> return entry.length;<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span> }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private static void checkLength(int len, int max) throws IOException {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> if (len < 0 || len > max) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> }<a name="line.319"></a>
-<span class="sourceLineNo">320</span> }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.322"></a>
-<span class="sourceLineNo">323</span> public EnsureKvEncoder(OutputStream out) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> super(out);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> @Override<a name="line.326"></a>
-<span class="sourceLineNo">327</span> public void write(Cell cell) throws IOException {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> checkFlushed();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> // Make sure to write tags into WAL<a name="line.329"></a>
-<span class="sourceLineNo">330</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.330"></a>
-<span class="sourceLineNo">331</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> @Override<a name="line.335"></a>
-<span class="sourceLineNo">336</span> public Decoder getDecoder(InputStream is) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span> return (compression == null)<a name="line.337"></a>
-<span class="sourceLineNo">338</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.338"></a>
-<span class="sourceLineNo">339</span> }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span> @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> return getDecoder(new ByteBuffInputStream(buf));<a name="line.343"></a>
-<span class="sourceLineNo">344</span> }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span> public Encoder getEncoder(OutputStream os) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.348"></a>
-<span class="sourceLineNo">349</span> : new ByteBufferWriterOutputStream(os);<a name="line.349"></a>
-<span class="sourceLineNo">350</span> if (compression == null) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span> return new EnsureKvEncoder(os);<a name="line.351"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> protected Cell parseCell() throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
+<span class="sourceLineNo">275</span> int length = 0;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> if(tagsLength == 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span> byte[] backingArray = new byte[length];<a name="line.282"></a>
+<span class="sourceLineNo">283</span> int pos = 0;<a name="line.283"></a>
+<span class="sourceLineNo">284</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> // the row<a name="line.287"></a>
+<span class="sourceLineNo">288</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
+<span class="sourceLineNo">289</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
+<span class="sourceLineNo">290</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
+<span class="sourceLineNo">292</span> pos += elemLen;<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span> // family<a name="line.294"></a>
+<span class="sourceLineNo">295</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
+<span class="sourceLineNo">296</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
+<span class="sourceLineNo">297</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> pos += elemLen;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // qualifier<a name="line.301"></a>
+<span class="sourceLineNo">302</span> elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
+<span class="sourceLineNo">303</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
+<span class="sourceLineNo">304</span> pos += elemLen;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span> // timestamp, type and value<a name="line.306"></a>
+<span class="sourceLineNo">307</span> int tsTypeValLen = length - pos;<a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (tagsLength > 0) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
+<span class="sourceLineNo">310</span> }<a name="line.310"></a>
+<span class="sourceLineNo">311</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> pos += tsTypeValLen;<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span> // tags<a name="line.314"></a>
+<span class="sourceLineNo">315</span> if (tagsLength > 0) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> if (compression.tagCompressionContext != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> byte status = (byte)in.read();<a name="line.327"></a>
+<span class="sourceLineNo">328</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
+<span class="sourceLineNo">331</span> int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span> dict.addEntry(to, offset, length);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> return length;<a name="line.334"></a>
+<span class="sourceLineNo">335</span> } else {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
+<span class="sourceLineNo">337</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
+<span class="sourceLineNo">338</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (entry == null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> // now we write the uncompressed value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> return entry.length;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> }<a name="line.345"></a>
+<span class="sourceLineNo">346</span> }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span> private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> if (len < 0 || len > max) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span> }<a name="line.352"></a>
-<span class="sourceLineNo">353</span> return new CompressedKvEncoder(os, compression);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.357"></a>
-<span class="sourceLineNo">358</span> return new BaosAndCompressor();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.362"></a>
-<span class="sourceLineNo">363</span> return this.statelessUncompressor;<a name="line.363"></a>
-<span class="sourceLineNo">364</span> }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>}<a name="line.365"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span> super(out);<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span> @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span> public void write(Cell cell) throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> checkFlushed();<a name="line.361"></a>
+<span class="sourceLineNo">362</span> // Make sure to write tags into WAL<a name="line.362"></a>
+<span class="sourceLineNo">363</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
+<span class="sourceLineNo">364</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span> @Override<a name="line.368"></a>
+<span class="sourceLineNo">369</span> public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> return (compression == null)<a name="line.370"></a>
+<span class="sourceLineNo">371</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return getDecoder(new ByteBuffInputStream(buf));<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> @Override<a name="line.379"></a>
+<span class="sourceLineNo">380</span> public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
+<span class="sourceLineNo">382</span> : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
+<span class="sourceLineNo">383</span> if (compression == null) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> return new EnsureKvEncoder(os);<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span> return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> return new BaosAndCompressor(compression);<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span> return new StatelessUncompressor(compression);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span> public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return new NoneCompressor();<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> return new NoneUncompressor();<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>}<a name="line.404"></a>
[21/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
index 42d0637..eb16038 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
@@ -80,21 +80,21 @@
<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.72"></a>
<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.73"></a>
<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.ScheduledChore;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ServerName;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.Result;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.89"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ServerName;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableName;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.Result;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.89"></a>
<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.90"></a>
<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.91"></a>
<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.92"></a>
@@ -220,3477 +220,3481 @@
<span class="sourceLineNo">212</span><a name="line.212"></a>
<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.213"></a>
<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>/**<a name="line.221"></a>
-<span class="sourceLineNo">222</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.222"></a>
-<span class="sourceLineNo">223</span> * master. If many masters are started, all compete. Whichever wins goes on to<a name="line.223"></a>
-<span class="sourceLineNo">224</span> * run the cluster. All others park themselves in their constructor until<a name="line.224"></a>
-<span class="sourceLineNo">225</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * zookeeper. Thereafter, all running master jostle to take over master role.<a name="line.226"></a>
-<span class="sourceLineNo">227</span> *<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * <p>The Master can be asked shutdown the cluster. See {@link #shutdown()}. In<a name="line.228"></a>
-<span class="sourceLineNo">229</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.229"></a>
-<span class="sourceLineNo">230</span> * all reporting in that they are down. This master will then shut itself down.<a name="line.230"></a>
-<span class="sourceLineNo">231</span> *<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * <p>You can also shutdown just this master. Call {@link #stopMaster()}.<a name="line.232"></a>
-<span class="sourceLineNo">233</span> *<a name="line.233"></a>
-<span class="sourceLineNo">234</span> * @see org.apache.zookeeper.Watcher<a name="line.234"></a>
-<span class="sourceLineNo">235</span> */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.236"></a>
-<span class="sourceLineNo">237</span>@SuppressWarnings("deprecation")<a name="line.237"></a>
-<span class="sourceLineNo">238</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private static Logger LOG = LoggerFactory.getLogger(HMaster.class.getName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.243"></a>
-<span class="sourceLineNo">244</span> */<a name="line.244"></a>
-<span class="sourceLineNo">245</span> private static class InitializationMonitor extends HasThread {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.246"></a>
-<span class="sourceLineNo">247</span> public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.247"></a>
-<span class="sourceLineNo">248</span> public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<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> * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * true, do nothing otherwise.<a name="line.252"></a>
-<span class="sourceLineNo">253</span> */<a name="line.253"></a>
-<span class="sourceLineNo">254</span> public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.254"></a>
-<span class="sourceLineNo">255</span> public static final boolean HALT_DEFAULT = false;<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span> private final HMaster master;<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private final long timeout;<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private final boolean haltOnTimeout;<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span> /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.261"></a>
-<span class="sourceLineNo">262</span> InitializationMonitor(HMaster master) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span> super("MasterInitializationMonitor");<a name="line.263"></a>
-<span class="sourceLineNo">264</span> this.master = master;<a name="line.264"></a>
-<span class="sourceLineNo">265</span> this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.265"></a>
-<span class="sourceLineNo">266</span> this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> this.setDaemon(true);<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> @Override<a name="line.270"></a>
-<span class="sourceLineNo">271</span> public void run() {<a name="line.271"></a>
-<span class="sourceLineNo">272</span> try {<a name="line.272"></a>
-<span class="sourceLineNo">273</span> while (!master.isStopped() && master.isActiveMaster()) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span> Thread.sleep(timeout);<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (master.isInitialized()) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.276"></a>
-<span class="sourceLineNo">277</span> } else {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.278"></a>
-<span class="sourceLineNo">279</span> + " consider submitting a bug report including a thread dump of this process.");<a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (haltOnTimeout) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span> LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.281"></a>
-<span class="sourceLineNo">282</span> Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.282"></a>
-<span class="sourceLineNo">283</span> System.exit(-1);<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> } catch (InterruptedException ie) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span> LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span> // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.293"></a>
-<span class="sourceLineNo">294</span> //instance into web context.<a name="line.294"></a>
-<span class="sourceLineNo">295</span> public static final String MASTER = "master";<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span> // Manager and zk listener for master election<a name="line.297"></a>
-<span class="sourceLineNo">298</span> private final ActiveMasterManager activeMasterManager;<a name="line.298"></a>
-<span class="sourceLineNo">299</span> // Region server tracker<a name="line.299"></a>
-<span class="sourceLineNo">300</span> RegionServerTracker regionServerTracker;<a name="line.300"></a>
-<span class="sourceLineNo">301</span> // Draining region server tracker<a name="line.301"></a>
-<span class="sourceLineNo">302</span> private DrainingServerTracker drainingServerTracker;<a name="line.302"></a>
-<span class="sourceLineNo">303</span> // Tracker for load balancer state<a name="line.303"></a>
-<span class="sourceLineNo">304</span> LoadBalancerTracker loadBalancerTracker;<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Tracker for meta location, if any client ZK quorum specified<a name="line.305"></a>
-<span class="sourceLineNo">306</span> MetaLocationSyncer metaLocationSyncer;<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Tracker for active master location, if any client ZK quorum specified<a name="line.307"></a>
-<span class="sourceLineNo">308</span> MasterAddressSyncer masterAddressSyncer;<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span> // Tracker for split and merge state<a name="line.310"></a>
-<span class="sourceLineNo">311</span> private SplitOrMergeTracker splitOrMergeTracker;<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> // Tracker for region normalizer state<a name="line.313"></a>
-<span class="sourceLineNo">314</span> private RegionNormalizerTracker regionNormalizerTracker;<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span> //Tracker for master maintenance mode setting<a name="line.316"></a>
-<span class="sourceLineNo">317</span> private MasterMaintenanceModeTracker maintenanceModeTracker;<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span> private ClusterSchemaService clusterSchemaService;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.321"></a>
-<span class="sourceLineNo">322</span> "hbase.master.wait.on.service.seconds";<a name="line.322"></a>
-<span class="sourceLineNo">323</span> public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> // Metrics for the HMaster<a name="line.325"></a>
-<span class="sourceLineNo">326</span> final MetricsMaster metricsMaster;<a name="line.326"></a>
-<span class="sourceLineNo">327</span> // file system manager for the master FS operations<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private MasterFileSystem fileSystemManager;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private MasterWalManager walManager;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> // server manager to deal with region server info<a name="line.331"></a>
-<span class="sourceLineNo">332</span> private volatile ServerManager serverManager;<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span> // manager of assignment nodes in zookeeper<a name="line.334"></a>
-<span class="sourceLineNo">335</span> private AssignmentManager assignmentManager;<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span> // manager of replication<a name="line.337"></a>
-<span class="sourceLineNo">338</span> private ReplicationPeerManager replicationPeerManager;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span> // buffer for "fatal error" notices from region servers<a name="line.340"></a>
-<span class="sourceLineNo">341</span> // in the cluster. This is only used for assisting<a name="line.341"></a>
-<span class="sourceLineNo">342</span> // operations/debugging.<a name="line.342"></a>
-<span class="sourceLineNo">343</span> MemoryBoundedLogMessageBuffer rsFatals;<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span> // flag set after we become the active master (used for testing)<a name="line.345"></a>
-<span class="sourceLineNo">346</span> private volatile boolean activeMaster = false;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span> // flag set after we complete initialization once active<a name="line.348"></a>
-<span class="sourceLineNo">349</span> private final ProcedureEvent<?> initialized = new ProcedureEvent<>("master initialized");<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span> // flag set after master services are started,<a name="line.351"></a>
-<span class="sourceLineNo">352</span> // initialization may have not completed yet.<a name="line.352"></a>
-<span class="sourceLineNo">353</span> volatile boolean serviceStarted = false;<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span> // flag set after we complete assignMeta.<a name="line.355"></a>
-<span class="sourceLineNo">356</span> private final ProcedureEvent<?> serverCrashProcessingEnabled =<a name="line.356"></a>
-<span class="sourceLineNo">357</span> new ProcedureEvent<>("server crash processing");<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span> // Maximum time we should run balancer for<a name="line.359"></a>
-<span class="sourceLineNo">360</span> private final int maxBlancingTime;<a name="line.360"></a>
-<span class="sourceLineNo">361</span> // Maximum percent of regions in transition when balancing<a name="line.361"></a>
-<span class="sourceLineNo">362</span> private final double maxRitPercent;<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span> private final LockManager lockManager = new LockManager(this);<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span> private LoadBalancer balancer;<a name="line.366"></a>
-<span class="sourceLineNo">367</span> private RegionNormalizer normalizer;<a name="line.367"></a>
-<span class="sourceLineNo">368</span> private BalancerChore balancerChore;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> private RegionNormalizerChore normalizerChore;<a name="line.369"></a>
-<span class="sourceLineNo">370</span> private ClusterStatusChore clusterStatusChore;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span> CatalogJanitor catalogJanitorChore;<a name="line.373"></a>
-<span class="sourceLineNo">374</span> private LogCleaner logCleaner;<a name="line.374"></a>
-<span class="sourceLineNo">375</span> private HFileCleaner hfileCleaner;<a name="line.375"></a>
-<span class="sourceLineNo">376</span> private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.376"></a>
-<span class="sourceLineNo">377</span> private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.377"></a>
-<span class="sourceLineNo">378</span> private MobCompactionChore mobCompactChore;<a name="line.378"></a>
-<span class="sourceLineNo">379</span> private MasterMobCompactionThread mobCompactThread;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> // used to synchronize the mobCompactionStates<a name="line.380"></a>
-<span class="sourceLineNo">381</span> private final IdLock mobCompactionLock = new IdLock();<a name="line.381"></a>
-<span class="sourceLineNo">382</span> // save the information of mob compactions in tables.<a name="line.382"></a>
-<span class="sourceLineNo">383</span> // the key is table name, the value is the number of compactions in that table.<a name="line.383"></a>
-<span class="sourceLineNo">384</span> private Map<TableName, AtomicInteger> mobCompactionStates = Maps.newConcurrentMap();<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> MasterCoprocessorHost cpHost;<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span> private final boolean preLoadTableDescriptors;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> // Time stamps for when a hmaster became active<a name="line.390"></a>
-<span class="sourceLineNo">391</span> private long masterActiveTime;<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span> // Time stamp for when HMaster finishes becoming Active Master<a name="line.393"></a>
-<span class="sourceLineNo">394</span> private long masterFinishedInitializationTime;<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span> //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.396"></a>
-<span class="sourceLineNo">397</span> private final boolean masterCheckCompression;<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span> //should we check encryption settings at master side, default true<a name="line.399"></a>
-<span class="sourceLineNo">400</span> private final boolean masterCheckEncryption;<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> Map<String, Service> coprocessorServiceHandlers = Maps.newHashMap();<a name="line.402"></a>
-<span class="sourceLineNo">403</span><a name="line.403"></a>
-<span class="sourceLineNo">404</span> // monitor for snapshot of hbase tables<a name="line.404"></a>
-<span class="sourceLineNo">405</span> SnapshotManager snapshotManager;<a name="line.405"></a>
-<span class="sourceLineNo">406</span> // monitor for distributed procedures<a name="line.406"></a>
-<span class="sourceLineNo">407</span> private MasterProcedureManagerHost mpmHost;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span> // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.409"></a>
-<span class="sourceLineNo">410</span> private volatile MasterQuotaManager quotaManager;<a name="line.410"></a>
-<span class="sourceLineNo">411</span> private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> private QuotaObserverChore quotaObserverChore;<a name="line.412"></a>
-<span class="sourceLineNo">413</span> private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span> private ProcedureExecutor<MasterProcedureEnv> procedureExecutor;<a name="line.415"></a>
-<span class="sourceLineNo">416</span> private WALProcedureStore procedureStore;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span> // handle table states<a name="line.418"></a>
-<span class="sourceLineNo">419</span> private TableStateManager tableStateManager;<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> private long splitPlanCount;<a name="line.421"></a>
-<span class="sourceLineNo">422</span> private long mergePlanCount;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span> /* Handle favored nodes information */<a name="line.424"></a>
-<span class="sourceLineNo">425</span> private FavoredNodesManager favoredNodesManager;<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span> /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.427"></a>
-<span class="sourceLineNo">428</span> private Server masterJettyServer;<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span> public static class RedirectServlet extends HttpServlet {<a name="line.430"></a>
-<span class="sourceLineNo">431</span> private static final long serialVersionUID = 2894774810058302473L;<a name="line.431"></a>
-<span class="sourceLineNo">432</span> private final int regionServerInfoPort;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> private final String regionServerHostname;<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span> /**<a name="line.435"></a>
-<span class="sourceLineNo">436</span> * @param infoServer that we're trying to send all requests to<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.437"></a>
-<span class="sourceLineNo">438</span> */<a name="line.438"></a>
-<span class="sourceLineNo">439</span> public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> regionServerInfoPort = infoServer.getPort();<a name="line.440"></a>
-<span class="sourceLineNo">441</span> regionServerHostname = hostname;<a name="line.441"></a>
-<span class="sourceLineNo">442</span> }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span> @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span> public void doGet(HttpServletRequest request,<a name="line.445"></a>
-<span class="sourceLineNo">446</span> HttpServletResponse response) throws ServletException, IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span> String redirectHost = regionServerHostname;<a name="line.447"></a>
-<span class="sourceLineNo">448</span> if(redirectHost == null) {<a name="line.448"></a>
-<span class="sourceLineNo">449</span> redirectHost = request.getServerName();<a name="line.449"></a>
-<span class="sourceLineNo">450</span> if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.451"></a>
-<span class="sourceLineNo">452</span> MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.452"></a>
-<span class="sourceLineNo">453</span> "your HBase deployment relies on client accessible names that the region server process " +<a name="line.453"></a>
-<span class="sourceLineNo">454</span> "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.454"></a>
-<span class="sourceLineNo">455</span> "to an appropriate hostname.");<a name="line.455"></a>
-<span class="sourceLineNo">456</span> // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.456"></a>
-<span class="sourceLineNo">457</span> response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.457"></a>
-<span class="sourceLineNo">458</span> "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.458"></a>
-<span class="sourceLineNo">459</span> "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span> }<a name="line.462"></a>
-<span class="sourceLineNo">463</span> // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.463"></a>
-<span class="sourceLineNo">464</span> // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.464"></a>
-<span class="sourceLineNo">465</span> String redirectUrl = request.getScheme() + "://"<a name="line.465"></a>
-<span class="sourceLineNo">466</span> + redirectHost + ":" + regionServerInfoPort<a name="line.466"></a>
-<span class="sourceLineNo">467</span> + request.getRequestURI();<a name="line.467"></a>
-<span class="sourceLineNo">468</span> response.sendRedirect(redirectUrl);<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><a name="line.471"></a>
-<span class="sourceLineNo">472</span> /**<a name="line.472"></a>
-<span class="sourceLineNo">473</span> * Initializes the HMaster. The steps are as follows:<a name="line.473"></a>
-<span class="sourceLineNo">474</span> * <p><a name="line.474"></a>
-<span class="sourceLineNo">475</span> * <ol><a name="line.475"></a>
-<span class="sourceLineNo">476</span> * <li>Initialize the local HRegionServer<a name="line.476"></a>
-<span class="sourceLineNo">477</span> * <li>Start the ActiveMasterManager.<a name="line.477"></a>
-<span class="sourceLineNo">478</span> * </ol><a name="line.478"></a>
-<span class="sourceLineNo">479</span> * <p><a name="line.479"></a>
-<span class="sourceLineNo">480</span> * Remaining steps of initialization occur in<a name="line.480"></a>
-<span class="sourceLineNo">481</span> * #finishActiveMasterInitialization(MonitoredTask) after<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * the master becomes the active one.<a name="line.482"></a>
-<span class="sourceLineNo">483</span> */<a name="line.483"></a>
-<span class="sourceLineNo">484</span> public HMaster(final Configuration conf)<a name="line.484"></a>
-<span class="sourceLineNo">485</span> throws IOException, KeeperException {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> super(conf);<a name="line.486"></a>
-<span class="sourceLineNo">487</span> TraceUtil.initTracer(conf);<a name="line.487"></a>
-<span class="sourceLineNo">488</span> try {<a name="line.488"></a>
-<span class="sourceLineNo">489</span> this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.489"></a>
-<span class="sourceLineNo">490</span> conf.getLong("hbase.master.buffer.for.rs.fatals", 1 * 1024 * 1024));<a name="line.490"></a>
-<span class="sourceLineNo">491</span> LOG.info("hbase.rootdir=" + getRootDir() +<a name="line.491"></a>
-<span class="sourceLineNo">492</span> ", hbase.cluster.distributed=" + this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span> // Disable usage of meta replicas in the master<a name="line.494"></a>
-<span class="sourceLineNo">495</span> this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span> decorateMasterConfiguration(this.conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span> // Hack! Maps DFSClient => Master for logs. HDFS made this<a name="line.499"></a>
-<span class="sourceLineNo">500</span> // config param for task trackers, but we can piggyback off of it.<a name="line.500"></a>
-<span class="sourceLineNo">501</span> if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span> this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.502"></a>
-<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span> // should we check the compression codec type at master side, default true, HBASE-6370<a name="line.505"></a>
-<span class="sourceLineNo">506</span> this.masterCheckCompression = conf.getBoolean("hbase.master.check.compression", true);<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span> // should we check encryption settings at master side, default true<a name="line.508"></a>
-<span class="sourceLineNo">509</span> this.masterCheckEncryption = conf.getBoolean("hbase.master.check.encryption", true);<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // preload table descriptor at startup<a name="line.513"></a>
-<span class="sourceLineNo">514</span> this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span> this.maxBlancingTime = getMaxBalancingTime();<a name="line.516"></a>
-<span class="sourceLineNo">517</span> this.maxRitPercent = conf.getDouble(HConstants.HBASE_MASTER_BALANCER_MAX_RIT_PERCENT,<a name="line.517"></a>
-<span class="sourceLineNo">518</span> HConstants.DEFAULT_HBASE_MASTER_BALANCER_MAX_RIT_PERCENT);<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span> // Do we publish the status?<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span> boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.522"></a>
-<span class="sourceLineNo">523</span> HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> Class<? extends ClusterStatusPublisher.Publisher> publisherClass =<a name="line.524"></a>
-<span class="sourceLineNo">525</span> conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.525"></a>
-<span class="sourceLineNo">526</span> ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS,<a name="line.526"></a>
-<span class="sourceLineNo">527</span> ClusterStatusPublisher.Publisher.class);<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span> if (shouldPublish) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span> if (publisherClass == null) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.531"></a>
-<span class="sourceLineNo">532</span> ClusterStatusPublisher.DEFAULT_STATUS_PUBLISHER_CLASS +<a name="line.532"></a>
-<span class="sourceLineNo">533</span> " is not set - not publishing status");<a name="line.533"></a>
-<span class="sourceLineNo">534</span> } else {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> clusterStatusPublisherChore = new ClusterStatusPublisher(this, conf, publisherClass);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> getChoreService().scheduleChore(clusterStatusPublisherChore);<a name="line.536"></a>
-<span class="sourceLineNo">537</span> }<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span> // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.540"></a>
-<span class="sourceLineNo">541</span> if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span> this.activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, this);<a name="line.542"></a>
-<span class="sourceLineNo">543</span> } else {<a name="line.543"></a>
-<span class="sourceLineNo">544</span> this.activeMasterManager = null;<a name="line.544"></a>
-<span class="sourceLineNo">545</span> }<a name="line.545"></a>
-<span class="sourceLineNo">546</span> } catch (Throwable t) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span> // Make sure we log the exception. HMaster is often started via reflection and the<a name="line.547"></a>
-<span class="sourceLineNo">548</span> // cause of failed startup is lost.<a name="line.548"></a>
-<span class="sourceLineNo">549</span> LOG.error("Failed construction of Master", t);<a name="line.549"></a>
-<span class="sourceLineNo">550</span> throw t;<a name="line.550"></a>
-<span class="sourceLineNo">551</span> }<a name="line.551"></a>
-<span class="sourceLineNo">552</span> }<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span> @Override<a name="line.554"></a>
-<span class="sourceLineNo">555</span> protected String getUseThisHostnameInstead(Configuration conf) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span> return conf.get(MASTER_HOSTNAME_KEY);<a name="line.556"></a>
-<span class="sourceLineNo">557</span> }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span> // Main run loop. Calls through to the regionserver run loop AFTER becoming active Master; will<a name="line.559"></a>
-<span class="sourceLineNo">560</span> // block in here until then.<a name="line.560"></a>
-<span class="sourceLineNo">561</span> @Override<a name="line.561"></a>
-<span class="sourceLineNo">562</span> public void run() {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> try {<a name="line.563"></a>
-<span class="sourceLineNo">564</span> if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span> Threads.setDaemonThreadRunning(new Thread(() -> {<a name="line.565"></a>
-<span class="sourceLineNo">566</span> try {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> int infoPort = putUpJettyServer();<a name="line.567"></a>
-<span class="sourceLineNo">568</span> startActiveMasterManager(infoPort);<a name="line.568"></a>
-<span class="sourceLineNo">569</span> } catch (Throwable t) {<a name="line.569"></a>
-<span class="sourceLineNo">570</span> // Make sure we log the exception.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> String error = "Failed to become Active Master";<a name="line.571"></a>
-<span class="sourceLineNo">572</span> LOG.error(error, t);<a name="line.572"></a>
-<span class="sourceLineNo">573</span> // Abort should have been called already.<a name="line.573"></a>
-<span class="sourceLineNo">574</span> if (!isAborted()) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span> abort(error, t);<a name="line.575"></a>
-<span class="sourceLineNo">576</span> }<a name="line.576"></a>
-<span class="sourceLineNo">577</span> }<a name="line.577"></a>
-<span class="sourceLineNo">578</span> }));<a name="line.578"></a>
-<span class="sourceLineNo">579</span> }<a name="line.579"></a>
-<span class="sourceLineNo">580</span> // Fall in here even if we have been aborted. Need to run the shutdown services and<a name="line.580"></a>
-<span class="sourceLineNo">581</span> // the super run call will do this for us.<a name="line.581"></a>
-<span class="sourceLineNo">582</span> super.run();<a name="line.582"></a>
-<span class="sourceLineNo">583</span> } finally {<a name="line.583"></a>
-<span class="sourceLineNo">584</span> if (this.clusterSchemaService != null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> // If on way out, then we are no longer active master.<a name="line.585"></a>
-<span class="sourceLineNo">586</span> this.clusterSchemaService.stopAsync();<a name="line.586"></a>
-<span class="sourceLineNo">587</span> try {<a name="line.587"></a>
-<span class="sourceLineNo">588</span> this.clusterSchemaService.awaitTerminated(<a name="line.588"></a>
-<span class="sourceLineNo">589</span> getConfiguration().getInt(HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.589"></a>
-<span class="sourceLineNo">590</span> DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.590"></a>
-<span class="sourceLineNo">591</span> } catch (TimeoutException te) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span> LOG.warn("Failed shutdown of clusterSchemaService", te);<a name="line.592"></a>
-<span class="sourceLineNo">593</span> }<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> this.activeMaster = false;<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span> }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span> // return the actual infoPort, -1 means disable info server.<a name="line.599"></a>
-<span class="sourceLineNo">600</span> private int putUpJettyServer() throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> if (!conf.getBoolean("hbase.master.infoserver.redirect", true)) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span> return -1;<a name="line.602"></a>
-<span class="sourceLineNo">603</span> }<a name="line.603"></a>
-<span class="sourceLineNo">604</span> final int infoPort = conf.getInt("hbase.master.info.port.orig",<a name="line.604"></a>
-<span class="sourceLineNo">605</span> HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.605"></a>
-<span class="sourceLineNo">606</span> // -1 is for disabling info server, so no redirecting<a name="line.606"></a>
-<span class="sourceLineNo">607</span> if (infoPort < 0 || infoServer == null) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span> return -1;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span> if(infoPort == infoServer.getPort()) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span> return infoPort;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span> final String addr = conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.613"></a>
-<span class="sourceLineNo">614</span> if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span> String msg =<a name="line.615"></a>
-<span class="sourceLineNo">616</span> "Failed to start redirecting jetty server. Address " + addr<a name="line.616"></a>
-<span class="sourceLineNo">617</span> + " does not belong to this host. Correct configuration parameter: "<a name="line.617"></a>
-<span class="sourceLineNo">618</span> + "hbase.master.info.bindAddress";<a name="line.618"></a>
-<span class="sourceLineNo">619</span> LOG.error(msg);<a name="line.619"></a>
-<span class="sourceLineNo">620</span> throw new IOException(msg);<a name="line.620"></a>
-<span class="sourceLineNo">621</span> }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span> // TODO I'm pretty sure we could just add another binding to the InfoServer run by<a name="line.623"></a>
-<span class="sourceLineNo">624</span> // the RegionServer and have it run the RedirectServlet instead of standing up<a name="line.624"></a>
-<span class="sourceLineNo">625</span> // a second entire stack here.<a name="line.625"></a>
-<span class="sourceLineNo">626</span> masterJettyServer = new Server();<a name="line.626"></a>
-<span class="sourceLineNo">627</span> final ServerConnector connector = new ServerConnector(masterJettyServer);<a name="line.627"></a>
-<span class="sourceLineNo">628</span> connector.setHost(addr);<a name="line.628"></a>
-<span class="sourceLineNo">629</span> connector.setPort(infoPort);<a name="line.629"></a>
-<span class="sourceLineNo">630</span> masterJettyServer.addConnector(connector);<a name="line.630"></a>
-<span class="sourceLineNo">631</span> masterJettyServer.setStopAtShutdown(true);<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span> final String redirectHostname =<a name="line.633"></a>
-<span class="sourceLineNo">634</span> StringUtils.isBlank(useThisHostnameInstead) ? null : useThisHostnameInstead;<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span> final RedirectServlet redirect = new RedirectServlet(infoServer, redirectHostname);<a name="line.636"></a>
-<span class="sourceLineNo">637</span> final WebAppContext context = new WebAppContext(null, "/", null, null, null, null, WebAppContext.NO_SESSIONS);<a name="line.637"></a>
-<span class="sourceLineNo">638</span> context.addServlet(new ServletHolder(redirect), "/*");<a name="line.638"></a>
-<span class="sourceLineNo">639</span> context.setServer(masterJettyServer);<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span> try {<a name="line.641"></a>
-<span class="sourceLineNo">642</span> masterJettyServer.start();<a name="line.642"></a>
-<span class="sourceLineNo">643</span> } catch (Exception e) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span> throw new IOException("Failed to start redirecting jetty server", e);<a name="line.644"></a>
-<span class="sourceLineNo">645</span> }<a name="line.645"></a>
-<span class="sourceLineNo">646</span> return connector.getLocalPort();<a name="line.646"></a>
-<span class="sourceLineNo">647</span> }<a name="line.647"></a>
-<span class="sourceLineNo">648</span><a name="line.648"></a>
-<span class="sourceLineNo">649</span> @Override<a name="line.649"></a>
-<span class="sourceLineNo">650</span> protected Function<TableDescriptorBuilder, TableDescriptorBuilder> getMetaTableObserver() {<a name="line.650"></a>
-<span class="sourceLineNo">651</span> return builder -> builder.setRegionReplication(conf.getInt(HConstants.META_REPLICAS_NUM, HConstants.DEFAULT_META_REPLICA_NUM));<a name="line.651"></a>
-<span class="sourceLineNo">652</span> }<a name="line.652"></a>
-<span class="sourceLineNo">653</span> /**<a name="line.653"></a>
-<span class="sourceLineNo">654</span> * For compatibility, if failed with regionserver credentials, try the master one<a name="line.654"></a>
-<span class="sourceLineNo">655</span> */<a name="line.655"></a>
-<span class="sourceLineNo">656</span> @Override<a name="line.656"></a>
-<span class="sourceLineNo">657</span> protected void login(UserProvider user, String host) throws IOException {<a name="line.657"></a>
-<span class="sourceLineNo">658</span> try {<a name="line.658"></a>
-<span class="sourceLineNo">659</span> super.login(user, host);<a name="line.659"></a>
-<span class="sourceLineNo">660</span> } catch (IOException ie) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span> user.login("hbase.master.keytab.file",<a name="line.661"></a>
-<span class="sourceLineNo">662</span> "hbase.master.kerberos.principal", host);<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><a name="line.665"></a>
-<span class="sourceLineNo">666</span> /**<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * If configured to put regions on active master,<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * wait till a backup master becomes active.<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * Otherwise, loop till the server is stopped or aborted.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> @Override<a name="line.671"></a>
-<span class="sourceLineNo">672</span> protected void waitForMasterActive(){<a name="line.672"></a>
-<span class="sourceLineNo">673</span> boolean tablesOnMaster = LoadBalancer.isTablesOnMaster(conf);<a name="line.673"></a>
-<span class="sourceLineNo">674</span> while (!(tablesOnMaster && activeMaster) && !isStopped() && !isAborted()) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span> sleeper.sleep();<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> @VisibleForTesting<a name="line.679"></a>
-<span class="sourceLineNo">680</span> public MasterRpcServices getMasterRpcServices() {<a name="line.680"></a>
-<span class="sourceLineNo">681</span> return (MasterRpcServices)rpcServices;<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> public boolean balanceSwitch(final boolean b) throws IOException {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> return getMasterRpcServices().switchBalancer(b, BalanceSwitchMode.ASYNC);<a name="line.685"></a>
-<span class="sourceLineNo">686</span> }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span> @Override<a name="line.688"></a>
-<span class="sourceLineNo">689</span> protected String getProcessName() {<a name="line.689"></a>
-<span class="sourceLineNo">690</span> return MASTER;<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> @Override<a name="line.693"></a>
-<span class="sourceLineNo">694</span> protected boolean canCreateBaseZNode() {<a name="line.694"></a>
-<span class="sourceLineNo">695</span> return true;<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> @Override<a name="line.698"></a>
-<span class="sourceLineNo">699</span> protected boolean canUpdateTableDescriptor() {<a name="line.699"></a>
-<span class="sourceLineNo">700</span> return true;<a name="line.700"></a>
-<span class="sourceLineNo">701</span> }<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span> @Override<a name="line.703"></a>
-<span class="sourceLineNo">704</span> protected RSRpcServices createRpcServices() throws IOException {<a name="line.704"></a>
-<span class="sourceLineNo">705</span> return new MasterRpcServices(this);<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> @Override<a name="line.708"></a>
-<span class="sourceLineNo">709</span> protected void configureInfoServer() {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> infoServer.addServlet("master-status", "/master-status", MasterStatusServlet.class);<a name="line.710"></a>
-<span class="sourceLineNo">711</span> infoServer.setAttribute(MASTER, this);<a name="line.711"></a>
-<span class="sourceLineNo">712</span> if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span> super.configureInfoServer();<a name="line.713"></a>
-<span class="sourceLineNo">714</span> }<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
-<span class="sourceLineNo">716</span><a name="line.716"></a>
-<span class="sourceLineNo">717</span> @Override<a name="line.717"></a>
-<span class="sourceLineNo">718</span> protected Class<? extends HttpServlet> getDumpServlet() {<a name="line.718"></a>
-<span class="sourceLineNo">719</span> return MasterDumpServlet.class;<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span><a name="line.721"></a>
-<span class="sourceLineNo">722</span> @Override<a name="line.722"></a>
-<span class="sourceLineNo">723</span> public MetricsMaster getMasterMetrics() {<a name="line.723"></a>
-<span class="sourceLineNo">724</span> return metricsMaster;<a name="line.724"></a>
-<span class="sourceLineNo">725</span> }<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span> /**<a name="line.727"></a>
+<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>/**<a name="line.220"></a>
+<span class="sourceLineNo">221</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.221"></a>
+<span class="sourceLineNo">222</span> * master. If many masters are started, all compete. Whichever wins goes on to<a name="line.222"></a>
+<span class="sourceLineNo">223</span> * run the cluster. All others park themselves in their constructor until<a name="line.223"></a>
+<span class="sourceLineNo">224</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.224"></a>
+<span class="sourceLineNo">225</span> * zookeeper. Thereafter, all running master jostle to take over master role.<a name="line.225"></a>
+<span class="sourceLineNo">226</span> *<a name="line.226"></a>
+<span class="sourceLineNo">227</span> * <p>The Master can be asked shutdown the cluster. See {@link #shutdown()}. In<a name="line.227"></a>
+<span class="sourceLineNo">228</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * all reporting in that they are down. This master will then shut itself down.<a name="line.229"></a>
+<span class="sourceLineNo">230</span> *<a name="line.230"></a>
+<span class="sourceLineNo">231</span> * <p>You can also shutdown just this master. Call {@link #stopMaster()}.<a name="line.231"></a>
+<span class="sourceLineNo">232</span> *<a name="line.232"></a>
+<span class="sourceLineNo">233</span> * @see org.apache.zookeeper.Watcher<a name="line.233"></a>
+<span class="sourceLineNo">234</span> */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.235"></a>
+<span class="sourceLineNo">236</span>@SuppressWarnings("deprecation")<a name="line.236"></a>
+<span class="sourceLineNo">237</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private static Logger LOG = LoggerFactory.getLogger(HMaster.class.getName());<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span> /**<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.241"></a>
+<span class="sourceLineNo">242</span> * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.242"></a>
+<span class="sourceLineNo">243</span> */<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private static class InitializationMonitor extends HasThread {<a name="line.244"></a>
+<span class="sourceLineNo">245</span> /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.245"></a>
+<span class="sourceLineNo">246</span> public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.246"></a>
+<span class="sourceLineNo">247</span> public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span> /**<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.250"></a>
+<span class="sourceLineNo">251</span> * true, do nothing otherwise.<a name="line.251"></a>
+<span class="sourceLineNo">252</span> */<a name="line.252"></a>
+<span class="sourceLineNo">253</span> public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.253"></a>
+<span class="sourceLineNo">254</span> public static final boolean HALT_DEFAULT = false;<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span> private final HMaster master;<a name="line.256"></a>
+<span class="sourceLineNo">257</span> private final long timeout;<a name="line.257"></a>
+<span class="sourceLineNo">258</span> private final boolean haltOnTimeout;<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span> /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.260"></a>
+<span class="sourceLineNo">261</span> InitializationMonitor(HMaster master) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span> super("MasterInitializationMonitor");<a name="line.262"></a>
+<span class="sourceLineNo">263</span> this.master = master;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.264"></a>
+<span class="sourceLineNo">265</span> this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.setDaemon(true);<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> public void run() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> try {<a name="line.271"></a>
+<span class="sourceLineNo">272</span> while (!master.isStopped() && master.isActiveMaster()) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> Thread.sleep(timeout);<a name="line.273"></a>
+<span class="sourceLineNo">274</span> if (master.isInitialized()) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span> LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.275"></a>
+<span class="sourceLineNo">276</span> } else {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.277"></a>
+<span class="sourceLineNo">278</span> + " consider submitting a bug report including a thread dump of this process.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span> if (haltOnTimeout) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span> LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.280"></a>
+<span class="sourceLineNo">281</span> Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.281"></a>
+<span class="sourceLineNo">282</span> System.exit(-1);<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> } catch (InterruptedException ie) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span> LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span> }<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.292"></a>
+<span class="sourceLineNo">293</span> //instance into web context.<a name="line.293"></a>
+<span class="sourceLineNo">294</span> public static final String MASTER = "master";<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span> // Manager and zk listener for master election<a name="line.296"></a>
+<span class="sourceLineNo">297</span> private final ActiveMasterManager activeMasterManager;<a name="line.297"></a>
+<span class="sourceLineNo">298</span> // Region server tracker<a name="line.298"></a>
+<span class="sourceLineNo">299</span> private RegionServerTracker regionServerTracker;<a name="line.299"></a>
+<span class="sourceLineNo">300</span> // Draining region server tracker<a name="line.300"></a>
+<span class="sourceLineNo">301</span> private DrainingServerTracker drainingServerTracker;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> // Tracker for load balancer state<a name="line.302"></a>
+<span class="sourceLineNo">303</span> LoadBalancerTracker loadBalancerTracker;<a name="line.303"></a>
+<span class="sourceLineNo">304</span> // Tracker for meta location, if any client ZK quorum specified<a name="line.304"></a>
+<span class="sourceLineNo">305</span> MetaLocationSyncer metaLocationSyncer;<a name="line.305"></a>
+<span class="sourceLineNo">306</span> // Tracker for active master location, if any client ZK quorum specified<a name="line.306"></a>
+<span class="sourceLineNo">307</span> MasterAddressSyncer masterAddressSyncer;<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span> // Tracker for split and merge state<a name="line.309"></a>
+<span class="sourceLineNo">310</span> private SplitOrMergeTracker splitOrMergeTracker;<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span> // Tracker for region normalizer state<a name="line.312"></a>
+<span class="sourceLineNo">313</span> private RegionNormalizerTracker regionNormalizerTracker;<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span> //Tracker for master maintenance mode setting<a name="line.315"></a>
+<span class="sourceLineNo">316</span> private MasterMaintenanceModeTracker maintenanceModeTracker;<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span> private ClusterSchemaService clusterSchemaService;<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.320"></a>
+<span class="sourceLineNo">321</span> "hbase.master.wait.on.service.seconds";<a name="line.321"></a>
+<span class="sourceLineNo">322</span> public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span> // Metrics for the HMaster<a name="line.324"></a>
+<span class="sourceLineNo">325</span> final MetricsMaster metricsMaster;<a name="line.325"></a>
+<span class="sourceLineNo">326</span> // file system manager for the master FS operations<a name="line.326"></a>
+<span class="sourceLineNo">327</span> private MasterFileSystem fileSystemManager;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private MasterWalManager walManager;<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> // server manager to deal with region server info<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private volatile ServerManager serverManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span> // manager of assignment nodes in zookeeper<a name="line.333"></a>
+<span class="sourceLineNo">334</span> private AssignmentManager assignmentManager;<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> // manager of replication<a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ReplicationPeerManager replicationPeerManager;<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span> // buffer for "fatal error" notices from region servers<a name="line.339"></a>
+<span class="sourceLineNo">340</span> // in the cluster. This is only used for assisting<a name="line.340"></a>
+<span class="sourceLineNo">341</span> // operations/debugging.<a name="line.341"></a>
+<span class="sourceLineNo">342</span> MemoryBoundedLogMessageBuffer rsFatals;<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span> // flag set after we become the active master (used for testing)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> private volatile boolean activeMaster = false;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span> // flag set after we complete initialization once active<a name="line.347"></a>
+<span class="sourceLineNo">348</span> private final ProcedureEvent<?> initialized = new ProcedureEvent<>("master initialized");<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span> // flag set after master services are started,<a name="line.350"></a>
+<span class="sourceLineNo">351</span> // initialization may have not completed yet.<a name="line.351"></a>
+<span class="sourceLineNo">352</span> volatile boolean serviceStarted = false;<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span> // flag set after we complete assignMeta.<a name="line.354"></a>
+<span class="sourceLineNo">355</span> private final ProcedureEvent<?> serverCrashProcessingEnabled =<a name="line.355"></a>
+<span class="sourceLineNo">356</span> new ProcedureEvent<>("server crash processing");<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> // Maximum time we should run balancer for<a name="line.358"></a>
+<span class="sourceLineNo">359</span> private final int maxBlancingTime;<a name="line.359"></a>
+<span class="sourceLineNo">360</span> // Maximum percent of regions in transition when balancing<a name="line.360"></a>
+<span class="sourceLineNo">361</span> private final double maxRitPercent;<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span> private final LockManager lockManager = new LockManager(this);<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span> private LoadBalancer balancer;<a name="line.365"></a>
+<span class="sourceLineNo">366</span> private RegionNormalizer normalizer;<a name="line.366"></a>
+<span class="sourceLineNo">367</span> private BalancerChore balancerChore;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> private RegionNormalizerChore normalizerChore;<a name="line.368"></a>
+<span class="sourceLineNo">369</span> private ClusterStatusChore clusterStatusChore;<a name="line.369"></a>
+<span class="sourceLineNo">370</span> private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span> CatalogJanitor catalogJanitorChore;<a name="line.372"></a>
+<span class="sourceLineNo">373</span> private LogCleaner logCleaner;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> private HFileCleaner hfileCleaner;<a name="line.374"></a>
+<span class="sourceLineNo">375</span> private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.375"></a>
+<span class="sourceLineNo">376</span> private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.376"></a>
+<span class="sourceLineNo">377</span> private MobCompactionChore mobCompactChore;<a name="line.377"></a>
+<span class="sourceLineNo">378</span> private MasterMobCompactionThread mobCompactThread;<a name="line.378"></a>
+<span class="sourceLineNo">379</span> // used to synchronize the mobCompactionStates<a name="line.379"></a>
+<span class="sourceLineNo">380</span> private final IdLock mobCompactionLock = new IdLock();<a name="line.380"></a>
+<span class="sourceLineNo">381</span> // save the information of mob compactions in tables.<a name="line.381"></a>
+<span class="sourceLineNo">382</span> // the key is table name, the value is the number of compactions in that table.<a name="line.382"></a>
+<span class="sourceLineNo">383</span> private Map<TableName, AtomicInteger> mobCompactionStates = Maps.newConcurrentMap();<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> MasterCoprocessorHost cpHost;<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span> private final boolean preLoadTableDescriptors;<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> // Time stamps for when a hmaster became active<a name="line.389"></a>
+<span class="sourceLineNo">390</span> private long masterActiveTime;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> // Time stamp for when HMaster finishes becoming Active Master<a name="line.392"></a>
+<span class="sourceLineNo">393</span> private long masterFinishedInitializationTime;<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span> //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.395"></a>
+<span class="sourceLineNo">396</span> private final boolean masterCheckCompression;<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span> //should we check encryption settings at master side, default true<a name="line.398"></a>
+<span class="sourceLineNo">399</span> private final boolean masterCheckEncryption;<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> Map<String, Service> coprocessorServiceHandlers = Maps.newHashMap();<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span> // monitor for snapshot of hbase tables<a name="line.403"></a>
+<span class="sourceLineNo">404</span> SnapshotManager snapshotManager;<a name="line.404"></a>
+<span class="sourceLineNo">405</span> // monitor for distributed procedures<a name="line.405"></a>
+<span class="sourceLineNo">406</span> private MasterProcedureManagerHost mpmHost;<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span> // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.408"></a>
+<span class="sourceLineNo">409</span> private volatile MasterQuotaManager quotaManager;<a name="line.409"></a>
+<span class="sourceLineNo">410</span> private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.410"></a>
+<span class="sourceLineNo">411</span> private QuotaObserverChore quotaObserverChore;<a name="line.411"></a>
+<span class="sourceLineNo">412</span> private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span> private ProcedureExecutor<MasterProcedureEnv> procedureExecutor;<a name="line.414"></a>
+<span class="sourceLineNo">415</span> private WALProcedureStore procedureStore;<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span> // handle table states<a name="line.417"></a>
+<span class="sourceLineNo">418</span> private TableStateManager tableStateManager;<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span> private long splitPlanCount;<a name="line.420"></a>
+<span class="sourceLineNo">421</span> private long mergePlanCount;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span> /* Handle favored nodes information */<a name="line.423"></a>
+<span class="sourceLineNo">424</span> private FavoredNodesManager favoredNodesManager;<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span> /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.426"></a>
+<span class="sourceLineNo">427</span> private Server masterJettyServer;<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span> public static class RedirectServlet extends HttpServlet {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> private static final long serialVersionUID = 2894774810058302473L;<a name="line.430"></a>
+<span class="sourceLineNo">431</span> private final int regionServerInfoPort;<a name="line.431"></a>
+<span class="sourceLineNo">432</span> private final String regionServerHostname;<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span> /**<a name="line.434"></a>
+<span class="sourceLineNo">435</span> * @param infoServer that we're trying to send all requests to<a name="line.435"></a>
+<span class="sourceLineNo">436</span> * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.436"></a>
+<span class="sourceLineNo">437</span> */<a name="line.437"></a>
+<span class="sourceLineNo">438</span> public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span> regionServerInfoPort = infoServer.getPort();<a name="line.439"></a>
+<span class="sourceLineNo">440</span> regionServerHostname = hostname;<a name="line.440"></a>
+<span class="sourceLineNo">441</span> }<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span> @Override<a name="line.443"></a>
+<span class="sourceLineNo">444</span> public void doGet(HttpServletRequest request,<a name="line.444"></a>
+<span class="sourceLineNo">445</span> HttpServletResponse response) throws ServletException, IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span> String redirectHost = regionServerHostname;<a name="line.446"></a>
+<span class="sourceLineNo">447</span> if(redirectHost == null) {<a name="line.447"></a>
+<span class="sourceLineNo">448</span> redirectHost = request.getServerName();<a name="line.448"></a>
+<span class="sourceLineNo">449</span> if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.449"></a>
+<span class="sourceLineNo">450</span> LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.450"></a>
+<span class="sourceLineNo">451</span> MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.451"></a>
+<span class="sourceLineNo">452</span> "your HBase deployment relies on client accessible names that the region server process " +<a name="line.452"></a>
+<span class="sourceLineNo">453</span> "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.453"></a>
+<span class="sourceLineNo">454</span> "to an appropriate hostname.");<a name="line.454"></a>
+<span class="sourceLineNo">455</span> // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.455"></a>
+<span class="sourceLineNo">456</span> response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.456"></a>
+<span class="sourceLineNo">457</span> "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.457"></a>
+<span class="sourceLineNo">458</span> "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.458"></a>
+<span class="sourceLineNo">459</span> return;<a name="line.459"></a>
+<span class="sourceLineNo">460</span> }<a name="line.460"></a>
+<span class="sourceLineNo">461</span> }<a name="line.461"></a>
+<span class="sourceLineNo">462</span> // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.462"></a>
+<span class="sourceLineNo">463</span> // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.463"></a>
+<span class="sourceLineNo">464</span> String redirectUrl = request.getScheme() + "://"<a name="line.464"></a>
+<span class="sourceLineNo">465</span> + redirectHost + ":" + regionServerInfoPort<a name="line.465"></a>
+<span class="sourceLineNo">466</span> + request.getRequestURI();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> response.sendRedirect(redirectUrl);<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> /**<a name="line.471"></a>
+<span class="sourceLineNo">472</span> * Initializes the HMaster. The steps are as follows:<a name="line.472"></a>
+<span class="sourceLineNo">473</span> * <p><a name="line.473"></a>
+<span class="sourceLineNo">474</span> * <ol><a name="line.474"></a>
+<span class="sourceLineNo">475</span> * <li>Initialize the local HRegionServer<a name="line.475"></a>
+<span class="sourceLineNo">476</span> * <li>Start the ActiveMasterManager.<a name="line.476"></a>
+<span class="sourceLineNo">477</span> * </ol><a name="line.477"></a>
+<span class="sourceLineNo">478</span> * <p><a name="line.478"></a>
+<span class="sourceLineNo">479</span> * Remaining steps of initialization occur in<a name="line.479"></a>
+<span class="sourceLineNo">480</span> * #finishActiveMasterInitialization(MonitoredTask) after<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * the master becomes the active one.<a name="line.481"></a>
+<span class="sourceLineNo">482</span> */<a name="line.482"></a>
+<span class="sourceLineNo">483</span> public HMaster(final Configuration conf)<a name="line.483"></a>
+<span class="sourceLineNo">484</span> throws IOException, KeeperException {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> super(conf);<a name="line.485"></a>
+<span class="sourceLineNo">486</span> TraceUtil.initTracer(conf);<a name="line.486"></a>
+<span class="sourceLineNo">487</span> try {<a name="line.487"></a>
+<span class="sourceLineNo">488</span> this.rsFatals = new MemoryBoundedLogMessageBuffer(<a name="line.488"></a>
+<span class="sourceLineNo">489</span> conf.getLong("hbase.master.buffer.for.rs.fatals", 1 * 1024 * 1024));<a name="line.489"></a>
+<span class="sourceLineNo">490</span> LOG.info("hbase.rootdir=" + getRootDir() +<a name="line.490"></a>
+<span class="sourceLineNo">491</span> ", hbase.cluster.distributed=" + this.conf.getBoolean(HConstants.CLUSTER_DISTRIBUTED, false));<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span> // Disable usage of meta replicas in the master<a name="line.493"></a>
+<span class="sourceLineNo">494</span> this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span> decorateMasterConfiguration(this.conf);<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span> // Hack! Maps DFSClient => Master for logs. HDFS made this<a name="line.498"></a>
+<span class="sourceLineNo">499</span> // config param for task trackers, but we can piggyback off of it.<a name="line.499"></a>
+<span class="sourceLineNo">500</span> if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span> this.conf.set("mapreduce.task.attempt.id", "hb_m_" + this.serverName.toString());<a name="line.501"></a>
+<span class="sourceLineNo">502</span> }<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span> // should we check the compression codec type at master side, default true, HBASE-6370<a name="line.504"></a>
+<span class="sourceLineNo">505</span> this.masterCheckCompression = conf.getBoolean("hbase.master.check.compression", true);<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span> // should we check encryption settings at master side, default true<a name="line.507"></a>
+<span class="sourceLineNo">508</span> this.masterCheckEncryption = conf.getBoolean("hbase.master.check.encryption", true);<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span> this.metricsMaster = new MetricsMaster(new MetricsMasterWrapperImpl(this));<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span> // preload table descriptor at startup<a name="line.512"></a>
+<span class="sourceLineNo">513</span> this.preLoadTableDescriptors = conf.getBoolean("hbase.master.preload.tabledescriptors", true);<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span> this.maxBlancingTime = getMaxBalancingTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span> this.maxRitPercent = conf.getDouble(HConstants.HBASE_MASTER_BALANCER_MAX_RIT_PERCENT,<a name="line.516"></a>
+<span class="sourceLineNo">517</span> HConstants.DEFAULT_HBASE_MASTER_BALANCER_MAX_RIT_PERCENT);<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span> // Do we publish the status?<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span> boolean shouldPublish = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.521"></a>
+<span class="sourceLineNo">522</span> HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.522"></a>
+<span class="sourceLineNo">523</span> Class<? extends ClusterStatusPublisher.Publisher> publisherClass =<a name="line.523"></a>
+<span class="sourceLineNo">524</span> conf.getClass(ClusterStatusPublisher.STATUS_PUBLISHER_CLASS,<a name="line.524"></a>
+<span class="sourceLineNo">525</span> ClusterStatus
<TRUNCATED>
[49/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 5fe002a..008388e 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
<copyright>©2007 - 2018 The Apache Software Foundation</copyright>
<item>
<title>File: 3640,
- Errors: 16197,
+ Errors: 16190,
Warnings: 0,
Infos: 0
</title>
@@ -5403,7 +5403,7 @@ under the License.
0
</td>
<td>
- 0
+ 1
</td>
</tr>
<tr>
@@ -25101,7 +25101,7 @@ under the License.
0
</td>
<td>
- 0
+ 1
</td>
</tr>
<tr>
@@ -28825,7 +28825,7 @@ under the License.
0
</td>
<td>
- 4
+ 0
</td>
</tr>
<tr>
@@ -31513,7 +31513,7 @@ under the License.
0
</td>
<td>
- 24
+ 22
</td>
</tr>
<tr>
@@ -32983,7 +32983,7 @@ under the License.
0
</td>
<td>
- 4
+ 1
</td>
</tr>
<tr>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index cbead93..c90ab15 100644
--- a/coc.html
+++ b/coc.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180613" />
+ <meta name="Date-Revision-yyyymmdd" content="20180614" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Code of Conduct Policy
@@ -375,7 +375,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-13</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-14</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 7ec1cde..0577314 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180613" />
+ <meta name="Date-Revision-yyyymmdd" content="20180614" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Dependencies</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -440,7 +440,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-13</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-14</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index aefbf97..bc73b8a 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180613" />
+ <meta name="Date-Revision-yyyymmdd" content="20180614" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Reactor Dependency Convergence</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -1105,7 +1105,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-13</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-14</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 1e06ed6..4f98113 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180613" />
+ <meta name="Date-Revision-yyyymmdd" content="20180614" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Dependency Information</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -313,7 +313,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-13</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-14</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 0673694..028a76b 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180613" />
+ <meta name="Date-Revision-yyyymmdd" content="20180614" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Dependency Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -969,7 +969,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-13</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-14</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-frame.html b/devapidocs/allclasses-frame.html
index 780d07e..89619b2 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -600,6 +600,7 @@
<li><a href="org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html" title="enum in org.apache.hadoop.hbase.io.compress" target="classFrame">Compression.Algorithm</a></li>
<li><a href="org/apache/hadoop/hbase/io/compress/Compression.FinishOnFlushCompressionStream.html" title="class in org.apache.hadoop.hbase.io.compress" target="classFrame">Compression.FinishOnFlushCompressionStream</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">CompressionContext</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">CompressionContext.DictionaryIndex</a></li>
<li><a href="org/apache/hadoop/hbase/io/encoding/CompressionState.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">CompressionState</a></li>
<li><a href="org/apache/hadoop/hbase/util/CompressionTest.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">CompressionTest</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/wal/Compressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">Compressor</a></li>
@@ -2876,6 +2877,9 @@
<li><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCellCodec.CompressedKvDecoder</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCellCodec.CompressedKvEncoder</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCellCodec.EnsureKvEncoder</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCellCodec.NoneCompressor</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCellCodec.NoneUncompressor</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">WALCellCodec.StatelessUncompressor</a></li>
<li><a href="org/apache/hadoop/hbase/replication/WALCellFilter.html" title="interface in org.apache.hadoop.hbase.replication" target="classFrame"><span class="interfaceName">WALCellFilter</span></a></li>
<li><a href="org/apache/hadoop/hbase/coprocessor/WALCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor" target="classFrame"><span class="interfaceName">WALCoprocessor</span></a></li>
<li><a href="org/apache/hadoop/hbase/coprocessor/WALCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor" target="classFrame"><span class="interfaceName">WALCoprocessorEnvironment</span></a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index c6305d4..8dbf863 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -600,6 +600,7 @@
<li><a href="org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html" title="enum in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a></li>
<li><a href="org/apache/hadoop/hbase/io/compress/Compression.FinishOnFlushCompressionStream.html" title="class in org.apache.hadoop.hbase.io.compress">Compression.FinishOnFlushCompressionStream</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a></li>
<li><a href="org/apache/hadoop/hbase/io/encoding/CompressionState.html" title="class in org.apache.hadoop.hbase.io.encoding">CompressionState</a></li>
<li><a href="org/apache/hadoop/hbase/util/CompressionTest.html" title="class in org.apache.hadoop.hbase.util">CompressionTest</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/wal/Compressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">Compressor</a></li>
@@ -2876,6 +2877,9 @@
<li><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.CompressedKvDecoder</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.CompressedKvEncoder</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.EnsureKvEncoder</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneCompressor</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneUncompressor</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.StatelessUncompressor</a></li>
<li><a href="org/apache/hadoop/hbase/replication/WALCellFilter.html" title="interface in org.apache.hadoop.hbase.replication"><span class="interfaceName">WALCellFilter</span></a></li>
<li><a href="org/apache/hadoop/hbase/coprocessor/WALCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor"><span class="interfaceName">WALCoprocessor</span></a></li>
<li><a href="org/apache/hadoop/hbase/coprocessor/WALCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor"><span class="interfaceName">WALCoprocessorEnvironment</span></a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 4797ecb..55f4f94 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3768,21 +3768,21 @@
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Wed Jun 13 14:39:52 UTC 2018"</code></td>
+<td class="colLast"><code>"Thu Jun 14 22:13:02 UTC 2018"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"ec66434380aee62289ccf7b173d765bbe7083718"</code></td>
+<td class="colLast"><code>"0b28155d274910b4e667b949d51f78809a1eff0b"</code></td>
</tr>
<tr class="altColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"f82b1195e42117413b37d2d6088772bd"</code></td>
+<td class="colLast"><code>"241d3c5d4e507f803723d87043bf1d28"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
@@ -3944,47 +3944,75 @@
<td class="colLast"><code>"mapreduce.job.name"</code></td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC">
+<!-- -->
+</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_BACKUP_LIST_DESC">OPTION_BACKUP_LIST_DESC</a></code></td>
+<td class="colLast"><code>"Backup ids list, comma-separated."</code></td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_BANDWIDTH">OPTION_BANDWIDTH</a></code></td>
<td class="colLast"><code>"b"</code></td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_BANDWIDTH_DESC">OPTION_BANDWIDTH_DESC</a></code></td>
<td class="colLast"><code>"Bandwidth per task (MapReduce task) in MB/s"</code></td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_CHECK">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_CHECK">OPTION_CHECK</a></code></td>
<td class="colLast"><code>"c"</code></td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_CHECK_DESC">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_CHECK_DESC">OPTION_CHECK_DESC</a></code></td>
<td class="colLast"><code>"Check restore sequence and dependencies only (does not execute the command)"</code></td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_DEBUG">OPTION_DEBUG</a></code></td>
<td class="colLast"><code>"d"</code></td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_DEBUG_DESC">OPTION_DEBUG_DESC</a></code></td>
<td class="colLast"><code>"Enable debug loggings"</code></td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP">
+<!-- -->
+</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_KEEP">OPTION_KEEP</a></code></td>
+<td class="colLast"><code>"k"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC">
+<!-- -->
+</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_KEEP_DESC">OPTION_KEEP_DESC</a></code></td>
+<td class="colLast"><code>"Specifies maximum age of backup (in days) to keep during bulk delete"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST">
+<!-- -->
+</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_LIST">OPTION_LIST</a></code></td>
+<td class="colLast"><code>"l"</code></td>
+</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_OVERWRITE">
<!-- -->
@@ -4070,76 +4098,69 @@
<td class="colLast"><code>"Table name. If specified, only backup images, which contain this table will be listed."</code></td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST">
-<!-- -->
-</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_TABLE_LIST">OPTION_TABLE_LIST</a></code></td>
-<td class="colLast"><code>"l"</code></td>
-</tr>
-<tr class="altColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_TABLE_LIST_DESC">OPTION_TABLE_LIST_DESC</a></code></td>
<td class="colLast"><code>"Table name list, comma-separated."</code></td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_MAPPING">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_TABLE_MAPPING">OPTION_TABLE_MAPPING</a></code></td>
<td class="colLast"><code>"m"</code></td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_MAPPING_DESC">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_TABLE_MAPPING_DESC">OPTION_TABLE_MAPPING_DESC</a></code></td>
<td class="colLast"><code>"A comma separated list of target tables. If specified, each table in <tables> must have a mapping"</code></td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_WORKERS">OPTION_WORKERS</a></code></td>
<td class="colLast"><code>"w"</code></td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_WORKERS_DESC">OPTION_WORKERS_DESC</a></code></td>
<td class="colLast"><code>"Number of parallel MapReduce tasks to execute"</code></td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_YARN_QUEUE_NAME">OPTION_YARN_QUEUE_NAME</a></code></td>
<td class="colLast"><code>"q"</code></td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_YARN_QUEUE_NAME_DESC">OPTION_YARN_QUEUE_NAME_DESC</a></code></td>
<td class="colLast"><code>"Yarn queue name to run backup create command on"</code></td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_RESTORE_DESC">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_YARN_QUEUE_NAME_RESTORE_DESC">OPTION_YARN_QUEUE_NAME_RESTORE_DESC</a></code></td>
<td class="colLast"><code>"Yarn queue name to run backup restore command on"</code></td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#TABLENAME_DELIMITER_IN_COMMAND">TABLENAME_DELIMITER_IN_COMMAND</a></code></td>
<td class="colLast"><code>","</code></td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.BackupRestoreConstants.VERIFY_BACKUP">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
@@ -4323,7 +4344,7 @@
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/backup/impl/BackupCommands.html#DELETE_CMD_USAGE">DELETE_CMD_USAGE</a></code></td>
-<td class="colLast"><code>"Usage: hbase backup delete <backup_id>\n backup_id Backup image id\n"</code></td>
+<td class="colLast"><code>"Usage: hbase backup delete [options]"</code></td>
</tr>
<tr class="altColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.backup.impl.BackupCommands.DESCRIBE_CMD_USAGE">
[13/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
index 83c17c0..9df0225 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
@@ -54,323 +54,362 @@
<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> */<a name="line.57"></a>
-<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
-<span class="sourceLineNo">059</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
-<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
-<span class="sourceLineNo">061</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
-<span class="sourceLineNo">062</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span> protected final CompressionContext compression;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> protected final ByteStringUncompressor statelessUncompressor = new ByteStringUncompressor() {<a name="line.65"></a>
-<span class="sourceLineNo">066</span> @Override<a name="line.66"></a>
-<span class="sourceLineNo">067</span> public byte[] uncompress(ByteString data, Dictionary dict) throws IOException {<a name="line.67"></a>
-<span class="sourceLineNo">068</span> return WALCellCodec.uncompressByteString(data, dict);<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><a name="line.71"></a>
-<span class="sourceLineNo">072</span> /**<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.73"></a>
-<span class="sourceLineNo">074</span> */<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public WALCellCodec() {<a name="line.75"></a>
-<span class="sourceLineNo">076</span> this.compression = null;<a name="line.76"></a>
-<span class="sourceLineNo">077</span> }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span> /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.80"></a>
-<span class="sourceLineNo">081</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * @param conf configuration to configure <tt>this</tt><a name="line.82"></a>
-<span class="sourceLineNo">083</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * compression<a name="line.84"></a>
-<span class="sourceLineNo">085</span> */<a name="line.85"></a>
-<span class="sourceLineNo">086</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.86"></a>
-<span class="sourceLineNo">087</span> this.compression = compression;<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 String getWALCellCodecClass(Configuration conf) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * Fully prepares the codec for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * uses a {@link WALCellCodec}.<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * @param cellCodecClsName name of codec<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * @param compression compression the codec should use<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * @return a {@link WALCellCodec} ready for use.<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.104"></a>
-<span class="sourceLineNo">105</span> */<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.107"></a>
-<span class="sourceLineNo">108</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> if (cellCodecClsName == null) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.112"></a>
-<span class="sourceLineNo">113</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.113"></a>
-<span class="sourceLineNo">114</span> }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> /**<a name="line.116"></a>
-<span class="sourceLineNo">117</span> * Create and setup a {@link WALCellCodec} from the<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * CompressionContext.<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * Fully prepares the codec for use.<a name="line.120"></a>
-<span class="sourceLineNo">121</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * uses a {@link WALCellCodec}.<a name="line.122"></a>
-<span class="sourceLineNo">123</span> * @param compression compression the codec should use<a name="line.123"></a>
-<span class="sourceLineNo">124</span> * @return a {@link WALCellCodec} ready for use.<a name="line.124"></a>
-<span class="sourceLineNo">125</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.125"></a>
-<span class="sourceLineNo">126</span> */<a name="line.126"></a>
-<span class="sourceLineNo">127</span> public static WALCellCodec create(Configuration conf,<a name="line.127"></a>
-<span class="sourceLineNo">128</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.128"></a>
-<span class="sourceLineNo">129</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.129"></a>
-<span class="sourceLineNo">130</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.130"></a>
-<span class="sourceLineNo">131</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span> public interface ByteStringCompressor {<a name="line.134"></a>
-<span class="sourceLineNo">135</span> ByteString compress(byte[] data, Dictionary dict) throws IOException;<a name="line.135"></a>
-<span class="sourceLineNo">136</span> }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span> public interface ByteStringUncompressor {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> byte[] uncompress(ByteString data, Dictionary dict) throws IOException;<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> // TODO: it sucks that compression context is in WAL.Entry. It'd be nice if it was here.<a name="line.142"></a>
-<span class="sourceLineNo">143</span> // Dictionary could be gotten by enum; initially, based on enum, context would create<a name="line.143"></a>
-<span class="sourceLineNo">144</span> // an array of dictionaries.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> public ByteString toByteString() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.147"></a>
-<span class="sourceLineNo">148</span> // them.<a name="line.148"></a>
-<span class="sourceLineNo">149</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.149"></a>
-<span class="sourceLineNo">150</span> }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> @Override<a name="line.152"></a>
-<span class="sourceLineNo">153</span> public ByteString compress(byte[] data, Dictionary dict) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span> writeCompressed(data, dict);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.155"></a>
-<span class="sourceLineNo">156</span> // them.<a name="line.156"></a>
-<span class="sourceLineNo">157</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.157"></a>
-<span class="sourceLineNo">158</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.158"></a>
-<span class="sourceLineNo">159</span> return result;<a name="line.159"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
+<span class="sourceLineNo">060</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
+<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
+<span class="sourceLineNo">062</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
+<span class="sourceLineNo">063</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span> protected final CompressionContext compression;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.68"></a>
+<span class="sourceLineNo">069</span> */<a name="line.69"></a>
+<span class="sourceLineNo">070</span> public WALCellCodec() {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> this.compression = null;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<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> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.75"></a>
+<span class="sourceLineNo">076</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * @param conf configuration to configure <tt>this</tt><a name="line.77"></a>
+<span class="sourceLineNo">078</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * compression<a name="line.79"></a>
+<span class="sourceLineNo">080</span> */<a name="line.80"></a>
+<span class="sourceLineNo">081</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span> this.compression = compression;<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 getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * Fully prepares the codec for use.<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * uses a {@link WALCellCodec}.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * @param cellCodecClsName name of codec<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * @param compression compression the codec should use<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.99"></a>
+<span class="sourceLineNo">100</span> */<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
+<span class="sourceLineNo">103</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span> if (cellCodecClsName == null) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
+<span class="sourceLineNo">106</span> }<a name="line.106"></a>
+<span class="sourceLineNo">107</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
+<span class="sourceLineNo">108</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * CompressionContext.<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * Fully prepares the codec for use.<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * uses a {@link WALCellCodec}.<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * @param compression compression the codec should use<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
+<span class="sourceLineNo">121</span> */<a name="line.121"></a>
+<span class="sourceLineNo">122</span> public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
+<span class="sourceLineNo">123</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
+<span class="sourceLineNo">125</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
+<span class="sourceLineNo">126</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> public interface ByteStringCompressor {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> ByteString compress(byte[] data, Enum dictIndex) throws IOException;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> public interface ByteStringUncompressor {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span> static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> CompressionContext compressionContext;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> this.compressionContext = compressionContext;<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> @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span> public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> private CompressionContext compressionContext;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> this.compressionContext = compressionContext;<a name="line.154"></a>
+<span class="sourceLineNo">155</span> }<a name="line.155"></a>
+<span class="sourceLineNo">156</span> public ByteString toByteString() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
+<span class="sourceLineNo">158</span> // them.<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
<span class="sourceLineNo">160</span> }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span> private void writeCompressed(byte[] data, Dictionary dict) throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span> assert dict != null;<a name="line.163"></a>
-<span class="sourceLineNo">164</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.164"></a>
-<span class="sourceLineNo">165</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.166"></a>
-<span class="sourceLineNo">167</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> write(data, 0, data.length);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> } else {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> StreamUtils.writeShort(this, dictIdx);<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> }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.175"></a>
-<span class="sourceLineNo">176</span> InputStream in = bs.newInput();<a name="line.176"></a>
-<span class="sourceLineNo">177</span> byte status = (byte)in.read();<a name="line.177"></a>
-<span class="sourceLineNo">178</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.179"></a>
-<span class="sourceLineNo">180</span> int bytesRead = in.read(arr);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> if (bytesRead != arr.length) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.184"></a>
-<span class="sourceLineNo">185</span> return arr;<a name="line.185"></a>
-<span class="sourceLineNo">186</span> } else {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.187"></a>
-<span class="sourceLineNo">188</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.188"></a>
-<span class="sourceLineNo">189</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.189"></a>
-<span class="sourceLineNo">190</span> if (entry == null) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.191"></a>
-<span class="sourceLineNo">192</span> }<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return entry;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.197"></a>
-<span class="sourceLineNo">198</span> private final CompressionContext compression;<a name="line.198"></a>
-<span class="sourceLineNo">199</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> super(out);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> this.compression = compression;<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> @Override<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public void write(Cell cell) throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> // We first write the KeyValue infrastructure as VInts.<a name="line.206"></a>
-<span class="sourceLineNo">207</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.207"></a>
-<span class="sourceLineNo">208</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.208"></a>
-<span class="sourceLineNo">209</span> // To support tags<a name="line.209"></a>
-<span class="sourceLineNo">210</span> int tagsLength = cell.getTagsLength();<a name="line.210"></a>
-<span class="sourceLineNo">211</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.211"></a>
-<span class="sourceLineNo">212</span> PrivateCellUtil.compressRow(out, cell, compression.rowDict);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> PrivateCellUtil.compressFamily(out, cell, compression.familyDict);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> PrivateCellUtil.compressQualifier(out, cell, compression.qualifierDict);<a name="line.214"></a>
-<span class="sourceLineNo">215</span> // Write timestamp, type and value as uncompressed.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.216"></a>
-<span class="sourceLineNo">217</span> out.write(cell.getTypeByte());<a name="line.217"></a>
-<span class="sourceLineNo">218</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.218"></a>
-<span class="sourceLineNo">219</span> if (tagsLength > 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span> if (compression.tagCompressionContext != null) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span> // Write tags using Dictionary compression<a name="line.221"></a>
-<span class="sourceLineNo">222</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.222"></a>
-<span class="sourceLineNo">223</span> } else {<a name="line.223"></a>
-<span class="sourceLineNo">224</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.224"></a>
-<span class="sourceLineNo">225</span> // it is.<a name="line.225"></a>
-<span class="sourceLineNo">226</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.226"></a>
-<span class="sourceLineNo">227</span> }<a name="line.227"></a>
-<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span> public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> writeCompressed(data, dictIndex);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
+<span class="sourceLineNo">166</span> // them.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
+<span class="sourceLineNo">168</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> return result;<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> private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> assert dict != null;<a name="line.174"></a>
+<span class="sourceLineNo">175</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> write(data, 0, data.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> }<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> }<a name="line.191"></a>
+<span class="sourceLineNo">192</span> }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span> static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span> @Override<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> return data.toByteArray();<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span> }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> InputStream in = bs.newInput();<a name="line.203"></a>
+<span class="sourceLineNo">204</span> byte status = (byte)in.read();<a name="line.204"></a>
+<span class="sourceLineNo">205</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
+<span class="sourceLineNo">207</span> int bytesRead = in.read(arr);<a name="line.207"></a>
+<span class="sourceLineNo">208</span> if (bytesRead != arr.length) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
+<span class="sourceLineNo">212</span> return arr;<a name="line.212"></a>
+<span class="sourceLineNo">213</span> } else {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
+<span class="sourceLineNo">216</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
+<span class="sourceLineNo">217</span> if (entry == null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> }<a name="line.219"></a>
+<span class="sourceLineNo">220</span> return entry;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> private final CompressionContext compression;<a name="line.225"></a>
+<span class="sourceLineNo">226</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> super(out);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> this.compression = compression;<a name="line.228"></a>
<span class="sourceLineNo">229</span> }<a name="line.229"></a>
-<span class="sourceLineNo">230</span> }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.232"></a>
-<span class="sourceLineNo">233</span> private final CompressionContext compression;<a name="line.233"></a>
-<span class="sourceLineNo">234</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> super(in);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> this.compression = compression;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> }<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span> @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span> protected Cell parseCell() throws IOException {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.241"></a>
-<span class="sourceLineNo">242</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> int length = 0;<a name="line.245"></a>
-<span class="sourceLineNo">246</span> if(tagsLength == 0) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.247"></a>
-<span class="sourceLineNo">248</span> } else {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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> byte[] backingArray = new byte[length];<a name="line.252"></a>
-<span class="sourceLineNo">253</span> int pos = 0;<a name="line.253"></a>
-<span class="sourceLineNo">254</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span> // the row<a name="line.257"></a>
-<span class="sourceLineNo">258</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT, compression.rowDict);<a name="line.258"></a>
-<span class="sourceLineNo">259</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.259"></a>
-<span class="sourceLineNo">260</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.260"></a>
-<span class="sourceLineNo">261</span> pos += elemLen;<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> // family<a name="line.263"></a>
-<span class="sourceLineNo">264</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE, compression.familyDict);<a name="line.264"></a>
-<span class="sourceLineNo">265</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> pos += elemLen;<a name="line.267"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span> public void write(Cell cell) throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
+<span class="sourceLineNo">235</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
+<span class="sourceLineNo">236</span> // To support tags<a name="line.236"></a>
+<span class="sourceLineNo">237</span> int tagsLength = cell.getTagsLength();<a name="line.237"></a>
+<span class="sourceLineNo">238</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
+<span class="sourceLineNo">240</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
+<span class="sourceLineNo">241</span> PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
+<span class="sourceLineNo">242</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
+<span class="sourceLineNo">243</span> PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
+<span class="sourceLineNo">244</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
+<span class="sourceLineNo">245</span> // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
+<span class="sourceLineNo">246</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
+<span class="sourceLineNo">247</span> out.write(cell.getTypeByte());<a name="line.247"></a>
+<span class="sourceLineNo">248</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
+<span class="sourceLineNo">249</span> if (tagsLength > 0) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> if (compression.tagCompressionContext != null) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span> // Write tags using Dictionary compression<a name="line.251"></a>
+<span class="sourceLineNo">252</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> } else {<a name="line.253"></a>
+<span class="sourceLineNo">254</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
+<span class="sourceLineNo">255</span> // it is.<a name="line.255"></a>
+<span class="sourceLineNo">256</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
+<span class="sourceLineNo">257</span> }<a name="line.257"></a>
+<span class="sourceLineNo">258</span> }<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private final CompressionContext compression;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span> super(in);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.compression = compression;<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span> // qualifier<a name="line.269"></a>
-<span class="sourceLineNo">270</span> elemLen = readIntoArray(backingArray, pos, compression.qualifierDict);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> pos += elemLen;<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // timestamp, type and value<a name="line.273"></a>
-<span class="sourceLineNo">274</span> int tsTypeValLen = length - pos;<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (tagsLength > 0) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.276"></a>
-<span class="sourceLineNo">277</span> }<a name="line.277"></a>
-<span class="sourceLineNo">278</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.278"></a>
-<span class="sourceLineNo">279</span> pos += tsTypeValLen;<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span> // tags<a name="line.281"></a>
-<span class="sourceLineNo">282</span> if (tagsLength > 0) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.283"></a>
-<span class="sourceLineNo">284</span> if (compression.tagCompressionContext != null) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> } else {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span> }<a name="line.289"></a>
-<span class="sourceLineNo">290</span> return new KeyValue(backingArray, 0, length);<a name="line.290"></a>
-<span class="sourceLineNo">291</span> }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> byte status = (byte)in.read();<a name="line.294"></a>
-<span class="sourceLineNo">295</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span> // status byte indicating that data to be read is not in dictionary.<a name="line.296"></a>
-<span class="sourceLineNo">297</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> int length = StreamUtils.readRawVarint32(in);<a name="line.298"></a>
-<span class="sourceLineNo">299</span> IOUtils.readFully(in, to, offset, length);<a name="line.299"></a>
-<span class="sourceLineNo">300</span> dict.addEntry(to, offset, length);<a name="line.300"></a>
-<span class="sourceLineNo">301</span> return length;<a name="line.301"></a>
-<span class="sourceLineNo">302</span> } else {<a name="line.302"></a>
-<span class="sourceLineNo">303</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.303"></a>
-<span class="sourceLineNo">304</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.304"></a>
-<span class="sourceLineNo">305</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.305"></a>
-<span class="sourceLineNo">306</span> if (entry == null) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span> // now we write the uncompressed value.<a name="line.309"></a>
-<span class="sourceLineNo">310</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> return entry.length;<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span> }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private static void checkLength(int len, int max) throws IOException {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> if (len < 0 || len > max) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> }<a name="line.319"></a>
-<span class="sourceLineNo">320</span> }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.322"></a>
-<span class="sourceLineNo">323</span> public EnsureKvEncoder(OutputStream out) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> super(out);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> @Override<a name="line.326"></a>
-<span class="sourceLineNo">327</span> public void write(Cell cell) throws IOException {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> checkFlushed();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> // Make sure to write tags into WAL<a name="line.329"></a>
-<span class="sourceLineNo">330</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.330"></a>
-<span class="sourceLineNo">331</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> @Override<a name="line.335"></a>
-<span class="sourceLineNo">336</span> public Decoder getDecoder(InputStream is) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span> return (compression == null)<a name="line.337"></a>
-<span class="sourceLineNo">338</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.338"></a>
-<span class="sourceLineNo">339</span> }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span> @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> return getDecoder(new ByteBuffInputStream(buf));<a name="line.343"></a>
-<span class="sourceLineNo">344</span> }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span> public Encoder getEncoder(OutputStream os) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.348"></a>
-<span class="sourceLineNo">349</span> : new ByteBufferWriterOutputStream(os);<a name="line.349"></a>
-<span class="sourceLineNo">350</span> if (compression == null) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span> return new EnsureKvEncoder(os);<a name="line.351"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> protected Cell parseCell() throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
+<span class="sourceLineNo">275</span> int length = 0;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> if(tagsLength == 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span> byte[] backingArray = new byte[length];<a name="line.282"></a>
+<span class="sourceLineNo">283</span> int pos = 0;<a name="line.283"></a>
+<span class="sourceLineNo">284</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> // the row<a name="line.287"></a>
+<span class="sourceLineNo">288</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
+<span class="sourceLineNo">289</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
+<span class="sourceLineNo">290</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
+<span class="sourceLineNo">292</span> pos += elemLen;<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span> // family<a name="line.294"></a>
+<span class="sourceLineNo">295</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
+<span class="sourceLineNo">296</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
+<span class="sourceLineNo">297</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> pos += elemLen;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // qualifier<a name="line.301"></a>
+<span class="sourceLineNo">302</span> elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
+<span class="sourceLineNo">303</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
+<span class="sourceLineNo">304</span> pos += elemLen;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span> // timestamp, type and value<a name="line.306"></a>
+<span class="sourceLineNo">307</span> int tsTypeValLen = length - pos;<a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (tagsLength > 0) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
+<span class="sourceLineNo">310</span> }<a name="line.310"></a>
+<span class="sourceLineNo">311</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> pos += tsTypeValLen;<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span> // tags<a name="line.314"></a>
+<span class="sourceLineNo">315</span> if (tagsLength > 0) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> if (compression.tagCompressionContext != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> byte status = (byte)in.read();<a name="line.327"></a>
+<span class="sourceLineNo">328</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
+<span class="sourceLineNo">331</span> int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span> dict.addEntry(to, offset, length);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> return length;<a name="line.334"></a>
+<span class="sourceLineNo">335</span> } else {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
+<span class="sourceLineNo">337</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
+<span class="sourceLineNo">338</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (entry == null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> // now we write the uncompressed value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> return entry.length;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> }<a name="line.345"></a>
+<span class="sourceLineNo">346</span> }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span> private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> if (len < 0 || len > max) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span> }<a name="line.352"></a>
-<span class="sourceLineNo">353</span> return new CompressedKvEncoder(os, compression);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.357"></a>
-<span class="sourceLineNo">358</span> return new BaosAndCompressor();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> // TODO: ideally this should also encapsulate compressionContext<a name="line.362"></a>
-<span class="sourceLineNo">363</span> return this.statelessUncompressor;<a name="line.363"></a>
-<span class="sourceLineNo">364</span> }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>}<a name="line.365"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span> super(out);<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span> @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span> public void write(Cell cell) throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> checkFlushed();<a name="line.361"></a>
+<span class="sourceLineNo">362</span> // Make sure to write tags into WAL<a name="line.362"></a>
+<span class="sourceLineNo">363</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
+<span class="sourceLineNo">364</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span> @Override<a name="line.368"></a>
+<span class="sourceLineNo">369</span> public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> return (compression == null)<a name="line.370"></a>
+<span class="sourceLineNo">371</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return getDecoder(new ByteBuffInputStream(buf));<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> @Override<a name="line.379"></a>
+<span class="sourceLineNo">380</span> public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
+<span class="sourceLineNo">382</span> : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
+<span class="sourceLineNo">383</span> if (compression == null) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> return new EnsureKvEncoder(os);<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span> return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> return new BaosAndCompressor(compression);<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span> return new StatelessUncompressor(compression);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span> public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return new NoneCompressor();<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> return new NoneUncompressor();<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>}<a name="line.404"></a>
[48/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index a794ddf..b54d12f 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -5362,7 +5362,7 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/CellBlockBuilder.ByteBufferOutputStreamSupplier.html#baos">baos</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/CellBlockBuilder.ByteBufferOutputStreamSupplier.html" title="class in org.apache.hadoop.hbase.ipc">CellBlockBuilder.ByteBufferOutputStreamSupplier</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#BaosAndCompressor--">BaosAndCompressor()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.BaosAndCompressor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#BaosAndCompressor-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">BaosAndCompressor(CompressionContext)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.BaosAndCompressor</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.html#baosInMemory">baosInMemory</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlock.Writer</a></dt>
<dd>
@@ -15665,9 +15665,11 @@
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/CompoundConfiguration.ImmutableConfWrapper.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">CompoundConfiguration.ImmutableConfWrapper</span></a> - Class in <a href="org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#compress-byte:A-org.apache.hadoop.hbase.io.util.Dictionary-">compress(byte[], Dictionary)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.BaosAndCompressor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#compress-byte:A-java.lang.Enum-">compress(byte[], Enum)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.BaosAndCompressor</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html#compress-byte:A-org.apache.hadoop.hbase.io.util.Dictionary-">compress(byte[], Dictionary)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html#compress-byte:A-java.lang.Enum-">compress(byte[], Enum)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html#compress-byte:A-java.lang.Enum-">compress(byte[], Enum)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneCompressor</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/filter/GZIPResponseWrapper.html#compress">compress</a></span> - Variable in class org.apache.hadoop.hbase.rest.filter.<a href="org/apache/hadoop/hbase/rest/filter/GZIPResponseWrapper.html" title="class in org.apache.hadoop.hbase.rest.filter">GZIPResponseWrapper</a></dt>
<dd> </dd>
@@ -15775,7 +15777,11 @@
<dd>
<div class="block">Compression context to use reading.</div>
</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/WALKeyImpl.html#compressionContext">compressionContext</a></span> - Variable in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#compressionContext">compressionContext</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.BaosAndCompressor</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#compressionContext">compressionContext</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.StatelessUncompressor</a></dt>
+<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a> - Enum in <a href="org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.html#compressionDetails">compressionDetails</a></span> - Static variable in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.html" title="class in org.apache.hadoop.hbase.mapreduce">HFileOutputFormat2</a></dt>
<dd>
@@ -17500,6 +17506,8 @@
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#convertThrowableToIOE-java.lang.Throwable-java.lang.String-">convertThrowableToIOE(Throwable, String)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#convertToBackupIds-java.util.List-">convertToBackupIds(List<BackupInfo>)</a></span> - Method in class org.apache.hadoop.hbase.backup.impl.<a href="org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.DeleteCommand</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/RegionSplitter.NumberStringSplit.html#convertToBigInteger-byte:A-">convertToBigInteger(byte[])</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/RegionSplitter.NumberStringSplit.html" title="class in org.apache.hadoop.hbase.util">RegionSplitter.NumberStringSplit</a></dt>
<dd>
<div class="block">Returns the BigInteger represented by the byte array</div>
@@ -20576,7 +20584,8 @@
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/HMaster.html#createServerManager-org.apache.hadoop.hbase.master.MasterServices-">createServerManager(MasterServices)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></dt>
<dd>
-<div class="block">Create a <a href="org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.</div>
+<div class="block">
+ Create a <a href="org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.</div>
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/SslRMIServerSocketFactorySecure.html#createServerSocket-int-">createServerSocket(int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/SslRMIServerSocketFactorySecure.html" title="class in org.apache.hadoop.hbase">SslRMIServerSocketFactorySecure</a></dt>
<dd> </dd>
@@ -25283,12 +25292,16 @@
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSHDFSUtils.html#dfsUtilClazz">dfsUtilClazz</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSHDFSUtils.html" title="class in org.apache.hadoop.hbase.util">FSHDFSUtils</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#dictionaries">dictionaries</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util"><span class="typeNameLink">Dictionary</span></a> - Interface in <a href="org/apache/hadoop/hbase/io/util/package-summary.html">org.apache.hadoop.hbase.io.util</a></dt>
<dd>
<div class="block">Dictionary interface
Dictionary indexes should be either bytes or shorts, only positive.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#DictionaryIndex--">DictionaryIndex()</a></span> - Constructor for enum org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/FastFailInterceptorContext.html#didTry">didTry</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/FastFailInterceptorContext.html" title="class in org.apache.hadoop.hbase.client">FastFailInterceptorContext</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/FastFailInterceptorContext.html#didTry--">didTry()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/FastFailInterceptorContext.html" title="class in org.apache.hadoop.hbase.client">FastFailInterceptorContext</a></dt>
@@ -29071,6 +29084,10 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/SequentialProcedure.html#executed">executed</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/SequentialProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">SequentialProcedure</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#executeDeleteListOfBackups-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">executeDeleteListOfBackups(CommandLine)</a></span> - Method in class org.apache.hadoop.hbase.backup.impl.<a href="org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.DeleteCommand</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html#executeDeleteOlderThan-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">executeDeleteOlderThan(CommandLine)</a></span> - Method in class org.apache.hadoop.hbase.backup.impl.<a href="org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupCommands.DeleteCommand</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/BufferedMutatorImpl.html#executedWriteBufferPeriodicFlushes">executedWriteBufferPeriodicFlushes</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/BufferedMutatorImpl.html" title="class in org.apache.hadoop.hbase.client">BufferedMutatorImpl</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.GCMergedRegionsState-">executeFromState(MasterProcedureEnv, MasterProcedureProtos.GCMergedRegionsState)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">GCMergedRegionsProcedure</a></dt>
@@ -29173,6 +29190,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#executor">executor</a></span> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html" title="class in org.apache.hadoop.hbase.master.balancer">RegionLocationFinder</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html#executor">executor</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/metrics/impl/GlobalMetricRegistriesAdapter.html#executor">executor</a></span> - Variable in class org.apache.hadoop.hbase.metrics.impl.<a href="org/apache/hadoop/hbase/metrics/impl/GlobalMetricRegistriesAdapter.html" title="class in org.apache.hadoop.hbase.metrics.impl">GlobalMetricRegistriesAdapter</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure/flush/RegionServerFlushTableProcedureManager.FlushTableSubprocedurePool.html#executor">executor</a></span> - Variable in class org.apache.hadoop.hbase.procedure.flush.<a href="org/apache/hadoop/hbase/procedure/flush/RegionServerFlushTableProcedureManager.FlushTableSubprocedurePool.html" title="class in org.apache.hadoop.hbase.procedure.flush">RegionServerFlushTableProcedureManager.FlushTableSubprocedurePool</a></dt>
@@ -30022,8 +30041,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotManifestV2.ManifestBuilder.html#familyClose-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest.Builder-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest.FamilyFiles.Builder-">familyClose(SnapshotProtos.SnapshotRegionManifest.Builder, SnapshotProtos.SnapshotRegionManifest.FamilyFiles.Builder)</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotManifestV2.ManifestBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifestV2.ManifestBuilder</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#familyDict">familyDict</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.FamilyDirFilter.html#FamilyDirFilter-org.apache.hadoop.fs.FileSystem-">FamilyDirFilter(FileSystem)</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.FamilyDirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.FamilyDirFilter</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/filter/FamilyFilter.html" title="class in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FamilyFilter</span></a> - Class in <a href="org/apache/hadoop/hbase/filter/package-summary.html">org.apache.hadoop.hbase.filter</a></dt>
@@ -37939,6 +37956,8 @@
<dd>
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#getDictionary-java.lang.Enum-">getDictionary(Enum)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html#getDifferentFavoredNode-org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster-java.util.List-int-">getDifferentFavoredNode(BaseLoadBalancer.Cluster, List<ServerName>, int)</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html" title="class in org.apache.hadoop.hbase.master.balancer">FavoredStochasticBalancer.FavoredNodeLocalityPicker</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/DirectMemoryUtils.html#getDirectMemorySize--">getDirectMemorySize()</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/DirectMemoryUtils.html" title="class in org.apache.hadoop.hbase.util">DirectMemoryUtils</a></dt>
@@ -39906,6 +39925,8 @@
<dd>
<div class="block">Returns the security configuration associated with the given service name.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/ServerManager.html#getInfoPort-org.apache.hadoop.hbase.ServerName-">getInfoPort(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/executor/EventHandler.html#getInformativeName--">getInformativeName()</a></span> - Method in class org.apache.hadoop.hbase.executor.<a href="org/apache/hadoop/hbase/executor/EventHandler.html" title="class in org.apache.hadoop.hbase.executor">EventHandler</a></dt>
<dd>
<div class="block">Event implementations should override thie class to provide an
@@ -43534,6 +43555,10 @@
<dd>
<div class="block">Only required for "old" log replay; if it's removed, remove this.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getNoneCompressor--">getNoneCompressor()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getNoneUncompressor--">getNoneUncompressor()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/AssignmentVerificationReport.html#getNonFavoredAssignedRegions--">getNonFavoredAssignedRegions()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/AssignmentVerificationReport.html" title="class in org.apache.hadoop.hbase.master">AssignmentVerificationReport</a></dt>
<dd>
<div class="block">Return the regions not assigned to its favored nodes</div>
@@ -44086,10 +44111,6 @@
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#getOnlineRS--">getOnlineRS()</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManagerImpl</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html#getOnlineServers--">getOnlineServers()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></dt>
-<dd>
-<div class="block">Gets the online servers.</div>
-</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/ServerManager.html#getOnlineServers--">getOnlineServers()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/Utility.html#getOnlineServers-org.apache.hadoop.hbase.master.MasterServices-">getOnlineServers(MasterServices)</a></span> - Static method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/Utility.html" title="class in org.apache.hadoop.hbase.rsgroup">Utility</a></dt>
@@ -46678,8 +46699,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/LocalHBaseCluster.html#getRegionServerImplementation-org.apache.hadoop.conf.Configuration-">getRegionServerImplementation(Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/LocalHBaseCluster.html" title="class in org.apache.hadoop.hbase">LocalHBaseCluster</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html#getRegionServerInfo-org.apache.hadoop.hbase.ServerName-">getRegionServerInfo(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/HMaster.html#getRegionServerInfoPort-org.apache.hadoop.hbase.ServerName-">getRegionServerInfoPort(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionServerMetrics--">getRegionServerMetrics()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
@@ -48567,6 +48586,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html#getServerImpl-org.apache.hadoop.conf.Configuration-">getServerImpl(Configuration)</a></span> - Static method in enum org.apache.hadoop.hbase.thrift.<a href="org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift">ThriftServerRunner.ImplType</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html#getServerInfo-java.lang.String-">getServerInfo(String)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getServerInfo-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest-">getServerInfo(RpcController, AdminProtos.GetServerInfoRequest)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a></dt>
<dd>
<div class="block">Get some information of the region server.</div>
@@ -60027,7 +60048,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/HMaster.html#initializeZKBasedSystemTrackers--">initializeZKBasedSystemTrackers()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></dt>
<dd>
-<div class="block">Initialize all ZK based system trackers.</div>
+<div class="block">
+ Initialize all ZK based system trackers.</div>
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#initializeZooKeeper--">initializeZooKeeper()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
<dd>
@@ -76634,8 +76656,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/ActiveMasterManager.html#nodeCreated-java.lang.String-">nodeCreated(String)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/ActiveMasterManager.html" title="class in org.apache.hadoop.hbase.master">ActiveMasterManager</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html#nodeCreated-java.lang.String-">nodeCreated(String)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.html#nodeCreated-java.lang.String-">nodeCreated(String)</a></span> - Method in class org.apache.hadoop.hbase.master.zksyncer.<a href="org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">ClientZKSyncer</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.OtherRegionServerWatcher.html#nodeCreated-java.lang.String-">nodeCreated(String)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.OtherRegionServerWatcher.html" title="class in org.apache.hadoop.hbase.replication">ReplicationTrackerZKImpl.OtherRegionServerWatcher</a></dt>
@@ -76692,8 +76712,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/DrainingServerTracker.html#nodeDeleted-java.lang.String-">nodeDeleted(String)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/DrainingServerTracker.html" title="class in org.apache.hadoop.hbase.master">DrainingServerTracker</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html#nodeDeleted-java.lang.String-">nodeDeleted(String)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.html#nodeDeleted-java.lang.String-">nodeDeleted(String)</a></span> - Method in class org.apache.hadoop.hbase.master.zksyncer.<a href="org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">ClientZKSyncer</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.OtherRegionServerWatcher.html#nodeDeleted-java.lang.String-">nodeDeleted(String)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.OtherRegionServerWatcher.html" title="class in org.apache.hadoop.hbase.replication">ReplicationTrackerZKImpl.OtherRegionServerWatcher</a></dt>
@@ -76862,12 +76880,16 @@
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/MunkresAssignment.html#NONE">NONE</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/MunkresAssignment.html" title="class in org.apache.hadoop.hbase.util">MunkresAssignment</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html#NoneCompressor--">NoneCompressor()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneCompressor</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/io/encoding/NoneEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding"><span class="typeNameLink">NoneEncoder</span></a> - Class in <a href="org/apache/hadoop/hbase/io/encoding/package-summary.html">org.apache.hadoop.hbase.io.encoding</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/encoding/NoneEncoder.html#NoneEncoder-java.io.DataOutputStream-org.apache.hadoop.hbase.io.encoding.HFileBlockDefaultEncodingContext-">NoneEncoder(DataOutputStream, HFileBlockDefaultEncodingContext)</a></span> - Constructor for class org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/NoneEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">NoneEncoder</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/NoOpDataBlockEncoder.NoneEncodingState.html#NoneEncodingState--">NoneEncodingState()</a></span> - Constructor for class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/NoOpDataBlockEncoder.NoneEncodingState.html" title="class in org.apache.hadoop.hbase.io.hfile">NoOpDataBlockEncoder.NoneEncodingState</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html#NoneUncompressor--">NoneUncompressor()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneUncompressor</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/AssignmentVerificationReport.html#nonFavoredAssignedRegionList">nonFavoredAssignedRegionList</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/AssignmentVerificationReport.html" title="class in org.apache.hadoop.hbase.master">AssignmentVerificationReport</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">NonLazyKeyValueScanner</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
@@ -78720,6 +78742,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html#option">option</a></span> - Variable in enum org.apache.hadoop.hbase.thrift.<a href="org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift">ThriftServerRunner.ImplType</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_BACKUP_LIST_DESC">OPTION_BACKUP_LIST_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html" title="interface in org.apache.hadoop.hbase.backup">BackupRestoreConstants</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_BANDWIDTH">OPTION_BANDWIDTH</a></span> - Static variable in interface org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html" title="interface in org.apache.hadoop.hbase.backup">BackupRestoreConstants</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_BANDWIDTH_DESC">OPTION_BANDWIDTH_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html" title="interface in org.apache.hadoop.hbase.backup">BackupRestoreConstants</a></dt>
@@ -78732,6 +78756,12 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_DEBUG_DESC">OPTION_DEBUG_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html" title="interface in org.apache.hadoop.hbase.backup">BackupRestoreConstants</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_KEEP">OPTION_KEEP</a></span> - Static variable in interface org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html" title="interface in org.apache.hadoop.hbase.backup">BackupRestoreConstants</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_KEEP_DESC">OPTION_KEEP_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html" title="interface in org.apache.hadoop.hbase.backup">BackupRestoreConstants</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_LIST">OPTION_LIST</a></span> - Static variable in interface org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html" title="interface in org.apache.hadoop.hbase.backup">BackupRestoreConstants</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_OVERWRITE">OPTION_OVERWRITE</a></span> - Static variable in interface org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html" title="interface in org.apache.hadoop.hbase.backup">BackupRestoreConstants</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_OVERWRITE_DESC">OPTION_OVERWRITE_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html" title="interface in org.apache.hadoop.hbase.backup">BackupRestoreConstants</a></dt>
@@ -78756,8 +78786,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_TABLE_DESC">OPTION_TABLE_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html" title="interface in org.apache.hadoop.hbase.backup">BackupRestoreConstants</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_TABLE_LIST">OPTION_TABLE_LIST</a></span> - Static variable in interface org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html" title="interface in org.apache.hadoop.hbase.backup">BackupRestoreConstants</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_TABLE_LIST_DESC">OPTION_TABLE_LIST_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html" title="interface in org.apache.hadoop.hbase.backup">BackupRestoreConstants</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html#OPTION_TABLE_MAPPING">OPTION_TABLE_MAPPING</a></span> - Static variable in interface org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRestoreConstants.html" title="interface in org.apache.hadoop.hbase.backup">BackupRestoreConstants</a></dt>
@@ -85991,8 +86019,6 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TableName.html#qualifierAsString">qualifierAsString</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#qualifierDict">qualifierDict</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></dt>
-<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/filter/QualifierFilter.html" title="class in org.apache.hadoop.hbase.filter"><span class="typeNameLink">QualifierFilter</span></a> - Class in <a href="org/apache/hadoop/hbase/filter/package-summary.html">org.apache.hadoop.hbase.filter</a></dt>
<dd>
<div class="block">This filter is used to filter based on the column qualifier.</div>
@@ -88060,7 +88086,7 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/ReflectionUtils.html#ReflectionUtils--">ReflectionUtils()</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ReflectionUtils.html" title="class in org.apache.hadoop.hbase.util">ReflectionUtils</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html#refresh-java.util.List-">refresh(List<String>)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html#refresh--">refresh()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html#refresh--">refresh()</a></span> - Method in interface org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a></dt>
<dd>
@@ -88605,8 +88631,6 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html#regionDeleteKey">regionDeleteKey</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionSourceImpl</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#regionDict">regionDict</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#regionDir">regionDir</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.RegionDirChecker.html#regionDir">regionDir</a></span> - Variable in class org.apache.hadoop.hbase.util.hbck.<a href="org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.RegionDirChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker.RegionDirChecker</a></dt>
@@ -89529,7 +89553,8 @@ service.</div>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionServerTracker</span></a> - Class in <a href="org/apache/hadoop/hbase/master/package-summary.html">org.apache.hadoop.hbase.master</a></dt>
<dd>
-<div class="block">Tracks the online region servers via ZK.</div>
+<div class="block">
+ Tracks the online region servers via ZK.</div>
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html#RegionServerTracker-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.hbase.master.MasterServices-org.apache.hadoop.hbase.master.ServerManager-">RegionServerTracker(ZKWatcher, MasterServices, ServerManager)</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></dt>
<dd> </dd>
@@ -90471,8 +90496,6 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/FairQueue.html#remove-org.apache.hadoop.hbase.master.procedure.Queue-">remove(Queue<T>)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/FairQueue.html" title="class in org.apache.hadoop.hbase.master.procedure">FairQueue</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html#remove-org.apache.hadoop.hbase.ServerName-">remove(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/metrics/impl/MetricRegistriesImpl.html#remove-org.apache.hadoop.hbase.metrics.MetricRegistryInfo-">remove(MetricRegistryInfo)</a></span> - Method in class org.apache.hadoop.hbase.metrics.impl.<a href="org/apache/hadoop/hbase/metrics/impl/MetricRegistriesImpl.html" title="class in org.apache.hadoop.hbase.metrics.impl">MetricRegistriesImpl</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/metrics/impl/MetricRegistryImpl.html#remove-java.lang.String-">remove(String)</a></span> - Method in class org.apache.hadoop.hbase.metrics.impl.<a href="org/apache/hadoop/hbase/metrics/impl/MetricRegistryImpl.html" title="class in org.apache.hadoop.hbase.metrics.impl">MetricRegistryImpl</a></dt>
@@ -94689,8 +94712,6 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.html#RowCounterMapper--">RowCounterMapper()</a></span> - Constructor for class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.html" title="class in org.apache.hadoop.hbase.mapreduce">RowCounter.RowCounterMapper</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#rowDict">rowDict</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/CatalogJanitor.SplitParentFirstComparator.html#rowEndKeyComparator">rowEndKeyComparator</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/CatalogJanitor.SplitParentFirstComparator.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor.SplitParentFirstComparator</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html#RowEndKeyComparator--">RowEndKeyComparator()</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html" title="class in org.apache.hadoop.hbase.util">Bytes.RowEndKeyComparator</a></dt>
@@ -98498,8 +98519,6 @@ service.</div>
<dd>
<div class="block">Constructor.</div>
</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/ServerManager.html#ServerManager-org.apache.hadoop.hbase.master.MasterServices-boolean-">ServerManager(MasterServices, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#serverManager">serverManager</a></span> - Variable in class org.apache.hadoop.hbase.tmpl.master.<a href="org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#serverManager">serverManager</a></span> - Variable in class org.apache.hadoop.hbase.tmpl.master.<a href="org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmplImpl</a></dt>
@@ -99622,12 +99641,6 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.html#setCompressionCodec-org.apache.hadoop.hbase.io.compress.Compression.Algorithm-">setCompressionCodec(Compression.Algorithm)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.html" title="class in org.apache.hadoop.hbase.io.hfile">FixedFileTrailer</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/WAL.Entry.html#setCompressionContext-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">setCompressionContext(CompressionContext)</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a></dt>
-<dd>
-<div class="block">Set compression context for this entry.</div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/WALKeyImpl.html#setCompressionContext-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">setCompressionContext(CompressionContext)</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.ModifyableColumnFamilyDescriptor.html#setCompressionType-org.apache.hadoop.hbase.io.compress.Compression.Algorithm-">setCompressionType(Compression.Algorithm)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.ModifyableColumnFamilyDescriptor.html" title="class in org.apache.hadoop.hbase.client">ColumnFamilyDescriptorBuilder.ModifyableColumnFamilyDescriptor</a></dt>
<dd>
<div class="block">Compression types supported in hbase.</div>
@@ -107073,7 +107086,8 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html#start--">start()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></dt>
<dd>
-<div class="block">Starts the tracking of online RegionServers.</div>
+<div class="block">
+ Starts the tracking of online RegionServers.</div>
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/SplitOrMergeTracker.html#start--">start()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master">SplitOrMergeTracker</a></dt>
<dd> </dd>
@@ -107763,7 +107777,7 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#stateFlow">stateFlow</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#statelessUncompressor">statelessUncompressor</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#StatelessUncompressor-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">StatelessUncompressor(CompressionContext)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.StatelessUncompressor</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure</span></a><<a href="org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="type parameter in StateMachineProcedure">TEnvironment</a>,<a href="org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="type parameter in StateMachineProcedure">TState</a>> - Class in <a href="org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></dt>
<dd>
@@ -108166,6 +108180,8 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.html#stop--">stop()</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.html" title="class in org.apache.hadoop.hbase.master.procedure">RSProcedureDispatcher</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html#stop--">stop()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/ServerManager.html#stop--">stop()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></dt>
<dd>
<div class="block">Stop the ServerManager.</div>
@@ -110037,8 +110053,6 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.TableInfo.html#tableDesctiptor">tableDesctiptor</a></span> - Variable in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.TableInfo.html" title="class in org.apache.hadoop.hbase.mapreduce">HFileOutputFormat2.TableInfo</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html#tableDict">tableDict</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#tableDir">tableDir</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#tableDir">tableDir</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot">RestoreSnapshotHelper</a></dt>
@@ -115094,7 +115108,11 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#uncleanlySkippedBytesKey">uncleanlySkippedBytesKey</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSourceImpl</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html#uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-org.apache.hadoop.hbase.io.util.Dictionary-">uncompress(ByteString, Dictionary)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html#uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-java.lang.Enum-">uncompress(ByteString, Enum)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html#uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-java.lang.Enum-">uncompress(ByteString, Enum)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.NoneUncompressor</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#uncompress-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-java.lang.Enum-">uncompress(ByteString, Enum)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.StatelessUncompressor</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#uncompressByteString-org.apache.hbase.thirdparty.com.google.protobuf.ByteString-org.apache.hadoop.hbase.io.util.Dictionary-">uncompressByteString(ByteString, Dictionary)</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a></dt>
<dd> </dd>
@@ -118131,6 +118149,10 @@ service.</div>
<dd>
<div class="block">Returns the enum constant of this type with the specified name.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#valueOf-java.lang.String-">valueOf(String)</a></span> - Static method in enum org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a></dt>
+<dd>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html#valueOf-java.lang.String-">valueOf(String)</a></span> - Static method in enum org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">ProtobufLogReader.WALHdrResult</a></dt>
<dd>
<div class="block">Returns the enum constant of this type with the specified name.</div>
@@ -118917,6 +118939,11 @@ the order they are declared.</div>
<div class="block">Returns an array containing the constants of this enum type, in
the order they are declared.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html#values--">values()</a></span> - Static method in enum org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">CompressionContext.DictionaryIndex</a></dt>
+<dd>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html#values--">values()</a></span> - Static method in enum org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">ProtobufLogReader.WALHdrResult</a></dt>
<dd>
<div class="block">Returns an array containing the constants of this enum type, in
@@ -120121,6 +120148,12 @@ the order they are declared.</div>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALCellCodec.EnsureKvEncoder</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a></dt>
<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALCellCodec.NoneCompressor</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a></dt>
+<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALCellCodec.NoneUncompressor</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a></dt>
+<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALCellCodec.StatelessUncompressor</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/replication/WALCellFilter.html" title="interface in org.apache.hadoop.hbase.replication"><span class="typeNameLink">WALCellFilter</span></a> - Interface in <a href="org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></dt>
<dd>
<div class="block">A filter for WAL entry cells before being sent over to replication.</div>
@@ -121447,7 +121480,7 @@ the order they are declared.</div>
<dd>
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#writeCompressed-byte:A-org.apache.hadoop.hbase.io.util.Dictionary-">writeCompressed(byte[], Dictionary)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.BaosAndCompressor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#writeCompressed-byte:A-java.lang.Enum-">writeCompressed(byte[], Enum)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.BaosAndCompressor</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/BlockingRpcConnection.html#writeConnectionHeader--">writeConnectionHeader()</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/BlockingRpcConnection.html" title="class in org.apache.hadoop.hbase.ipc">BlockingRpcConnection</a></dt>
<dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/org/apache/hadoop/hbase/backup/BackupDriver.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/BackupDriver.html b/devapidocs/org/apache/hadoop/hbase/backup/BackupDriver.html
index ffa80c3..7e6fd6a 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/BackupDriver.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/BackupDriver.html
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.63">BackupDriver</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.66">BackupDriver</a>
extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">AbstractHBaseTool</a></pre>
<div class="block">Command-line entry point for backup operation</div>
</li>
@@ -261,7 +261,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.h
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.65">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.68">LOG</a></pre>
</li>
</ul>
<a name="cmd">
@@ -270,7 +270,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.h
<ul class="blockListLast">
<li class="blockList">
<h4>cmd</h4>
-<pre>private org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.66">cmd</a></pre>
+<pre>private org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.69">cmd</a></pre>
</li>
</ul>
</li>
@@ -287,7 +287,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.h
<ul class="blockListLast">
<li class="blockList">
<h4>BackupDriver</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.68">BackupDriver</a>()
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.71">BackupDriver</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -309,7 +309,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.h
<ul class="blockList">
<li class="blockList">
<h4>init</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.72">init</a>()
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.75">init</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -323,7 +323,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.h
<ul class="blockList">
<li class="blockList">
<h4>parseAndRun</h4>
-<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.77">parseAndRun</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.80">parseAndRun</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -337,7 +337,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.h
<ul class="blockList">
<li class="blockList">
<h4>addOptions</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.150">addOptions</a>()</pre>
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.153">addOptions</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptions--">AbstractHBaseTool</a></code></span></div>
<div class="block">Override this to add command-line options using <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptWithArg-java.lang.String-java.lang.String-"><code>AbstractHBaseTool.addOptWithArg(java.lang.String, java.lang.String)</code></a>
and similar methods.</div>
@@ -353,7 +353,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.h
<ul class="blockList">
<li class="blockList">
<h4>processOptions</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.164">processOptions</a>(org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmd)</pre>
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.169">processOptions</a>(org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine cmd)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#processOptions-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">AbstractHBaseTool</a></code></span></div>
<div class="block">This method is called to process the options after they have been parsed.</div>
<dl>
@@ -368,7 +368,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.h
<ul class="blockList">
<li class="blockList">
<h4>doWork</h4>
-<pre>protected int <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.169">doWork</a>()
+<pre>protected int <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.174">doWork</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#doWork--">AbstractHBaseTool</a></code></span></div>
<div class="block">The "main function" of the tool</div>
@@ -386,7 +386,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.h
<ul class="blockList">
<li class="blockList">
<h4>main</h4>
-<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.173">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.178">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -400,7 +400,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.h
<ul class="blockList">
<li class="blockList">
<h4>run</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.183">run</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.188">run</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -418,7 +418,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.h
<ul class="blockListLast">
<li class="blockList">
<h4>printToolUsage</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.211">printToolUsage</a>()
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/BackupDriver.html#line.216">printToolUsage</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
[08/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
new file mode 100644
index 0000000..9df0225
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
@@ -0,0 +1,476 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License. You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.regionserver.wal;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.ByteArrayOutputStream;<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.InputStream;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.ReflectionUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
+<span class="sourceLineNo">060</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
+<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
+<span class="sourceLineNo">062</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
+<span class="sourceLineNo">063</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span> protected final CompressionContext compression;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.68"></a>
+<span class="sourceLineNo">069</span> */<a name="line.69"></a>
+<span class="sourceLineNo">070</span> public WALCellCodec() {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> this.compression = null;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<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> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.75"></a>
+<span class="sourceLineNo">076</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * @param conf configuration to configure <tt>this</tt><a name="line.77"></a>
+<span class="sourceLineNo">078</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * compression<a name="line.79"></a>
+<span class="sourceLineNo">080</span> */<a name="line.80"></a>
+<span class="sourceLineNo">081</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span> this.compression = compression;<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 getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * Fully prepares the codec for use.<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * uses a {@link WALCellCodec}.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * @param cellCodecClsName name of codec<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * @param compression compression the codec should use<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.99"></a>
+<span class="sourceLineNo">100</span> */<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
+<span class="sourceLineNo">103</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span> if (cellCodecClsName == null) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
+<span class="sourceLineNo">106</span> }<a name="line.106"></a>
+<span class="sourceLineNo">107</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
+<span class="sourceLineNo">108</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * CompressionContext.<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * Fully prepares the codec for use.<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * uses a {@link WALCellCodec}.<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * @param compression compression the codec should use<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
+<span class="sourceLineNo">121</span> */<a name="line.121"></a>
+<span class="sourceLineNo">122</span> public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
+<span class="sourceLineNo">123</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
+<span class="sourceLineNo">125</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
+<span class="sourceLineNo">126</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> public interface ByteStringCompressor {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> ByteString compress(byte[] data, Enum dictIndex) throws IOException;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> public interface ByteStringUncompressor {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span> static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> CompressionContext compressionContext;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> this.compressionContext = compressionContext;<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> @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span> public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> private CompressionContext compressionContext;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> this.compressionContext = compressionContext;<a name="line.154"></a>
+<span class="sourceLineNo">155</span> }<a name="line.155"></a>
+<span class="sourceLineNo">156</span> public ByteString toByteString() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
+<span class="sourceLineNo">158</span> // them.<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span> public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> writeCompressed(data, dictIndex);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
+<span class="sourceLineNo">166</span> // them.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
+<span class="sourceLineNo">168</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> return result;<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> private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> assert dict != null;<a name="line.174"></a>
+<span class="sourceLineNo">175</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> write(data, 0, data.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> }<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> }<a name="line.191"></a>
+<span class="sourceLineNo">192</span> }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span> static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span> @Override<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> return data.toByteArray();<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span> }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> InputStream in = bs.newInput();<a name="line.203"></a>
+<span class="sourceLineNo">204</span> byte status = (byte)in.read();<a name="line.204"></a>
+<span class="sourceLineNo">205</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
+<span class="sourceLineNo">207</span> int bytesRead = in.read(arr);<a name="line.207"></a>
+<span class="sourceLineNo">208</span> if (bytesRead != arr.length) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
+<span class="sourceLineNo">212</span> return arr;<a name="line.212"></a>
+<span class="sourceLineNo">213</span> } else {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
+<span class="sourceLineNo">216</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
+<span class="sourceLineNo">217</span> if (entry == null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> }<a name="line.219"></a>
+<span class="sourceLineNo">220</span> return entry;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> private final CompressionContext compression;<a name="line.225"></a>
+<span class="sourceLineNo">226</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> super(out);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> this.compression = compression;<a name="line.228"></a>
+<span class="sourceLineNo">229</span> }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span> public void write(Cell cell) throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
+<span class="sourceLineNo">235</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
+<span class="sourceLineNo">236</span> // To support tags<a name="line.236"></a>
+<span class="sourceLineNo">237</span> int tagsLength = cell.getTagsLength();<a name="line.237"></a>
+<span class="sourceLineNo">238</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
+<span class="sourceLineNo">240</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
+<span class="sourceLineNo">241</span> PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
+<span class="sourceLineNo">242</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
+<span class="sourceLineNo">243</span> PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
+<span class="sourceLineNo">244</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
+<span class="sourceLineNo">245</span> // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
+<span class="sourceLineNo">246</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
+<span class="sourceLineNo">247</span> out.write(cell.getTypeByte());<a name="line.247"></a>
+<span class="sourceLineNo">248</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
+<span class="sourceLineNo">249</span> if (tagsLength > 0) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> if (compression.tagCompressionContext != null) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span> // Write tags using Dictionary compression<a name="line.251"></a>
+<span class="sourceLineNo">252</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> } else {<a name="line.253"></a>
+<span class="sourceLineNo">254</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
+<span class="sourceLineNo">255</span> // it is.<a name="line.255"></a>
+<span class="sourceLineNo">256</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
+<span class="sourceLineNo">257</span> }<a name="line.257"></a>
+<span class="sourceLineNo">258</span> }<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private final CompressionContext compression;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span> super(in);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.compression = compression;<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> protected Cell parseCell() throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
+<span class="sourceLineNo">275</span> int length = 0;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> if(tagsLength == 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span> byte[] backingArray = new byte[length];<a name="line.282"></a>
+<span class="sourceLineNo">283</span> int pos = 0;<a name="line.283"></a>
+<span class="sourceLineNo">284</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> // the row<a name="line.287"></a>
+<span class="sourceLineNo">288</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
+<span class="sourceLineNo">289</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
+<span class="sourceLineNo">290</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
+<span class="sourceLineNo">292</span> pos += elemLen;<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span> // family<a name="line.294"></a>
+<span class="sourceLineNo">295</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
+<span class="sourceLineNo">296</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
+<span class="sourceLineNo">297</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> pos += elemLen;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // qualifier<a name="line.301"></a>
+<span class="sourceLineNo">302</span> elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
+<span class="sourceLineNo">303</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
+<span class="sourceLineNo">304</span> pos += elemLen;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span> // timestamp, type and value<a name="line.306"></a>
+<span class="sourceLineNo">307</span> int tsTypeValLen = length - pos;<a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (tagsLength > 0) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
+<span class="sourceLineNo">310</span> }<a name="line.310"></a>
+<span class="sourceLineNo">311</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> pos += tsTypeValLen;<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span> // tags<a name="line.314"></a>
+<span class="sourceLineNo">315</span> if (tagsLength > 0) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> if (compression.tagCompressionContext != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> byte status = (byte)in.read();<a name="line.327"></a>
+<span class="sourceLineNo">328</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
+<span class="sourceLineNo">331</span> int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span> dict.addEntry(to, offset, length);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> return length;<a name="line.334"></a>
+<span class="sourceLineNo">335</span> } else {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
+<span class="sourceLineNo">337</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
+<span class="sourceLineNo">338</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (entry == null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> // now we write the uncompressed value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> return entry.length;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> }<a name="line.345"></a>
+<span class="sourceLineNo">346</span> }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span> private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> if (len < 0 || len > max) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> }<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span> super(out);<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span> @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span> public void write(Cell cell) throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> checkFlushed();<a name="line.361"></a>
+<span class="sourceLineNo">362</span> // Make sure to write tags into WAL<a name="line.362"></a>
+<span class="sourceLineNo">363</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
+<span class="sourceLineNo">364</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span> @Override<a name="line.368"></a>
+<span class="sourceLineNo">369</span> public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> return (compression == null)<a name="line.370"></a>
+<span class="sourceLineNo">371</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return getDecoder(new ByteBuffInputStream(buf));<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> @Override<a name="line.379"></a>
+<span class="sourceLineNo">380</span> public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
+<span class="sourceLineNo">382</span> : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
+<span class="sourceLineNo">383</span> if (compression == null) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> return new EnsureKvEncoder(os);<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span> return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> return new BaosAndCompressor(compression);<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span> return new StatelessUncompressor(compression);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span> public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return new NoneCompressor();<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> return new NoneUncompressor();<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>}<a name="line.404"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
new file mode 100644
index 0000000..9df0225
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
@@ -0,0 +1,476 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License. You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.regionserver.wal;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.ByteArrayOutputStream;<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.InputStream;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.ReflectionUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
+<span class="sourceLineNo">060</span> HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
+<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
+<span class="sourceLineNo">062</span> /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
+<span class="sourceLineNo">063</span> public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span> protected final CompressionContext compression;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * <b>All subclasses must implement a no argument constructor</b><a name="line.68"></a>
+<span class="sourceLineNo">069</span> */<a name="line.69"></a>
+<span class="sourceLineNo">070</span> public WALCellCodec() {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> this.compression = null;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<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> * Default constructor - <b>all subclasses must implement a constructor with this signature </b><a name="line.75"></a>
+<span class="sourceLineNo">076</span> * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * @param conf configuration to configure <tt>this</tt><a name="line.77"></a>
+<span class="sourceLineNo">078</span> * @param compression compression the codec should support, can be <tt>null</tt> to indicate no<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * compression<a name="line.79"></a>
+<span class="sourceLineNo">080</span> */<a name="line.80"></a>
+<span class="sourceLineNo">081</span> public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span> this.compression = compression;<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 getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<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> * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * Fully prepares the codec for use.<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * uses a {@link WALCellCodec}.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * @param cellCodecClsName name of codec<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * @param compression compression the codec should use<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.99"></a>
+<span class="sourceLineNo">100</span> */<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span> public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
+<span class="sourceLineNo">103</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span> if (cellCodecClsName == null) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
+<span class="sourceLineNo">106</span> }<a name="line.106"></a>
+<span class="sourceLineNo">107</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
+<span class="sourceLineNo">108</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * CompressionContext.<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * Fully prepares the codec for use.<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * uses a {@link WALCellCodec}.<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * @param compression compression the codec should use<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
+<span class="sourceLineNo">121</span> */<a name="line.121"></a>
+<span class="sourceLineNo">122</span> public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
+<span class="sourceLineNo">123</span> CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
+<span class="sourceLineNo">125</span> return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
+<span class="sourceLineNo">126</span> { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> public interface ByteStringCompressor {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> ByteString compress(byte[] data, Enum dictIndex) throws IOException;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> public interface ByteStringUncompressor {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span> static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> CompressionContext compressionContext;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> this.compressionContext = compressionContext;<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> @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span> public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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> static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> private CompressionContext compressionContext;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> this.compressionContext = compressionContext;<a name="line.154"></a>
+<span class="sourceLineNo">155</span> }<a name="line.155"></a>
+<span class="sourceLineNo">156</span> public ByteString toByteString() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
+<span class="sourceLineNo">158</span> // them.<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span> public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> writeCompressed(data, dictIndex);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
+<span class="sourceLineNo">166</span> // them.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
+<span class="sourceLineNo">168</span> reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> return result;<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> private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> assert dict != null;<a name="line.174"></a>
+<span class="sourceLineNo">175</span> short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span> write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> write(data, 0, data.length);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> }<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> }<a name="line.191"></a>
+<span class="sourceLineNo">192</span> }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span> static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span> @Override<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> return data.toByteArray();<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span> }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span> private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> InputStream in = bs.newInput();<a name="line.203"></a>
+<span class="sourceLineNo">204</span> byte status = (byte)in.read();<a name="line.204"></a>
+<span class="sourceLineNo">205</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
+<span class="sourceLineNo">207</span> int bytesRead = in.read(arr);<a name="line.207"></a>
+<span class="sourceLineNo">208</span> if (bytesRead != arr.length) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span> if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
+<span class="sourceLineNo">212</span> return arr;<a name="line.212"></a>
+<span class="sourceLineNo">213</span> } else {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
+<span class="sourceLineNo">216</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
+<span class="sourceLineNo">217</span> if (entry == null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> }<a name="line.219"></a>
+<span class="sourceLineNo">220</span> return entry;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> private final CompressionContext compression;<a name="line.225"></a>
+<span class="sourceLineNo">226</span> public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> super(out);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> this.compression = compression;<a name="line.228"></a>
+<span class="sourceLineNo">229</span> }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span> public void write(Cell cell) throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
+<span class="sourceLineNo">235</span> StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
+<span class="sourceLineNo">236</span> // To support tags<a name="line.236"></a>
+<span class="sourceLineNo">237</span> int tagsLength = cell.getTagsLength();<a name="line.237"></a>
+<span class="sourceLineNo">238</span> StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
+<span class="sourceLineNo">240</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
+<span class="sourceLineNo">241</span> PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
+<span class="sourceLineNo">242</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
+<span class="sourceLineNo">243</span> PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
+<span class="sourceLineNo">244</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
+<span class="sourceLineNo">245</span> // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
+<span class="sourceLineNo">246</span> StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
+<span class="sourceLineNo">247</span> out.write(cell.getTypeByte());<a name="line.247"></a>
+<span class="sourceLineNo">248</span> PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
+<span class="sourceLineNo">249</span> if (tagsLength > 0) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> if (compression.tagCompressionContext != null) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span> // Write tags using Dictionary compression<a name="line.251"></a>
+<span class="sourceLineNo">252</span> PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> } else {<a name="line.253"></a>
+<span class="sourceLineNo">254</span> // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
+<span class="sourceLineNo">255</span> // it is.<a name="line.255"></a>
+<span class="sourceLineNo">256</span> PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
+<span class="sourceLineNo">257</span> }<a name="line.257"></a>
+<span class="sourceLineNo">258</span> }<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private final CompressionContext compression;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span> super(in);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.compression = compression;<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span> protected Cell parseCell() throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span> int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
+<span class="sourceLineNo">275</span> int length = 0;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> if(tagsLength == 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span> byte[] backingArray = new byte[length];<a name="line.282"></a>
+<span class="sourceLineNo">283</span> int pos = 0;<a name="line.283"></a>
+<span class="sourceLineNo">284</span> pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span> pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> // the row<a name="line.287"></a>
+<span class="sourceLineNo">288</span> int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
+<span class="sourceLineNo">289</span> compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
+<span class="sourceLineNo">290</span> checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
+<span class="sourceLineNo">292</span> pos += elemLen;<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span> // family<a name="line.294"></a>
+<span class="sourceLineNo">295</span> elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
+<span class="sourceLineNo">296</span> compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
+<span class="sourceLineNo">297</span> checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> pos += elemLen;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // qualifier<a name="line.301"></a>
+<span class="sourceLineNo">302</span> elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
+<span class="sourceLineNo">303</span> compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
+<span class="sourceLineNo">304</span> pos += elemLen;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span> // timestamp, type and value<a name="line.306"></a>
+<span class="sourceLineNo">307</span> int tsTypeValLen = length - pos;<a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (tagsLength > 0) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
+<span class="sourceLineNo">310</span> }<a name="line.310"></a>
+<span class="sourceLineNo">311</span> IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> pos += tsTypeValLen;<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span> // tags<a name="line.314"></a>
+<span class="sourceLineNo">315</span> if (tagsLength > 0) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> if (compression.tagCompressionContext != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> byte status = (byte)in.read();<a name="line.327"></a>
+<span class="sourceLineNo">328</span> if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span> // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
+<span class="sourceLineNo">331</span> int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span> dict.addEntry(to, offset, length);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> return length;<a name="line.334"></a>
+<span class="sourceLineNo">335</span> } else {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
+<span class="sourceLineNo">337</span> short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
+<span class="sourceLineNo">338</span> byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (entry == null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> // now we write the uncompressed value.<a name="line.342"></a>
+<span class="sourceLineNo">343</span> Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> return entry.length;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> }<a name="line.345"></a>
+<span class="sourceLineNo">346</span> }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span> private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> if (len < 0 || len > max) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> }<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span> super(out);<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span> @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span> public void write(Cell cell) throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> checkFlushed();<a name="line.361"></a>
+<span class="sourceLineNo">362</span> // Make sure to write tags into WAL<a name="line.362"></a>
+<span class="sourceLineNo">363</span> ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
+<span class="sourceLineNo">364</span> KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span> @Override<a name="line.368"></a>
+<span class="sourceLineNo">369</span> public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> return (compression == null)<a name="line.370"></a>
+<span class="sourceLineNo">371</span> ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span> public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return getDecoder(new ByteBuffInputStream(buf));<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> @Override<a name="line.379"></a>
+<span class="sourceLineNo">380</span> public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
+<span class="sourceLineNo">382</span> : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
+<span class="sourceLineNo">383</span> if (compression == null) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> return new EnsureKvEncoder(os);<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span> return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> return new BaosAndCompressor(compression);<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span> return new StatelessUncompressor(compression);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span> public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return new NoneCompressor();<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> return new NoneUncompressor();<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>}<a name="line.404"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
[32/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html
index f236300..513d2ad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.DeleteCommand.html
@@ -26,1048 +26,1115 @@
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.backup.impl;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.io.IOException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.net.URI;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.List;<a name="line.42"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.lang3.StringUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configured;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<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> * General backup commands, options and usage messages<a name="line.71"></a>
-<span class="sourceLineNo">072</span> */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceAudience.Private<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public final class BackupCommands {<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.77"></a>
-<span class="sourceLineNo">078</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.80"></a>
-<span class="sourceLineNo">081</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.81"></a>
-<span class="sourceLineNo">082</span> + " delete delete an existing backup image\n"<a name="line.82"></a>
-<span class="sourceLineNo">083</span> + " describe show the detailed information of a backup image\n"<a name="line.83"></a>
-<span class="sourceLineNo">084</span> + " history show history of all successful backups\n"<a name="line.84"></a>
-<span class="sourceLineNo">085</span> + " progress show the progress of the latest backup request\n"<a name="line.85"></a>
-<span class="sourceLineNo">086</span> + " set backup set management\n"<a name="line.86"></a>
-<span class="sourceLineNo">087</span> + " repair repair backup system table\n"<a name="line.87"></a>
-<span class="sourceLineNo">088</span> + " merge merge backup images\n"<a name="line.88"></a>
-<span class="sourceLineNo">089</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> public static final String CREATE_CMD_USAGE =<a name="line.91"></a>
-<span class="sourceLineNo">092</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.92"></a>
-<span class="sourceLineNo">093</span> + " type \"full\" to create a full backup image\n"<a name="line.93"></a>
-<span class="sourceLineNo">094</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.94"></a>
-<span class="sourceLineNo">095</span> + " backup_path Full path to store the backup image\n";<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.97"></a>
-<span class="sourceLineNo">098</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.98"></a>
-<span class="sourceLineNo">099</span> + " progress for currently running backup session.";<a name="line.99"></a>
-<span class="sourceLineNo">100</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.100"></a>
-<span class="sourceLineNo">101</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.103"></a>
-<span class="sourceLineNo">104</span> + " backup_id Backup image id\n";<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete <backup_id>\n"<a name="line.108"></a>
-<span class="sourceLineNo">109</span> + " backup_id Backup image id\n";<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.113"></a>
-<span class="sourceLineNo">114</span> + " name Backup set name\n"<a name="line.114"></a>
-<span class="sourceLineNo">115</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.115"></a>
-<span class="sourceLineNo">116</span> + " add add tables to a set, create a set if needed\n"<a name="line.116"></a>
-<span class="sourceLineNo">117</span> + " remove remove tables from a set\n"<a name="line.117"></a>
-<span class="sourceLineNo">118</span> + " list list all backup sets in the system\n"<a name="line.118"></a>
-<span class="sourceLineNo">119</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.119"></a>
-<span class="sourceLineNo">120</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.120"></a>
-<span class="sourceLineNo">121</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span> public static final String USAGE_FOOTER = "";<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> public static abstract class Command extends Configured {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> CommandLine cmdline;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> Connection conn;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> Command(Configuration conf) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (conf == null) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> conf = HBaseConfiguration.create();<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span> setConf(conf);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span> public void execute() throws IOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> printUsage();<a name="line.138"></a>
-<span class="sourceLineNo">139</span> throw new IOException(INCORRECT_USAGE);<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> // Create connection<a name="line.142"></a>
-<span class="sourceLineNo">143</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.143"></a>
-<span class="sourceLineNo">144</span> if (requiresNoActiveSession()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> // Check active session<a name="line.145"></a>
-<span class="sourceLineNo">146</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span> if (sessions.size() > 0) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.150"></a>
-<span class="sourceLineNo">151</span> System.err.println(sessions.get(0));<a name="line.151"></a>
-<span class="sourceLineNo">152</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.152"></a>
-<span class="sourceLineNo">153</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.153"></a>
-<span class="sourceLineNo">154</span> throw new IOException("Active session found, aborted command execution");<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> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> if (requiresConsistentState()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span> // Check failed delete<a name="line.159"></a>
-<span class="sourceLineNo">160</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (ids != null && ids.length > 0) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> System.err.println("Backup system recovery is required.");<a name="line.165"></a>
-<span class="sourceLineNo">166</span> throw new IOException("Failed backup DELETE found, aborted command execution");<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.169"></a>
-<span class="sourceLineNo">170</span> if (ids != null && ids.length > 0) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.171"></a>
-<span class="sourceLineNo">172</span> System.err.println("Backup system recovery is required.");<a name="line.172"></a>
-<span class="sourceLineNo">173</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> }<a name="line.175"></a>
-<span class="sourceLineNo">176</span> }<a name="line.176"></a>
-<span class="sourceLineNo">177</span> }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span> public void finish() throws IOException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (conn != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> conn.close();<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> protected abstract void printUsage();<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * The command can't be run if active backup session is in progress<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * @return true if no active sessions are in progress<a name="line.189"></a>
-<span class="sourceLineNo">190</span> */<a name="line.190"></a>
-<span class="sourceLineNo">191</span> protected boolean requiresNoActiveSession() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span> return false;<a name="line.192"></a>
-<span class="sourceLineNo">193</span> }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * because of an abnormal termination of a backup session or delete command<a name="line.197"></a>
-<span class="sourceLineNo">198</span> * @return true, if yes<a name="line.198"></a>
-<span class="sourceLineNo">199</span> */<a name="line.199"></a>
-<span class="sourceLineNo">200</span> protected boolean requiresConsistentState() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> return false;<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 BackupCommands() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> throw new AssertionError("Instantiating utility class...");<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> Command cmd;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> switch (type) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> case CREATE:<a name="line.212"></a>
-<span class="sourceLineNo">213</span> cmd = new CreateCommand(conf, cmdline);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span> case DESCRIBE:<a name="line.215"></a>
-<span class="sourceLineNo">216</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.216"></a>
+<span class="sourceLineNo">044</span>import java.io.IOException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.net.URI;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.List;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.lang3.StringUtils;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.conf.Configured;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.FileSystem;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.fs.Path;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.TableName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.yetus.audience.InterfaceAudience;<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> * General backup commands, options and usage messages<a name="line.75"></a>
+<span class="sourceLineNo">076</span> */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceAudience.Private<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public final class BackupCommands {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.81"></a>
+<span class="sourceLineNo">082</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.84"></a>
+<span class="sourceLineNo">085</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.85"></a>
+<span class="sourceLineNo">086</span> + " delete delete an existing backup image\n"<a name="line.86"></a>
+<span class="sourceLineNo">087</span> + " describe show the detailed information of a backup image\n"<a name="line.87"></a>
+<span class="sourceLineNo">088</span> + " history show history of all successful backups\n"<a name="line.88"></a>
+<span class="sourceLineNo">089</span> + " progress show the progress of the latest backup request\n"<a name="line.89"></a>
+<span class="sourceLineNo">090</span> + " set backup set management\n"<a name="line.90"></a>
+<span class="sourceLineNo">091</span> + " repair repair backup system table\n"<a name="line.91"></a>
+<span class="sourceLineNo">092</span> + " merge merge backup images\n"<a name="line.92"></a>
+<span class="sourceLineNo">093</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span> public static final String CREATE_CMD_USAGE =<a name="line.95"></a>
+<span class="sourceLineNo">096</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.96"></a>
+<span class="sourceLineNo">097</span> + " type \"full\" to create a full backup image\n"<a name="line.97"></a>
+<span class="sourceLineNo">098</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.98"></a>
+<span class="sourceLineNo">099</span> + " backup_path Full path to store the backup image\n";<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.101"></a>
+<span class="sourceLineNo">102</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.102"></a>
+<span class="sourceLineNo">103</span> + " progress for currently running backup session.";<a name="line.103"></a>
+<span class="sourceLineNo">104</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.104"></a>
+<span class="sourceLineNo">105</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.107"></a>
+<span class="sourceLineNo">108</span> + " backup_id Backup image id\n";<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete [options]";<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.116"></a>
+<span class="sourceLineNo">117</span> + " name Backup set name\n"<a name="line.117"></a>
+<span class="sourceLineNo">118</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.118"></a>
+<span class="sourceLineNo">119</span> + " add add tables to a set, create a set if needed\n"<a name="line.119"></a>
+<span class="sourceLineNo">120</span> + " remove remove tables from a set\n"<a name="line.120"></a>
+<span class="sourceLineNo">121</span> + " list list all backup sets in the system\n"<a name="line.121"></a>
+<span class="sourceLineNo">122</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.122"></a>
+<span class="sourceLineNo">123</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.123"></a>
+<span class="sourceLineNo">124</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static final String USAGE_FOOTER = "";<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> public static abstract class Command extends Configured {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> CommandLine cmdline;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> Connection conn;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span> Command(Configuration conf) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span> if (conf == null) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> conf = HBaseConfiguration.create();<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> setConf(conf);<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> public void execute() throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> printUsage();<a name="line.141"></a>
+<span class="sourceLineNo">142</span> throw new IOException(INCORRECT_USAGE);<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">145</span> // Create connection<a name="line.145"></a>
+<span class="sourceLineNo">146</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (requiresNoActiveSession()) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // Check active session<a name="line.148"></a>
+<span class="sourceLineNo">149</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span> if (sessions.size() > 0) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.153"></a>
+<span class="sourceLineNo">154</span> System.err.println(sessions.get(0));<a name="line.154"></a>
+<span class="sourceLineNo">155</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.155"></a>
+<span class="sourceLineNo">156</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.156"></a>
+<span class="sourceLineNo">157</span> throw new IOException("Active session found, aborted command execution");<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span> }<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span> if (requiresConsistentState()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span> // Check failed delete<a name="line.162"></a>
+<span class="sourceLineNo">163</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span> if (ids != null && ids.length > 0) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.167"></a>
+<span class="sourceLineNo">168</span> System.err.println("Backup system recovery is required.");<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throw new IOException("Failed backup DELETE found, aborted command execution");<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> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> if (ids != null && ids.length > 0) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.174"></a>
+<span class="sourceLineNo">175</span> System.err.println("Backup system recovery is required.");<a name="line.175"></a>
+<span class="sourceLineNo">176</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> }<a name="line.179"></a>
+<span class="sourceLineNo">180</span> }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span> public void finish() throws IOException {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> if (conn != null) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> conn.close();<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> protected abstract void printUsage();<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * The command can't be run if active backup session is in progress<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * @return true if no active sessions are in progress<a name="line.192"></a>
+<span class="sourceLineNo">193</span> */<a name="line.193"></a>
+<span class="sourceLineNo">194</span> protected boolean requiresNoActiveSession() {<a name="line.194"></a>
+<span class="sourceLineNo">195</span> return false;<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * because of an abnormal termination of a backup session or delete command<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * @return true, if yes<a name="line.201"></a>
+<span class="sourceLineNo">202</span> */<a name="line.202"></a>
+<span class="sourceLineNo">203</span> protected boolean requiresConsistentState() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return false;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> private BackupCommands() {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new AssertionError("Instantiating utility class...");<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> Command cmd;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> switch (type) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> case CREATE:<a name="line.215"></a>
+<span class="sourceLineNo">216</span> cmd = new CreateCommand(conf, cmdline);<a name="line.216"></a>
<span class="sourceLineNo">217</span> break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span> case PROGRESS:<a name="line.218"></a>
-<span class="sourceLineNo">219</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.219"></a>
+<span class="sourceLineNo">218</span> case DESCRIBE:<a name="line.218"></a>
+<span class="sourceLineNo">219</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.219"></a>
<span class="sourceLineNo">220</span> break;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> case DELETE:<a name="line.221"></a>
-<span class="sourceLineNo">222</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.222"></a>
+<span class="sourceLineNo">221</span> case PROGRESS:<a name="line.221"></a>
+<span class="sourceLineNo">222</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.222"></a>
<span class="sourceLineNo">223</span> break;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> case HISTORY:<a name="line.224"></a>
-<span class="sourceLineNo">225</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.225"></a>
+<span class="sourceLineNo">224</span> case DELETE:<a name="line.224"></a>
+<span class="sourceLineNo">225</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.225"></a>
<span class="sourceLineNo">226</span> break;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> case SET:<a name="line.227"></a>
-<span class="sourceLineNo">228</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.228"></a>
+<span class="sourceLineNo">227</span> case HISTORY:<a name="line.227"></a>
+<span class="sourceLineNo">228</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.228"></a>
<span class="sourceLineNo">229</span> break;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> case REPAIR:<a name="line.230"></a>
-<span class="sourceLineNo">231</span> cmd = new RepairCommand(conf, cmdline);<a name="line.231"></a>
+<span class="sourceLineNo">230</span> case SET:<a name="line.230"></a>
+<span class="sourceLineNo">231</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.231"></a>
<span class="sourceLineNo">232</span> break;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> case MERGE:<a name="line.233"></a>
-<span class="sourceLineNo">234</span> cmd = new MergeCommand(conf, cmdline);<a name="line.234"></a>
+<span class="sourceLineNo">233</span> case REPAIR:<a name="line.233"></a>
+<span class="sourceLineNo">234</span> cmd = new RepairCommand(conf, cmdline);<a name="line.234"></a>
<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> case HELP:<a name="line.236"></a>
-<span class="sourceLineNo">237</span> default:<a name="line.237"></a>
-<span class="sourceLineNo">238</span> cmd = new HelpCommand(conf, cmdline);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> break;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return cmd;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> static int numOfArgs(String[] args) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> if (args == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> return 0;<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> return args.length;<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
+<span class="sourceLineNo">236</span> case MERGE:<a name="line.236"></a>
+<span class="sourceLineNo">237</span> cmd = new MergeCommand(conf, cmdline);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> break;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> case HELP:<a name="line.239"></a>
+<span class="sourceLineNo">240</span> default:<a name="line.240"></a>
+<span class="sourceLineNo">241</span> cmd = new HelpCommand(conf, cmdline);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> break;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> return cmd;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> static int numOfArgs(String[] args) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> if (args == null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span> return 0;<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> public static class CreateCommand extends Command {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span> super(conf);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> this.cmdline = cmdline;<a name="line.255"></a>
-<span class="sourceLineNo">256</span> }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span> @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span> protected boolean requiresNoActiveSession() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> return true;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span> protected boolean requiresConsistentState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> return true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span> }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span> @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span> public void execute() throws IOException {<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> printUsage();<a name="line.271"></a>
-<span class="sourceLineNo">272</span> throw new IOException(INCORRECT_USAGE);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span> String[] args = cmdline.getArgs();<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (args.length != 3) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> printUsage();<a name="line.276"></a>
-<span class="sourceLineNo">277</span> throw new IOException(INCORRECT_USAGE);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.280"></a>
-<span class="sourceLineNo">281</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> printUsage();<a name="line.283"></a>
-<span class="sourceLineNo">284</span> throw new IOException(INCORRECT_USAGE);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span> if (!verifyPath(args[2])) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> printUsage();<a name="line.288"></a>
-<span class="sourceLineNo">289</span> throw new IOException(INCORRECT_USAGE);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> String targetBackupDir = args[2];<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.292"></a>
-<span class="sourceLineNo">293</span> if (isRootFolder(targetBackupDir)) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> String tables;<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span> // Check if we have both: backup set and list of tables<a name="line.298"></a>
-<span class="sourceLineNo">299</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.300"></a>
-<span class="sourceLineNo">301</span> + " of tables, but not both");<a name="line.301"></a>
-<span class="sourceLineNo">302</span> printUsage();<a name="line.302"></a>
-<span class="sourceLineNo">303</span> throw new IOException(INCORRECT_USAGE);<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Creates connection<a name="line.305"></a>
-<span class="sourceLineNo">306</span> super.execute();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Check backup set<a name="line.307"></a>
-<span class="sourceLineNo">308</span> String setName = null;<a name="line.308"></a>
-<span class="sourceLineNo">309</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> tables = getTablesForSet(setName, getConf());<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> if (tables == null) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> System.out.println("ERROR: Backup set '" + setName<a name="line.314"></a>
-<span class="sourceLineNo">315</span> + "' is either empty or does not exist");<a name="line.315"></a>
-<span class="sourceLineNo">316</span> printUsage();<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException(INCORRECT_USAGE);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span> int bandwidth =<a name="line.322"></a>
-<span class="sourceLineNo">323</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.323"></a>
-<span class="sourceLineNo">324</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> int workers =<a name="line.325"></a>
-<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.326"></a>
-<span class="sourceLineNo">327</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // Set system property value for MR job<a name="line.331"></a>
-<span class="sourceLineNo">332</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> BackupRequest request =<a name="line.337"></a>
-<span class="sourceLineNo">338</span> builder<a name="line.338"></a>
-<span class="sourceLineNo">339</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.339"></a>
-<span class="sourceLineNo">340</span> .withTableList(<a name="line.340"></a>
-<span class="sourceLineNo">341</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.341"></a>
-<span class="sourceLineNo">342</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.342"></a>
-<span class="sourceLineNo">343</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> String backupId = admin.backupTables(request);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.345"></a>
-<span class="sourceLineNo">346</span> } catch (IOException e) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.347"></a>
-<span class="sourceLineNo">348</span> throw e;<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> Path p = new Path(targetBackupDir);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> return p.isRoot();<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> private boolean verifyPath(String path) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> Path p = new Path(path);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> URI uri = p.toUri();<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (uri.getScheme() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> return false;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> FileSystem.get(uri, conf);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> return true;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> } catch (Exception e) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> return false;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> }<a name="line.371"></a>
-<span class="sourceLineNo">372</span> }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (tables == null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> return null;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span> protected void printUsage() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> System.out.println(CREATE_CMD_USAGE);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> Options options = new Options();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.397"></a>
-<span class="sourceLineNo">398</span> helpFormatter.setLeftPadding(2);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> helpFormatter.setDescPadding(8);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> helpFormatter.setWidth(100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.401"></a>
-<span class="sourceLineNo">402</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> public static class HelpCommand extends Command {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span> super(conf);<a name="line.408"></a>
-<span class="sourceLineNo">409</span> this.cmdline = cmdline;<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void execute() throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> if (cmdline == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span> printUsage();<a name="line.415"></a>
-<span class="sourceLineNo">416</span> throw new IOException(INCORRECT_USAGE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span> }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span> String[] args = cmdline.getArgs();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> if (args == null || args.length == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span> printUsage();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> throw new IOException(INCORRECT_USAGE);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> if (args.length != 2) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.426"></a>
-<span class="sourceLineNo">427</span> printUsage();<a name="line.427"></a>
-<span class="sourceLineNo">428</span> throw new IOException(INCORRECT_USAGE);<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> String type = args[1];<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (BackupCommand.CREATE.name().equalsIgnoreCase(type)) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> System.out.println(CREATE_CMD_USAGE);<a name="line.434"></a>
-<span class="sourceLineNo">435</span> } else if (BackupCommand.DESCRIBE.name().equalsIgnoreCase(type)) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.436"></a>
-<span class="sourceLineNo">437</span> } else if (BackupCommand.HISTORY.name().equalsIgnoreCase(type)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> System.out.println(HISTORY_CMD_USAGE);<a name="line.438"></a>
-<span class="sourceLineNo">439</span> } else if (BackupCommand.PROGRESS.name().equalsIgnoreCase(type)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> System.out.println(PROGRESS_CMD_USAGE);<a name="line.440"></a>
-<span class="sourceLineNo">441</span> } else if (BackupCommand.DELETE.name().equalsIgnoreCase(type)) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> System.out.println(DELETE_CMD_USAGE);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> } else if (BackupCommand.SET.name().equalsIgnoreCase(type)) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> System.out.println(SET_CMD_USAGE);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> } else {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> System.out.println("Unknown command : " + type);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> printUsage();<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span> @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected void printUsage() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> System.out.println(USAGE);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> }<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span> public static class DescribeCommand extends Command {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> DescribeCommand(Configuration conf, CommandLine cmdline) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> super(conf);<a name="line.459"></a>
-<span class="sourceLineNo">460</span> this.cmdline = cmdline;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span> public void execute() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> printUsage();<a name="line.466"></a>
-<span class="sourceLineNo">467</span> throw new IOException(INCORRECT_USAGE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span> String[] args = cmdline.getArgs();<a name="line.469"></a>
-<span class="sourceLineNo">470</span> if (args.length != 2) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> printUsage();<a name="line.471"></a>
-<span class="sourceLineNo">472</span> throw new IOException(INCORRECT_USAGE);<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> super.execute();<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> String backupId = args[1];<a name="line.477"></a>
-<span class="sourceLineNo">478</span> try (final BackupSystemTable sysTable = new BackupSystemTable(conn)) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> BackupInfo info = sysTable.readBackupInfo(backupId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span> if (info == null) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> System.out.println("ERROR: " + backupId + " does not exist");<a name="line.481"></a>
-<span class="sourceLineNo">482</span> printUsage();<a name="line.482"></a>
-<span class="sourceLineNo">483</span> throw new IOException(INCORRECT_USAGE);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> System.out.println(info.getShortDescription());<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> @Override<a name="line.489"></a>
-<span class="sourceLineNo">490</span> protected void printUsage() {<a name="line.490"></a>
-<span class="sourceLineNo">491</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<a name="line.492"></a>
-<span class="sourceLineNo">493</span> }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span> public static class ProgressCommand extends Command {<a name="line.495"></a>
-<span class="sourceLineNo">496</span> ProgressCommand(Configuration conf, CommandLine cmdline) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span> super(conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> this.cmdline = cmdline;<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public void execute() throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">252</span> return args.length;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> public static class CreateCommand extends Command {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> super(conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.cmdline = cmdline;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span> @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span> protected boolean requiresNoActiveSession() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return true;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span> protected boolean requiresConsistentState() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return true;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span> public void execute() throws IOException {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> printUsage();<a name="line.274"></a>
+<span class="sourceLineNo">275</span> throw new IOException(INCORRECT_USAGE);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span> String[] args = cmdline.getArgs();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> if (args.length != 3) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> printUsage();<a name="line.279"></a>
+<span class="sourceLineNo">280</span> throw new IOException(INCORRECT_USAGE);<a name="line.280"></a>
+<span class="sourceLineNo">281</span> }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.283"></a>
+<span class="sourceLineNo">284</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> printUsage();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> throw new IOException(INCORRECT_USAGE);<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> if (!verifyPath(args[2])) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> printUsage();<a name="line.291"></a>
+<span class="sourceLineNo">292</span> throw new IOException(INCORRECT_USAGE);<a name="line.292"></a>
+<span class="sourceLineNo">293</span> }<a name="line.293"></a>
+<span class="sourceLineNo">294</span> String targetBackupDir = args[2];<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (isRootFolder(targetBackupDir)) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> String tables;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // Check if we have both: backup set and list of tables<a name="line.301"></a>
+<span class="sourceLineNo">302</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.303"></a>
+<span class="sourceLineNo">304</span> + " of tables, but not both");<a name="line.304"></a>
+<span class="sourceLineNo">305</span> printUsage();<a name="line.305"></a>
+<span class="sourceLineNo">306</span> throw new IOException(INCORRECT_USAGE);<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span> // Creates connection<a name="line.308"></a>
+<span class="sourceLineNo">309</span> super.execute();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Check backup set<a name="line.310"></a>
+<span class="sourceLineNo">311</span> String setName = null;<a name="line.311"></a>
+<span class="sourceLineNo">312</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> tables = getTablesForSet(setName, getConf());<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span> if (tables == null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> System.out.println("ERROR: Backup set '" + setName<a name="line.317"></a>
+<span class="sourceLineNo">318</span> + "' is either empty or does not exist");<a name="line.318"></a>
+<span class="sourceLineNo">319</span> printUsage();<a name="line.319"></a>
+<span class="sourceLineNo">320</span> throw new IOException(INCORRECT_USAGE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> } else {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span> int bandwidth =<a name="line.325"></a>
+<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.326"></a>
+<span class="sourceLineNo">327</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> int workers =<a name="line.328"></a>
+<span class="sourceLineNo">329</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.329"></a>
+<span class="sourceLineNo">330</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> // Set system property value for MR job<a name="line.334"></a>
+<span class="sourceLineNo">335</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.339"></a>
+<span class="sourceLineNo">340</span> BackupRequest request =<a name="line.340"></a>
+<span class="sourceLineNo">341</span> builder<a name="line.341"></a>
+<span class="sourceLineNo">342</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.342"></a>
+<span class="sourceLineNo">343</span> .withTableList(<a name="line.343"></a>
+<span class="sourceLineNo">344</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.345"></a>
+<span class="sourceLineNo">346</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String backupId = admin.backupTables(request);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> } catch (IOException e) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.350"></a>
+<span class="sourceLineNo">351</span> throw e;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> Path p = new Path(targetBackupDir);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return p.isRoot();<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span> private boolean verifyPath(String path) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> try {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> Path p = new Path(path);<a name="line.362"></a>
+<span class="sourceLineNo">363</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.363"></a>
+<span class="sourceLineNo">364</span> URI uri = p.toUri();<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> if (uri.getScheme() == null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span> return false;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> FileSystem.get(uri, conf);<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return true;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> } catch (Exception e) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return false;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.377"></a>
+<span class="sourceLineNo">378</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span> if (tables == null) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span> return null;<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> @Override<a name="line.389"></a>
+<span class="sourceLineNo">390</span> protected void printUsage() {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> System.out.println(CREATE_CMD_USAGE);<a name="line.391"></a>
+<span class="sourceLineNo">392</span> Options options = new Options();<a name="line.392"></a>
+<span class="sourceLineNo">393</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.400"></a>
+<span class="sourceLineNo">401</span> helpFormatter.setLeftPadding(2);<a name="line.401"></a>
+<span class="sourceLineNo">402</span> helpFormatter.setDescPadding(8);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> helpFormatter.setWidth(100);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.404"></a>
+<span class="sourceLineNo">405</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<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> public static class HelpCommand extends Command {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> super(conf);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> this.cmdline = cmdline;<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span> @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span> public void execute() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span> if (cmdline == null) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> printUsage();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> throw new IOException(INCORRECT_USAGE);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> String[] args = cmdline.getArgs();<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (args == null || args.length == 0) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> printUsage();<a name="line.424"></a>
+<span class="sourceLineNo">425</span> throw new IOException(INCORRECT_USAGE);<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> if (args.length != 2) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.429"></a>
+<span class="sourceLineNo">430</span> printUsage();<a name="line.430"></a>
+<span class="sourceLineNo">431</span> throw new IOException(INCORRECT_USAGE);<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a
<TRUNCATED>
[17/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
index 5dbbaf4..c771708 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
@@ -191,71 +191,74 @@
<span class="sourceLineNo">183</span> this.cellEncoder = codec.getEncoder(getOutputStreamForCellEncoder());<a name="line.183"></a>
<span class="sourceLineNo">184</span> if (doCompress) {<a name="line.184"></a>
<span class="sourceLineNo">185</span> this.compressor = codec.getByteStringCompressor();<a name="line.185"></a>
-<span class="sourceLineNo">186</span> }<a name="line.186"></a>
-<span class="sourceLineNo">187</span> }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span> protected void initAfterHeader(boolean doCompress) throws IOException {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> initAfterHeader0(doCompress);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span> // should be called in sub classes's initAfterHeader method to init SecureWALCellCodec.<a name="line.193"></a>
-<span class="sourceLineNo">194</span> protected final void secureInitAfterHeader(boolean doCompress, Encryptor encryptor)<a name="line.194"></a>
-<span class="sourceLineNo">195</span> throws IOException {<a name="line.195"></a>
-<span class="sourceLineNo">196</span> if (conf.getBoolean(HConstants.ENABLE_WAL_ENCRYPTION, false) && encryptor != null) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span> WALCellCodec codec = SecureWALCellCodec.getCodec(this.conf, encryptor);<a name="line.197"></a>
-<span class="sourceLineNo">198</span> this.cellEncoder = codec.getEncoder(getOutputStreamForCellEncoder());<a name="line.198"></a>
-<span class="sourceLineNo">199</span> // We do not support compression<a name="line.199"></a>
-<span class="sourceLineNo">200</span> this.compressionContext = null;<a name="line.200"></a>
-<span class="sourceLineNo">201</span> } else {<a name="line.201"></a>
-<span class="sourceLineNo">202</span> initAfterHeader0(doCompress);<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><a name="line.205"></a>
-<span class="sourceLineNo">206</span> void setWALTrailer(WALTrailer walTrailer) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span> this.trailer = walTrailer;<a name="line.207"></a>
-<span class="sourceLineNo">208</span> }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> public long getLength() {<a name="line.210"></a>
-<span class="sourceLineNo">211</span> return length.get();<a name="line.211"></a>
-<span class="sourceLineNo">212</span> }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span> private WALTrailer buildWALTrailer(WALTrailer.Builder builder) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span> return builder.build();<a name="line.215"></a>
-<span class="sourceLineNo">216</span> }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> protected void writeWALTrailer() {<a name="line.218"></a>
-<span class="sourceLineNo">219</span> try {<a name="line.219"></a>
-<span class="sourceLineNo">220</span> int trailerSize = 0;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> if (this.trailer == null) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span> // use default trailer.<a name="line.222"></a>
-<span class="sourceLineNo">223</span> LOG.warn("WALTrailer is null. Continuing with default.");<a name="line.223"></a>
-<span class="sourceLineNo">224</span> this.trailer = buildWALTrailer(WALTrailer.newBuilder());<a name="line.224"></a>
-<span class="sourceLineNo">225</span> trailerSize = this.trailer.getSerializedSize();<a name="line.225"></a>
-<span class="sourceLineNo">226</span> } else if ((trailerSize = this.trailer.getSerializedSize()) > this.trailerWarnSize) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span> // continue writing after warning the user.<a name="line.227"></a>
-<span class="sourceLineNo">228</span> LOG.warn("Please investigate WALTrailer usage. Trailer size > maximum size : " + trailerSize<a name="line.228"></a>
-<span class="sourceLineNo">229</span> + " > " + this.trailerWarnSize);<a name="line.229"></a>
-<span class="sourceLineNo">230</span> }<a name="line.230"></a>
-<span class="sourceLineNo">231</span> length.set(writeWALTrailerAndMagic(trailer, ProtobufLogReader.PB_WAL_COMPLETE_MAGIC));<a name="line.231"></a>
-<span class="sourceLineNo">232</span> this.trailerWritten = true;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> } catch (IOException ioe) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span> LOG.warn("Failed to write trailer, non-fatal, continuing...", ioe);<a name="line.234"></a>
-<span class="sourceLineNo">235</span> }<a name="line.235"></a>
-<span class="sourceLineNo">236</span> }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span> protected abstract void initOutput(FileSystem fs, Path path, boolean overwritable, int bufferSize,<a name="line.238"></a>
-<span class="sourceLineNo">239</span> short replication, long blockSize) throws IOException, StreamLacksCapabilityException;<a name="line.239"></a>
+<span class="sourceLineNo">186</span> } else {<a name="line.186"></a>
+<span class="sourceLineNo">187</span> this.compressor = WALCellCodec.getNoneCompressor();<a name="line.187"></a>
+<span class="sourceLineNo">188</span> }<a name="line.188"></a>
+<span class="sourceLineNo">189</span> }<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span> protected void initAfterHeader(boolean doCompress) throws IOException {<a name="line.191"></a>
+<span class="sourceLineNo">192</span> initAfterHeader0(doCompress);<a name="line.192"></a>
+<span class="sourceLineNo">193</span> }<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span> // should be called in sub classes's initAfterHeader method to init SecureWALCellCodec.<a name="line.195"></a>
+<span class="sourceLineNo">196</span> protected final void secureInitAfterHeader(boolean doCompress, Encryptor encryptor)<a name="line.196"></a>
+<span class="sourceLineNo">197</span> throws IOException {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> if (conf.getBoolean(HConstants.ENABLE_WAL_ENCRYPTION, false) && encryptor != null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span> WALCellCodec codec = SecureWALCellCodec.getCodec(this.conf, encryptor);<a name="line.199"></a>
+<span class="sourceLineNo">200</span> this.cellEncoder = codec.getEncoder(getOutputStreamForCellEncoder());<a name="line.200"></a>
+<span class="sourceLineNo">201</span> // We do not support compression<a name="line.201"></a>
+<span class="sourceLineNo">202</span> this.compressionContext = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span> this.compressor = WALCellCodec.getNoneCompressor();<a name="line.203"></a>
+<span class="sourceLineNo">204</span> } else {<a name="line.204"></a>
+<span class="sourceLineNo">205</span> initAfterHeader0(doCompress);<a name="line.205"></a>
+<span class="sourceLineNo">206</span> }<a name="line.206"></a>
+<span class="sourceLineNo">207</span> }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span> void setWALTrailer(WALTrailer walTrailer) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span> this.trailer = walTrailer;<a name="line.210"></a>
+<span class="sourceLineNo">211</span> }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> public long getLength() {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> return length.get();<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> private WALTrailer buildWALTrailer(WALTrailer.Builder builder) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> return builder.build();<a name="line.218"></a>
+<span class="sourceLineNo">219</span> }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span> protected void writeWALTrailer() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span> try {<a name="line.222"></a>
+<span class="sourceLineNo">223</span> int trailerSize = 0;<a name="line.223"></a>
+<span class="sourceLineNo">224</span> if (this.trailer == null) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // use default trailer.<a name="line.225"></a>
+<span class="sourceLineNo">226</span> LOG.warn("WALTrailer is null. Continuing with default.");<a name="line.226"></a>
+<span class="sourceLineNo">227</span> this.trailer = buildWALTrailer(WALTrailer.newBuilder());<a name="line.227"></a>
+<span class="sourceLineNo">228</span> trailerSize = this.trailer.getSerializedSize();<a name="line.228"></a>
+<span class="sourceLineNo">229</span> } else if ((trailerSize = this.trailer.getSerializedSize()) > this.trailerWarnSize) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span> // continue writing after warning the user.<a name="line.230"></a>
+<span class="sourceLineNo">231</span> LOG.warn("Please investigate WALTrailer usage. Trailer size > maximum size : " + trailerSize<a name="line.231"></a>
+<span class="sourceLineNo">232</span> + " > " + this.trailerWarnSize);<a name="line.232"></a>
+<span class="sourceLineNo">233</span> }<a name="line.233"></a>
+<span class="sourceLineNo">234</span> length.set(writeWALTrailerAndMagic(trailer, ProtobufLogReader.PB_WAL_COMPLETE_MAGIC));<a name="line.234"></a>
+<span class="sourceLineNo">235</span> this.trailerWritten = true;<a name="line.235"></a>
+<span class="sourceLineNo">236</span> } catch (IOException ioe) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span> LOG.warn("Failed to write trailer, non-fatal, continuing...", ioe);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> }<a name="line.238"></a>
+<span class="sourceLineNo">239</span> }<a name="line.239"></a>
<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * return the file length after written.<a name="line.242"></a>
-<span class="sourceLineNo">243</span> */<a name="line.243"></a>
-<span class="sourceLineNo">244</span> protected abstract long writeMagicAndWALHeader(byte[] magic, WALHeader header) throws IOException;<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span> protected abstract long writeWALTrailerAndMagic(WALTrailer trailer, byte[] magic)<a name="line.246"></a>
-<span class="sourceLineNo">247</span> throws IOException;<a name="line.247"></a>
+<span class="sourceLineNo">241</span> protected abstract void initOutput(FileSystem fs, Path path, boolean overwritable, int bufferSize,<a name="line.241"></a>
+<span class="sourceLineNo">242</span> short replication, long blockSize) throws IOException, StreamLacksCapabilityException;<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span> /**<a name="line.244"></a>
+<span class="sourceLineNo">245</span> * return the file length after written.<a name="line.245"></a>
+<span class="sourceLineNo">246</span> */<a name="line.246"></a>
+<span class="sourceLineNo">247</span> protected abstract long writeMagicAndWALHeader(byte[] magic, WALHeader header) throws IOException;<a name="line.247"></a>
<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> protected abstract OutputStream getOutputStreamForCellEncoder();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>}<a name="line.250"></a>
+<span class="sourceLineNo">249</span> protected abstract long writeWALTrailerAndMagic(WALTrailer trailer, byte[] magic)<a name="line.249"></a>
+<span class="sourceLineNo">250</span> throws IOException;<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span> protected abstract OutputStream getOutputStreamForCellEncoder();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>}<a name="line.253"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.OutputStreamWrapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.OutputStreamWrapper.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.OutputStreamWrapper.html
index a57d846..514d1e3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.OutputStreamWrapper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.OutputStreamWrapper.html
@@ -128,117 +128,116 @@
<span class="sourceLineNo">120</span> @Override<a name="line.120"></a>
<span class="sourceLineNo">121</span> public void append(Entry entry) {<a name="line.121"></a>
<span class="sourceLineNo">122</span> int buffered = output.buffered();<a name="line.122"></a>
-<span class="sourceLineNo">123</span> entry.setCompressionContext(compressionContext);<a name="line.123"></a>
-<span class="sourceLineNo">124</span> try {<a name="line.124"></a>
-<span class="sourceLineNo">125</span> entry.getKey().<a name="line.125"></a>
-<span class="sourceLineNo">126</span> getBuilder(compressor).setFollowingKvCount(entry.getEdit().size()).build()<a name="line.126"></a>
-<span class="sourceLineNo">127</span> .writeDelimitedTo(asyncOutputWrapper);<a name="line.127"></a>
-<span class="sourceLineNo">128</span> } catch (IOException e) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span> throw new AssertionError("should not happen", e);<a name="line.129"></a>
-<span class="sourceLineNo">130</span> }<a name="line.130"></a>
-<span class="sourceLineNo">131</span> try {<a name="line.131"></a>
-<span class="sourceLineNo">132</span> for (Cell cell : entry.getEdit().getCells()) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span> cellEncoder.write(cell);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span> } catch (IOException e) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span> throw new AssertionError("should not happen", e);<a name="line.136"></a>
-<span class="sourceLineNo">137</span> }<a name="line.137"></a>
-<span class="sourceLineNo">138</span> length.addAndGet(output.buffered() - buffered);<a name="line.138"></a>
-<span class="sourceLineNo">139</span> }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span> @Override<a name="line.141"></a>
-<span class="sourceLineNo">142</span> public CompletableFuture<Long> sync() {<a name="line.142"></a>
-<span class="sourceLineNo">143</span> return output.flush(false);<a name="line.143"></a>
-<span class="sourceLineNo">144</span> }<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span> @Override<a name="line.146"></a>
-<span class="sourceLineNo">147</span> public synchronized void close() throws IOException {<a name="line.147"></a>
-<span class="sourceLineNo">148</span> if (this.output == null) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span> return;<a name="line.149"></a>
-<span class="sourceLineNo">150</span> }<a name="line.150"></a>
-<span class="sourceLineNo">151</span> try {<a name="line.151"></a>
-<span class="sourceLineNo">152</span> writeWALTrailer();<a name="line.152"></a>
-<span class="sourceLineNo">153</span> output.close();<a name="line.153"></a>
-<span class="sourceLineNo">154</span> } catch (Exception e) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span> LOG.warn("normal close failed, try recover", e);<a name="line.155"></a>
-<span class="sourceLineNo">156</span> output.recoverAndClose(null);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> this.output = null;<a name="line.158"></a>
-<span class="sourceLineNo">159</span> }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span> public AsyncFSOutput getOutput() {<a name="line.161"></a>
-<span class="sourceLineNo">162</span> return this.output;<a name="line.162"></a>
-<span class="sourceLineNo">163</span> }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span> @Override<a name="line.165"></a>
-<span class="sourceLineNo">166</span> protected void initOutput(FileSystem fs, Path path, boolean overwritable, int bufferSize,<a name="line.166"></a>
-<span class="sourceLineNo">167</span> short replication, long blockSize) throws IOException, StreamLacksCapabilityException {<a name="line.167"></a>
-<span class="sourceLineNo">168</span> this.output = AsyncFSOutputHelper.createOutput(fs, path, overwritable, false, replication,<a name="line.168"></a>
-<span class="sourceLineNo">169</span> blockSize, eventLoopGroup, channelClass);<a name="line.169"></a>
-<span class="sourceLineNo">170</span> this.asyncOutputWrapper = new OutputStreamWrapper(output);<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> private long write(Consumer<CompletableFuture<Long>> action) throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span> CompletableFuture<Long> future = new CompletableFuture<>();<a name="line.174"></a>
-<span class="sourceLineNo">175</span> action.accept(future);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> try {<a name="line.176"></a>
-<span class="sourceLineNo">177</span> return future.get().longValue();<a name="line.177"></a>
-<span class="sourceLineNo">178</span> } catch (InterruptedException e) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> InterruptedIOException ioe = new InterruptedIOException();<a name="line.179"></a>
-<span class="sourceLineNo">180</span> ioe.initCause(e);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> throw ioe;<a name="line.181"></a>
-<span class="sourceLineNo">182</span> } catch (ExecutionException e) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span> Throwables.propagateIfPossible(e.getCause(), IOException.class);<a name="line.183"></a>
-<span class="sourceLineNo">184</span> throw new RuntimeException(e.getCause());<a name="line.184"></a>
-<span class="sourceLineNo">185</span> }<a name="line.185"></a>
-<span class="sourceLineNo">186</span> }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span> protected long writeMagicAndWALHeader(byte[] magic, WALHeader header) throws IOException {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> return write(future -> {<a name="line.190"></a>
-<span class="sourceLineNo">191</span> output.write(magic);<a name="line.191"></a>
-<span class="sourceLineNo">192</span> try {<a name="line.192"></a>
-<span class="sourceLineNo">193</span> header.writeDelimitedTo(asyncOutputWrapper);<a name="line.193"></a>
-<span class="sourceLineNo">194</span> } catch (IOException e) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span> // should not happen<a name="line.195"></a>
-<span class="sourceLineNo">196</span> throw new AssertionError(e);<a name="line.196"></a>
-<span class="sourceLineNo">197</span> }<a name="line.197"></a>
-<span class="sourceLineNo">198</span> output.flush(false).whenComplete((len, error) -> {<a name="line.198"></a>
-<span class="sourceLineNo">199</span> if (error != null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> future.completeExceptionally(error);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> } else {<a name="line.201"></a>
-<span class="sourceLineNo">202</span> future.complete(len);<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> });<a name="line.205"></a>
-<span class="sourceLineNo">206</span> }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span> @Override<a name="line.208"></a>
-<span class="sourceLineNo">209</span> protected long writeWALTrailerAndMagic(WALTrailer trailer, byte[] magic) throws IOException {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> return write(future -> {<a name="line.210"></a>
-<span class="sourceLineNo">211</span> try {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> trailer.writeTo(asyncOutputWrapper);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> } catch (IOException e) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span> // should not happen<a name="line.214"></a>
-<span class="sourceLineNo">215</span> throw new AssertionError(e);<a name="line.215"></a>
-<span class="sourceLineNo">216</span> }<a name="line.216"></a>
-<span class="sourceLineNo">217</span> output.writeInt(trailer.getSerializedSize());<a name="line.217"></a>
-<span class="sourceLineNo">218</span> output.write(magic);<a name="line.218"></a>
-<span class="sourceLineNo">219</span> output.flush(false).whenComplete((len, error) -> {<a name="line.219"></a>
-<span class="sourceLineNo">220</span> if (error != null) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span> future.completeExceptionally(error);<a name="line.221"></a>
-<span class="sourceLineNo">222</span> } else {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> future.complete(len);<a name="line.223"></a>
-<span class="sourceLineNo">224</span> }<a name="line.224"></a>
-<span class="sourceLineNo">225</span> });<a name="line.225"></a>
-<span class="sourceLineNo">226</span> });<a name="line.226"></a>
-<span class="sourceLineNo">227</span> }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span> @Override<a name="line.229"></a>
-<span class="sourceLineNo">230</span> protected OutputStream getOutputStreamForCellEncoder() {<a name="line.230"></a>
-<span class="sourceLineNo">231</span> return asyncOutputWrapper;<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">123</span> try {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> entry.getKey().<a name="line.124"></a>
+<span class="sourceLineNo">125</span> getBuilder(compressor).setFollowingKvCount(entry.getEdit().size()).build()<a name="line.125"></a>
+<span class="sourceLineNo">126</span> .writeDelimitedTo(asyncOutputWrapper);<a name="line.126"></a>
+<span class="sourceLineNo">127</span> } catch (IOException e) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span> throw new AssertionError("should not happen", e);<a name="line.128"></a>
+<span class="sourceLineNo">129</span> }<a name="line.129"></a>
+<span class="sourceLineNo">130</span> try {<a name="line.130"></a>
+<span class="sourceLineNo">131</span> for (Cell cell : entry.getEdit().getCells()) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span> cellEncoder.write(cell);<a name="line.132"></a>
+<span class="sourceLineNo">133</span> }<a name="line.133"></a>
+<span class="sourceLineNo">134</span> } catch (IOException e) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span> throw new AssertionError("should not happen", e);<a name="line.135"></a>
+<span class="sourceLineNo">136</span> }<a name="line.136"></a>
+<span class="sourceLineNo">137</span> length.addAndGet(output.buffered() - buffered);<a name="line.137"></a>
+<span class="sourceLineNo">138</span> }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> @Override<a name="line.140"></a>
+<span class="sourceLineNo">141</span> public CompletableFuture<Long> sync() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span> return output.flush(false);<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">145</span> @Override<a name="line.145"></a>
+<span class="sourceLineNo">146</span> public synchronized void close() throws IOException {<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (this.output == null) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> return;<a name="line.148"></a>
+<span class="sourceLineNo">149</span> }<a name="line.149"></a>
+<span class="sourceLineNo">150</span> try {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> writeWALTrailer();<a name="line.151"></a>
+<span class="sourceLineNo">152</span> output.close();<a name="line.152"></a>
+<span class="sourceLineNo">153</span> } catch (Exception e) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> LOG.warn("normal close failed, try recover", e);<a name="line.154"></a>
+<span class="sourceLineNo">155</span> output.recoverAndClose(null);<a name="line.155"></a>
+<span class="sourceLineNo">156</span> }<a name="line.156"></a>
+<span class="sourceLineNo">157</span> this.output = null;<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span> public AsyncFSOutput getOutput() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span> return this.output;<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>
+<span class="sourceLineNo">164</span> @Override<a name="line.164"></a>
+<span class="sourceLineNo">165</span> protected void initOutput(FileSystem fs, Path path, boolean overwritable, int bufferSize,<a name="line.165"></a>
+<span class="sourceLineNo">166</span> short replication, long blockSize) throws IOException, StreamLacksCapabilityException {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> this.output = AsyncFSOutputHelper.createOutput(fs, path, overwritable, false, replication,<a name="line.167"></a>
+<span class="sourceLineNo">168</span> blockSize, eventLoopGroup, channelClass);<a name="line.168"></a>
+<span class="sourceLineNo">169</span> this.asyncOutputWrapper = new OutputStreamWrapper(output);<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> private long write(Consumer<CompletableFuture<Long>> action) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> CompletableFuture<Long> future = new CompletableFuture<>();<a name="line.173"></a>
+<span class="sourceLineNo">174</span> action.accept(future);<a name="line.174"></a>
+<span class="sourceLineNo">175</span> try {<a name="line.175"></a>
+<span class="sourceLineNo">176</span> return future.get().longValue();<a name="line.176"></a>
+<span class="sourceLineNo">177</span> } catch (InterruptedException e) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span> InterruptedIOException ioe = new InterruptedIOException();<a name="line.178"></a>
+<span class="sourceLineNo">179</span> ioe.initCause(e);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> throw ioe;<a name="line.180"></a>
+<span class="sourceLineNo">181</span> } catch (ExecutionException e) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span> Throwables.propagateIfPossible(e.getCause(), IOException.class);<a name="line.182"></a>
+<span class="sourceLineNo">183</span> throw new RuntimeException(e.getCause());<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span> @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span> protected long writeMagicAndWALHeader(byte[] magic, WALHeader header) throws IOException {<a name="line.188"></a>
+<span class="sourceLineNo">189</span> return write(future -> {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> output.write(magic);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span> header.writeDelimitedTo(asyncOutputWrapper);<a name="line.192"></a>
+<span class="sourceLineNo">193</span> } catch (IOException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span> // should not happen<a name="line.194"></a>
+<span class="sourceLineNo">195</span> throw new AssertionError(e);<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span> output.flush(false).whenComplete((len, error) -> {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> if (error != null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span> future.completeExceptionally(error);<a name="line.199"></a>
+<span class="sourceLineNo">200</span> } else {<a name="line.200"></a>
+<span class="sourceLineNo">201</span> future.complete(len);<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> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span> @Override<a name="line.207"></a>
+<span class="sourceLineNo">208</span> protected long writeWALTrailerAndMagic(WALTrailer trailer, byte[] magic) throws IOException {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> return write(future -> {<a name="line.209"></a>
+<span class="sourceLineNo">210</span> try {<a name="line.210"></a>
+<span class="sourceLineNo">211</span> trailer.writeTo(asyncOutputWrapper);<a name="line.211"></a>
+<span class="sourceLineNo">212</span> } catch (IOException e) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> // should not happen<a name="line.213"></a>
+<span class="sourceLineNo">214</span> throw new AssertionError(e);<a name="line.214"></a>
+<span class="sourceLineNo">215</span> }<a name="line.215"></a>
+<span class="sourceLineNo">216</span> output.writeInt(trailer.getSerializedSize());<a name="line.216"></a>
+<span class="sourceLineNo">217</span> output.write(magic);<a name="line.217"></a>
+<span class="sourceLineNo">218</span> output.flush(false).whenComplete((len, error) -> {<a name="line.218"></a>
+<span class="sourceLineNo">219</span> if (error != null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span> future.completeExceptionally(error);<a name="line.220"></a>
+<span class="sourceLineNo">221</span> } else {<a name="line.221"></a>
+<span class="sourceLineNo">222</span> future.complete(len);<a name="line.222"></a>
+<span class="sourceLineNo">223</span> }<a name="line.223"></a>
+<span class="sourceLineNo">224</span> });<a name="line.224"></a>
+<span class="sourceLineNo">225</span> });<a name="line.225"></a>
+<span class="sourceLineNo">226</span> }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span> @Override<a name="line.228"></a>
+<span class="sourceLineNo">229</span> protected OutputStream getOutputStreamForCellEncoder() {<a name="line.229"></a>
+<span class="sourceLineNo">230</span> return asyncOutputWrapper;<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>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html
index a57d846..514d1e3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.html
@@ -128,117 +128,116 @@
<span class="sourceLineNo">120</span> @Override<a name="line.120"></a>
<span class="sourceLineNo">121</span> public void append(Entry entry) {<a name="line.121"></a>
<span class="sourceLineNo">122</span> int buffered = output.buffered();<a name="line.122"></a>
-<span class="sourceLineNo">123</span> entry.setCompressionContext(compressionContext);<a name="line.123"></a>
-<span class="sourceLineNo">124</span> try {<a name="line.124"></a>
-<span class="sourceLineNo">125</span> entry.getKey().<a name="line.125"></a>
-<span class="sourceLineNo">126</span> getBuilder(compressor).setFollowingKvCount(entry.getEdit().size()).build()<a name="line.126"></a>
-<span class="sourceLineNo">127</span> .writeDelimitedTo(asyncOutputWrapper);<a name="line.127"></a>
-<span class="sourceLineNo">128</span> } catch (IOException e) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span> throw new AssertionError("should not happen", e);<a name="line.129"></a>
-<span class="sourceLineNo">130</span> }<a name="line.130"></a>
-<span class="sourceLineNo">131</span> try {<a name="line.131"></a>
-<span class="sourceLineNo">132</span> for (Cell cell : entry.getEdit().getCells()) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span> cellEncoder.write(cell);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span> } catch (IOException e) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span> throw new AssertionError("should not happen", e);<a name="line.136"></a>
-<span class="sourceLineNo">137</span> }<a name="line.137"></a>
-<span class="sourceLineNo">138</span> length.addAndGet(output.buffered() - buffered);<a name="line.138"></a>
-<span class="sourceLineNo">139</span> }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span> @Override<a name="line.141"></a>
-<span class="sourceLineNo">142</span> public CompletableFuture<Long> sync() {<a name="line.142"></a>
-<span class="sourceLineNo">143</span> return output.flush(false);<a name="line.143"></a>
-<span class="sourceLineNo">144</span> }<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span> @Override<a name="line.146"></a>
-<span class="sourceLineNo">147</span> public synchronized void close() throws IOException {<a name="line.147"></a>
-<span class="sourceLineNo">148</span> if (this.output == null) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span> return;<a name="line.149"></a>
-<span class="sourceLineNo">150</span> }<a name="line.150"></a>
-<span class="sourceLineNo">151</span> try {<a name="line.151"></a>
-<span class="sourceLineNo">152</span> writeWALTrailer();<a name="line.152"></a>
-<span class="sourceLineNo">153</span> output.close();<a name="line.153"></a>
-<span class="sourceLineNo">154</span> } catch (Exception e) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span> LOG.warn("normal close failed, try recover", e);<a name="line.155"></a>
-<span class="sourceLineNo">156</span> output.recoverAndClose(null);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> this.output = null;<a name="line.158"></a>
-<span class="sourceLineNo">159</span> }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span> public AsyncFSOutput getOutput() {<a name="line.161"></a>
-<span class="sourceLineNo">162</span> return this.output;<a name="line.162"></a>
-<span class="sourceLineNo">163</span> }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span> @Override<a name="line.165"></a>
-<span class="sourceLineNo">166</span> protected void initOutput(FileSystem fs, Path path, boolean overwritable, int bufferSize,<a name="line.166"></a>
-<span class="sourceLineNo">167</span> short replication, long blockSize) throws IOException, StreamLacksCapabilityException {<a name="line.167"></a>
-<span class="sourceLineNo">168</span> this.output = AsyncFSOutputHelper.createOutput(fs, path, overwritable, false, replication,<a name="line.168"></a>
-<span class="sourceLineNo">169</span> blockSize, eventLoopGroup, channelClass);<a name="line.169"></a>
-<span class="sourceLineNo">170</span> this.asyncOutputWrapper = new OutputStreamWrapper(output);<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> private long write(Consumer<CompletableFuture<Long>> action) throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span> CompletableFuture<Long> future = new CompletableFuture<>();<a name="line.174"></a>
-<span class="sourceLineNo">175</span> action.accept(future);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> try {<a name="line.176"></a>
-<span class="sourceLineNo">177</span> return future.get().longValue();<a name="line.177"></a>
-<span class="sourceLineNo">178</span> } catch (InterruptedException e) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> InterruptedIOException ioe = new InterruptedIOException();<a name="line.179"></a>
-<span class="sourceLineNo">180</span> ioe.initCause(e);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> throw ioe;<a name="line.181"></a>
-<span class="sourceLineNo">182</span> } catch (ExecutionException e) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span> Throwables.propagateIfPossible(e.getCause(), IOException.class);<a name="line.183"></a>
-<span class="sourceLineNo">184</span> throw new RuntimeException(e.getCause());<a name="line.184"></a>
-<span class="sourceLineNo">185</span> }<a name="line.185"></a>
-<span class="sourceLineNo">186</span> }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span> protected long writeMagicAndWALHeader(byte[] magic, WALHeader header) throws IOException {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> return write(future -> {<a name="line.190"></a>
-<span class="sourceLineNo">191</span> output.write(magic);<a name="line.191"></a>
-<span class="sourceLineNo">192</span> try {<a name="line.192"></a>
-<span class="sourceLineNo">193</span> header.writeDelimitedTo(asyncOutputWrapper);<a name="line.193"></a>
-<span class="sourceLineNo">194</span> } catch (IOException e) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span> // should not happen<a name="line.195"></a>
-<span class="sourceLineNo">196</span> throw new AssertionError(e);<a name="line.196"></a>
-<span class="sourceLineNo">197</span> }<a name="line.197"></a>
-<span class="sourceLineNo">198</span> output.flush(false).whenComplete((len, error) -> {<a name="line.198"></a>
-<span class="sourceLineNo">199</span> if (error != null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> future.completeExceptionally(error);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> } else {<a name="line.201"></a>
-<span class="sourceLineNo">202</span> future.complete(len);<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> });<a name="line.205"></a>
-<span class="sourceLineNo">206</span> }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span> @Override<a name="line.208"></a>
-<span class="sourceLineNo">209</span> protected long writeWALTrailerAndMagic(WALTrailer trailer, byte[] magic) throws IOException {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> return write(future -> {<a name="line.210"></a>
-<span class="sourceLineNo">211</span> try {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> trailer.writeTo(asyncOutputWrapper);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> } catch (IOException e) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span> // should not happen<a name="line.214"></a>
-<span class="sourceLineNo">215</span> throw new AssertionError(e);<a name="line.215"></a>
-<span class="sourceLineNo">216</span> }<a name="line.216"></a>
-<span class="sourceLineNo">217</span> output.writeInt(trailer.getSerializedSize());<a name="line.217"></a>
-<span class="sourceLineNo">218</span> output.write(magic);<a name="line.218"></a>
-<span class="sourceLineNo">219</span> output.flush(false).whenComplete((len, error) -> {<a name="line.219"></a>
-<span class="sourceLineNo">220</span> if (error != null) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span> future.completeExceptionally(error);<a name="line.221"></a>
-<span class="sourceLineNo">222</span> } else {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> future.complete(len);<a name="line.223"></a>
-<span class="sourceLineNo">224</span> }<a name="line.224"></a>
-<span class="sourceLineNo">225</span> });<a name="line.225"></a>
-<span class="sourceLineNo">226</span> });<a name="line.226"></a>
-<span class="sourceLineNo">227</span> }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span> @Override<a name="line.229"></a>
-<span class="sourceLineNo">230</span> protected OutputStream getOutputStreamForCellEncoder() {<a name="line.230"></a>
-<span class="sourceLineNo">231</span> return asyncOutputWrapper;<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">123</span> try {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> entry.getKey().<a name="line.124"></a>
+<span class="sourceLineNo">125</span> getBuilder(compressor).setFollowingKvCount(entry.getEdit().size()).build()<a name="line.125"></a>
+<span class="sourceLineNo">126</span> .writeDelimitedTo(asyncOutputWrapper);<a name="line.126"></a>
+<span class="sourceLineNo">127</span> } catch (IOException e) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span> throw new AssertionError("should not happen", e);<a name="line.128"></a>
+<span class="sourceLineNo">129</span> }<a name="line.129"></a>
+<span class="sourceLineNo">130</span> try {<a name="line.130"></a>
+<span class="sourceLineNo">131</span> for (Cell cell : entry.getEdit().getCells()) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span> cellEncoder.write(cell);<a name="line.132"></a>
+<span class="sourceLineNo">133</span> }<a name="line.133"></a>
+<span class="sourceLineNo">134</span> } catch (IOException e) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span> throw new AssertionError("should not happen", e);<a name="line.135"></a>
+<span class="sourceLineNo">136</span> }<a name="line.136"></a>
+<span class="sourceLineNo">137</span> length.addAndGet(output.buffered() - buffered);<a name="line.137"></a>
+<span class="sourceLineNo">138</span> }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> @Override<a name="line.140"></a>
+<span class="sourceLineNo">141</span> public CompletableFuture<Long> sync() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span> return output.flush(false);<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">145</span> @Override<a name="line.145"></a>
+<span class="sourceLineNo">146</span> public synchronized void close() throws IOException {<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (this.output == null) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> return;<a name="line.148"></a>
+<span class="sourceLineNo">149</span> }<a name="line.149"></a>
+<span class="sourceLineNo">150</span> try {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> writeWALTrailer();<a name="line.151"></a>
+<span class="sourceLineNo">152</span> output.close();<a name="line.152"></a>
+<span class="sourceLineNo">153</span> } catch (Exception e) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> LOG.warn("normal close failed, try recover", e);<a name="line.154"></a>
+<span class="sourceLineNo">155</span> output.recoverAndClose(null);<a name="line.155"></a>
+<span class="sourceLineNo">156</span> }<a name="line.156"></a>
+<span class="sourceLineNo">157</span> this.output = null;<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span> public AsyncFSOutput getOutput() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span> return this.output;<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>
+<span class="sourceLineNo">164</span> @Override<a name="line.164"></a>
+<span class="sourceLineNo">165</span> protected void initOutput(FileSystem fs, Path path, boolean overwritable, int bufferSize,<a name="line.165"></a>
+<span class="sourceLineNo">166</span> short replication, long blockSize) throws IOException, StreamLacksCapabilityException {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> this.output = AsyncFSOutputHelper.createOutput(fs, path, overwritable, false, replication,<a name="line.167"></a>
+<span class="sourceLineNo">168</span> blockSize, eventLoopGroup, channelClass);<a name="line.168"></a>
+<span class="sourceLineNo">169</span> this.asyncOutputWrapper = new OutputStreamWrapper(output);<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> private long write(Consumer<CompletableFuture<Long>> action) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> CompletableFuture<Long> future = new CompletableFuture<>();<a name="line.173"></a>
+<span class="sourceLineNo">174</span> action.accept(future);<a name="line.174"></a>
+<span class="sourceLineNo">175</span> try {<a name="line.175"></a>
+<span class="sourceLineNo">176</span> return future.get().longValue();<a name="line.176"></a>
+<span class="sourceLineNo">177</span> } catch (InterruptedException e) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span> InterruptedIOException ioe = new InterruptedIOException();<a name="line.178"></a>
+<span class="sourceLineNo">179</span> ioe.initCause(e);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> throw ioe;<a name="line.180"></a>
+<span class="sourceLineNo">181</span> } catch (ExecutionException e) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span> Throwables.propagateIfPossible(e.getCause(), IOException.class);<a name="line.182"></a>
+<span class="sourceLineNo">183</span> throw new RuntimeException(e.getCause());<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span> @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span> protected long writeMagicAndWALHeader(byte[] magic, WALHeader header) throws IOException {<a name="line.188"></a>
+<span class="sourceLineNo">189</span> return write(future -> {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> output.write(magic);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span> header.writeDelimitedTo(asyncOutputWrapper);<a name="line.192"></a>
+<span class="sourceLineNo">193</span> } catch (IOException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span> // should not happen<a name="line.194"></a>
+<span class="sourceLineNo">195</span> throw new AssertionError(e);<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span> output.flush(false).whenComplete((len, error) -> {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> if (error != null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span> future.completeExceptionally(error);<a name="line.199"></a>
+<span class="sourceLineNo">200</span> } else {<a name="line.200"></a>
+<span class="sourceLineNo">201</span> future.complete(len);<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> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span> @Override<a name="line.207"></a>
+<span class="sourceLineNo">208</span> protected long writeWALTrailerAndMagic(WALTrailer trailer, byte[] magic) throws IOException {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> return write(future -> {<a name="line.209"></a>
+<span class="sourceLineNo">210</span> try {<a name="line.210"></a>
+<span class="sourceLineNo">211</span> trailer.writeTo(asyncOutputWrapper);<a name="line.211"></a>
+<span class="sourceLineNo">212</span> } catch (IOException e) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> // should not happen<a name="line.213"></a>
+<span class="sourceLineNo">214</span> throw new AssertionError(e);<a name="line.214"></a>
+<span class="sourceLineNo">215</span> }<a name="line.215"></a>
+<span class="sourceLineNo">216</span> output.writeInt(trailer.getSerializedSize());<a name="line.216"></a>
+<span class="sourceLineNo">217</span> output.write(magic);<a name="line.217"></a>
+<span class="sourceLineNo">218</span> output.flush(false).whenComplete((len, error) -> {<a name="line.218"></a>
+<span class="sourceLineNo">219</span> if (error != null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span> future.completeExceptionally(error);<a name="line.220"></a>
+<span class="sourceLineNo">221</span> } else {<a name="line.221"></a>
+<span class="sourceLineNo">222</span> future.complete(len);<a name="line.222"></a>
+<span class="sourceLineNo">223</span> }<a name="line.223"></a>
+<span class="sourceLineNo">224</span> });<a name="line.224"></a>
+<span class="sourceLineNo">225</span> });<a name="line.225"></a>
+<span class="sourceLineNo">226</span> }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span> @Override<a name="line.228"></a>
+<span class="sourceLineNo">229</span> protected OutputStream getOutputStreamForCellEncoder() {<a name="line.229"></a>
+<span class="sourceLineNo">230</span> return asyncOutputWrapper;<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>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html
new file mode 100644
index 0000000..7143edf
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html
@@ -0,0 +1,159 @@
+<!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><a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver.wal;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.lang.reflect.Constructor;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.lang.reflect.InvocationTargetException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.EnumMap;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Map;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.io.TagCompressionContext;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.29"></a>
+<span class="sourceLineNo">030</span><a name="line.30"></a>
+<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * Context that holds the various dictionaries for compression in WAL.<a name="line.32"></a>
+<span class="sourceLineNo">033</span> */<a name="line.33"></a>
+<span class="sourceLineNo">034</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC, HBaseInterfaceAudience.PHOENIX})<a name="line.34"></a>
+<span class="sourceLineNo">035</span>public class CompressionContext {<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span> static final String ENABLE_WAL_TAGS_COMPRESSION =<a name="line.37"></a>
+<span class="sourceLineNo">038</span> "hbase.regionserver.wal.tags.enablecompression";<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span> public enum DictionaryIndex {<a name="line.40"></a>
+<span class="sourceLineNo">041</span> REGION, TABLE, FAMILY, QUALIFIER, ROW<a name="line.41"></a>
+<span class="sourceLineNo">042</span> }<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span> private final Map<DictionaryIndex, Dictionary> dictionaries =<a name="line.44"></a>
+<span class="sourceLineNo">045</span> new EnumMap<>(DictionaryIndex.class);<a name="line.45"></a>
+<span class="sourceLineNo">046</span> // Context used for compressing tags<a name="line.46"></a>
+<span class="sourceLineNo">047</span> TagCompressionContext tagCompressionContext = null;<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span> public CompressionContext(Class<? extends Dictionary> dictType, boolean recoveredEdits,<a name="line.49"></a>
+<span class="sourceLineNo">050</span> boolean hasTagCompression) throws SecurityException, NoSuchMethodException,<a name="line.50"></a>
+<span class="sourceLineNo">051</span> InstantiationException, IllegalAccessException, InvocationTargetException {<a name="line.51"></a>
+<span class="sourceLineNo">052</span> Constructor<? extends Dictionary> dictConstructor =<a name="line.52"></a>
+<span class="sourceLineNo">053</span> dictType.getConstructor();<a name="line.53"></a>
+<span class="sourceLineNo">054</span> for (DictionaryIndex dictionaryIndex : DictionaryIndex.values()) {<a name="line.54"></a>
+<span class="sourceLineNo">055</span> Dictionary newDictionary = dictConstructor.newInstance();<a name="line.55"></a>
+<span class="sourceLineNo">056</span> dictionaries.put(dictionaryIndex, newDictionary);<a name="line.56"></a>
+<span class="sourceLineNo">057</span> }<a name="line.57"></a>
+<span class="sourceLineNo">058</span> if(recoveredEdits) {<a name="line.58"></a>
+<span class="sourceLineNo">059</span> getDictionary(DictionaryIndex.REGION).init(1);<a name="line.59"></a>
+<span class="sourceLineNo">060</span> getDictionary(DictionaryIndex.TABLE).init(1);<a name="line.60"></a>
+<span class="sourceLineNo">061</span> } else {<a name="line.61"></a>
+<span class="sourceLineNo">062</span> getDictionary(DictionaryIndex.REGION).init(Short.MAX_VALUE);<a name="line.62"></a>
+<span class="sourceLineNo">063</span> getDictionary(DictionaryIndex.TABLE).init(Short.MAX_VALUE);<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> getDictionary(DictionaryIndex.ROW).init(Short.MAX_VALUE);<a name="line.66"></a>
+<span class="sourceLineNo">067</span> getDictionary(DictionaryIndex.FAMILY).init(Byte.MAX_VALUE);<a name="line.67"></a>
+<span class="sourceLineNo">068</span> getDictionary(DictionaryIndex.QUALIFIER).init(Byte.MAX_VALUE);<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span> if (hasTagCompression) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> tagCompressionContext = new TagCompressionContext(dictType, Short.MAX_VALUE);<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<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> public Dictionary getDictionary(Enum dictIndex) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span> return dictionaries.get(dictIndex);<a name="line.76"></a>
+<span class="sourceLineNo">077</span> }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span> void clear() {<a name="line.79"></a>
+<span class="sourceLineNo">080</span> for(Dictionary dictionary : dictionaries.values()){<a name="line.80"></a>
+<span class="sourceLineNo">081</span> dictionary.clear();<a name="line.81"></a>
+<span class="sourceLineNo">082</span> }<a name="line.82"></a>
+<span class="sourceLineNo">083</span> if (tagCompressionContext != null) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span> tagCompressionContext.clear();<a name="line.84"></a>
+<span class="sourceLineNo">085</span> }<a name="line.85"></a>
+<span class="sourceLineNo">086</span> }<a name="line.86"></a>
+<span class="sourceLineNo">087</span>}<a name="line.87"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html
index 1341b22..7143edf 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html
@@ -28,67 +28,71 @@
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.lang.reflect.Constructor;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.lang.reflect.InvocationTargetException;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.io.TagCompressionContext;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.27"></a>
-<span class="sourceLineNo">028</span><a name="line.28"></a>
-<span class="sourceLineNo">029</span>/**<a name="line.29"></a>
-<span class="sourceLineNo">030</span> * Context that holds the various dictionaries for compression in WAL.<a name="line.30"></a>
-<span class="sourceLineNo">031</span> */<a name="line.31"></a>
-<span class="sourceLineNo">032</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC, HBaseInterfaceAudience.PHOENIX})<a name="line.32"></a>
-<span class="sourceLineNo">033</span>public class CompressionContext {<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span> static final String ENABLE_WAL_TAGS_COMPRESSION =<a name="line.35"></a>
-<span class="sourceLineNo">036</span> "hbase.regionserver.wal.tags.enablecompression";<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span> // visible only for WALKey, until we move everything into o.a.h.h.wal<a name="line.38"></a>
-<span class="sourceLineNo">039</span> public final Dictionary regionDict;<a name="line.39"></a>
-<span class="sourceLineNo">040</span> public final Dictionary tableDict;<a name="line.40"></a>
-<span class="sourceLineNo">041</span> public final Dictionary familyDict;<a name="line.41"></a>
-<span class="sourceLineNo">042</span> final Dictionary qualifierDict;<a name="line.42"></a>
-<span class="sourceLineNo">043</span> final Dictionary rowDict;<a name="line.43"></a>
-<span class="sourceLineNo">044</span> // Context used for compressing tags<a name="line.44"></a>
-<span class="sourceLineNo">045</span> TagCompressionContext tagCompressionContext = null;<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span> public CompressionContext(Class<? extends Dictionary> dictType, boolean recoveredEdits,<a name="line.47"></a>
-<span class="sourceLineNo">048</span> boolean hasTagCompression) throws SecurityException, NoSuchMethodException,<a name="line.48"></a>
-<span class="sourceLineNo">049</span> InstantiationException, IllegalAccessException, InvocationTargetException {<a name="line.49"></a>
-<span class="sourceLineNo">050</span> Constructor<? extends Dictionary> dictConstructor =<a name="line.50"></a>
-<span class="sourceLineNo">051</span> dictType.getConstructor();<a name="line.51"></a>
-<span class="sourceLineNo">052</span> regionDict = dictConstructor.newInstance();<a name="line.52"></a>
-<span class="sourceLineNo">053</span> tableDict = dictConstructor.newInstance();<a name="line.53"></a>
-<span class="sourceLineNo">054</span> familyDict = dictConstructor.newInstance();<a name="line.54"></a>
-<span class="sourceLineNo">055</span> qualifierDict = dictConstructor.newInstance();<a name="line.55"></a>
-<span class="sourceLineNo">056</span> rowDict = dictConstructor.newInstance();<a name="line.56"></a>
-<span class="sourceLineNo">057</span> if (recoveredEdits) {<a name="line.57"></a>
-<span class="sourceLineNo">058</span> // This will never change<a name="line.58"></a>
-<span class="sourceLineNo">059</span> regionDict.init(1);<a name="line.59"></a>
-<span class="sourceLineNo">060</span> tableDict.init(1);<a name="line.60"></a>
+<span class="sourceLineNo">023</span>import java.util.EnumMap;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Map;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.io.TagCompressionContext;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.29"></a>
+<span class="sourceLineNo">030</span><a name="line.30"></a>
+<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * Context that holds the various dictionaries for compression in WAL.<a name="line.32"></a>
+<span class="sourceLineNo">033</span> */<a name="line.33"></a>
+<span class="sourceLineNo">034</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC, HBaseInterfaceAudience.PHOENIX})<a name="line.34"></a>
+<span class="sourceLineNo">035</span>public class CompressionContext {<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span> static final String ENABLE_WAL_TAGS_COMPRESSION =<a name="line.37"></a>
+<span class="sourceLineNo">038</span> "hbase.regionserver.wal.tags.enablecompression";<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span> public enum DictionaryIndex {<a name="line.40"></a>
+<span class="sourceLineNo">041</span> REGION, TABLE, FAMILY, QUALIFIER, ROW<a name="line.41"></a>
+<span class="sourceLineNo">042</span> }<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span> private final Map<DictionaryIndex, Dictionary> dictionaries =<a name="line.44"></a>
+<span class="sourceLineNo">045</span> new EnumMap<>(DictionaryIndex.class);<a name="line.45"></a>
+<span class="sourceLineNo">046</span> // Context used for compressing tags<a name="line.46"></a>
+<span class="sourceLineNo">047</span> TagCompressionContext tagCompressionContext = null;<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span> public CompressionContext(Class<? extends Dictionary> dictType, boolean recoveredEdits,<a name="line.49"></a>
+<span class="sourceLineNo">050</span> boolean hasTagCompression) throws SecurityException, NoSuchMethodException,<a name="line.50"></a>
+<span class="sourceLineNo">051</span> InstantiationException, IllegalAccessException, InvocationTargetException {<a name="line.51"></a>
+<span class="sourceLineNo">052</span> Constructor<? extends Dictionary> dictConstructor =<a name="line.52"></a>
+<span class="sourceLineNo">053</span> dictType.getConstructor();<a name="line.53"></a>
+<span class="sourceLineNo">054</span> for (DictionaryIndex dictionaryIndex : DictionaryIndex.values()) {<a name="line.54"></a>
+<span class="sourceLineNo">055</span> Dictionary newDictionary = dictConstructor.newInstance();<a name="line.55"></a>
+<span class="sourceLineNo">056</span> dictionaries.put(dictionaryIndex, newDictionary);<a name="line.56"></a>
+<span class="sourceLineNo">057</span> }<a name="line.57"></a>
+<span class="sourceLineNo">058</span> if(recoveredEdits) {<a name="line.58"></a>
+<span class="sourceLineNo">059</span> getDictionary(DictionaryIndex.REGION).init(1);<a name="line.59"></a>
+<span class="sourceLineNo">060</span> getDictionary(DictionaryIndex.TABLE).init(1);<a name="line.60"></a>
<span class="sourceLineNo">061</span> } else {<a name="line.61"></a>
-<span class="sourceLineNo">062</span> regionDict.init(Short.MAX_VALUE);<a name="line.62"></a>
-<span class="sourceLineNo">063</span> tableDict.init(Short.MAX_VALUE);<a name="line.63"></a>
+<span class="sourceLineNo">062</span> getDictionary(DictionaryIndex.REGION).init(Short.MAX_VALUE);<a name="line.62"></a>
+<span class="sourceLineNo">063</span> getDictionary(DictionaryIndex.TABLE).init(Short.MAX_VALUE);<a name="line.63"></a>
<span class="sourceLineNo">064</span> }<a name="line.64"></a>
-<span class="sourceLineNo">065</span> rowDict.init(Short.MAX_VALUE);<a name="line.65"></a>
-<span class="sourceLineNo">066</span> familyDict.init(Byte.MAX_VALUE);<a name="line.66"></a>
-<span class="sourceLineNo">067</span> qualifierDict.init(Byte.MAX_VALUE);<a name="line.67"></a>
-<span class="sourceLineNo">068</span> if (hasTagCompression) {<a name="line.68"></a>
-<span class="sourceLineNo">069</span> tagCompressionContext = new TagCompressionContext(dictType, Short.MAX_VALUE);<a name="line.69"></a>
-<span class="sourceLineNo">070</span> }<a name="line.70"></a>
-<span class="sourceLineNo">071</span> }<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span> void clear() {<a name="line.73"></a>
-<span class="sourceLineNo">074</span> regionDict.clear();<a name="line.74"></a>
-<span class="sourceLineNo">075</span> tableDict.clear();<a name="line.75"></a>
-<span class="sourceLineNo">076</span> familyDict.clear();<a name="line.76"></a>
-<span class="sourceLineNo">077</span> qualifierDict.clear();<a name="line.77"></a>
-<span class="sourceLineNo">078</span> rowDict.clear();<a name="line.78"></a>
-<span class="sourceLineNo">079</span> if (tagCompressionContext != null) {<a name="line.79"></a>
-<span class="sourceLineNo">080</span> tagCompressionContext.clear();<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>}<a name="line.83"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span> getDictionary(DictionaryIndex.ROW).init(Short.MAX_VALUE);<a name="line.66"></a>
+<span class="sourceLineNo">067</span> getDictionary(DictionaryIndex.FAMILY).init(Byte.MAX_VALUE);<a name="line.67"></a>
+<span class="sourceLineNo">068</span> getDictionary(DictionaryIndex.QUALIFIER).init(Byte.MAX_VALUE);<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span> if (hasTagCompression) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> tagCompressionContext = new TagCompressionContext(dictType, Short.MAX_VALUE);<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<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> public Dictionary getDictionary(Enum dictIndex) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span> return dictionaries.get(dictIndex);<a name="line.76"></a>
+<span class="sourceLineNo">077</span> }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span> void clear() {<a name="line.79"></a>
+<span class="sourceLineNo">080</span> for(Dictionary dictionary : dictionaries.values()){<a name="line.80"></a>
+<span class="sourceLineNo">081</span> dictionary.clear();<a name="line.81"></a>
+<span class="sourceLineNo">082</span> }<a name="line.82"></a>
+<span class="sourceLineNo">083</span> if (tagCompressionContext != null) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span> tagCompressionContext.clear();<a name="line.84"></a>
+<span class="sourceLineNo">085</span> }<a name="line.85"></a>
+<span class="sourceLineNo">086</span> }<a name="line.86"></a>
+<span class="sourceLineNo">087</span>}<a name="line.87"></a>
[25/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html
index f236300..513d2ad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/BackupCommands.html
@@ -26,1048 +26,1115 @@
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.backup.impl;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.io.IOException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.net.URI;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.List;<a name="line.42"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BACKUP_LIST_DESC;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_BANDWIDTH_DESC;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_DEBUG_DESC;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_KEEP_DESC;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_LIST;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_PATH_DESC;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_RECORD_NUMBER_DESC;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_BACKUP_DESC;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_SET_DESC;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_DESC;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_TABLE_LIST_DESC;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_WORKERS_DESC;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.apache.hadoop.hbase.backup.BackupRestoreConstants.OPTION_YARN_QUEUE_NAME_DESC;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.lang3.StringUtils;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configured;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<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> * General backup commands, options and usage messages<a name="line.71"></a>
-<span class="sourceLineNo">072</span> */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceAudience.Private<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public final class BackupCommands {<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.77"></a>
-<span class="sourceLineNo">078</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.80"></a>
-<span class="sourceLineNo">081</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.81"></a>
-<span class="sourceLineNo">082</span> + " delete delete an existing backup image\n"<a name="line.82"></a>
-<span class="sourceLineNo">083</span> + " describe show the detailed information of a backup image\n"<a name="line.83"></a>
-<span class="sourceLineNo">084</span> + " history show history of all successful backups\n"<a name="line.84"></a>
-<span class="sourceLineNo">085</span> + " progress show the progress of the latest backup request\n"<a name="line.85"></a>
-<span class="sourceLineNo">086</span> + " set backup set management\n"<a name="line.86"></a>
-<span class="sourceLineNo">087</span> + " repair repair backup system table\n"<a name="line.87"></a>
-<span class="sourceLineNo">088</span> + " merge merge backup images\n"<a name="line.88"></a>
-<span class="sourceLineNo">089</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> public static final String CREATE_CMD_USAGE =<a name="line.91"></a>
-<span class="sourceLineNo">092</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.92"></a>
-<span class="sourceLineNo">093</span> + " type \"full\" to create a full backup image\n"<a name="line.93"></a>
-<span class="sourceLineNo">094</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.94"></a>
-<span class="sourceLineNo">095</span> + " backup_path Full path to store the backup image\n";<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.97"></a>
-<span class="sourceLineNo">098</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.98"></a>
-<span class="sourceLineNo">099</span> + " progress for currently running backup session.";<a name="line.99"></a>
-<span class="sourceLineNo">100</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.100"></a>
-<span class="sourceLineNo">101</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.103"></a>
-<span class="sourceLineNo">104</span> + " backup_id Backup image id\n";<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete <backup_id>\n"<a name="line.108"></a>
-<span class="sourceLineNo">109</span> + " backup_id Backup image id\n";<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.113"></a>
-<span class="sourceLineNo">114</span> + " name Backup set name\n"<a name="line.114"></a>
-<span class="sourceLineNo">115</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.115"></a>
-<span class="sourceLineNo">116</span> + " add add tables to a set, create a set if needed\n"<a name="line.116"></a>
-<span class="sourceLineNo">117</span> + " remove remove tables from a set\n"<a name="line.117"></a>
-<span class="sourceLineNo">118</span> + " list list all backup sets in the system\n"<a name="line.118"></a>
-<span class="sourceLineNo">119</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.119"></a>
-<span class="sourceLineNo">120</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.120"></a>
-<span class="sourceLineNo">121</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span> public static final String USAGE_FOOTER = "";<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> public static abstract class Command extends Configured {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> CommandLine cmdline;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> Connection conn;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> Command(Configuration conf) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (conf == null) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> conf = HBaseConfiguration.create();<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span> setConf(conf);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span> public void execute() throws IOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> printUsage();<a name="line.138"></a>
-<span class="sourceLineNo">139</span> throw new IOException(INCORRECT_USAGE);<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> // Create connection<a name="line.142"></a>
-<span class="sourceLineNo">143</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.143"></a>
-<span class="sourceLineNo">144</span> if (requiresNoActiveSession()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> // Check active session<a name="line.145"></a>
-<span class="sourceLineNo">146</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span> if (sessions.size() > 0) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.150"></a>
-<span class="sourceLineNo">151</span> System.err.println(sessions.get(0));<a name="line.151"></a>
-<span class="sourceLineNo">152</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.152"></a>
-<span class="sourceLineNo">153</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.153"></a>
-<span class="sourceLineNo">154</span> throw new IOException("Active session found, aborted command execution");<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> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> if (requiresConsistentState()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span> // Check failed delete<a name="line.159"></a>
-<span class="sourceLineNo">160</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (ids != null && ids.length > 0) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> System.err.println("Backup system recovery is required.");<a name="line.165"></a>
-<span class="sourceLineNo">166</span> throw new IOException("Failed backup DELETE found, aborted command execution");<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.169"></a>
-<span class="sourceLineNo">170</span> if (ids != null && ids.length > 0) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.171"></a>
-<span class="sourceLineNo">172</span> System.err.println("Backup system recovery is required.");<a name="line.172"></a>
-<span class="sourceLineNo">173</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> }<a name="line.175"></a>
-<span class="sourceLineNo">176</span> }<a name="line.176"></a>
-<span class="sourceLineNo">177</span> }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span> public void finish() throws IOException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (conn != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> conn.close();<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> protected abstract void printUsage();<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * The command can't be run if active backup session is in progress<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * @return true if no active sessions are in progress<a name="line.189"></a>
-<span class="sourceLineNo">190</span> */<a name="line.190"></a>
-<span class="sourceLineNo">191</span> protected boolean requiresNoActiveSession() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span> return false;<a name="line.192"></a>
-<span class="sourceLineNo">193</span> }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * because of an abnormal termination of a backup session or delete command<a name="line.197"></a>
-<span class="sourceLineNo">198</span> * @return true, if yes<a name="line.198"></a>
-<span class="sourceLineNo">199</span> */<a name="line.199"></a>
-<span class="sourceLineNo">200</span> protected boolean requiresConsistentState() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> return false;<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 BackupCommands() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span> throw new AssertionError("Instantiating utility class...");<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> Command cmd;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> switch (type) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> case CREATE:<a name="line.212"></a>
-<span class="sourceLineNo">213</span> cmd = new CreateCommand(conf, cmdline);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span> case DESCRIBE:<a name="line.215"></a>
-<span class="sourceLineNo">216</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.216"></a>
+<span class="sourceLineNo">044</span>import java.io.IOException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.net.URI;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.List;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.lang3.StringUtils;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.conf.Configured;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.FileSystem;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.fs.Path;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.TableName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.backup.BackupAdmin;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.backup.BackupInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.backup.BackupInfo.BackupState;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.backup.BackupRequest;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.backup.BackupRestoreConstants.BackupCommand;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.backup.BackupType;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.backup.HBackupFileSystem;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.backup.util.BackupSet;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.yetus.audience.InterfaceAudience;<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> * General backup commands, options and usage messages<a name="line.75"></a>
+<span class="sourceLineNo">076</span> */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@InterfaceAudience.Private<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public final class BackupCommands {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> public final static String INCORRECT_USAGE = "Incorrect usage";<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> public final static String TOP_LEVEL_NOT_ALLOWED =<a name="line.81"></a>
+<span class="sourceLineNo">082</span> "Top level (root) folder is not allowed to be a backup destination";<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> public static final String USAGE = "Usage: hbase backup COMMAND [command-specific arguments]\n"<a name="line.84"></a>
+<span class="sourceLineNo">085</span> + "where COMMAND is one of:\n" + " create create a new backup image\n"<a name="line.85"></a>
+<span class="sourceLineNo">086</span> + " delete delete an existing backup image\n"<a name="line.86"></a>
+<span class="sourceLineNo">087</span> + " describe show the detailed information of a backup image\n"<a name="line.87"></a>
+<span class="sourceLineNo">088</span> + " history show history of all successful backups\n"<a name="line.88"></a>
+<span class="sourceLineNo">089</span> + " progress show the progress of the latest backup request\n"<a name="line.89"></a>
+<span class="sourceLineNo">090</span> + " set backup set management\n"<a name="line.90"></a>
+<span class="sourceLineNo">091</span> + " repair repair backup system table\n"<a name="line.91"></a>
+<span class="sourceLineNo">092</span> + " merge merge backup images\n"<a name="line.92"></a>
+<span class="sourceLineNo">093</span> + "Run \'hbase backup COMMAND -h\' to see help message for each command\n";<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span> public static final String CREATE_CMD_USAGE =<a name="line.95"></a>
+<span class="sourceLineNo">096</span> "Usage: hbase backup create <type> <backup_path> [options]\n"<a name="line.96"></a>
+<span class="sourceLineNo">097</span> + " type \"full\" to create a full backup image\n"<a name="line.97"></a>
+<span class="sourceLineNo">098</span> + " \"incremental\" to create an incremental backup image\n"<a name="line.98"></a>
+<span class="sourceLineNo">099</span> + " backup_path Full path to store the backup image\n";<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span> public static final String PROGRESS_CMD_USAGE = "Usage: hbase backup progress <backup_id>\n"<a name="line.101"></a>
+<span class="sourceLineNo">102</span> + " backup_id Backup image id (optional). If no id specified, the command will show\n"<a name="line.102"></a>
+<span class="sourceLineNo">103</span> + " progress for currently running backup session.";<a name="line.103"></a>
+<span class="sourceLineNo">104</span> public static final String NO_INFO_FOUND = "No info was found for backup id: ";<a name="line.104"></a>
+<span class="sourceLineNo">105</span> public static final String NO_ACTIVE_SESSION_FOUND = "No active backup sessions found.";<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> public static final String DESCRIBE_CMD_USAGE = "Usage: hbase backup describe <backup_id>\n"<a name="line.107"></a>
+<span class="sourceLineNo">108</span> + " backup_id Backup image id\n";<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> public static final String HISTORY_CMD_USAGE = "Usage: hbase backup history [options]";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> public static final String DELETE_CMD_USAGE = "Usage: hbase backup delete [options]";<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> public static final String REPAIR_CMD_USAGE = "Usage: hbase backup repair\n";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> public static final String SET_CMD_USAGE = "Usage: hbase backup set COMMAND [name] [tables]\n"<a name="line.116"></a>
+<span class="sourceLineNo">117</span> + " name Backup set name\n"<a name="line.117"></a>
+<span class="sourceLineNo">118</span> + " tables Comma separated list of tables.\n" + "COMMAND is one of:\n"<a name="line.118"></a>
+<span class="sourceLineNo">119</span> + " add add tables to a set, create a set if needed\n"<a name="line.119"></a>
+<span class="sourceLineNo">120</span> + " remove remove tables from a set\n"<a name="line.120"></a>
+<span class="sourceLineNo">121</span> + " list list all backup sets in the system\n"<a name="line.121"></a>
+<span class="sourceLineNo">122</span> + " describe describe set\n" + " delete delete backup set\n";<a name="line.122"></a>
+<span class="sourceLineNo">123</span> public static final String MERGE_CMD_USAGE = "Usage: hbase backup merge [backup_ids]\n"<a name="line.123"></a>
+<span class="sourceLineNo">124</span> + " backup_ids Comma separated list of backup image ids.\n";<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static final String USAGE_FOOTER = "";<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> public static abstract class Command extends Configured {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> CommandLine cmdline;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> Connection conn;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span> Command(Configuration conf) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span> if (conf == null) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> conf = HBaseConfiguration.create();<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span> setConf(conf);<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> public void execute() throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> if (cmdline.hasOption("h") || cmdline.hasOption("help")) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span> printUsage();<a name="line.141"></a>
+<span class="sourceLineNo">142</span> throw new IOException(INCORRECT_USAGE);<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">145</span> // Create connection<a name="line.145"></a>
+<span class="sourceLineNo">146</span> conn = ConnectionFactory.createConnection(getConf());<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (requiresNoActiveSession()) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // Check active session<a name="line.148"></a>
+<span class="sourceLineNo">149</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span> List<BackupInfo> sessions = table.getBackupInfos(BackupState.RUNNING);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span> if (sessions.size() > 0) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> System.err.println("Found backup session in a RUNNING state: ");<a name="line.153"></a>
+<span class="sourceLineNo">154</span> System.err.println(sessions.get(0));<a name="line.154"></a>
+<span class="sourceLineNo">155</span> System.err.println("This may indicate that a previous session has failed abnormally.");<a name="line.155"></a>
+<span class="sourceLineNo">156</span> System.err.println("In this case, backup recovery is recommended.");<a name="line.156"></a>
+<span class="sourceLineNo">157</span> throw new IOException("Active session found, aborted command execution");<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span> }<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span> if (requiresConsistentState()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span> // Check failed delete<a name="line.162"></a>
+<span class="sourceLineNo">163</span> try (BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> String[] ids = table.getListOfBackupIdsFromDeleteOperation();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span> if (ids != null && ids.length > 0) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> System.err.println("Found failed backup DELETE coommand. ");<a name="line.167"></a>
+<span class="sourceLineNo">168</span> System.err.println("Backup system recovery is required.");<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throw new IOException("Failed backup DELETE found, aborted command execution");<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> ids = table.getListOfBackupIdsFromMergeOperation();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> if (ids != null && ids.length > 0) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> System.err.println("Found failed backup MERGE coommand. ");<a name="line.174"></a>
+<span class="sourceLineNo">175</span> System.err.println("Backup system recovery is required.");<a name="line.175"></a>
+<span class="sourceLineNo">176</span> throw new IOException("Failed backup MERGE found, aborted command execution");<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> }<a name="line.179"></a>
+<span class="sourceLineNo">180</span> }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span> public void finish() throws IOException {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> if (conn != null) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> conn.close();<a name="line.184"></a>
+<span class="sourceLineNo">185</span> }<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> protected abstract void printUsage();<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * The command can't be run if active backup session is in progress<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * @return true if no active sessions are in progress<a name="line.192"></a>
+<span class="sourceLineNo">193</span> */<a name="line.193"></a>
+<span class="sourceLineNo">194</span> protected boolean requiresNoActiveSession() {<a name="line.194"></a>
+<span class="sourceLineNo">195</span> return false;<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * Command requires consistent state of a backup system Backup system may become inconsistent<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * because of an abnormal termination of a backup session or delete command<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * @return true, if yes<a name="line.201"></a>
+<span class="sourceLineNo">202</span> */<a name="line.202"></a>
+<span class="sourceLineNo">203</span> protected boolean requiresConsistentState() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return false;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> private BackupCommands() {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> throw new AssertionError("Instantiating utility class...");<a name="line.209"></a>
+<span class="sourceLineNo">210</span> }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span> public static Command createCommand(Configuration conf, BackupCommand type, CommandLine cmdline) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> Command cmd;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> switch (type) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> case CREATE:<a name="line.215"></a>
+<span class="sourceLineNo">216</span> cmd = new CreateCommand(conf, cmdline);<a name="line.216"></a>
<span class="sourceLineNo">217</span> break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span> case PROGRESS:<a name="line.218"></a>
-<span class="sourceLineNo">219</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.219"></a>
+<span class="sourceLineNo">218</span> case DESCRIBE:<a name="line.218"></a>
+<span class="sourceLineNo">219</span> cmd = new DescribeCommand(conf, cmdline);<a name="line.219"></a>
<span class="sourceLineNo">220</span> break;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> case DELETE:<a name="line.221"></a>
-<span class="sourceLineNo">222</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.222"></a>
+<span class="sourceLineNo">221</span> case PROGRESS:<a name="line.221"></a>
+<span class="sourceLineNo">222</span> cmd = new ProgressCommand(conf, cmdline);<a name="line.222"></a>
<span class="sourceLineNo">223</span> break;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> case HISTORY:<a name="line.224"></a>
-<span class="sourceLineNo">225</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.225"></a>
+<span class="sourceLineNo">224</span> case DELETE:<a name="line.224"></a>
+<span class="sourceLineNo">225</span> cmd = new DeleteCommand(conf, cmdline);<a name="line.225"></a>
<span class="sourceLineNo">226</span> break;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> case SET:<a name="line.227"></a>
-<span class="sourceLineNo">228</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.228"></a>
+<span class="sourceLineNo">227</span> case HISTORY:<a name="line.227"></a>
+<span class="sourceLineNo">228</span> cmd = new HistoryCommand(conf, cmdline);<a name="line.228"></a>
<span class="sourceLineNo">229</span> break;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> case REPAIR:<a name="line.230"></a>
-<span class="sourceLineNo">231</span> cmd = new RepairCommand(conf, cmdline);<a name="line.231"></a>
+<span class="sourceLineNo">230</span> case SET:<a name="line.230"></a>
+<span class="sourceLineNo">231</span> cmd = new BackupSetCommand(conf, cmdline);<a name="line.231"></a>
<span class="sourceLineNo">232</span> break;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> case MERGE:<a name="line.233"></a>
-<span class="sourceLineNo">234</span> cmd = new MergeCommand(conf, cmdline);<a name="line.234"></a>
+<span class="sourceLineNo">233</span> case REPAIR:<a name="line.233"></a>
+<span class="sourceLineNo">234</span> cmd = new RepairCommand(conf, cmdline);<a name="line.234"></a>
<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> case HELP:<a name="line.236"></a>
-<span class="sourceLineNo">237</span> default:<a name="line.237"></a>
-<span class="sourceLineNo">238</span> cmd = new HelpCommand(conf, cmdline);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> break;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return cmd;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span> static int numOfArgs(String[] args) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> if (args == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> return 0;<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> return args.length;<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
+<span class="sourceLineNo">236</span> case MERGE:<a name="line.236"></a>
+<span class="sourceLineNo">237</span> cmd = new MergeCommand(conf, cmdline);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> break;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> case HELP:<a name="line.239"></a>
+<span class="sourceLineNo">240</span> default:<a name="line.240"></a>
+<span class="sourceLineNo">241</span> cmd = new HelpCommand(conf, cmdline);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> break;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> return cmd;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> static int numOfArgs(String[] args) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> if (args == null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span> return 0;<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> public static class CreateCommand extends Command {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span> super(conf);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> this.cmdline = cmdline;<a name="line.255"></a>
-<span class="sourceLineNo">256</span> }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span> @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span> protected boolean requiresNoActiveSession() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> return true;<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span> protected boolean requiresConsistentState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> return true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span> }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span> @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span> public void execute() throws IOException {<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> printUsage();<a name="line.271"></a>
-<span class="sourceLineNo">272</span> throw new IOException(INCORRECT_USAGE);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span> String[] args = cmdline.getArgs();<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (args.length != 3) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> printUsage();<a name="line.276"></a>
-<span class="sourceLineNo">277</span> throw new IOException(INCORRECT_USAGE);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.280"></a>
-<span class="sourceLineNo">281</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> printUsage();<a name="line.283"></a>
-<span class="sourceLineNo">284</span> throw new IOException(INCORRECT_USAGE);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span> if (!verifyPath(args[2])) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> printUsage();<a name="line.288"></a>
-<span class="sourceLineNo">289</span> throw new IOException(INCORRECT_USAGE);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> String targetBackupDir = args[2];<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.292"></a>
-<span class="sourceLineNo">293</span> if (isRootFolder(targetBackupDir)) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> String tables;<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span> // Check if we have both: backup set and list of tables<a name="line.298"></a>
-<span class="sourceLineNo">299</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.300"></a>
-<span class="sourceLineNo">301</span> + " of tables, but not both");<a name="line.301"></a>
-<span class="sourceLineNo">302</span> printUsage();<a name="line.302"></a>
-<span class="sourceLineNo">303</span> throw new IOException(INCORRECT_USAGE);<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // Creates connection<a name="line.305"></a>
-<span class="sourceLineNo">306</span> super.execute();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Check backup set<a name="line.307"></a>
-<span class="sourceLineNo">308</span> String setName = null;<a name="line.308"></a>
-<span class="sourceLineNo">309</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> tables = getTablesForSet(setName, getConf());<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> if (tables == null) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> System.out.println("ERROR: Backup set '" + setName<a name="line.314"></a>
-<span class="sourceLineNo">315</span> + "' is either empty or does not exist");<a name="line.315"></a>
-<span class="sourceLineNo">316</span> printUsage();<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throw new IOException(INCORRECT_USAGE);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span> int bandwidth =<a name="line.322"></a>
-<span class="sourceLineNo">323</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.323"></a>
-<span class="sourceLineNo">324</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> int workers =<a name="line.325"></a>
-<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.326"></a>
-<span class="sourceLineNo">327</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // Set system property value for MR job<a name="line.331"></a>
-<span class="sourceLineNo">332</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> BackupRequest request =<a name="line.337"></a>
-<span class="sourceLineNo">338</span> builder<a name="line.338"></a>
-<span class="sourceLineNo">339</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.339"></a>
-<span class="sourceLineNo">340</span> .withTableList(<a name="line.340"></a>
-<span class="sourceLineNo">341</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.341"></a>
-<span class="sourceLineNo">342</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.342"></a>
-<span class="sourceLineNo">343</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> String backupId = admin.backupTables(request);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.345"></a>
-<span class="sourceLineNo">346</span> } catch (IOException e) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.347"></a>
-<span class="sourceLineNo">348</span> throw e;<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> Path p = new Path(targetBackupDir);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> return p.isRoot();<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> private boolean verifyPath(String path) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> Path p = new Path(path);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> URI uri = p.toUri();<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (uri.getScheme() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> return false;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> FileSystem.get(uri, conf);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> return true;<a name="line.368"></a>
-<span class="sourceLineNo">369</span> } catch (Exception e) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> return false;<a name="line.370"></a>
-<span class="sourceLineNo">371</span> }<a name="line.371"></a>
-<span class="sourceLineNo">372</span> }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (tables == null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> return null;<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span> protected void printUsage() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> System.out.println(CREATE_CMD_USAGE);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> Options options = new Options();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.397"></a>
-<span class="sourceLineNo">398</span> helpFormatter.setLeftPadding(2);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> helpFormatter.setDescPadding(8);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> helpFormatter.setWidth(100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.401"></a>
-<span class="sourceLineNo">402</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> public static class HelpCommand extends Command {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span> super(conf);<a name="line.408"></a>
-<span class="sourceLineNo">409</span> this.cmdline = cmdline;<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void execute() throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> if (cmdline == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span> printUsage();<a name="line.415"></a>
-<span class="sourceLineNo">416</span> throw new IOException(INCORRECT_USAGE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span> }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span> String[] args = cmdline.getArgs();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> if (args == null || args.length == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span> printUsage();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> throw new IOException(INCORRECT_USAGE);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> if (args.length != 2) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.426"></a>
-<span class="sourceLineNo">427</span> printUsage();<a name="line.427"></a>
-<span class="sourceLineNo">428</span> throw new IOException(INCORRECT_USAGE);<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> String type = args[1];<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (BackupCommand.CREATE.name().equalsIgnoreCase(type)) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> System.out.println(CREATE_CMD_USAGE);<a name="line.434"></a>
-<span class="sourceLineNo">435</span> } else if (BackupCommand.DESCRIBE.name().equalsIgnoreCase(type)) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.436"></a>
-<span class="sourceLineNo">437</span> } else if (BackupCommand.HISTORY.name().equalsIgnoreCase(type)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> System.out.println(HISTORY_CMD_USAGE);<a name="line.438"></a>
-<span class="sourceLineNo">439</span> } else if (BackupCommand.PROGRESS.name().equalsIgnoreCase(type)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> System.out.println(PROGRESS_CMD_USAGE);<a name="line.440"></a>
-<span class="sourceLineNo">441</span> } else if (BackupCommand.DELETE.name().equalsIgnoreCase(type)) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> System.out.println(DELETE_CMD_USAGE);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> } else if (BackupCommand.SET.name().equalsIgnoreCase(type)) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> System.out.println(SET_CMD_USAGE);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> } else {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> System.out.println("Unknown command : " + type);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> printUsage();<a name="line.447"></a>
-<span class="sourceLineNo">448</span> }<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span> @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected void printUsage() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> System.out.println(USAGE);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> }<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span> public static class DescribeCommand extends Command {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> DescribeCommand(Configuration conf, CommandLine cmdline) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> super(conf);<a name="line.459"></a>
-<span class="sourceLineNo">460</span> this.cmdline = cmdline;<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span> public void execute() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> printUsage();<a name="line.466"></a>
-<span class="sourceLineNo">467</span> throw new IOException(INCORRECT_USAGE);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span> String[] args = cmdline.getArgs();<a name="line.469"></a>
-<span class="sourceLineNo">470</span> if (args.length != 2) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> printUsage();<a name="line.471"></a>
-<span class="sourceLineNo">472</span> throw new IOException(INCORRECT_USAGE);<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> super.execute();<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> String backupId = args[1];<a name="line.477"></a>
-<span class="sourceLineNo">478</span> try (final BackupSystemTable sysTable = new BackupSystemTable(conn)) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> BackupInfo info = sysTable.readBackupInfo(backupId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span> if (info == null) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> System.out.println("ERROR: " + backupId + " does not exist");<a name="line.481"></a>
-<span class="sourceLineNo">482</span> printUsage();<a name="line.482"></a>
-<span class="sourceLineNo">483</span> throw new IOException(INCORRECT_USAGE);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> System.out.println(info.getShortDescription());<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> @Override<a name="line.489"></a>
-<span class="sourceLineNo">490</span> protected void printUsage() {<a name="line.490"></a>
-<span class="sourceLineNo">491</span> System.out.println(DESCRIBE_CMD_USAGE);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<a name="line.492"></a>
-<span class="sourceLineNo">493</span> }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span> public static class ProgressCommand extends Command {<a name="line.495"></a>
-<span class="sourceLineNo">496</span> ProgressCommand(Configuration conf, CommandLine cmdline) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span> super(conf);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> this.cmdline = cmdline;<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public void execute() throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">252</span> return args.length;<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> public static class CreateCommand extends Command {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> CreateCommand(Configuration conf, CommandLine cmdline) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> super(conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span> this.cmdline = cmdline;<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span> @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span> protected boolean requiresNoActiveSession() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return true;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span> protected boolean requiresConsistentState() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> return true;<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span> @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span> public void execute() throws IOException {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> if (cmdline == null || cmdline.getArgs() == null) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> printUsage();<a name="line.274"></a>
+<span class="sourceLineNo">275</span> throw new IOException(INCORRECT_USAGE);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span> String[] args = cmdline.getArgs();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> if (args.length != 3) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> printUsage();<a name="line.279"></a>
+<span class="sourceLineNo">280</span> throw new IOException(INCORRECT_USAGE);<a name="line.280"></a>
+<span class="sourceLineNo">281</span> }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span> if (!BackupType.FULL.toString().equalsIgnoreCase(args[1])<a name="line.283"></a>
+<span class="sourceLineNo">284</span> && !BackupType.INCREMENTAL.toString().equalsIgnoreCase(args[1])) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> System.out.println("ERROR: invalid backup type: " + args[1]);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> printUsage();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> throw new IOException(INCORRECT_USAGE);<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> if (!verifyPath(args[2])) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> System.out.println("ERROR: invalid backup destination: " + args[2]);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> printUsage();<a name="line.291"></a>
+<span class="sourceLineNo">292</span> throw new IOException(INCORRECT_USAGE);<a name="line.292"></a>
+<span class="sourceLineNo">293</span> }<a name="line.293"></a>
+<span class="sourceLineNo">294</span> String targetBackupDir = args[2];<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // Check if backup destination is top level (root) folder - not allowed<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (isRootFolder(targetBackupDir)) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> throw new IOException(TOP_LEVEL_NOT_ALLOWED);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> String tables;<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span> // Check if we have both: backup set and list of tables<a name="line.301"></a>
+<span class="sourceLineNo">302</span> if (cmdline.hasOption(OPTION_TABLE) && cmdline.hasOption(OPTION_SET)) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> System.out.println("ERROR: You can specify either backup set or list"<a name="line.303"></a>
+<span class="sourceLineNo">304</span> + " of tables, but not both");<a name="line.304"></a>
+<span class="sourceLineNo">305</span> printUsage();<a name="line.305"></a>
+<span class="sourceLineNo">306</span> throw new IOException(INCORRECT_USAGE);<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span> // Creates connection<a name="line.308"></a>
+<span class="sourceLineNo">309</span> super.execute();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Check backup set<a name="line.310"></a>
+<span class="sourceLineNo">311</span> String setName = null;<a name="line.311"></a>
+<span class="sourceLineNo">312</span> if (cmdline.hasOption(OPTION_SET)) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span> setName = cmdline.getOptionValue(OPTION_SET);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> tables = getTablesForSet(setName, getConf());<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span> if (tables == null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> System.out.println("ERROR: Backup set '" + setName<a name="line.317"></a>
+<span class="sourceLineNo">318</span> + "' is either empty or does not exist");<a name="line.318"></a>
+<span class="sourceLineNo">319</span> printUsage();<a name="line.319"></a>
+<span class="sourceLineNo">320</span> throw new IOException(INCORRECT_USAGE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> } else {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> tables = cmdline.getOptionValue(OPTION_TABLE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span> int bandwidth =<a name="line.325"></a>
+<span class="sourceLineNo">326</span> cmdline.hasOption(OPTION_BANDWIDTH) ? Integer.parseInt(cmdline<a name="line.326"></a>
+<span class="sourceLineNo">327</span> .getOptionValue(OPTION_BANDWIDTH)) : -1;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> int workers =<a name="line.328"></a>
+<span class="sourceLineNo">329</span> cmdline.hasOption(OPTION_WORKERS) ? Integer.parseInt(cmdline<a name="line.329"></a>
+<span class="sourceLineNo">330</span> .getOptionValue(OPTION_WORKERS)) : -1;<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> if (cmdline.hasOption(OPTION_YARN_QUEUE_NAME)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> String queueName = cmdline.getOptionValue(OPTION_YARN_QUEUE_NAME);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> // Set system property value for MR job<a name="line.334"></a>
+<span class="sourceLineNo">335</span> System.setProperty("mapreduce.job.queuename", queueName);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> try (BackupAdminImpl admin = new BackupAdminImpl(conn)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span> BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.339"></a>
+<span class="sourceLineNo">340</span> BackupRequest request =<a name="line.340"></a>
+<span class="sourceLineNo">341</span> builder<a name="line.341"></a>
+<span class="sourceLineNo">342</span> .withBackupType(BackupType.valueOf(args[1].toUpperCase()))<a name="line.342"></a>
+<span class="sourceLineNo">343</span> .withTableList(<a name="line.343"></a>
+<span class="sourceLineNo">344</span> tables != null ? Lists.newArrayList(BackupUtils.parseTableNames(tables)) : null)<a name="line.344"></a>
+<span class="sourceLineNo">345</span> .withTargetRootDir(targetBackupDir).withTotalTasks(workers)<a name="line.345"></a>
+<span class="sourceLineNo">346</span> .withBandwidthPerTasks(bandwidth).withBackupSetName(setName).build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String backupId = admin.backupTables(request);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> System.out.println("Backup session " + backupId + " finished. Status: SUCCESS");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> } catch (IOException e) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> System.out.println("Backup session finished. Status: FAILURE");<a name="line.350"></a>
+<span class="sourceLineNo">351</span> throw e;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> private boolean isRootFolder(String targetBackupDir) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> Path p = new Path(targetBackupDir);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return p.isRoot();<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span> private boolean verifyPath(String path) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> try {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> Path p = new Path(path);<a name="line.362"></a>
+<span class="sourceLineNo">363</span> Configuration conf = getConf() != null ? getConf() : HBaseConfiguration.create();<a name="line.363"></a>
+<span class="sourceLineNo">364</span> URI uri = p.toUri();<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> if (uri.getScheme() == null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span> return false;<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> FileSystem.get(uri, conf);<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return true;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> } catch (Exception e) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return false;<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span> private String getTablesForSet(String name, Configuration conf) throws IOException {<a name="line.377"></a>
+<span class="sourceLineNo">378</span> try (final BackupSystemTable table = new BackupSystemTable(conn)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> List<TableName> tables = table.describeBackupSet(name);<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span> if (tables == null) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span> return null;<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> return StringUtils.join(tables, BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> @Override<a name="line.389"></a>
+<span class="sourceLineNo">390</span> protected void printUsage() {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> System.out.println(CREATE_CMD_USAGE);<a name="line.391"></a>
+<span class="sourceLineNo">392</span> Options options = new Options();<a name="line.392"></a>
+<span class="sourceLineNo">393</span> options.addOption(OPTION_WORKERS, true, OPTION_WORKERS_DESC);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> options.addOption(OPTION_BANDWIDTH, true, OPTION_BANDWIDTH_DESC);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> options.addOption(OPTION_SET, true, OPTION_SET_BACKUP_DESC);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> options.addOption(OPTION_TABLE, true, OPTION_TABLE_LIST_DESC);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> options.addOption(OPTION_YARN_QUEUE_NAME, true, OPTION_YARN_QUEUE_NAME_DESC);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> options.addOption(OPTION_DEBUG, false, OPTION_DEBUG_DESC);<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span> HelpFormatter helpFormatter = new HelpFormatter();<a name="line.400"></a>
+<span class="sourceLineNo">401</span> helpFormatter.setLeftPadding(2);<a name="line.401"></a>
+<span class="sourceLineNo">402</span> helpFormatter.setDescPadding(8);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> helpFormatter.setWidth(100);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> helpFormatter.setSyntaxPrefix("Options:");<a name="line.404"></a>
+<span class="sourceLineNo">405</span> helpFormatter.printHelp(" ", null, options, USAGE_FOOTER);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<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> public static class HelpCommand extends Command {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> HelpCommand(Configuration conf, CommandLine cmdline) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> super(conf);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> this.cmdline = cmdline;<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span> @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span> public void execute() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span> if (cmdline == null) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> printUsage();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> throw new IOException(INCORRECT_USAGE);<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> String[] args = cmdline.getArgs();<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (args == null || args.length == 0) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> printUsage();<a name="line.424"></a>
+<span class="sourceLineNo">425</span> throw new IOException(INCORRECT_USAGE);<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span> if (args.length != 2) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> System.out.println("ERROR: Only supports help message of a single command type");<a name="line.429"></a>
+<span class="sourceLineNo">430</span> printUsage();<a name="line.430"></a>
+<span class="sourceLineNo">431</span> throw new IOException(INCORRECT_USAGE);<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="li
<TRUNCATED>
[50/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index edb1ed4..74c8741 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180613" />
+ <meta name="Date-Revision-yyyymmdd" content="20180614" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Checkstyle Results</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -284,7 +284,7 @@
<td>3640</td>
<td>0</td>
<td>0</td>
-<td>16197</td></tr></table></div>
+<td>16190</td></tr></table></div>
<div class="section">
<h2><a name="Files"></a>Files</h2>
<table border="0" class="table table-striped">
@@ -914,50 +914,60 @@
<td>0</td>
<td>2</td></tr>
<tr class="b">
-<td><a href="#org.apache.hadoop.hbase.backup.FailedArchiveException.java">org/apache/hadoop/hbase/backup/FailedArchiveException.java</a></td>
+<td><a href="#org.apache.hadoop.hbase.backup.BackupDriver.java">org/apache/hadoop/hbase/backup/BackupDriver.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
<tr class="a">
+<td><a href="#org.apache.hadoop.hbase.backup.FailedArchiveException.java">org/apache/hadoop/hbase/backup/FailedArchiveException.java</a></td>
+<td>0</td>
+<td>0</td>
+<td>1</td></tr>
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.backup.HFileArchiver.java">org/apache/hadoop/hbase/backup/HFileArchiver.java</a></td>
<td>0</td>
<td>0</td>
<td>13</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.backup.TestBackupMerge.java">org/apache/hadoop/hbase/backup/TestBackupMerge.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.backup.TestHFileArchiving.java">org/apache/hadoop/hbase/backup/TestHFileArchiving.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.backup.example.HFileArchiveManager.java">org/apache/hadoop/hbase/backup/example/HFileArchiveManager.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.backup.example.LongTermArchivingHFileCleaner.java">org/apache/hadoop/hbase/backup/example/LongTermArchivingHFileCleaner.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.backup.example.TableHFileArchiveTracker.java">org/apache/hadoop/hbase/backup/example/TableHFileArchiveTracker.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.backup.example.TestZooKeeperTableArchiveClient.java">org/apache/hadoop/hbase/backup/example/TestZooKeeperTableArchiveClient.java</a></td>
<td>0</td>
<td>0</td>
<td>9</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.backup.example.ZKTableArchiveClient.java">org/apache/hadoop/hbase/backup/example/ZKTableArchiveClient.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
+<tr class="b">
+<td><a href="#org.apache.hadoop.hbase.backup.impl.BackupCommands.java">org/apache/hadoop/hbase/backup/impl/BackupCommands.java</a></td>
+<td>0</td>
+<td>0</td>
+<td>1</td></tr>
<tr class="a">
<td><a href="#org.apache.hadoop.hbase.backup.impl.BackupManager.java">org/apache/hadoop/hbase/backup/impl/BackupManager.java</a></td>
<td>0</td>
@@ -4769,5216 +4779,5211 @@
<td>0</td>
<td>29</td></tr>
<tr class="a">
-<td><a href="#org.apache.hadoop.hbase.master.RegionServerTracker.java">org/apache/hadoop/hbase/master/RegionServerTracker.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>4</td></tr>
-<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.RegionState.java">org/apache/hadoop/hbase/master/RegionState.java</a></td>
<td>0</td>
<td>0</td>
<td>86</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.ServerListener.java">org/apache/hadoop/hbase/master/ServerListener.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.ServerManager.java">org/apache/hadoop/hbase/master/ServerManager.java</a></td>
<td>0</td>
<td>0</td>
-<td>24</td></tr>
-<tr class="a">
+<td>22</td></tr>
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.SnapshotOfRegionAssignmentFromMeta.java">org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.java</a></td>
<td>0</td>
<td>0</td>
<td>13</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.SnapshotSentinel.java">org/apache/hadoop/hbase/master/SnapshotSentinel.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.SplitLogManager.java">org/apache/hadoop/hbase/master/SplitLogManager.java</a></td>
<td>0</td>
<td>0</td>
<td>17</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.SplitOrMergeTracker.java">org/apache/hadoop/hbase/master/SplitOrMergeTracker.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.TableNamespaceManager.java">org/apache/hadoop/hbase/master/TableNamespaceManager.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.TableStateManager.java">org/apache/hadoop/hbase/master/TableStateManager.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.TestActiveMasterManager.java">org/apache/hadoop/hbase/master/TestActiveMasterManager.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.TestCatalogJanitor.java">org/apache/hadoop/hbase/master/TestCatalogJanitor.java</a></td>
<td>0</td>
<td>0</td>
<td>13</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.TestCatalogJanitorInMemoryStates.java">org/apache/hadoop/hbase/master/TestCatalogJanitorInMemoryStates.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.TestHMasterCommandLine.java">org/apache/hadoop/hbase/master/TestHMasterCommandLine.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.TestMaster.java">org/apache/hadoop/hbase/master/TestMaster.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.TestMasterFailoverBalancerPersistence.java">org/apache/hadoop/hbase/master/TestMasterFailoverBalancerPersistence.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.TestMasterFileSystem.java">org/apache/hadoop/hbase/master/TestMasterFileSystem.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.TestMasterFileSystemWithWALDir.java">org/apache/hadoop/hbase/master/TestMasterFileSystemWithWALDir.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.TestMasterMetrics.java">org/apache/hadoop/hbase/master/TestMasterMetrics.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.TestMasterMetricsWrapper.java">org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.TestMasterNoCluster.java">org/apache/hadoop/hbase/master/TestMasterNoCluster.java</a></td>
<td>0</td>
<td>0</td>
<td>20</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.TestMasterOperationsForRegionReplicas.java">org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.TestMasterStatusServlet.java">org/apache/hadoop/hbase/master/TestMasterStatusServlet.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.TestMasterTransitions.java">org/apache/hadoop/hbase/master/TestMasterTransitions.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.TestMirroringTableStateManager.java">org/apache/hadoop/hbase/master/TestMirroringTableStateManager.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.TestRegionPlacement.java">org/apache/hadoop/hbase/master/TestRegionPlacement.java</a></td>
<td>0</td>
<td>0</td>
<td>20</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.TestRegionPlacement2.java">org/apache/hadoop/hbase/master/TestRegionPlacement2.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.TestRollingRestart.java">org/apache/hadoop/hbase/master/TestRollingRestart.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.TestSplitLogManager.java">org/apache/hadoop/hbase/master/TestSplitLogManager.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.TestTableStateManager.java">org/apache/hadoop/hbase/master/TestTableStateManager.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.TestWarmupRegion.java">org/apache/hadoop/hbase/master/TestWarmupRegion.java</a></td>
<td>0</td>
<td>0</td>
<td>19</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.assignment.AssignProcedure.java">org/apache/hadoop/hbase/master/assignment/AssignProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.assignment.AssignmentManager.java">org/apache/hadoop/hbase/master/assignment/AssignmentManager.java</a></td>
<td>0</td>
<td>0</td>
<td>32</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.assignment.GCMergedRegionsProcedure.java">org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>16</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.assignment.GCRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/GCRegionProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>32</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure.java">org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.assignment.MockMasterServices.java">org/apache/hadoop/hbase/master/assignment/MockMasterServices.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.assignment.MoveRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.assignment.RegionStateStore.java">org/apache/hadoop/hbase/master/assignment/RegionStateStore.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.assignment.RegionStates.java">org/apache/hadoop/hbase/master/assignment/RegionStates.java</a></td>
<td>0</td>
<td>0</td>
<td>26</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.assignment.RegionTransitionProcedure.java">org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.assignment.TestAssignmentManager.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.assignment.TestAssignmentOnRSCrash.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.assignment.TestRegionStates.java">org/apache/hadoop/hbase/master/assignment/TestRegionStates.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.assignment.TestSplitTableRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.assignment.TestUnexpectedStateException.java">org/apache/hadoop/hbase/master/assignment/TestUnexpectedStateException.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.assignment.UnassignProcedure.java">org/apache/hadoop/hbase/master/assignment/UnassignProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.assignment.Util.java">org/apache/hadoop/hbase/master/assignment/Util.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.balancer.BalancerChore.java">org/apache/hadoop/hbase/master/balancer/BalancerChore.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.balancer.BalancerTestBase.java">org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java</a></td>
<td>0</td>
<td>0</td>
<td>75</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java</a></td>
<td>0</td>
<td>0</td>
<td>60</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.balancer.ClusterLoadState.java">org/apache/hadoop/hbase/master/balancer/ClusterLoadState.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.balancer.ClusterStatusChore.java">org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.balancer.FavoredStochasticBalancer.java">org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory.java">org/apache/hadoop/hbase/master/balancer/LoadBalancerFactory.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.balancer.LoadBalancerPerformanceEvaluation.java">org/apache/hadoop/hbase/master/balancer/LoadBalancerPerformanceEvaluation.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.balancer.RegionInfoComparator.java">org/apache/hadoop/hbase/master/balancer/RegionInfoComparator.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.balancer.RegionLocationFinder.java">org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.balancer.ServerAndLoad.java">org/apache/hadoop/hbase/master/balancer/ServerAndLoad.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.balancer.SimpleLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java</a></td>
<td>0</td>
<td>0</td>
<td>33</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java</a></td>
<td>0</td>
<td>0</td>
<td>32</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.balancer.TestBaseLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java</a></td>
<td>0</td>
<td>0</td>
<td>16</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.balancer.TestDefaultLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestDefaultLoadBalancer.java</a></td>
<td>0</td>
<td>0</td>
<td>48</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.balancer.TestFavoredNodeTableImport.java">org/apache/hadoop/hbase/master/balancer/TestFavoredNodeTableImport.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.balancer.TestFavoredStochasticBalancerPickers.java">org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.balancer.TestRegionsOnMasterOptions.java">org/apache/hadoop/hbase/master/balancer/TestRegionsOnMasterOptions.java</a></td>
<td>0</td>
<td>0</td>
<td>13</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.balancer.TestServerAndLoad.java">org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.balancer.TestStochasticLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java</a></td>
<td>0</td>
<td>0</td>
<td>33</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.cleaner.BaseFileCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.cleaner.BaseLogCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/BaseLogCleanerDelegate.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.cleaner.CleanerChore.java">org/apache/hadoop/hbase/master/cleaner/CleanerChore.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.cleaner.FileCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.cleaner.HFileLinkCleaner.java">org/apache/hadoop/hbase/master/cleaner/HFileLinkCleaner.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.cleaner.TestCleanerChore.java">org/apache/hadoop/hbase/master/cleaner/TestCleanerChore.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.cleaner.TestHFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.cleaner.TestHFileLinkCleaner.java">org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.cleaner.TestSnapshotFromMaster.java">org/apache/hadoop/hbase/master/cleaner/TestSnapshotFromMaster.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.cleaner.TimeToLiveHFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveHFileCleaner.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.cleaner.TimeToLiveLogCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveLogCleaner.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.locking.LockManager.java">org/apache/hadoop/hbase/master/locking/LockManager.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.locking.LockProcedure.java">org/apache/hadoop/hbase/master/locking/LockProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.normalizer.EmptyNormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/EmptyNormalizationPlan.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore.java">org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory.java">org/apache/hadoop/hbase/master/normalizer/RegionNormalizerFactory.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.normalizer.TestSimpleRegionNormalizerOnCluster.java">org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.AbstractStateMachineNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineNamespaceProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.AbstractStateMachineTableProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineTableProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.CloneSnapshotProcedure.java">org/apache/hadoop/hbase/master/procedure/CloneSnapshotProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>9</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.CreateNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>31</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.CreateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/DeleteNamespaceProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>34</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure.java">org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.DisableTableProcedure.java">org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.EnableTableProcedure.java">org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>72</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureSchedulerPerformanceEvaluation.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureTestingUtility.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.ModifyNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/ModifyNamespaceProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>21</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure.java">org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>47</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.ProcedureDescriber.java">org/apache/hadoop/hbase/master/procedure/ProcedureDescriber.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch.java">org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait.java">org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.java</a></td>
<td>0</td>
<td>0</td>
<td>47</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure.java">org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.RestoreSnapshotProcedure.java">org/apache/hadoop/hbase/master/procedure/RestoreSnapshotProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure.java">org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestDeleteColumnFamilyProcedureFromClient.java">org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestDeleteNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/TestDeleteNamespaceProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestMasterObserverPostCalls.java">org/apache/hadoop/hbase/master/procedure/TestMasterObserverPostCalls.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestMasterProcedureEvents.java">org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestMasterProcedureScheduler.java">org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestMasterProcedureSchedulerConcurrency.java">org/apache/hadoop/hbase/master/procedure/TestMasterProcedureSchedulerConcurrency.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestMasterProcedureWalLease.java">org/apache/hadoop/hbase/master/procedure/TestMasterProcedureWalLease.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestRecoverMetaProcedure.java">org/apache/hadoop/hbase/master/procedure/TestRecoverMetaProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestSafemodeBringsDownMaster.java">org/apache/hadoop/hbase/master/procedure/TestSafemodeBringsDownMaster.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestServerCrashProcedure.java">org/apache/hadoop/hbase/master/procedure/TestServerCrashProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestTableDDLProcedureBase.java">org/apache/hadoop/hbase/master/procedure/TestTableDDLProcedureBase.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestTableDescriptorModificationFromClient.java">org/apache/hadoop/hbase/master/procedure/TestTableDescriptorModificationFromClient.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TestWALProcedureStoreOnHDFS.java">org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.snapshot.EnabledTableSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.snapshot.MasterSnapshotVerifier.java">org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache.java">org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotHFileCleaner.java">org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotManager.java">org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java</a></td>
<td>0</td>
<td>0</td>
<td>16</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.snapshot.TakeSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.snapshot.TestAssignProcedure.java">org/apache/hadoop/hbase/master/snapshot/TestAssignProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.master.snapshot.TestSnapshotHFileCleaner.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotHFileCleaner.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.snapshot.TestSnapshotManager.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotManager.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.mob.CachedMobFile.java">org/apache/hadoop/hbase/mob/CachedMobFile.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor.java">org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.mob.DefaultMobStoreFlusher.java">org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.mob.ExpiredMobFileCleaner.java">org/apache/hadoop/hbase/mob/ExpiredMobFileCleaner.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.mob.MobCacheConfig.java">org/apache/hadoop/hbase/mob/MobCacheConfig.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.mob.MobConstants.java">org/apache/hadoop/hbase/mob/MobConstants.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.mob.MobFile.java">org/apache/hadoop/hbase/mob/MobFile.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.mob.MobFileCache.java">org/apache/hadoop/hbase/mob/MobFileCache.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.mob.MobFileName.java">org/apache/hadoop/hbase/mob/MobFileName.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.mob.MobTestUtil.java">org/apache/hadoop/hbase/mob/MobTestUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.mob.MobUtils.java">org/apache/hadoop/hbase/mob/MobUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>15</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.mob.TestDefaultMobStoreFlusher.java">org/apache/hadoop/hbase/mob/TestDefaultMobStoreFlusher.java</a></td>
<td>0</td>
<td>0</td>
<td>35</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.mob.TestExpiredMobFileCleaner.java">org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.mob.compactions.MobCompactor.java">org/apache/hadoop/hbase/mob/compactions/MobCompactor.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.mob.compactions.PartitionedMobCompactionRequest.java">org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactionRequest.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.mob.compactions.PartitionedMobCompactor.java">org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactor.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.mob.compactions.TestMobCompactor.java">org/apache/hadoop/hbase/mob/compactions/TestMobCompactor.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.mob.compactions.TestPartitionedMobCompactor.java">org/apache/hadoop/hbase/mob/compactions/TestPartitionedMobCompactor.java</a></td>
<td>0</td>
<td>0</td>
<td>9</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.monitoring.LogMonitoring.java">org/apache/hadoop/hbase/monitoring/LogMonitoring.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer.java">org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.monitoring.MonitoredRPCHandlerImpl.java">org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.monitoring.MonitoredTaskImpl.java">org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.monitoring.StateDumpServlet.java">org/apache/hadoop/hbase/monitoring/StateDumpServlet.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.monitoring.TaskMonitor.java">org/apache/hadoop/hbase/monitoring/TaskMonitor.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.monitoring.TestTaskMonitor.java">org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.monitoring.ThreadMonitoring.java">org/apache/hadoop/hbase/monitoring/ThreadMonitoring.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.mttr.IntegrationTestMTTR.java">org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.java</a></td>
<td>0</td>
<td>0</td>
<td>9</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.namespace.NamespaceStateManager.java">org/apache/hadoop/hbase/namespace/NamespaceStateManager.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.namespace.NamespaceTableAndRegionInfo.java">org/apache/hadoop/hbase/namespace/NamespaceTableAndRegionInfo.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.namespace.TestNamespaceAuditor.java">org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.net.Address.java">org/apache/hadoop/hbase/net/Address.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.net.TestAddress.java">org/apache/hadoop/hbase/net/TestAddress.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.nio.ByteBuff.java">org/apache/hadoop/hbase/nio/ByteBuff.java</a></td>
<td>0</td>
<td>0</td>
<td>24</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.nio.MultiByteBuff.java">org/apache/hadoop/hbase/nio/MultiByteBuff.java</a></td>
<td>0</td>
<td>0</td>
<td>29</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.nio.SingleByteBuff.java">org/apache/hadoop/hbase/nio/SingleByteBuff.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure.MasterProcedureManager.java">org/apache/hadoop/hbase/procedure/MasterProcedureManager.java</a></td>
<td>0</td>
<td>0</td>
<td>9</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure.Procedure.java">org/apache/hadoop/hbase/procedure/Procedure.java</a></td>
<td>0</td>
<td>0</td>
<td>14</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinatorRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinatorRpcs.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure.ProcedureManagerHost.java">org/apache/hadoop/hbase/procedure/ProcedureManagerHost.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMember.java">org/apache/hadoop/hbase/procedure/ProcedureMember.java</a></td>
<td>0</td>
<td>0</td>
<td>16</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureMemberRpcs.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure.RegionServerProcedureManager.java">org/apache/hadoop/hbase/procedure/RegionServerProcedureManager.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure.SimpleMasterProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleMasterProcedureManager.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure.SimpleRSProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleRSProcedureManager.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure.Subprocedure.java">org/apache/hadoop/hbase/procedure/Subprocedure.java</a></td>
<td>0</td>
<td>0</td>
<td>9</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure.TestProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/TestProcedureCoordinator.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure.TestProcedureDescriber.java">org/apache/hadoop/hbase/procedure/TestProcedureDescriber.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure.TestProcedureMember.java">org/apache/hadoop/hbase/procedure/TestProcedureMember.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure.TestZKProcedure.java">org/apache/hadoop/hbase/procedure/TestZKProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>27</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure.TestZKProcedureControllers.java">org/apache/hadoop/hbase/procedure/TestZKProcedureControllers.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ZKProcedureCoordinator.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureUtil.java">org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure.flush.FlushTableSubprocedure.java">org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/MasterFlushTableProcedureManager.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure.flush.RegionServerFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/RegionServerFlushTableProcedureManager.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.AbstractProcedureScheduler.java">org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.BadProcedureException.java">org/apache/hadoop/hbase/procedure2/BadProcedureException.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.LockAndQueue.java">org/apache/hadoop/hbase/procedure2/LockAndQueue.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.LockedResource.java">org/apache/hadoop/hbase/procedure2/LockedResource.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.Procedure.java">org/apache/hadoop/hbase/procedure2/Procedure.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureDeque.java">org/apache/hadoop/hbase/procedure2/ProcedureDeque.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureException.java">org/apache/hadoop/hbase/procedure2/ProcedureException.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.java">org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java</a></td>
<td>0</td>
<td>0</td>
<td>20</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureScheduler.java">org/apache/hadoop/hbase/procedure2/ProcedureScheduler.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.java">org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureUtil.java">org/apache/hadoop/hbase/procedure2/ProcedureUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.RemoteProcedureException.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.RootProcedureState.java">org/apache/hadoop/hbase/procedure2/RootProcedureState.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.StateMachineProcedure.java">org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureExecution.java">org/apache/hadoop/hbase/procedure2/TestProcedureExecution.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureExecutor.java">org/apache/hadoop/hbase/procedure2/TestProcedureExecutor.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureMetrics.java">org/apache/hadoop/hbase/procedure2/TestProcedureMetrics.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureNonce.java">org/apache/hadoop/hbase/procedure2/TestProcedureNonce.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureRecovery.java">org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureReplayOrder.java">org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureSchedulerConcurrency.java">org/apache/hadoop/hbase/procedure2/TestProcedureSchedulerConcurrency.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureSuspended.java">org/apache/hadoop/hbase/procedure2/TestProcedureSuspended.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureToString.java">org/apache/hadoop/hbase/procedure2/TestProcedureToString.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.TestStateMachineProcedure.java">org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.TestYieldProcedures.java">org/apache/hadoop/hbase/procedure2/TestYieldProcedures.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStore.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.store.TestProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFile.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALLoaderPerformanceEvaluation.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALPerformanceEvaluation.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPerformanceEvaluation.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALPrettyPrinter.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.TestStressWALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/TestStressWALProcedureStore.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.TestWALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java</a></td>
<td>0</td>
<td>0</td>
<td>12</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.procedure2.util.DelayedUtil.java">org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.util.StringUtils.java">org/apache/hadoop/hbase/procedure2/util/StringUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufMagic.java">org/apache/hadoop/hbase/protobuf/ProtobufMagic.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufMessageConverter.java">org/apache/hadoop/hbase/protobuf/ProtobufMessageConverter.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufUtil.java">org/apache/hadoop/hbase/protobuf/ProtobufUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>115</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.protobuf.ReplicationProtbufUtil.java">org/apache/hadoop/hbase/protobuf/ReplicationProtbufUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.protobuf.TestProtobufUtil.java">org/apache/hadoop/hbase/protobuf/TestProtobufUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.protobuf.TestReplicationProtobuf.java">org/apache/hadoop/hbase/protobuf/TestReplicationProtobuf.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement.java">org/apache/hadoop/hbase/quotas/ActivePolicyEnforcement.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.AverageIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/AverageIntervalRateLimiter.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.DefaultOperationQuota.java">org/apache/hadoop/hbase/quotas/DefaultOperationQuota.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.FileSystemUtilizationChore.java">org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.FixedIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/FixedIntervalRateLimiter.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.GlobalQuotaSettings.java">org/apache/hadoop/hbase/quotas/GlobalQuotaSettings.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.GlobalQuotaSettingsImpl.java">org/apache/hadoop/hbase/quotas/GlobalQuotaSettingsImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.MasterSpaceQuotaObserver.java">org/apache/hadoop/hbase/quotas/MasterSpaceQuotaObserver.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.NamespaceQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/NamespaceQuotaSnapshotStore.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.NoopOperationQuota.java">org/apache/hadoop/hbase/quotas/NoopOperationQuota.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.NoopQuotaLimiter.java">org/apache/hadoop/hbase/quotas/NoopQuotaLimiter.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.OperationQuota.java">org/apache/hadoop/hbase/quotas/OperationQuota.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.QuotaCache.java">org/apache/hadoop/hbase/quotas/QuotaCache.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.QuotaLimiter.java">org/apache/hadoop/hbase/quotas/QuotaLimiter.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.QuotaLimiterFactory.java">org/apache/hadoop/hbase/quotas/QuotaLimiterFactory.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.QuotaObserverChore.java">org/apache/hadoop/hbase/quotas/QuotaObserverChore.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.QuotaRetriever.java">org/apache/hadoop/hbase/quotas/QuotaRetriever.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettings.java">org/apache/hadoop/hbase/quotas/QuotaSettings.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettingsFactory.java">org/apache/hadoop/hbase/quotas/QuotaSettingsFactory.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.QuotaState.java">org/apache/hadoop/hbase/quotas/QuotaState.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.QuotaTableUtil.java">org/apache/hadoop/hbase/quotas/QuotaTableUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.QuotaUtil.java">org/apache/hadoop/hbase/quotas/QuotaUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.RateLimiter.java">org/apache/hadoop/hbase/quotas/RateLimiter.java</a></td>
<td>0</td>
<td>0</td>
<td>18</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.SpaceLimitSettings.java">org/apache/hadoop/hbase/quotas/SpaceLimitSettings.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaRefresherChore.java">org/apache/hadoop/hbase/quotas/SpaceQuotaRefresherChore.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierFactory.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierForTest.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierForTest.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcement.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcementFactory.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcementFactory.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.TableQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/TableQuotaSnapshotStore.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.TestFileSystemUtilizationChore.java">org/apache/hadoop/hbase/quotas/TestFileSystemUtilizationChore.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.TestMasterSpaceQuotaObserver.java">org/apache/hadoop/hbase/quotas/TestMasterSpaceQuotaObserver.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.TestNamespaceQuotaViolationStore.java">org/apache/hadoop/hbase/quotas/TestNamespaceQuotaViolationStore.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaFilter.java">org/apache/hadoop/hbase/quotas/TestQuotaFilter.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaObserverChoreWithMiniCluster.java">org/apache/hadoop/hbase/quotas/TestQuotaObserverChoreWithMiniCluster.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaSettingsFactory.java">org/apache/hadoop/hbase/quotas/TestQuotaSettingsFactory.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaStatusRPCs.java">org/apache/hadoop/hbase/quotas/TestQuotaStatusRPCs.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaThrottle.java">org/apache/hadoop/hbase/quotas/TestQuotaThrottle.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.TestRateLimiter.java">org/apache/hadoop/hbase/quotas/TestRateLimiter.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.TestSpaceQuotas.java">org/apache/hadoop/hbase/quotas/TestSpaceQuotas.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.TestTableQuotaViolationStore.java">org/apache/hadoop/hbase/quotas/TestTableQuotaViolationStore.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.TestTablesWithQuotas.java">org/apache/hadoop/hbase/quotas/TestTablesWithQuotas.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.ThrottleSettings.java">org/apache/hadoop/hbase/quotas/ThrottleSettings.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.TimeBasedLimiter.java">org/apache/hadoop/hbase/quotas/TimeBasedLimiter.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.UserQuotaState.java">org/apache/hadoop/hbase/quotas/UserQuotaState.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.policies.BaseViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/BaseViolationPolicyEnforcement.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.policies.DefaultViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/DefaultViolationPolicyEnforcement.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.policies.DisableTableViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/DisableTableViolationPolicyEnforcement.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.policies.NoInsertsViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoInsertsViolationPolicyEnforcement.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.policies.NoWritesCompactionsViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoWritesCompactionsViolationPolicyEnforcement.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.quotas.policies.NoWritesViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoWritesViolationPolicyEnforcement.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.quotas.policies.TestBulkLoadCheckingViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/TestBulkLoadCheckingViolationPolicyEnforcement.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.AbstractMemStore.java">org/apache/hadoop/hbase/regionserver/AbstractMemStore.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.AbstractMultiFileWriter.java">org/apache/hadoop/hbase/regionserver/AbstractMultiFileWriter.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.AbstractTestDateTieredCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/AbstractTestDateTieredCompactionPolicy.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.AnnotationReadingPriorityFunction.java">org/apache/hadoop/hbase/regionserver/AnnotationReadingPriorityFunction.java</a></td>
<td>0</td>
<td>0</td>
<td>16</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.BaseRowProcessor.java">org/apache/hadoop/hbase/regionserver/BaseRowProcessor.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.BusyRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/BusyRegionSplitPolicy.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.ByteBufferChunkKeyValue.java">org/apache/hadoop/hbase/regionserver/ByteBufferChunkKeyValue.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.CSLMImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CSLMImmutableSegment.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.CellArrayImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CellArrayImmutableSegment.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.CellArrayMap.java">org/apache/hadoop/hbase/regionserver/CellArrayMap.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.CellChunkMap.java">org/apache/hadoop/hbase/regionserver/CellChunkMap.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.CellFlatMap.java">org/apache/hadoop/hbase/regionserver/CellFlatMap.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.CellSet.java">org/apache/hadoop/hbase/regionserver/CellSet.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.CellSink.java">org/apache/hadoop/hbase/regionserver/CellSink.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.ChangedReadersObserver.java">org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.Chunk.java">org/apache/hadoop/hbase/regionserver/Chunk.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.ChunkCreator.java">org/apache/hadoop/hbase/regionserver/ChunkCreator.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.CompactSplit.java">org/apache/hadoop/hbase/regionserver/CompactSplit.java</a></td>
<td>0</td>
<td>0</td>
<td>9</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischargeHandler.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischargeHandler.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischarger.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.CompactingMemStore.java">org/apache/hadoop/hbase/regionserver/CompactingMemStore.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.CompactionPipeline.java">org/apache/hadoop/hbase/regionserver/CompactionPipeline.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.CompactionTool.java">org/apache/hadoop/hbase/regionserver/CompactionTool.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.CompositeImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/ConstantSizeRegionSplitPolicy.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.CreateRandomStoreFile.java">org/apache/hadoop/hbase/regionserver/CreateRandomStoreFile.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.DataBlockEncodingTool.java">org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.DateTieredStoreEngine.java">org/apache/hadoop/hbase/regionserver/DateTieredStoreEngine.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.DefaultHeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.java</a></td>
<td>0</td>
<td>0</td>
<td>31</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.DefaultMemStore.java">org/apache/hadoop/hbase/regionserver/DefaultMemStore.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher.java">org/apache/hadoop/hbase/regionserver/DefaultStoreFlusher.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.DelegatingKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/DelegatingKeyValueScanner.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.DelimitedKeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/DelimitedKeyPrefixRegionSplitPolicy.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/DisabledRegionSplitPolicy.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.FavoredNodesForRegion.java">org/apache/hadoop/hbase/regionserver/FavoredNodesForRegion.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.FifoRpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/FifoRpcSchedulerFactory.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.FlushPolicyFactory.java">org/apache/hadoop/hbase/regionserver/FlushPolicyFactory.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequestListener.java">org/apache/hadoop/hbase/regionserver/FlushRequestListener.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequester.java">org/apache/hadoop/hbase/regionserver/FlushRequester.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.HMobStore.java">org/apache/hadoop/hbase/regionserver/HMobStore.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.HRegion.java">org/apache/hadoop/hbase/regionserver/HRegion.java</a></td>
<td>0</td>
<td>0</td>
<td>220</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.HRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java</a></td>
<td>0</td>
<td>0</td>
<td>47</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServer.java">org/apache/hadoop/hbase/regionserver/HRegionServer.java</a></td>
<td>0</td>
<td>0</td>
<td>88</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.java">org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.HStore.java">org/apache/hadoop/hbase/regionserver/HStore.java</a></td>
<td>0</td>
<td>0</td>
<td>43</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.HStoreFile.java">org/apache/hadoop/hbase/regionserver/HStoreFile.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.java">org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.ImmutableSegment.java">org/apache/hadoop/hbase/regionserver/ImmutableSegment.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.InternalScan.java">org/apache/hadoop/hbase/regionserver/InternalScan.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.InternalScanner.java">org/apache/hadoop/hbase/regionserver/InternalScanner.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/KeyPrefixRegionSplitPolicy.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueScanner.java">org/apache/hadoop/hbase/regionserver/KeyValueScanner.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.LeaseException.java">org/apache/hadoop/hbase/regionserver/LeaseException.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.Leases.java">org/apache/hadoop/hbase/regionserver/Leases.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.LogRoller.java">org/apache/hadoop/hbase/regionserver/LogRoller.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.MemStore.java">org/apache/hadoop/hbase/regionserver/MemStore.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreCompactor.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreFlusher.java">org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java</a></td>
<td>0</td>
<td>0</td>
<td>29</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreLAB.java">org/apache/hadoop/hbase/regionserver/MemStoreLAB.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreLABImpl.java">org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreMergerSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreMergerSegmentsIterator.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreSegmentsIterator.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreSnapshot.java">org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegion.java">org/apache/hadoop/hbase/regionserver/MetricsRegion.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServer.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperStub.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTable.java">org/apache/hadoop/hbase/regionserver/MetricsTable.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTableWrapperAggregateImpl.java">org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>20</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress.java">org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.MobReferenceOnlyFilter.java">org/apache/hadoop/hbase/regionserver/MobReferenceOnlyFilter.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.MutableOnlineRegions.java">org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.MutableSegment.java">org/apache/hadoop/hbase/regionserver/MutableSegment.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.NoTagByteBufferChunkKeyValue.java">org/apache/hadoop/hbase/regionserver/NoTagByteBufferChunkKeyValue.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.NonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.OOMERegionServer.java">org/apache/hadoop/hbase/regionserver/OOMERegionServer.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.OnlineRegions.java">org/apache/hadoop/hbase/regionserver/OnlineRegions.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.OperationStatus.java">org/apache/hadoop/hbase/regionserver/OperationStatus.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.RSDumpServlet.java">org/apache/hadoop/hbase/regionserver/RSDumpServlet.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.RSRpcServices.java">org/apache/hadoop/hbase/regionserver/RSRpcServices.java</a></td>
<td>0</td>
<td>0</td>
<td>66</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.RSStatusServlet.java">org/apache/hadoop/hbase/regionserver/RSStatusServlet.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.regionserver.Region.java">org/apache/hadoop/hbase/regionserver/Region.java</a></td>
<td>0</td>
<td>0</td>
<td>25</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.regionserver.RegionAsTable.java">org/apache/hadoop/hbase/r
<TRUNCATED>
[18/51] [partial] hbase-site git commit: Published site at
0b28155d274910b4e667b949d51f78809a1eff0b.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e11cf2cb/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html
index 51fcd6e..6b9e2a8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html
@@ -54,1029 +54,1026 @@
<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.ServerName;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.RetriesExhaustedException;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.zookeeper.KeeperException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.Logger;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.slf4j.LoggerFactory;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.StoreSequenceId;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest;<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> * The ServerManager class manages info about region servers.<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * <p><a name="line.76"></a>
-<span class="sourceLineNo">077</span> * Maintains lists of online and dead servers. Processes the startups,<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * shutdowns, and deaths of region servers.<a name="line.78"></a>
-<span class="sourceLineNo">079</span> * <p><a name="line.79"></a>
-<span class="sourceLineNo">080</span> * Servers are distinguished in two different ways. A given server has a<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * location, specified by hostname and port, and of which there can only be one<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * online at any given time. A server instance is specified by the location<a name="line.82"></a>
-<span class="sourceLineNo">083</span> * (hostname and port) as well as the startcode (timestamp from when the server<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * was started). This is used to differentiate a restarted instance of a given<a name="line.84"></a>
-<span class="sourceLineNo">085</span> * server from the original instance.<a name="line.85"></a>
-<span class="sourceLineNo">086</span> * <p><a name="line.86"></a>
-<span class="sourceLineNo">087</span> * If a sever is known not to be running any more, it is called dead. The dead<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * server needs to be handled by a ServerShutdownHandler. If the handler is not<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * enabled yet, the server can't be handled right away so it is queued up.<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * After the handler is enabled, the server will be submitted to a handler to handle.<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * However, the handler may be just partially enabled. If so,<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * the server cannot be fully processed, and be queued up for further processing.<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * A server is fully processed only after the handler is fully enabled<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * and has completed the handling.<a name="line.94"></a>
-<span class="sourceLineNo">095</span> */<a name="line.95"></a>
-<span class="sourceLineNo">096</span>@InterfaceAudience.Private<a name="line.96"></a>
-<span class="sourceLineNo">097</span>public class ServerManager {<a name="line.97"></a>
-<span class="sourceLineNo">098</span> public static final String WAIT_ON_REGIONSERVERS_MAXTOSTART =<a name="line.98"></a>
-<span class="sourceLineNo">099</span> "hbase.master.wait.on.regionservers.maxtostart";<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span> public static final String WAIT_ON_REGIONSERVERS_MINTOSTART =<a name="line.101"></a>
-<span class="sourceLineNo">102</span> "hbase.master.wait.on.regionservers.mintostart";<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span> public static final String WAIT_ON_REGIONSERVERS_TIMEOUT =<a name="line.104"></a>
-<span class="sourceLineNo">105</span> "hbase.master.wait.on.regionservers.timeout";<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span> public static final String WAIT_ON_REGIONSERVERS_INTERVAL =<a name="line.107"></a>
-<span class="sourceLineNo">108</span> "hbase.master.wait.on.regionservers.interval";<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span> private static final Logger LOG = LoggerFactory.getLogger(ServerManager.class);<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span> // Set if we are to shutdown the cluster.<a name="line.112"></a>
-<span class="sourceLineNo">113</span> private AtomicBoolean clusterShutdown = new AtomicBoolean(false);<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span> /**<a name="line.115"></a>
-<span class="sourceLineNo">116</span> * The last flushed sequence id for a region.<a name="line.116"></a>
-<span class="sourceLineNo">117</span> */<a name="line.117"></a>
-<span class="sourceLineNo">118</span> private final ConcurrentNavigableMap<byte[], Long> flushedSequenceIdByRegion =<a name="line.118"></a>
-<span class="sourceLineNo">119</span> new ConcurrentSkipListMap<>(Bytes.BYTES_COMPARATOR);<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span> /**<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * The last flushed sequence id for a store in a region.<a name="line.122"></a>
-<span class="sourceLineNo">123</span> */<a name="line.123"></a>
-<span class="sourceLineNo">124</span> private final ConcurrentNavigableMap<byte[], ConcurrentNavigableMap<byte[], Long>><a name="line.124"></a>
-<span class="sourceLineNo">125</span> storeFlushedSequenceIdsByRegion = new ConcurrentSkipListMap<>(Bytes.BYTES_COMPARATOR);<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span> /** Map of registered servers to their current load */<a name="line.127"></a>
-<span class="sourceLineNo">128</span> private final ConcurrentNavigableMap<ServerName, ServerMetrics> onlineServers =<a name="line.128"></a>
-<span class="sourceLineNo">129</span> new ConcurrentSkipListMap<>();<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span> /**<a name="line.131"></a>
-<span class="sourceLineNo">132</span> * Map of admin interfaces per registered regionserver; these interfaces we use to control<a name="line.132"></a>
-<span class="sourceLineNo">133</span> * regionservers out on the cluster<a name="line.133"></a>
-<span class="sourceLineNo">134</span> */<a name="line.134"></a>
-<span class="sourceLineNo">135</span> private final Map<ServerName, AdminService.BlockingInterface> rsAdmins = new HashMap<>();<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span> /** List of region servers that should not get any more new regions. */<a name="line.137"></a>
-<span class="sourceLineNo">138</span> private final ArrayList<ServerName> drainingServers = new ArrayList<>();<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span> private final MasterServices master;<a name="line.140"></a>
-<span class="sourceLineNo">141</span> private final ClusterConnection connection;<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span> private final DeadServer deadservers = new DeadServer();<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span> private final long maxSkew;<a name="line.145"></a>
-<span class="sourceLineNo">146</span> private final long warningSkew;<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span> private final RpcControllerFactory rpcControllerFactory;<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span> /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span> * Set of region servers which are dead but not processed immediately. If one<a name="line.151"></a>
-<span class="sourceLineNo">152</span> * server died before master enables ServerShutdownHandler, the server will be<a name="line.152"></a>
-<span class="sourceLineNo">153</span> * added to this set and will be processed through calling<a name="line.153"></a>
-<span class="sourceLineNo">154</span> * {@link ServerManager#processQueuedDeadServers()} by master.<a name="line.154"></a>
-<span class="sourceLineNo">155</span> * <p><a name="line.155"></a>
-<span class="sourceLineNo">156</span> * A dead server is a server instance known to be dead, not listed in the /hbase/rs<a name="line.156"></a>
-<span class="sourceLineNo">157</span> * znode any more. It may have not been submitted to ServerShutdownHandler yet<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * because the handler is not enabled.<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * <p><a name="line.159"></a>
-<span class="sourceLineNo">160</span> * A dead server, which has been submitted to ServerShutdownHandler while the<a name="line.160"></a>
-<span class="sourceLineNo">161</span> * handler is not enabled, is queued up.<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * <p><a name="line.162"></a>
-<span class="sourceLineNo">163</span> * So this is a set of region servers known to be dead but not submitted to<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * ServerShutdownHandler for processing yet.<a name="line.164"></a>
-<span class="sourceLineNo">165</span> */<a name="line.165"></a>
-<span class="sourceLineNo">166</span> private Set<ServerName> queuedDeadServers = new HashSet<>();<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span> /**<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * Set of region servers which are dead and submitted to ServerShutdownHandler to process but not<a name="line.169"></a>
-<span class="sourceLineNo">170</span> * fully processed immediately.<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <p><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * If one server died before assignment manager finished the failover cleanup, the server will be<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * added to this set and will be processed through calling<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * {@link ServerManager#processQueuedDeadServers()} by assignment manager.<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * The Boolean value indicates whether log split is needed inside ServerShutdownHandler<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
-<span class="sourceLineNo">178</span> * ServerShutdownHandler processes a dead server submitted to the handler after the handler is<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * enabled. It may not be able to complete the processing because meta is not yet online or master<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * is currently in startup mode. In this case, the dead server will be parked in this set<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * temporarily.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> */<a name="line.182"></a>
-<span class="sourceLineNo">183</span> private Map<ServerName, Boolean> requeuedDeadServers = new ConcurrentHashMap<>();<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> /** Listeners that are called on server events. */<a name="line.185"></a>
-<span class="sourceLineNo">186</span> private List<ServerListener> listeners = new CopyOnWriteArrayList<>();<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span> /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * Constructor.<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * @param master<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * @throws ZooKeeperConnectionException<a name="line.191"></a>
-<span class="sourceLineNo">192</span> */<a name="line.192"></a>
-<span class="sourceLineNo">193</span> public ServerManager(final MasterServices master) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span> this(master, true);<a name="line.194"></a>
-<span class="sourceLineNo">195</span> }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> ServerManager(final MasterServices master, final boolean connect) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span> this.master = master;<a name="line.198"></a>
-<span class="sourceLineNo">199</span> Configuration c = master.getConfiguration();<a name="line.199"></a>
-<span class="sourceLineNo">200</span> maxSkew = c.getLong("hbase.master.maxclockskew", 30000);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> warningSkew = c.getLong("hbase.master.warningclockskew", 10000);<a name="line.201"></a>
-<span class="sourceLineNo">202</span> this.connection = connect? master.getClusterConnection(): null;<a name="line.202"></a>
-<span class="sourceLineNo">203</span> this.rpcControllerFactory = this.connection == null? null: connection.getRpcControllerFactory();<a name="line.203"></a>
-<span class="sourceLineNo">204</span> }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span> /**<a name="line.206"></a>
-<span class="sourceLineNo">207</span> * Add the listener to the notification list.<a name="line.207"></a>
-<span class="sourceLineNo">208</span> * @param listener The ServerListener to register<a name="line.208"></a>
-<span class="sourceLineNo">209</span> */<a name="line.209"></a>
-<span class="sourceLineNo">210</span> public void registerListener(final ServerListener listener) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span> this.listeners.add(listener);<a name="line.211"></a>
-<span class="sourceLineNo">212</span> }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span> /**<a name="line.214"></a>
-<span class="sourceLineNo">215</span> * Remove the listener from the notification list.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> * @param listener The ServerListener to unregister<a name="line.216"></a>
-<span class="sourceLineNo">217</span> */<a name="line.217"></a>
-<span class="sourceLineNo">218</span> public boolean unregisterListener(final ServerListener listener) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span> return this.listeners.remove(listener);<a name="line.219"></a>
-<span class="sourceLineNo">220</span> }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> /**<a name="line.222"></a>
-<span class="sourceLineNo">223</span> * Let the server manager know a new regionserver has come online<a name="line.223"></a>
-<span class="sourceLineNo">224</span> * @param request the startup request<a name="line.224"></a>
-<span class="sourceLineNo">225</span> * @param versionNumber the version of the new regionserver<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * @param ia the InetAddress from which request is received<a name="line.226"></a>
-<span class="sourceLineNo">227</span> * @return The ServerName we know this server as.<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * @throws IOException<a name="line.228"></a>
-<span class="sourceLineNo">229</span> */<a name="line.229"></a>
-<span class="sourceLineNo">230</span> ServerName regionServerStartup(RegionServerStartupRequest request, int versionNumber,<a name="line.230"></a>
-<span class="sourceLineNo">231</span> InetAddress ia)<a name="line.231"></a>
-<span class="sourceLineNo">232</span> throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // Test for case where we get a region startup message from a regionserver<a name="line.233"></a>
-<span class="sourceLineNo">234</span> // that has been quickly restarted but whose znode expiration handler has<a name="line.234"></a>
-<span class="sourceLineNo">235</span> // not yet run, or from a server whose fail we are currently processing.<a name="line.235"></a>
-<span class="sourceLineNo">236</span> // Test its host+port combo is present in serverAddressToServerInfo. If it<a name="line.236"></a>
-<span class="sourceLineNo">237</span> // is, reject the server and trigger its expiration. The next time it comes<a name="line.237"></a>
-<span class="sourceLineNo">238</span> // in, it should have been removed from serverAddressToServerInfo and queued<a name="line.238"></a>
-<span class="sourceLineNo">239</span> // for processing by ProcessServerShutdown.<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> final String hostname = request.hasUseThisHostnameInstead() ?<a name="line.241"></a>
-<span class="sourceLineNo">242</span> request.getUseThisHostnameInstead() :ia.getHostName();<a name="line.242"></a>
-<span class="sourceLineNo">243</span> ServerName sn = ServerName.valueOf(hostname, request.getPort(),<a name="line.243"></a>
-<span class="sourceLineNo">244</span> request.getServerStartCode());<a name="line.244"></a>
-<span class="sourceLineNo">245</span> checkClockSkew(sn, request.getServerCurrentTime());<a name="line.245"></a>
-<span class="sourceLineNo">246</span> checkIsDead(sn, "STARTUP");<a name="line.246"></a>
-<span class="sourceLineNo">247</span> if (!checkAndRecordNewServer(sn, ServerMetricsBuilder.of(sn, versionNumber))) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span> LOG.warn("THIS SHOULD NOT HAPPEN, RegionServerStartup"<a name="line.248"></a>
-<span class="sourceLineNo">249</span> + " could not record the server: " + sn);<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
-<span class="sourceLineNo">251</span> return sn;<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span> /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * Updates last flushed sequence Ids for the regions on server sn<a name="line.255"></a>
-<span class="sourceLineNo">256</span> * @param sn<a name="line.256"></a>
-<span class="sourceLineNo">257</span> * @param hsl<a name="line.257"></a>
-<span class="sourceLineNo">258</span> */<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private void updateLastFlushedSequenceIds(ServerName sn, ServerMetrics hsl) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> for (Entry<byte[], RegionMetrics> entry : hsl.getRegionMetrics().entrySet()) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span> byte[] encodedRegionName = Bytes.toBytes(RegionInfo.encodeRegionName(entry.getKey()));<a name="line.261"></a>
-<span class="sourceLineNo">262</span> Long existingValue = flushedSequenceIdByRegion.get(encodedRegionName);<a name="line.262"></a>
-<span class="sourceLineNo">263</span> long l = entry.getValue().getCompletedSequenceId();<a name="line.263"></a>
-<span class="sourceLineNo">264</span> // Don't let smaller sequence ids override greater sequence ids.<a name="line.264"></a>
-<span class="sourceLineNo">265</span> if (LOG.isTraceEnabled()) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span> LOG.trace(Bytes.toString(encodedRegionName) + ", existingValue=" + existingValue +<a name="line.266"></a>
-<span class="sourceLineNo">267</span> ", completeSequenceId=" + l);<a name="line.267"></a>
-<span class="sourceLineNo">268</span> }<a name="line.268"></a>
-<span class="sourceLineNo">269</span> if (existingValue == null || (l != HConstants.NO_SEQNUM && l > existingValue)) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span> flushedSequenceIdByRegion.put(encodedRegionName, l);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> } else if (l != HConstants.NO_SEQNUM && l < existingValue) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span> LOG.warn("RegionServer " + sn + " indicates a last flushed sequence id ("<a name="line.272"></a>
-<span class="sourceLineNo">273</span> + l + ") that is less than the previous last flushed sequence id ("<a name="line.273"></a>
-<span class="sourceLineNo">274</span> + existingValue + ") for region " + Bytes.toString(entry.getKey()) + " Ignoring.");<a name="line.274"></a>
-<span class="sourceLineNo">275</span> }<a name="line.275"></a>
-<span class="sourceLineNo">276</span> ConcurrentNavigableMap<byte[], Long> storeFlushedSequenceId =<a name="line.276"></a>
-<span class="sourceLineNo">277</span> computeIfAbsent(storeFlushedSequenceIdsByRegion, encodedRegionName,<a name="line.277"></a>
-<span class="sourceLineNo">278</span> () -> new ConcurrentSkipListMap<>(Bytes.BYTES_COMPARATOR));<a name="line.278"></a>
-<span class="sourceLineNo">279</span> for (Entry<byte[], Long> storeSeqId : entry.getValue().getStoreSequenceId().entrySet()) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span> byte[] family = storeSeqId.getKey();<a name="line.280"></a>
-<span class="sourceLineNo">281</span> existingValue = storeFlushedSequenceId.get(family);<a name="line.281"></a>
-<span class="sourceLineNo">282</span> l = storeSeqId.getValue();<a name="line.282"></a>
-<span class="sourceLineNo">283</span> if (LOG.isTraceEnabled()) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span> LOG.trace(Bytes.toString(encodedRegionName) + ", family=" + Bytes.toString(family) +<a name="line.284"></a>
-<span class="sourceLineNo">285</span> ", existingValue=" + existingValue + ", completeSequenceId=" + l);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> }<a name="line.286"></a>
-<span class="sourceLineNo">287</span> // Don't let smaller sequence ids override greater sequence ids.<a name="line.287"></a>
-<span class="sourceLineNo">288</span> if (existingValue == null || (l != HConstants.NO_SEQNUM && l > existingValue.longValue())) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span> storeFlushedSequenceId.put(family, l);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> }<a name="line.291"></a>
-<span class="sourceLineNo">292</span> }<a name="line.292"></a>
-<span class="sourceLineNo">293</span> }<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span> @VisibleForTesting<a name="line.295"></a>
-<span class="sourceLineNo">296</span> public void regionServerReport(ServerName sn,<a name="line.296"></a>
-<span class="sourceLineNo">297</span> ServerMetrics sl) throws YouAreDeadException {<a name="line.297"></a>
-<span class="sourceLineNo">298</span> checkIsDead(sn, "REPORT");<a name="line.298"></a>
-<span class="sourceLineNo">299</span> if (null == this.onlineServers.replace(sn, sl)) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Already have this host+port combo and its just different start code?<a name="line.300"></a>
-<span class="sourceLineNo">301</span> // Just let the server in. Presume master joining a running cluster.<a name="line.301"></a>
-<span class="sourceLineNo">302</span> // recordNewServer is what happens at the end of reportServerStartup.<a name="line.302"></a>
-<span class="sourceLineNo">303</span> // The only thing we are skipping is passing back to the regionserver<a name="line.303"></a>
-<span class="sourceLineNo">304</span> // the ServerName to use. Here we presume a master has already done<a name="line.304"></a>
-<span class="sourceLineNo">305</span> // that so we'll press on with whatever it gave us for ServerName.<a name="line.305"></a>
-<span class="sourceLineNo">306</span> if (!checkAndRecordNewServer(sn, sl)) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> LOG.info("RegionServerReport ignored, could not record the server: " + sn);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> return; // Not recorded, so no need to move on<a name="line.308"></a>
-<span class="sourceLineNo">309</span> }<a name="line.309"></a>
-<span class="sourceLineNo">310</span> }<a name="line.310"></a>
-<span class="sourceLineNo">311</span> updateLastFlushedSequenceIds(sn, sl);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span> /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span> * Check is a server of same host and port already exists,<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * if not, or the existed one got a smaller start code, record it.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> *<a name="line.317"></a>
-<span class="sourceLineNo">318</span> * @param serverName the server to check and record<a name="line.318"></a>
-<span class="sourceLineNo">319</span> * @param sl the server load on the server<a name="line.319"></a>
-<span class="sourceLineNo">320</span> * @return true if the server is recorded, otherwise, false<a name="line.320"></a>
-<span class="sourceLineNo">321</span> */<a name="line.321"></a>
-<span class="sourceLineNo">322</span> boolean checkAndRecordNewServer(final ServerName serverName, final ServerMetrics sl) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span> ServerName existingServer = null;<a name="line.323"></a>
-<span class="sourceLineNo">324</span> synchronized (this.onlineServers) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> existingServer = findServerWithSameHostnamePortWithLock(serverName);<a name="line.325"></a>
-<span class="sourceLineNo">326</span> if (existingServer != null && (existingServer.getStartcode() > serverName.getStartcode())) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span> LOG.info("Server serverName=" + serverName + " rejected; we already have "<a name="line.327"></a>
-<span class="sourceLineNo">328</span> + existingServer.toString() + " registered with same hostname and port");<a name="line.328"></a>
-<span class="sourceLineNo">329</span> return false;<a name="line.329"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.RetriesExhaustedException;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.zookeeper.KeeperException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.StoreSequenceId;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>/**<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * The ServerManager class manages info about region servers.<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * <p><a name="line.75"></a>
+<span class="sourceLineNo">076</span> * Maintains lists of online and dead servers. Processes the startups,<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * shutdowns, and deaths of region servers.<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * <p><a name="line.78"></a>
+<span class="sourceLineNo">079</span> * Servers are distinguished in two different ways. A given server has a<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * location, specified by hostname and port, and of which there can only be one<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * online at any given time. A server instance is specified by the location<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * (hostname and port) as well as the startcode (timestamp from when the server<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * was started). This is used to differentiate a restarted instance of a given<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * server from the original instance.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * <p><a name="line.85"></a>
+<span class="sourceLineNo">086</span> * If a sever is known not to be running any more, it is called dead. The dead<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * server needs to be handled by a ServerShutdownHandler. If the handler is not<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * enabled yet, the server can't be handled right away so it is queued up.<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * After the handler is enabled, the server will be submitted to a handler to handle.<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * However, the handler may be just partially enabled. If so,<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * the server cannot be fully processed, and be queued up for further processing.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * A server is fully processed only after the handler is fully enabled<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * and has completed the handling.<a name="line.93"></a>
+<span class="sourceLineNo">094</span> */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>@InterfaceAudience.Private<a name="line.95"></a>
+<span class="sourceLineNo">096</span>public class ServerManager {<a name="line.96"></a>
+<span class="sourceLineNo">097</span> public static final String WAIT_ON_REGIONSERVERS_MAXTOSTART =<a name="line.97"></a>
+<span class="sourceLineNo">098</span> "hbase.master.wait.on.regionservers.maxtostart";<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span> public static final String WAIT_ON_REGIONSERVERS_MINTOSTART =<a name="line.100"></a>
+<span class="sourceLineNo">101</span> "hbase.master.wait.on.regionservers.mintostart";<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span> public static final String WAIT_ON_REGIONSERVERS_TIMEOUT =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> "hbase.master.wait.on.regionservers.timeout";<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span> public static final String WAIT_ON_REGIONSERVERS_INTERVAL =<a name="line.106"></a>
+<span class="sourceLineNo">107</span> "hbase.master.wait.on.regionservers.interval";<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span> private static final Logger LOG = LoggerFactory.getLogger(ServerManager.class);<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> // Set if we are to shutdown the cluster.<a name="line.111"></a>
+<span class="sourceLineNo">112</span> private AtomicBoolean clusterShutdown = new AtomicBoolean(false);<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> /**<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * The last flushed sequence id for a region.<a name="line.115"></a>
+<span class="sourceLineNo">116</span> */<a name="line.116"></a>
+<span class="sourceLineNo">117</span> private final ConcurrentNavigableMap<byte[], Long> flushedSequenceIdByRegion =<a name="line.117"></a>
+<span class="sourceLineNo">118</span> new ConcurrentSkipListMap<>(Bytes.BYTES_COMPARATOR);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span> /**<a name="line.120"></a>
+<span class="sourceLineNo">121</span> * The last flushed sequence id for a store in a region.<a name="line.121"></a>
+<span class="sourceLineNo">122</span> */<a name="line.122"></a>
+<span class="sourceLineNo">123</span> private final ConcurrentNavigableMap<byte[], ConcurrentNavigableMap<byte[], Long>><a name="line.123"></a>
+<span class="sourceLineNo">124</span> storeFlushedSequenceIdsByRegion = new ConcurrentSkipListMap<>(Bytes.BYTES_COMPARATOR);<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> /** Map of registered servers to their current load */<a name="line.126"></a>
+<span class="sourceLineNo">127</span> private final ConcurrentNavigableMap<ServerName, ServerMetrics> onlineServers =<a name="line.127"></a>
+<span class="sourceLineNo">128</span> new ConcurrentSkipListMap<>();<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> * Map of admin interfaces per registered regionserver; these interfaces we use to control<a name="line.131"></a>
+<span class="sourceLineNo">132</span> * regionservers out on the cluster<a name="line.132"></a>
+<span class="sourceLineNo">133</span> */<a name="line.133"></a>
+<span class="sourceLineNo">134</span> private final Map<ServerName, AdminService.BlockingInterface> rsAdmins = new HashMap<>();<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span> /** List of region servers that should not get any more new regions. */<a name="line.136"></a>
+<span class="sourceLineNo">137</span> private final ArrayList<ServerName> drainingServers = new ArrayList<>();<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> private final MasterServices master;<a name="line.139"></a>
+<span class="sourceLineNo">140</span> private final ClusterConnection connection;<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span> private final DeadServer deadservers = new DeadServer();<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span> private final long maxSkew;<a name="line.144"></a>
+<span class="sourceLineNo">145</span> private final long warningSkew;<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span> private final RpcControllerFactory rpcControllerFactory;<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> * Set of region servers which are dead but not processed immediately. If one<a name="line.150"></a>
+<span class="sourceLineNo">151</span> * server died before master enables ServerShutdownHandler, the server will be<a name="line.151"></a>
+<span class="sourceLineNo">152</span> * added to this set and will be processed through calling<a name="line.152"></a>
+<span class="sourceLineNo">153</span> * {@link ServerManager#processQueuedDeadServers()} by master.<a name="line.153"></a>
+<span class="sourceLineNo">154</span> * <p><a name="line.154"></a>
+<span class="sourceLineNo">155</span> * A dead server is a server instance known to be dead, not listed in the /hbase/rs<a name="line.155"></a>
+<span class="sourceLineNo">156</span> * znode any more. It may have not been submitted to ServerShutdownHandler yet<a name="line.156"></a>
+<span class="sourceLineNo">157</span> * because the handler is not enabled.<a name="line.157"></a>
+<span class="sourceLineNo">158</span> * <p><a name="line.158"></a>
+<span class="sourceLineNo">159</span> * A dead server, which has been submitted to ServerShutdownHandler while the<a name="line.159"></a>
+<span class="sourceLineNo">160</span> * handler is not enabled, is queued up.<a name="line.160"></a>
+<span class="sourceLineNo">161</span> * <p><a name="line.161"></a>
+<span class="sourceLineNo">162</span> * So this is a set of region servers known to be dead but not submitted to<a name="line.162"></a>
+<span class="sourceLineNo">163</span> * ServerShutdownHandler for processing yet.<a name="line.163"></a>
+<span class="sourceLineNo">164</span> */<a name="line.164"></a>
+<span class="sourceLineNo">165</span> private Set<ServerName> queuedDeadServers = new HashSet<>();<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span> /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * Set of region servers which are dead and submitted to ServerShutdownHandler to process but not<a name="line.168"></a>
+<span class="sourceLineNo">169</span> * fully processed immediately.<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * <p><a name="line.170"></a>
+<span class="sourceLineNo">171</span> * If one server died before assignment manager finished the failover cleanup, the server will be<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * added to this set and will be processed through calling<a name="line.172"></a>
+<span class="sourceLineNo">173</span> * {@link ServerManager#processQueuedDeadServers()} by assignment manager.<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * <p><a name="line.174"></a>
+<span class="sourceLineNo">175</span> * The Boolean value indicates whether log split is needed inside ServerShutdownHandler<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * <p><a name="line.176"></a>
+<span class="sourceLineNo">177</span> * ServerShutdownHandler processes a dead server submitted to the handler after the handler is<a name="line.177"></a>
+<span class="sourceLineNo">178</span> * enabled. It may not be able to complete the processing because meta is not yet online or master<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * is currently in startup mode. In this case, the dead server will be parked in this set<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * temporarily.<a name="line.180"></a>
+<span class="sourceLineNo">181</span> */<a name="line.181"></a>
+<span class="sourceLineNo">182</span> private Map<ServerName, Boolean> requeuedDeadServers = new ConcurrentHashMap<>();<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span> /** Listeners that are called on server events. */<a name="line.184"></a>
+<span class="sourceLineNo">185</span> private List<ServerListener> listeners = new CopyOnWriteArrayList<>();<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span> /**<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * Constructor.<a name="line.188"></a>
+<span class="sourceLineNo">189</span> */<a name="line.189"></a>
+<span class="sourceLineNo">190</span> public ServerManager(final MasterServices master) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span> this.master = master;<a name="line.191"></a>
+<span class="sourceLineNo">192</span> Configuration c = master.getConfiguration();<a name="line.192"></a>
+<span class="sourceLineNo">193</span> maxSkew = c.getLong("hbase.master.maxclockskew", 30000);<a name="line.193"></a>
+<span class="sourceLineNo">194</span> warningSkew = c.getLong("hbase.master.warningclockskew", 10000);<a name="line.194"></a>
+<span class="sourceLineNo">195</span> this.connection = master.getClusterConnection();<a name="line.195"></a>
+<span class="sourceLineNo">196</span> this.rpcControllerFactory = this.connection == null? null: connection.getRpcControllerFactory();<a name="line.196"></a>
+<span class="sourceLineNo">197</span> }<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span> /**<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * Add the listener to the notification list.<a name="line.200"></a>
+<span class="sourceLineNo">201</span> * @param listener The ServerListener to register<a name="line.201"></a>
+<span class="sourceLineNo">202</span> */<a name="line.202"></a>
+<span class="sourceLineNo">203</span> public void registerListener(final ServerListener listener) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span> this.listeners.add(listener);<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span> /**<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * Remove the listener from the notification list.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> * @param listener The ServerListener to unregister<a name="line.209"></a>
+<span class="sourceLineNo">210</span> */<a name="line.210"></a>
+<span class="sourceLineNo">211</span> public boolean unregisterListener(final ServerListener listener) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span> return this.listeners.remove(listener);<a name="line.212"></a>
+<span class="sourceLineNo">213</span> }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span> /**<a name="line.215"></a>
+<span class="sourceLineNo">216</span> * Let the server manager know a new regionserver has come online<a name="line.216"></a>
+<span class="sourceLineNo">217</span> * @param request the startup request<a name="line.217"></a>
+<span class="sourceLineNo">218</span> * @param versionNumber the version of the new regionserver<a name="line.218"></a>
+<span class="sourceLineNo">219</span> * @param ia the InetAddress from which request is received<a name="line.219"></a>
+<span class="sourceLineNo">220</span> * @return The ServerName we know this server as.<a name="line.220"></a>
+<span class="sourceLineNo">221</span> * @throws IOException<a name="line.221"></a>
+<span class="sourceLineNo">222</span> */<a name="line.222"></a>
+<span class="sourceLineNo">223</span> ServerName regionServerStartup(RegionServerStartupRequest request, int versionNumber,<a name="line.223"></a>
+<span class="sourceLineNo">224</span> InetAddress ia) throws IOException {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // Test for case where we get a region startup message from a regionserver<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // that has been quickly restarted but whose znode expiration handler has<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // not yet run, or from a server whose fail we are currently processing.<a name="line.227"></a>
+<span class="sourceLineNo">228</span> // Test its host+port combo is present in serverAddressToServerInfo. If it<a name="line.228"></a>
+<span class="sourceLineNo">229</span> // is, reject the server and trigger its expiration. The next time it comes<a name="line.229"></a>
+<span class="sourceLineNo">230</span> // in, it should have been removed from serverAddressToServerInfo and queued<a name="line.230"></a>
+<span class="sourceLineNo">231</span> // for processing by ProcessServerShutdown.<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> final String hostname = request.hasUseThisHostnameInstead() ?<a name="line.233"></a>
+<span class="sourceLineNo">234</span> request.getUseThisHostnameInstead() :ia.getHostName();<a name="line.234"></a>
+<span class="sourceLineNo">235</span> ServerName sn = ServerName.valueOf(hostname, request.getPort(),<a name="line.235"></a>
+<span class="sourceLineNo">236</span> request.getServerStartCode());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> checkClockSkew(sn, request.getServerCurrentTime());<a name="line.237"></a>
+<span class="sourceLineNo">238</span> checkIsDead(sn, "STARTUP");<a name="line.238"></a>
+<span class="sourceLineNo">239</span> if (!checkAndRecordNewServer(sn, ServerMetricsBuilder.of(sn, versionNumber))) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span> LOG.warn("THIS SHOULD NOT HAPPEN, RegionServerStartup"<a name="line.240"></a>
+<span class="sourceLineNo">241</span> + " could not record the server: " + sn);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> }<a name="line.242"></a>
+<span class="sourceLineNo">243</span> return sn;<a name="line.243"></a>
+<span class="sourceLineNo">244</span> }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span> /**<a name="line.246"></a>
+<span class="sourceLineNo">247</span> * Updates last flushed sequence Ids for the regions on server sn<a name="line.247"></a>
+<span class="sourceLineNo">248</span> * @param sn<a name="line.248"></a>
+<span class="sourceLineNo">249</span> * @param hsl<a name="line.249"></a>
+<span class="sourceLineNo">250</span> */<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private void updateLastFlushedSequenceIds(ServerName sn, ServerMetrics hsl) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span> for (Entry<byte[], RegionMetrics> entry : hsl.getRegionMetrics().entrySet()) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span> byte[] encodedRegionName = Bytes.toBytes(RegionInfo.encodeRegionName(entry.getKey()));<a name="line.253"></a>
+<span class="sourceLineNo">254</span> Long existingValue = flushedSequenceIdByRegion.get(encodedRegionName);<a name="line.254"></a>
+<span class="sourceLineNo">255</span> long l = entry.getValue().getCompletedSequenceId();<a name="line.255"></a>
+<span class="sourceLineNo">256</span> // Don't let smaller sequence ids override greater sequence ids.<a name="line.256"></a>
+<span class="sourceLineNo">257</span> if (LOG.isTraceEnabled()) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span> LOG.trace(Bytes.toString(encodedRegionName) + ", existingValue=" + existingValue +<a name="line.258"></a>
+<span class="sourceLineNo">259</span> ", completeSequenceId=" + l);<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span> if (existingValue == null || (l != HConstants.NO_SEQNUM && l > existingValue)) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span> flushedSequenceIdByRegion.put(encodedRegionName, l);<a name="line.262"></a>
+<span class="sourceLineNo">263</span> } else if (l != HConstants.NO_SEQNUM && l < existingValue) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span> LOG.warn("RegionServer " + sn + " indicates a last flushed sequence id ("<a name="line.264"></a>
+<span class="sourceLineNo">265</span> + l + ") that is less than the previous last flushed sequence id ("<a name="line.265"></a>
+<span class="sourceLineNo">266</span> + existingValue + ") for region " + Bytes.toString(entry.getKey()) + " Ignoring.");<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
+<span class="sourceLineNo">268</span> ConcurrentNavigableMap<byte[], Long> storeFlushedSequenceId =<a name="line.268"></a>
+<span class="sourceLineNo">269</span> computeIfAbsent(storeFlushedSequenceIdsByRegion, encodedRegionName,<a name="line.269"></a>
+<span class="sourceLineNo">270</span> () -> new ConcurrentSkipListMap<>(Bytes.BYTES_COMPARATOR));<a name="line.270"></a>
+<span class="sourceLineNo">271</span> for (Entry<byte[], Long> storeSeqId : entry.getValue().getStoreSequenceId().entrySet()) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span> byte[] family = storeSeqId.getKey();<a name="line.272"></a>
+<span class="sourceLineNo">273</span> existingValue = storeFlushedSequenceId.get(family);<a name="line.273"></a>
+<span class="sourceLineNo">274</span> l = storeSeqId.getValue();<a name="line.274"></a>
+<span class="sourceLineNo">275</span> if (LOG.isTraceEnabled()) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span> LOG.trace(Bytes.toString(encodedRegionName) + ", family=" + Bytes.toString(family) +<a name="line.276"></a>
+<span class="sourceLineNo">277</span> ", existingValue=" + existingValue + ", completeSequenceId=" + l);<a name="line.277"></a>
+<span class="sourceLineNo">278</span> }<a name="line.278"></a>
+<span class="sourceLineNo">279</span> // Don't let smaller sequence ids override greater sequence ids.<a name="line.279"></a>
+<span class="sourceLineNo">280</span> if (existingValue == null || (l != HConstants.NO_SEQNUM && l > existingValue.longValue())) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span> storeFlushedSequenceId.put(family, l);<a name="line.281"></a>
+<span class="sourceLineNo">282</span> }<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> @VisibleForTesting<a name="line.287"></a>
+<span class="sourceLineNo">288</span> public void regionServerReport(ServerName sn,<a name="line.288"></a>
+<span class="sourceLineNo">289</span> ServerMetrics sl) throws YouAreDeadException {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> checkIsDead(sn, "REPORT");<a name="line.290"></a>
+<span class="sourceLineNo">291</span> if (null == this.onlineServers.replace(sn, sl)) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span> // Already have this host+port combo and its just different start code?<a name="line.292"></a>
+<span class="sourceLineNo">293</span> // Just let the server in. Presume master joining a running cluster.<a name="line.293"></a>
+<span class="sourceLineNo">294</span> // recordNewServer is what happens at the end of reportServerStartup.<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // The only thing we are skipping is passing back to the regionserver<a name="line.295"></a>
+<span class="sourceLineNo">296</span> // the ServerName to use. Here we presume a master has already done<a name="line.296"></a>
+<span class="sourceLineNo">297</span> // that so we'll press on with whatever it gave us for ServerName.<a name="line.297"></a>
+<span class="sourceLineNo">298</span> if (!checkAndRecordNewServer(sn, sl)) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span> LOG.info("RegionServerReport ignored, could not record the server: " + sn);<a name="line.299"></a>
+<span class="sourceLineNo">300</span> return; // Not recorded, so no need to move on<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> updateLastFlushedSequenceIds(sn, sl);<a name="line.303"></a>
+<span class="sourceLineNo">304</span> }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span> /**<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * Check is a server of same host and port already exists,<a name="line.307"></a>
+<span class="sourceLineNo">308</span> * if not, or the existed one got a smaller start code, record it.<a name="line.308"></a>
+<span class="sourceLineNo">309</span> *<a name="line.309"></a>
+<span class="sourceLineNo">310</span> * @param serverName the server to check and record<a name="line.310"></a>
+<span class="sourceLineNo">311</span> * @param sl the server load on the server<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * @return true if the server is recorded, otherwise, false<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> boolean checkAndRecordNewServer(final ServerName serverName, final ServerMetrics sl) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> ServerName existingServer = null;<a name="line.315"></a>
+<span class="sourceLineNo">316</span> synchronized (this.onlineServers) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> existingServer = findServerWithSameHostnamePortWithLock(serverName);<a name="line.317"></a>
+<span class="sourceLineNo">318</span> if (existingServer != null && (existingServer.getStartcode() > serverName.getStartcode())) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span> LOG.info("Server serverName=" + serverName + " rejected; we already have "<a name="line.319"></a>
+<span class="sourceLineNo">320</span> + existingServer.toString() + " registered with same hostname and port");<a name="line.320"></a>
+<span class="sourceLineNo">321</span> return false;<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> recordNewServerWithLock(serverName, sl);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> // Tell our listeners that a server was added<a name="line.326"></a>
+<span class="sourceLineNo">327</span> if (!this.listeners.isEmpty()) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span> for (ServerListener listener : this.listeners) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> listener.serverAdded(serverName);<a name="line.329"></a>
<span class="sourceLineNo">330</span> }<a name="line.330"></a>
-<span class="sourceLineNo">331</span> recordNewServerWithLock(serverName, sl);<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span> // Tell our listeners that a server was added<a name="line.334"></a>
-<span class="sourceLineNo">335</span> if (!this.listeners.isEmpty()) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> for (ServerListener listener : this.listeners) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span> listener.serverAdded(serverName);<a name="line.337"></a>
-<span class="sourceLineNo">338</span> }<a name="line.338"></a>
-<span class="sourceLineNo">339</span> }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span> // Note that we assume that same ts means same server, and don't expire in that case.<a name="line.341"></a>
-<span class="sourceLineNo">342</span> // TODO: ts can theoretically collide due to clock shifts, so this is a bit hacky.<a name="line.342"></a>
-<span class="sourceLineNo">343</span> if (existingServer != null &&<a name="line.343"></a>
-<span class="sourceLineNo">344</span> (existingServer.getStartcode() < serverName.getStartcode())) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span> LOG.info("Triggering server recovery; existingServer " +<a name="line.345"></a>
-<span class="sourceLineNo">346</span> existingServer + " looks stale, new server:" + serverName);<a name="line.346"></a>
-<span class="sourceLineNo">347</span> expireServer(existingServer);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> return true;<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span> /**<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * Checks if the clock skew between the server and the master. If the clock skew exceeds the<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * configured max, it will throw an exception; if it exceeds the configured warning threshold,<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * it will log a warning but start normally.<a name="line.355"></a>
-<span class="sourceLineNo">356</span> * @param serverName Incoming servers's name<a name="line.356"></a>
-<span class="sourceLineNo">357</span> * @param serverCurrentTime<a name="line.357"></a>
-<span class="sourceLineNo">358</span> * @throws ClockOutOfSyncException if the skew exceeds the configured max value<a name="line.358"></a>
-<span class="sourceLineNo">359</span> */<a name="line.359"></a>
-<span class="sourceLineNo">360</span> private void checkClockSkew(final ServerName serverName, final long serverCurrentTime)<a name="line.360"></a>
-<span class="sourceLineNo">361</span> throws ClockOutOfSyncException {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> long skew = Math.abs(System.currentTimeMillis() - serverCurrentTime);<a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (skew > maxSkew) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> String message = "Server " + serverName + " has been " +<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "rejected; Reported time is too far out of sync with master. " +<a name="line.365"></a>
-<span class="sourceLineNo">366</span> "Time difference of " + skew + "ms > max allowed of " + maxSkew + "ms";<a name="line.366"></a>
-<span class="sourceLineNo">367</span> LOG.warn(message);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> throw new ClockOutOfSyncException(message);<a name="line.368"></a>
-<span class="sourceLineNo">369</span> } else if (skew > warningSkew){<a name="line.369"></a>
-<span class="sourceLineNo">370</span> String message = "Reported time for server " + serverName + " is out of sync with master " +<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "by " + skew + "ms. (Warning threshold is " + warningSkew + "ms; " +<a name="line.371"></a>
-<span class="sourceLineNo">372</span> "error threshold is " + maxSkew + "ms)";<a name="line.372"></a>
-<span class="sourceLineNo">373</span> LOG.warn(message);<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> /**<a name="line.377"></a>
-<span class="sourceLineNo">378</span> * If this server is on the dead list, reject it with a YouAreDeadException.<a name="line.378"></a>
-<span class="sourceLineNo">379</span> * If it was dead but came back with a new start code, remove the old entry<a name="line.379"></a>
-<span class="sourceLineNo">380</span> * from the dead list.<a name="line.380"></a>
-<span class="sourceLineNo">381</span> * @param serverName<a name="line.381"></a>
-<span class="sourceLineNo">382</span> * @param what START or REPORT<a name="line.382"></a>
-<span class="sourceLineNo">383</span> * @throws org.apache.hadoop.hbase.YouAreDeadException<a name="line.383"></a>
-<span class="sourceLineNo">384</span> */<a name="line.384"></a>
-<span class="sourceLineNo">385</span> private void checkIsDead(final ServerName serverName, final String what)<a name="line.385"></a>
-<span class="sourceLineNo">386</span> throws YouAreDeadException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> if (this.deadservers.isDeadServer(serverName)) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> // host name, port and start code all match with existing one of the<a name="line.388"></a>
-<span class="sourceLineNo">389</span> // dead servers. So, this server must be dead.<a name="line.389"></a>
-<span class="sourceLineNo">390</span> String message = "Server " + what + " rejected; currently processing " +<a name="line.390"></a>
-<span class="sourceLineNo">391</span> serverName + " as dead server";<a name="line.391"></a>
-<span class="sourceLineNo">392</span> LOG.debug(message);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> throw new YouAreDeadException(message);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> }<a name="line.394"></a>
-<span class="sourceLineNo">395</span> // remove dead server with same hostname and port of newly checking in rs after master<a name="line.395"></a>
-<span class="sourceLineNo">396</span> // initialization.See HBASE-5916 for more information.<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if ((this.master == null || this.master.isInitialized())<a name="line.397"></a>
-<span class="sourceLineNo">398</span> && this.deadservers.cleanPreviousInstance(serverName)) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> // This server has now become alive after we marked it as dead.<a name="line.399"></a>
-<span class="sourceLineNo">400</span> // We removed it's previous entry from the dead list to reflect it.<a name="line.400"></a>
-<span class="sourceLineNo">401</span> LOG.debug(what + ":" + " Server " + serverName + " came back up," +<a name="line.401"></a>
-<span class="sourceLineNo">402</span> " removed it from the dead servers list");<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> /**<a name="line.406"></a>
-<span class="sourceLineNo">407</span> * Assumes onlineServers is locked.<a name="line.407"></a>
-<span class="sourceLineNo">408</span> * @return ServerName with matching hostname and port.<a name="line.408"></a>
-<span class="sourceLineNo">409</span> */<a name="line.409"></a>
-<span class="sourceLineNo">410</span> private ServerName findServerWithSameHostnamePortWithLock(<a name="line.410"></a>
-<span class="sourceLineNo">411</span> final ServerName serverName) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span> ServerName end = ServerName.valueOf(serverName.getHostname(), serverName.getPort(),<a name="line.412"></a>
-<span class="sourceLineNo">413</span> Long.MAX_VALUE);<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span> ServerName r = onlineServers.lowerKey(end);<a name="line.415"></a>
-<span class="sourceLineNo">416</span> if (r != null) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span> if (ServerName.isSameAddress(r, serverName)) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span> return r;<a name="line.418"></a>
-<span class="sourceLineNo">419</span> }<a name="line.419"></a>
-<span class="sourceLineNo">420</span> }<a name="line.420"></a>
-<span class="sourceLineNo">421</span> return null;<a name="line.421"></a>
-<span class="sourceLineNo">422</span> }<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span> /**<a name="line.424"></a>
-<span class="sourceLineNo">425</span> * Adds the onlineServers list. onlineServers should be locked.<a name="line.425"></a>
-<span class="sourceLineNo">426</span> * @param serverName The remote servers name.<a name="line.426"></a>
-<span class="sourceLineNo">427</span> */<a name="line.427"></a>
-<span class="sourceLineNo">428</span> @VisibleForTesting<a name="line.428"></a>
-<span class="sourceLineNo">429</span> void recordNewServerWithLock(final ServerName serverName, final ServerMetrics sl) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span> LOG.info("Registering regionserver=" + serverName);<a name="line.430"></a>
-<span class="sourceLineNo">431</span> this.onlineServers.put(serverName, sl);<a name="line.431"></a>
-<span class="sourceLineNo">432</span> this.rsAdmins.remove(serverName);<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span> public RegionStoreSequenceIds getLastFlushedSequenceId(byte[] encodedRegionName) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> RegionStoreSequenceIds.Builder builder = RegionStoreSequenceIds.newBuilder();<a name="line.436"></a>
-<span class="sourceLineNo">437</span> Long seqId = flushedSequenceIdByRegion.get(encodedRegionName);<a name="line.437"></a>
-<span class="sourceLineNo">438</span> builder.setLastFlushedSequenceId(seqId != null ? seqId.longValue() : HConstants.NO_SEQNUM);<a name="line.438"></a>
-<span class="sourceLineNo">439</span> Map<byte[], Long> storeFlushedSequenceId =<a name="line.439"></a>
-<span class="sourceLineNo">440</span> storeFlushedSequenceIdsByRegion.get(encodedRegionName);<a name="line.440"></a>
-<span class="sourceLineNo">441</span> if (storeFlushedSequenceId != null) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> for (Map.Entry<byte[], Long> entry : storeFlushedSequenceId.entrySet()) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> builder.addStoreSequenceId(StoreSequenceId.newBuilder()<a name="line.443"></a>
-<span class="sourceLineNo">444</span> .setFamilyName(UnsafeByteOperations.unsafeWrap(entry.getKey()))<a name="line.444"></a>
-<span class="sourceLineNo">445</span> .setSequenceId(entry.getValue().longValue()).build());<a name="line.445"></a>
-<span class="sourceLineNo">446</span> }<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span> return builder.build();<a name="line.448"></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> // Note that we assume that same ts means same server, and don't expire in that case.<a name="line.333"></a>
+<span class="sourceLineNo">334</span> // TODO: ts can theoretically collide due to clock shifts, so this is a bit hacky.<a name="line.334"></a>
+<span class="sourceLineNo">335</span> if (existingServer != null &&<a name="line.335"></a>
+<span class="sourceLineNo">336</span> (existingServer.getStartcode() < serverName.getStartcode())) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span> LOG.info("Triggering server recovery; existingServer " +<a name="line.337"></a>
+<span class="sourceLineNo">338</span> existingServer + " looks stale, new server:" + serverName);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> expireServer(existingServer);<a name="line.339"></a>
+<span class="sourceLineNo">340</span> }<a name="line.340"></a>
+<span class="sourceLineNo">341</span> return true;<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> /**<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * Checks if the clock skew between the server and the master. If the clock skew exceeds the<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * configured max, it will throw an exception; if it exceeds the configured warning threshold,<a name="line.346"></a>
+<span class="sourceLineNo">347</span> * it will log a warning but start normally.<a name="line.347"></a>
+<span class="sourceLineNo">348</span> * @param serverName Incoming servers's name<a name="line.348"></a>
+<span class="sourceLineNo">349</span> * @param serverCurrentTime<a name="line.349"></a>
+<span class="sourceLineNo">350</span> * @throws ClockOutOfSyncException if the skew exceeds the configured max value<a name="line.350"></a>
+<span class="sourceLineNo">351</span> */<a name="line.351"></a>
+<span class="sourceLineNo">352</span> private void checkClockSkew(final ServerName serverName, final long serverCurrentTime)<a name="line.352"></a>
+<span class="sourceLineNo">353</span> throws ClockOutOfSyncException {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> long skew = Math.abs(System.currentTimeMillis() - serverCurrentTime);<a name="line.354"></a>
+<span class="sourceLineNo">355</span> if (skew > maxSkew) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> String message = "Server " + serverName + " has been " +<a name="line.356"></a>
+<span class="sourceLineNo">357</span> "rejected; Reported time is too far out of sync with master. " +<a name="line.357"></a>
+<span class="sourceLineNo">358</span> "Time difference of " + skew + "ms > max allowed of " + maxSkew + "ms";<a name="line.358"></a>
+<span class="sourceLineNo">359</span> LOG.warn(message);<a name="line.359"></a>
+<span class="sourceLineNo">360</span> throw new ClockOutOfSyncException(message);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> } else if (skew > warningSkew){<a name="line.361"></a>
+<span class="sourceLineNo">362</span> String message = "Reported time for server " + serverName + " is out of sync with master " +<a name="line.362"></a>
+<span class="sourceLineNo">363</span> "by " + skew + "ms. (Warning threshold is " + warningSkew + "ms; " +<a name="line.363"></a>
+<span class="sourceLineNo">364</span> "error threshold is " + maxSkew + "ms)";<a name="line.364"></a>
+<span class="sourceLineNo">365</span> LOG.warn(message);<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span> }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span> /**<a name="line.369"></a>
+<span class="sourceLineNo">370</span> * If this server is on the dead list, reject it with a YouAreDeadException.<a name="line.370"></a>
+<span class="sourceLineNo">371</span> * If it was dead but came back with a new start code, remove the old entry<a name="line.371"></a>
+<span class="sourceLineNo">372</span> * from the dead list.<a name="line.372"></a>
+<span class="sourceLineNo">373</span> * @param serverName<a name="line.373"></a>
+<span class="sourceLineNo">374</span> * @param what START or REPORT<a name="line.374"></a>
+<span class="sourceLineNo">375</span> * @throws org.apache.hadoop.hbase.YouAreDeadException<a name="line.375"></a>
+<span class="sourceLineNo">376</span> */<a name="line.376"></a>
+<span class="sourceLineNo">377</span> private void checkIsDead(final ServerName serverName, final String what)<a name="line.377"></a>
+<span class="sourceLineNo">378</span> throws YouAreDeadException {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> if (this.deadservers.isDeadServer(serverName)) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> // host name, port and start code all match with existing one of the<a name="line.380"></a>
+<span class="sourceLineNo">381</span> // dead servers. So, this server must be dead.<a name="line.381"></a>
+<span class="sourceLineNo">382</span> String message = "Server " + what + " rejected; currently processing " +<a name="line.382"></a>
+<span class="sourceLineNo">383</span> serverName + " as dead server";<a name="line.383"></a>
+<span class="sourceLineNo">384</span> LOG.debug(message);<a name="line.384"></a>
+<span class="sourceLineNo">385</span> throw new YouAreDeadException(message);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> }<a name="line.386"></a>
+<span class="sourceLineNo">387</span> // remove dead server with same hostname and port of newly checking in rs after master<a name="line.387"></a>
+<span class="sourceLineNo">388</span> // initialization.See HBASE-5916 for more information.<a name="line.388"></a>
+<span class="sourceLineNo">389</span> if ((this.master == null || this.master.isInitialized())<a name="line.389"></a>
+<span class="sourceLineNo">390</span> && this.deadservers.cleanPreviousInstance(serverName)) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> // This server has now become alive after we marked it as dead.<a name="line.391"></a>
+<span class="sourceLineNo">392</span> // We removed it's previous entry from the dead list to reflect it.<a name="line.392"></a>
+<span class="sourceLineNo">393</span> LOG.debug(what + ":" + " Server " + serverName + " came back up," +<a name="line.393"></a>
+<span class="sourceLineNo">394</span> " removed it from the dead servers list");<a name="line.394"></a>
+<span class="sourceLineNo">395</span> }<a name="line.395"></a>
+<span class="sourceLineNo">396</span> }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span> /**<a name="line.398"></a>
+<span class="sourceLineNo">399</span> * Assumes onlineServers is locked.<a name="line.399"></a>
+<span class="sourceLineNo">400</span> * @return ServerName with matching hostname and port.<a name="line.400"></a>
+<span class="sourceLineNo">401</span> */<a name="line.401"></a>
+<span class="sourceLineNo">402</span> private ServerName findServerWithSameHostnamePortWithLock(<a name="line.402"></a>
+<span class="sourceLineNo">403</span> final ServerName serverName) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span> ServerName end = ServerName.valueOf(serverName.getHostname(), serverName.getPort(),<a name="line.404"></a>
+<span class="sourceLineNo">405</span> Long.MAX_VALUE);<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span> ServerName r = onlineServers.lowerKey(end);<a name="line.407"></a>
+<span class="sourceLineNo">408</span> if (r != null) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span> if (ServerName.isSameAddress(r, serverName)) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> return r;<a name="line.410"></a>
+<span class="sourceLineNo">411</span> }<a name="line.411"></a>
+<span class="sourceLineNo">412</span> }<a name="line.412"></a>
+<span class="sourceLineNo">413</span> return null;<a name="line.413"></a>
+<span class="sourceLineNo">414</span> }<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span> /**<a name="line.416"></a>
+<span class="sourceLineNo">417</span> * Adds the onlineServers list. onlineServers should be locked.<a name="line.417"></a>
+<span class="sourceLineNo">418</span> * @param serverName The remote servers name.<a name="line.418"></a>
+<span class="sourceLineNo">419</span> */<a name="line.419"></a>
+<span class="sourceLineNo">420</span> @VisibleForTesting<a name="line.420"></a>
+<span class="sourceLineNo">421</span> void recordNewServerWithLock(final ServerName serverName, final ServerMetrics sl) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span> LOG.info("Registering regionserver=" + serverName);<a name="line.422"></a>
+<span class="sourceLineNo">423</span> this.onlineServers.put(serverName, sl);<a name="line.423"></a>
+<span class="sourceLineNo">424</span> this.rsAdmins.remove(serverName);<a name="line.424"></a>
+<span class="sourceLineNo">425</span> }<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span> public RegionStoreSequenceIds getLastFlushedSequenceId(byte[] encodedRegionName) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span> RegionStoreSequenceIds.Builder builder = RegionStoreSequenceIds.newBuilder();<a name="line.428"></a>
+<span class="sourceLineNo">429</span> Long seqId = flushedSequenceIdByRegion.get(encodedRegionName);<a name="line.429"></a>
+<span class="sourceLineNo">430</span> builder.setLastFlushedSequenceId(seqId != null ? seqId.longValue() : HConstants.NO_SEQNUM);<a name="line.430"></a>
+<span class="sourceLineNo">431</span> Map<byte[], Long> storeFlushedSequenceId =<a name="line.431"></a>
+<span class="sourceLineNo">432</span> storeFlushedSequenceIdsByRegion.get(encodedRegionName);<a name="line.432"></a>
+<span class="sourceLineNo">433</span> if (storeFlushedSequenceId != null) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span> for (Map.Entry<byte[], Long> entry : storeFlushedSequenceId.entrySet()) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span> builder.addStoreSequenceId(StoreSequenceId.newBuilder()<a name="line.435"></a>
+<span class="sourceLineNo">436</span> .setFamilyName(UnsafeByteOperations.unsafeWrap(entry.getKey()))<a name="line.436"></a>
+<span class="sourceLineNo">437</span> .setSequenceId(entry.getValue().longValue()).build());<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> return builder.build();<a name="line.440"></a>
+<span class="sourceLineNo">441</span> }<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span> /**<a name="line.443"></a>
+<span class="sourceLineNo">444</span> * @param serverName<a name="line.444"></a>
+<span class="sourceLineNo">445</span> * @return ServerMetrics if serverName is known else null<a name="line.445"></a>
+<span class="sourceLineNo">446</span> */<a name="line.446"></a>
+<span class="sourceLineNo">447</span> public ServerMetrics getLoad(final ServerName serverName) {<a name="line.447"></a>
+<span class="sourceLineNo">448</span> return this.onlineServers.get(serverName);<a name="line.448"></a>
<span class="sourceLineNo">449</span> }<a name="line.449"></a>
<span class="sourceLineNo">450</span><a name="line.450"></a>
<span class="sourceLineNo">451</span> /**<a name="line.451"></a>
-<span class="sourceLineNo">452</span> * @param serverName<a name="line.452"></a>
-<span class="sourceLineNo">453</span> * @return ServerMetrics if serverName is known else null<a name="line.453"></a>
-<span class="sourceLineNo">454</span> */<a name="line.454"></a>
-<span class="sourceLineNo">455</span> public ServerMetrics getLoad(final ServerName serverName) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> return this.onlineServers.get(serverName);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> }<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span> /**<a name="line.459"></a>
-<span class="sourceLineNo">460</span> * Compute the average load across all region servers.<a name="line.460"></a>
-<span class="sourceLineNo">461</span> * Currently, this uses a very naive computation - just uses the number of<a name="line.461"></a>
-<span class="sourceLineNo">462</span> * regions being served, ignoring stats about number of requests.<a name="line.462"></a>
-<span class="sourceLineNo">463</span> * @return the average load<a name="line.463"></a>
-<span class="sourceLineNo">464</span> */<a name="line.464"></a>
-<span class="sourceLineNo">465</span> public double getAverageLoad() {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> int totalLoad = 0;<a name="line.466"></a>
-<span class="sourceLineNo">467</span> int numServers = 0;<a name="line.467"></a>
-<span class="sourceLineNo">468</span> for (ServerMetrics sl : this.onlineServers.values()) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> numServers++;<a name="line.469"></a>
-<span class="sourceLineNo">470</span> totalLoad += sl.getRegionMetrics().size();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> }<a name="line.471"></a>
-<span class="sourceLineNo">472</span> return numServers == 0 ? 0 :<a name="line.472"></a>
-<span class="sourceLineNo">473</span> (double)totalLoad / (double)numServers;<a name="line.473"></a>
-<span class="sourceLineNo">474</span> }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span> /** @return the count of active regionservers */<a name="line.476"></a>
-<span class="sourceLineNo">477</span> public int countOfRegionServers() {<a name="line.477"></a>
-<span class="sourceLineNo">478</span> // Presumes onlineServers is a concurrent map<a name="line.478"></a>
-<span class="sourceLineNo">479</span> return this.onlineServers.size();<a name="line.479"></a>
-<span class="sourceLineNo">480</span> }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span> /**<a name="line.482"></a>
-<span class="sourceLineNo">483</span> * @return Read-only map of servers to serverinfo<a name="line.483"></a>
-<span class="sourceLineNo">484</span> */<a name="line.484"></a>
-<span class="sourceLineNo">485</span> public Map<ServerName, ServerMetrics> getOnlineServers() {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> // Presumption is that iterating the returned Map is OK.<a name="line.486"></a>
-<span class="sourceLineNo">487</span> synchronized (this.onlineServers) {<a name="line.487"></a>
-<span class="sourceL
<TRUNCATED>