http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1b5f3a4b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CollectAllVisitor.html
----------------------------------------------------------------------
diff --git
a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CollectAllVisitor.html
b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CollectAllVisitor.html
index 91a0ffa..f0a063c 100644
---
a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CollectAllVisitor.html
+++
b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CollectAllVisitor.html
@@ -1985,260 +1985,266 @@
<span class="sourceLineNo">1977</span> deletes.add(e);<a
name="line.1977"></a>
<span class="sourceLineNo">1978</span> }<a name="line.1978"></a>
<span class="sourceLineNo">1979</span> deleteFromMetaTable(connection,
deletes);<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span> LOG.info("Deleted " +
regionsInfo);<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span> }<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span><a name="line.1982"></a>
-<span class="sourceLineNo">1983</span> /**<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span> * Adds and Removes the specified
regions from hbase:meta<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span> * @param connection connection we're
using<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span> * @param regionsToRemove list of
regions to be deleted from META<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span> * @param regionsToAdd list of regions
to be added to META<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span> * @throws IOException<a
name="line.1988"></a>
-<span class="sourceLineNo">1989</span> */<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span> public static void
mutateRegions(Connection connection,<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span> final
List<HRegionInfo> regionsToRemove,<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span> final
List<HRegionInfo> regionsToAdd)<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span> throws IOException {<a
name="line.1993"></a>
-<span class="sourceLineNo">1994</span> List<Mutation> mutation = new
ArrayList<>();<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span> if (regionsToRemove != null) {<a
name="line.1995"></a>
-<span class="sourceLineNo">1996</span> for (HRegionInfo hri:
regionsToRemove) {<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>
mutation.add(makeDeleteFromRegionInfo(hri));<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span> }<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span> }<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span> if (regionsToAdd != null) {<a
name="line.2000"></a>
-<span class="sourceLineNo">2001</span> for (HRegionInfo hri:
regionsToAdd) {<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>
mutation.add(makePutFromRegionInfo(hri));<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span> }<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span> }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span> mutateMetaTable(connection,
mutation);<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span> if (regionsToRemove != null
&& regionsToRemove.size() > 0) {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span> LOG.debug("Deleted " +
HRegionInfo.getShortNameToLog(regionsToRemove));<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span> }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span> if (regionsToAdd != null &&
regionsToAdd.size() > 0) {<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span> LOG.debug("Added " +
HRegionInfo.getShortNameToLog(regionsToAdd));<a name="line.2010"></a>
+<span class="sourceLineNo">1980</span> LOG.info("Deleted " +
regionsInfo.size() + " regions from META");<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span> if (LOG.isDebugEnabled()) {<a
name="line.1981"></a>
+<span class="sourceLineNo">1982</span> LOG.debug("Deleted regions: " +
regionsInfo);<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span> }<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span> }<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span><a name="line.1985"></a>
+<span class="sourceLineNo">1986</span> /**<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span> * Adds and Removes the specified
regions from hbase:meta<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span> * @param connection connection we're
using<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span> * @param regionsToRemove list of
regions to be deleted from META<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span> * @param regionsToAdd list of regions
to be added to META<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span> * @throws IOException<a
name="line.1991"></a>
+<span class="sourceLineNo">1992</span> */<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span> public static void
mutateRegions(Connection connection,<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span> final
List<HRegionInfo> regionsToRemove,<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span> final
List<HRegionInfo> regionsToAdd)<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span> throws IOException {<a
name="line.1996"></a>
+<span class="sourceLineNo">1997</span> List<Mutation> mutation = new
ArrayList<>();<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span> if (regionsToRemove != null) {<a
name="line.1998"></a>
+<span class="sourceLineNo">1999</span> for (HRegionInfo hri:
regionsToRemove) {<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>
mutation.add(makeDeleteFromRegionInfo(hri));<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span> }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span> }<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span> if (regionsToAdd != null) {<a
name="line.2003"></a>
+<span class="sourceLineNo">2004</span> for (HRegionInfo hri:
regionsToAdd) {<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>
mutation.add(makePutFromRegionInfo(hri));<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span> }<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span> }<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span> mutateMetaTable(connection,
mutation);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span> if (regionsToRemove != null
&& regionsToRemove.size() > 0) {<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span> LOG.debug("Deleted " +
HRegionInfo.getShortNameToLog(regionsToRemove));<a name="line.2010"></a>
<span class="sourceLineNo">2011</span> }<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span> }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span><a name="line.2013"></a>
-<span class="sourceLineNo">2014</span> /**<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span> * Overwrites the specified regions
from hbase:meta<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span> * @param connection connection we're
using<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span> * @param regionInfos list of regions
to be added to META<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span> * @throws IOException<a
name="line.2018"></a>
-<span class="sourceLineNo">2019</span> */<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span> public static void
overwriteRegions(Connection connection,<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span> List<HRegionInfo>
regionInfos, int regionReplication) throws IOException {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span> // use master time for delete marker
and the Put<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span> long now =
EnvironmentEdgeManager.currentTime();<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span> deleteRegions(connection,
regionInfos, now);<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span> // Why sleep? This is the easiest
way to ensure that the previous deletes does not<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span> // eclipse the following puts, that
might happen in the same ts from the server.<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span> // See HBASE-9906, and HBASE-9879.
Once either HBASE-9879, HBASE-8770 is fixed,<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span> // or HBASE-9905 is fixed and meta
uses seqIds, we do not need the sleep.<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span> //<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span> // HBASE-13875 uses master timestamp
for the mutations. The 20ms sleep is not needed<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span> addRegionsToMeta(connection,
regionInfos, regionReplication, now+1);<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span> LOG.info("Overwritten " +
regionInfos);<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span> }<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span><a name="line.2034"></a>
-<span class="sourceLineNo">2035</span> /**<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span> * Deletes merge qualifiers for the
specified merged region.<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span> * @param connection connection we're
using<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span> * @param mergedRegion<a
name="line.2038"></a>
-<span class="sourceLineNo">2039</span> * @throws IOException<a
name="line.2039"></a>
-<span class="sourceLineNo">2040</span> */<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span> public static void
deleteMergeQualifiers(Connection connection,<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>
final HRegionInfo mergedRegion) throws IOException {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span> long time =
EnvironmentEdgeManager.currentTime();<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span> Delete delete = new
Delete(mergedRegion.getRegionName());<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>
delete.addColumns(getCatalogFamily(), HConstants.MERGEA_QUALIFIER, time);<a
name="line.2045"></a>
-<span class="sourceLineNo">2046</span>
delete.addColumns(getCatalogFamily(), HConstants.MERGEB_QUALIFIER, time);<a
name="line.2046"></a>
-<span class="sourceLineNo">2047</span> deleteFromMetaTable(connection,
delete);<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span> LOG.info("Deleted references in
merged region "<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span> +
mergedRegion.getRegionNameAsString() + ", qualifier="<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span> +
Bytes.toStringBinary(HConstants.MERGEA_QUALIFIER) + " and qualifier="<a
name="line.2050"></a>
-<span class="sourceLineNo">2051</span> +
Bytes.toStringBinary(HConstants.MERGEB_QUALIFIER));<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span> }<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span><a name="line.2053"></a>
-<span class="sourceLineNo">2054</span> public static Put addRegionInfo(final
Put p, final HRegionInfo hri)<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span> throws IOException {<a
name="line.2055"></a>
-<span class="sourceLineNo">2056</span> p.addImmutable(getCatalogFamily(),
HConstants.REGIONINFO_QUALIFIER,<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span> hri.toByteArray());<a
name="line.2057"></a>
-<span class="sourceLineNo">2058</span> return p;<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span> }<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span><a name="line.2060"></a>
-<span class="sourceLineNo">2061</span> public static Put addLocation(final
Put p, final ServerName sn, long openSeqNum,<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span> long time, int replicaId){<a
name="line.2062"></a>
-<span class="sourceLineNo">2063</span> if (time <= 0) {<a
name="line.2063"></a>
-<span class="sourceLineNo">2064</span> time =
EnvironmentEdgeManager.currentTime();<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span> }<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span> p.addImmutable(getCatalogFamily(),
getServerColumn(replicaId), time,<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>
Bytes.toBytes(sn.getHostAndPort()));<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span> p.addImmutable(getCatalogFamily(),
getStartCodeColumn(replicaId), time,<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>
Bytes.toBytes(sn.getStartcode()));<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span> p.addImmutable(getCatalogFamily(),
getSeqNumColumn(replicaId), time,<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span> Bytes.toBytes(openSeqNum));<a
name="line.2071"></a>
-<span class="sourceLineNo">2072</span> return p;<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span> }<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span><a name="line.2074"></a>
-<span class="sourceLineNo">2075</span> public static Put
addEmptyLocation(final Put p, int replicaId) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span> long now =
EnvironmentEdgeManager.currentTime();<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span> p.addImmutable(getCatalogFamily(),
getServerColumn(replicaId), now, null);<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span> p.addImmutable(getCatalogFamily(),
getStartCodeColumn(replicaId), now, null);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span> p.addImmutable(getCatalogFamily(),
getSeqNumColumn(replicaId), now, null);<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span> return p;<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span> }<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span><a name="line.2082"></a>
-<span class="sourceLineNo">2083</span> private static String
mutationsToString(List<? extends Mutation> mutations) throws IOException
{<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span> StringBuilder sb = new
StringBuilder();<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span> String prefix = "";<a
name="line.2085"></a>
-<span class="sourceLineNo">2086</span> for (Mutation mutation : mutations)
{<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>
sb.append(prefix).append(mutationToString(mutation));<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span> prefix = ", ";<a
name="line.2088"></a>
-<span class="sourceLineNo">2089</span> }<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span> return sb.toString();<a
name="line.2090"></a>
-<span class="sourceLineNo">2091</span> }<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span><a name="line.2092"></a>
-<span class="sourceLineNo">2093</span> private static String
mutationToString(Mutation p) throws IOException {<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span> return p.getClass().getSimpleName()
+ p.toJSON();<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span> }<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span><a name="line.2096"></a>
-<span class="sourceLineNo">2097</span> /**<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span> * Get replication position for a peer
in a region.<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span> * @param connection connection we're
using<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span> * @return the position of this peer,
-1 if no position in meta.<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span> */<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span> public static long
getReplicationPositionForOnePeer(Connection connection,<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span> byte[] encodedRegionName, String
peerId) throws IOException {<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span> Get get = new
Get(encodedRegionName);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>
get.addColumn(HConstants.REPLICATION_POSITION_FAMILY, Bytes.toBytes(peerId));<a
name="line.2105"></a>
-<span class="sourceLineNo">2106</span> Result r =
get(getMetaHTable(connection), get);<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span> if (r.isEmpty()) {<a
name="line.2107"></a>
-<span class="sourceLineNo">2108</span> return -1;<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span> }<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span> Cell cell = r.rawCells()[0];<a
name="line.2110"></a>
-<span class="sourceLineNo">2111</span> return
Bytes.toLong(cell.getValueArray(),cell.getValueOffset(),cell.getValueLength());<a
name="line.2111"></a>
-<span class="sourceLineNo">2112</span> }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span><a name="line.2113"></a>
-<span class="sourceLineNo">2114</span> /**<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span> * Get replication positions for all
peers in a region.<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span> * @param connection connection we're
using<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span> * @param encodedRegionName region's
encoded name<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span> * @return the map of positions for
each peer<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span> */<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span> public static Map<String, Long>
getReplicationPositionForAllPeer(Connection connection,<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span> byte[] encodedRegionName) throws
IOException {<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span> Get get = new
Get(encodedRegionName);<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>
get.addFamily(HConstants.REPLICATION_POSITION_FAMILY);<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span> Result r =
get(getMetaHTable(connection), get);<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span> Map<String, Long> map = new
HashMap<>((int) (r.size() / 0.75 + 1));<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span> for (Cell c : r.listCells()) {<a
name="line.2126"></a>
-<span class="sourceLineNo">2127</span> map.put(<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>
Bytes.toString(c.getQualifierArray(), c.getQualifierOffset(),
c.getQualifierLength()),<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>
Bytes.toLong(c.getValueArray(), c.getValueOffset(), c.getValueLength()));<a
name="line.2129"></a>
-<span class="sourceLineNo">2130</span> }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span> return map;<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span> }<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span><a name="line.2133"></a>
-<span class="sourceLineNo">2134</span> /**<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span> * Get replication barriers for all
peers in a region.<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span> * @param encodedRegionName region's
encoded name<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span> * @return a list of barrier sequence
numbers.<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span> * @throws IOException<a
name="line.2138"></a>
-<span class="sourceLineNo">2139</span> */<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span> public static List<Long>
getReplicationBarriers(Connection connection, byte[] encodedRegionName)<a
name="line.2140"></a>
-<span class="sourceLineNo">2141</span> throws IOException {<a
name="line.2141"></a>
-<span class="sourceLineNo">2142</span> Get get = new
Get(encodedRegionName);<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>
get.addFamily(HConstants.REPLICATION_BARRIER_FAMILY);<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span> Result r =
get(getMetaHTable(connection), get);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span> List<Long> list = new
ArrayList<>();<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span> if (!r.isEmpty()) {<a
name="line.2146"></a>
-<span class="sourceLineNo">2147</span> for (Cell cell : r.rawCells()) {<a
name="line.2147"></a>
-<span class="sourceLineNo">2148</span>
list.add(Bytes.toLong(cell.getQualifierArray(), cell.getQualifierOffset(),<a
name="line.2148"></a>
-<span class="sourceLineNo">2149</span>
cell.getQualifierLength()));<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span> }<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span> }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span> return list;<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span> }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span> /**<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span> * Get all barriers in all regions.<a
name="line.2156"></a>
-<span class="sourceLineNo">2157</span> * @return a map of barrier lists in
all regions<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span> * @throws IOException<a
name="line.2158"></a>
-<span class="sourceLineNo">2159</span> */<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span> public static Map<String,
List<Long>> getAllBarriers(Connection connection) throws IOException
{<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span> Map<String, List<Long>>
map = new HashMap<>();<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span> Scan scan = new Scan();<a
name="line.2162"></a>
-<span class="sourceLineNo">2163</span>
scan.addFamily(HConstants.REPLICATION_BARRIER_FAMILY);<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span> try (Table t =
getMetaHTable(connection);<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span> ResultScanner scanner =
t.getScanner(scan)) {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span> Result result;<a
name="line.2166"></a>
-<span class="sourceLineNo">2167</span> while ((result = scanner.next())
!= null) {<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span> String key =
Bytes.toString(result.getRow());<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span> List<Long> list = new
ArrayList<>(result.rawCells().length);<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span> for (Cell cell :
result.rawCells()) {<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>
list.add(Bytes.toLong(cell.getQualifierArray(), cell.getQualifierOffset(),<a
name="line.2171"></a>
-<span class="sourceLineNo">2172</span>
cell.getQualifierLength()));<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span> }<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span> map.put(key, list);<a
name="line.2174"></a>
-<span class="sourceLineNo">2175</span> }<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span> }<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span> return map;<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span> }<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span><a name="line.2179"></a>
-<span class="sourceLineNo">2180</span> /**<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span> * Get daughter region(s) for a
region, only used in serial replication.<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span> * @param connection connection we're
using<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span> * @param encodedName region's encoded
name<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span> * @throws IOException<a
name="line.2184"></a>
-<span class="sourceLineNo">2185</span> */<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span> public static String
getSerialReplicationDaughterRegion(Connection connection, byte[] encodedName)<a
name="line.2186"></a>
-<span class="sourceLineNo">2187</span> throws IOException {<a
name="line.2187"></a>
-<span class="sourceLineNo">2188</span> Get get = new Get(encodedName);<a
name="line.2188"></a>
-<span class="sourceLineNo">2189</span>
get.addColumn(HConstants.REPLICATION_META_FAMILY, daughterNameCq);<a
name="line.2189"></a>
-<span class="sourceLineNo">2190</span> Result result =
get(getMetaHTable(connection), get);<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span> if (!result.isEmpty()) {<a
name="line.2191"></a>
-<span class="sourceLineNo">2192</span> Cell c = result.rawCells()[0];<a
name="line.2192"></a>
-<span class="sourceLineNo">2193</span> return
Bytes.toString(c.getValueArray(), c.getValueOffset(), c.getValueLength());<a
name="line.2193"></a>
-<span class="sourceLineNo">2194</span> }<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span> return null;<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span> }<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span><a name="line.2197"></a>
-<span class="sourceLineNo">2198</span> /**<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span> * Get parent region(s) for a region,
only used in serial replication.<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span> * @param connection connection we're
using<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span> * @param encodedName region's encoded
name<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span> * @throws IOException<a
name="line.2202"></a>
-<span class="sourceLineNo">2203</span> */<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span> public static String
getSerialReplicationParentRegion(Connection connection, byte[] encodedName)<a
name="line.2204"></a>
-<span class="sourceLineNo">2205</span> throws IOException {<a
name="line.2205"></a>
-<span class="sourceLineNo">2206</span> Get get = new Get(encodedName);<a
name="line.2206"></a>
-<span class="sourceLineNo">2207</span>
get.addColumn(HConstants.REPLICATION_META_FAMILY, parentNameCq);<a
name="line.2207"></a>
-<span class="sourceLineNo">2208</span> Result result =
get(getMetaHTable(connection), get);<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span> if (!result.isEmpty()) {<a
name="line.2209"></a>
-<span class="sourceLineNo">2210</span> Cell c = result.rawCells()[0];<a
name="line.2210"></a>
-<span class="sourceLineNo">2211</span> return
Bytes.toString(c.getValueArray(), c.getValueOffset(), c.getValueLength());<a
name="line.2211"></a>
-<span class="sourceLineNo">2212</span> }<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span> return null;<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span> }<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span><a name="line.2215"></a>
-<span class="sourceLineNo">2216</span> /**<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span> * Get the table name for a region,
only used in serial replication.<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span> * @param connection connection we're
using<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span> * @param encodedName region's encoded
name<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span> * @throws IOException<a
name="line.2220"></a>
-<span class="sourceLineNo">2221</span> */<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span> public static String
getSerialReplicationTableName(Connection connection, byte[] encodedName)<a
name="line.2222"></a>
-<span class="sourceLineNo">2223</span> throws IOException {<a
name="line.2223"></a>
-<span class="sourceLineNo">2224</span> Get get = new Get(encodedName);<a
name="line.2224"></a>
-<span class="sourceLineNo">2225</span>
get.addColumn(HConstants.REPLICATION_META_FAMILY, tableNameCq);<a
name="line.2225"></a>
-<span class="sourceLineNo">2226</span> Result result =
get(getMetaHTable(connection), get);<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span> if (!result.isEmpty()) {<a
name="line.2227"></a>
-<span class="sourceLineNo">2228</span> Cell c = result.rawCells()[0];<a
name="line.2228"></a>
-<span class="sourceLineNo">2229</span> return
Bytes.toString(c.getValueArray(), c.getValueOffset(), c.getValueLength());<a
name="line.2229"></a>
-<span class="sourceLineNo">2230</span> }<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span> return null;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span> }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>}<a name="line.2233"></a>
+<span class="sourceLineNo">2012</span> if (regionsToAdd != null &&
regionsToAdd.size() > 0) {<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span> LOG.debug("Added " +
HRegionInfo.getShortNameToLog(regionsToAdd));<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span> }<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span> }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span><a name="line.2016"></a>
+<span class="sourceLineNo">2017</span> /**<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span> * Overwrites the specified regions
from hbase:meta<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span> * @param connection connection we're
using<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span> * @param regionInfos list of regions
to be added to META<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span> * @throws IOException<a
name="line.2021"></a>
+<span class="sourceLineNo">2022</span> */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span> public static void
overwriteRegions(Connection connection,<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span> List<HRegionInfo>
regionInfos, int regionReplication) throws IOException {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span> // use master time for delete marker
and the Put<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span> long now =
EnvironmentEdgeManager.currentTime();<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span> deleteRegions(connection,
regionInfos, now);<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span> // Why sleep? This is the easiest
way to ensure that the previous deletes does not<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span> // eclipse the following puts, that
might happen in the same ts from the server.<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span> // See HBASE-9906, and HBASE-9879.
Once either HBASE-9879, HBASE-8770 is fixed,<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span> // or HBASE-9905 is fixed and meta
uses seqIds, we do not need the sleep.<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span> //<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span> // HBASE-13875 uses master timestamp
for the mutations. The 20ms sleep is not needed<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span> addRegionsToMeta(connection,
regionInfos, regionReplication, now+1);<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span> LOG.info("Overwritten " +
regionInfos.size() + " regions to Meta");<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span> if (LOG.isDebugEnabled()) {<a
name="line.2036"></a>
+<span class="sourceLineNo">2037</span> LOG.debug("Overwritten regions: "
+ regionInfos);<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span> }<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span> }<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span><a name="line.2040"></a>
+<span class="sourceLineNo">2041</span> /**<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span> * Deletes merge qualifiers for the
specified merged region.<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span> * @param connection connection we're
using<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span> * @param mergedRegion<a
name="line.2044"></a>
+<span class="sourceLineNo">2045</span> * @throws IOException<a
name="line.2045"></a>
+<span class="sourceLineNo">2046</span> */<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span> public static void
deleteMergeQualifiers(Connection connection,<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>
final HRegionInfo mergedRegion) throws IOException {<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span> long time =
EnvironmentEdgeManager.currentTime();<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span> Delete delete = new
Delete(mergedRegion.getRegionName());<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>
delete.addColumns(getCatalogFamily(), HConstants.MERGEA_QUALIFIER, time);<a
name="line.2051"></a>
+<span class="sourceLineNo">2052</span>
delete.addColumns(getCatalogFamily(), HConstants.MERGEB_QUALIFIER, time);<a
name="line.2052"></a>
+<span class="sourceLineNo">2053</span> deleteFromMetaTable(connection,
delete);<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span> LOG.info("Deleted references in
merged region "<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span> +
mergedRegion.getRegionNameAsString() + ", qualifier="<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span> +
Bytes.toStringBinary(HConstants.MERGEA_QUALIFIER) + " and qualifier="<a
name="line.2056"></a>
+<span class="sourceLineNo">2057</span> +
Bytes.toStringBinary(HConstants.MERGEB_QUALIFIER));<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span> }<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span><a name="line.2059"></a>
+<span class="sourceLineNo">2060</span> public static Put addRegionInfo(final
Put p, final HRegionInfo hri)<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span> throws IOException {<a
name="line.2061"></a>
+<span class="sourceLineNo">2062</span> p.addImmutable(getCatalogFamily(),
HConstants.REGIONINFO_QUALIFIER,<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span> hri.toByteArray());<a
name="line.2063"></a>
+<span class="sourceLineNo">2064</span> return p;<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span> }<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span><a name="line.2066"></a>
+<span class="sourceLineNo">2067</span> public static Put addLocation(final
Put p, final ServerName sn, long openSeqNum,<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span> long time, int replicaId){<a
name="line.2068"></a>
+<span class="sourceLineNo">2069</span> if (time <= 0) {<a
name="line.2069"></a>
+<span class="sourceLineNo">2070</span> time =
EnvironmentEdgeManager.currentTime();<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span> }<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span> p.addImmutable(getCatalogFamily(),
getServerColumn(replicaId), time,<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>
Bytes.toBytes(sn.getHostAndPort()));<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span> p.addImmutable(getCatalogFamily(),
getStartCodeColumn(replicaId), time,<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>
Bytes.toBytes(sn.getStartcode()));<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span> p.addImmutable(getCatalogFamily(),
getSeqNumColumn(replicaId), time,<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span> Bytes.toBytes(openSeqNum));<a
name="line.2077"></a>
+<span class="sourceLineNo">2078</span> return p;<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span> }<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span><a name="line.2080"></a>
+<span class="sourceLineNo">2081</span> public static Put
addEmptyLocation(final Put p, int replicaId) {<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span> long now =
EnvironmentEdgeManager.currentTime();<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span> p.addImmutable(getCatalogFamily(),
getServerColumn(replicaId), now, null);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span> p.addImmutable(getCatalogFamily(),
getStartCodeColumn(replicaId), now, null);<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span> p.addImmutable(getCatalogFamily(),
getSeqNumColumn(replicaId), now, null);<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span> return p;<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span> }<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span><a name="line.2088"></a>
+<span class="sourceLineNo">2089</span> private static String
mutationsToString(List<? extends Mutation> mutations) throws IOException
{<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span> StringBuilder sb = new
StringBuilder();<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span> String prefix = "";<a
name="line.2091"></a>
+<span class="sourceLineNo">2092</span> for (Mutation mutation : mutations)
{<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>
sb.append(prefix).append(mutationToString(mutation));<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span> prefix = ", ";<a
name="line.2094"></a>
+<span class="sourceLineNo">2095</span> }<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span> return sb.toString();<a
name="line.2096"></a>
+<span class="sourceLineNo">2097</span> }<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span><a name="line.2098"></a>
+<span class="sourceLineNo">2099</span> private static String
mutationToString(Mutation p) throws IOException {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span> return p.getClass().getSimpleName()
+ p.toJSON();<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span> }<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span><a name="line.2102"></a>
+<span class="sourceLineNo">2103</span> /**<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span> * Get replication position for a peer
in a region.<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span> * @param connection connection we're
using<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span> * @return the position of this peer,
-1 if no position in meta.<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span> */<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span> public static long
getReplicationPositionForOnePeer(Connection connection,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span> byte[] encodedRegionName, String
peerId) throws IOException {<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span> Get get = new
Get(encodedRegionName);<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>
get.addColumn(HConstants.REPLICATION_POSITION_FAMILY, Bytes.toBytes(peerId));<a
name="line.2111"></a>
+<span class="sourceLineNo">2112</span> Result r =
get(getMetaHTable(connection), get);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span> if (r.isEmpty()) {<a
name="line.2113"></a>
+<span class="sourceLineNo">2114</span> return -1;<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span> }<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span> Cell cell = r.rawCells()[0];<a
name="line.2116"></a>
+<span class="sourceLineNo">2117</span> return
Bytes.toLong(cell.getValueArray(),cell.getValueOffset(),cell.getValueLength());<a
name="line.2117"></a>
+<span class="sourceLineNo">2118</span> }<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span><a name="line.2119"></a>
+<span class="sourceLineNo">2120</span> /**<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span> * Get replication positions for all
peers in a region.<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span> * @param connection connection we're
using<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span> * @param encodedRegionName region's
encoded name<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span> * @return the map of positions for
each peer<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span> */<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span> public static Map<String, Long>
getReplicationPositionForAllPeer(Connection connection,<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span> byte[] encodedRegionName) throws
IOException {<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span> Get get = new
Get(encodedRegionName);<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>
get.addFamily(HConstants.REPLICATION_POSITION_FAMILY);<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span> Result r =
get(getMetaHTable(connection), get);<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span> Map<String, Long> map = new
HashMap<>((int) (r.size() / 0.75 + 1));<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span> for (Cell c : r.listCells()) {<a
name="line.2132"></a>
+<span class="sourceLineNo">2133</span> map.put(<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>
Bytes.toString(c.getQualifierArray(), c.getQualifierOffset(),
c.getQualifierLength()),<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>
Bytes.toLong(c.getValueArray(), c.getValueOffset(), c.getValueLength()));<a
name="line.2135"></a>
+<span class="sourceLineNo">2136</span> }<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span> return map;<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span> }<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span><a name="line.2139"></a>
+<span class="sourceLineNo">2140</span> /**<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span> * Get replication barriers for all
peers in a region.<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span> * @param encodedRegionName region's
encoded name<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span> * @return a list of barrier sequence
numbers.<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span> * @throws IOException<a
name="line.2144"></a>
+<span class="sourceLineNo">2145</span> */<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span> public static List<Long>
getReplicationBarriers(Connection connection, byte[] encodedRegionName)<a
name="line.2146"></a>
+<span class="sourceLineNo">2147</span> throws IOException {<a
name="line.2147"></a>
+<span class="sourceLineNo">2148</span> Get get = new
Get(encodedRegionName);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>
get.addFamily(HConstants.REPLICATION_BARRIER_FAMILY);<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span> Result r =
get(getMetaHTable(connection), get);<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span> List<Long> list = new
ArrayList<>();<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span> if (!r.isEmpty()) {<a
name="line.2152"></a>
+<span class="sourceLineNo">2153</span> for (Cell cell : r.rawCells()) {<a
name="line.2153"></a>
+<span class="sourceLineNo">2154</span>
list.add(Bytes.toLong(cell.getQualifierArray(), cell.getQualifierOffset(),<a
name="line.2154"></a>
+<span class="sourceLineNo">2155</span>
cell.getQualifierLength()));<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span> }<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span> }<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span> return list;<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span> }<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span><a name="line.2160"></a>
+<span class="sourceLineNo">2161</span> /**<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span> * Get all barriers in all regions.<a
name="line.2162"></a>
+<span class="sourceLineNo">2163</span> * @return a map of barrier lists in
all regions<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span> * @throws IOException<a
name="line.2164"></a>
+<span class="sourceLineNo">2165</span> */<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span> public static Map<String,
List<Long>> getAllBarriers(Connection connection) throws IOException
{<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span> Map<String, List<Long>>
map = new HashMap<>();<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span> Scan scan = new Scan();<a
name="line.2168"></a>
+<span class="sourceLineNo">2169</span>
scan.addFamily(HConstants.REPLICATION_BARRIER_FAMILY);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span> try (Table t =
getMetaHTable(connection);<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span> ResultScanner scanner =
t.getScanner(scan)) {<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span> Result result;<a
name="line.2172"></a>
+<span class="sourceLineNo">2173</span> while ((result = scanner.next())
!= null) {<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span> String key =
Bytes.toString(result.getRow());<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span> List<Long> list = new
ArrayList<>(result.rawCells().length);<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span> for (Cell cell :
result.rawCells()) {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>
list.add(Bytes.toLong(cell.getQualifierArray(), cell.getQualifierOffset(),<a
name="line.2177"></a>
+<span class="sourceLineNo">2178</span>
cell.getQualifierLength()));<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span> }<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span> map.put(key, list);<a
name="line.2180"></a>
+<span class="sourceLineNo">2181</span> }<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span> }<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span> return map;<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span> }<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span><a name="line.2185"></a>
+<span class="sourceLineNo">2186</span> /**<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span> * Get daughter region(s) for a
region, only used in serial replication.<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span> * @param connection connection we're
using<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span> * @param encodedName region's encoded
name<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span> * @throws IOException<a
name="line.2190"></a>
+<span class="sourceLineNo">2191</span> */<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span> public static String
getSerialReplicationDaughterRegion(Connection connection, byte[] encodedName)<a
name="line.2192"></a>
+<span class="sourceLineNo">2193</span> throws IOException {<a
name="line.2193"></a>
+<span class="sourceLineNo">2194</span> Get get = new Get(encodedName);<a
name="line.2194"></a>
+<span class="sourceLineNo">2195</span>
get.addColumn(HConstants.REPLICATION_META_FAMILY, daughterNameCq);<a
name="line.2195"></a>
+<span class="sourceLineNo">2196</span> Result result =
get(getMetaHTable(connection), get);<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span> if (!result.isEmpty()) {<a
name="line.2197"></a>
+<span class="sourceLineNo">2198</span> Cell c = result.rawCells()[0];<a
name="line.2198"></a>
+<span class="sourceLineNo">2199</span> return
Bytes.toString(c.getValueArray(), c.getValueOffset(), c.getValueLength());<a
name="line.2199"></a>
+<span class="sourceLineNo">2200</span> }<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span> return null;<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span> }<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span><a name="line.2203"></a>
+<span class="sourceLineNo">2204</span> /**<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span> * Get parent region(s) for a region,
only used in serial replication.<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span> * @param connection connection we're
using<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span> * @param encodedName region's encoded
name<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span> * @throws IOException<a
name="line.2208"></a>
+<span class="sourceLineNo">2209</span> */<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span> public static String
getSerialReplicationParentRegion(Connection connection, byte[] encodedName)<a
name="line.2210"></a>
+<span class="sourceLineNo">2211</span> throws IOException {<a
name="line.2211"></a>
+<span class="sourceLineNo">2212</span> Get get = new Get(encodedName);<a
name="line.2212"></a>
+<span class="sourceLineNo">2213</span>
get.addColumn(HConstants.REPLICATION_META_FAMILY, parentNameCq);<a
name="line.2213"></a>
+<span class="sourceLineNo">2214</span> Result result =
get(getMetaHTable(connection), get);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span> if (!result.isEmpty()) {<a
name="line.2215"></a>
+<span class="sourceLineNo">2216</span> Cell c = result.rawCells()[0];<a
name="line.2216"></a>
+<span class="sourceLineNo">2217</span> return
Bytes.toString(c.getValueArray(), c.getValueOffset(), c.getValueLength());<a
name="line.2217"></a>
+<span class="sourceLineNo">2218</span> }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span> return null;<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span> }<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span><a name="line.2221"></a>
+<span class="sourceLineNo">2222</span> /**<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span> * Get the table name for a region,
only used in serial replication.<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span> * @param connection connection we're
using<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span> * @param encodedName region's encoded
name<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span> * @throws IOException<a
name="line.2226"></a>
+<span class="sourceLineNo">2227</span> */<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span> public static String
getSerialReplicationTableName(Connection connection, byte[] encodedName)<a
name="line.2228"></a>
+<span class="sourceLineNo">2229</span> throws IOException {<a
name="line.2229"></a>
+<span class="sourceLineNo">2230</span> Get get = new Get(encodedName);<a
name="line.2230"></a>
+<span class="sourceLineNo">2231</span>
get.addColumn(HConstants.REPLICATION_META_FAMILY, tableNameCq);<a
name="line.2231"></a>
+<span class="sourceLineNo">2232</span> Result result =
get(getMetaHTable(connection), get);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span> if (!result.isEmpty()) {<a
name="line.2233"></a>
+<span class="sourceLineNo">2234</span> Cell c = result.rawCells()[0];<a
name="line.2234"></a>
+<span class="sourceLineNo">2235</span> return
Bytes.toString(c.getValueArray(), c.getValueOffset(), c.getValueLength());<a
name="line.2235"></a>
+<span class="sourceLineNo">2236</span> }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span> return null;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span> }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>}<a name="line.2239"></a>