You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mi...@apache.org on 2016/02/08 17:54:38 UTC

[08/51] [partial] hbase-site git commit: Published site at eacf7bcf97f09c9a6e68baf9a4a9ceb1d83c9fb0.

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/670bf1f0/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
index e99da02..ffdff4d 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -1882,2099 +1882,2102 @@
 <span class="sourceLineNo">1874</span>   */<a name="line.1874"></a>
 <span class="sourceLineNo">1875</span>  public HTable truncateTable(final TableName tableName, final boolean preserveRegions) throws IOException {<a name="line.1875"></a>
 <span class="sourceLineNo">1876</span>    Admin admin = getHBaseAdmin();<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>    admin.truncateTable(tableName, preserveRegions);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>    return (HTable) getConnection().getTable(tableName);<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  }<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span><a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>  /**<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>   * Truncate a table using the admin command.<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>   * Effectively disables, deletes, and recreates the table.<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>   * For previous behavior of issuing row deletes, see<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>   * deleteTableData.<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>   * Expressly does not preserve regions of existing table.<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>   * @param tableName table which must exist.<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>   * @return HTable for the new table<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>   */<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>  public HTable truncateTable(final TableName tableName) throws IOException {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>    return truncateTable(tableName, false);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>  }<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span><a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>  /**<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>   * @param t Table<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>   * @param f Family<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>   * @return Count of rows loaded.<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>   * @throws IOException<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>   */<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>  public int loadTable(final Table t, final byte[] f) throws IOException {<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>    return loadTable(t, new byte[][] {f});<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>  }<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>  /**<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>   * @param t Table<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>   * @param f Family<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>   * @return Count of rows loaded.<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>   * @throws IOException<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>   */<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>  public int loadTable(final Table t, final byte[] f, boolean writeToWAL) throws IOException {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>    return loadTable(t, new byte[][] {f}, null, writeToWAL);<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>  }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span><a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>  /**<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>   * @param t Table<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>   * @param f Array of Families to load<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>   * @return Count of rows loaded.<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>   * @throws IOException<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>   */<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>  public int loadTable(final Table t, final byte[][] f) throws IOException {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    return loadTable(t, f, null);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>  }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>  /**<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>   * @param t Table<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>   * @param f Array of Families to load<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>   * @return Count of rows loaded.<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>   * @throws IOException<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>   */<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  public int loadTable(final Table t, final byte[][] f, byte[] value) throws IOException {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>    return loadTable(t, f, value, true);<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>  }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span><a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>  /**<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * @param t Table<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param f Array of Families to load<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   * @return Count of rows loaded.<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>   * @throws IOException<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>   */<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>  public int loadTable(final Table t, final byte[][] f, byte[] value, boolean writeToWAL) throws IOException {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    for (byte[] row : HBaseTestingUtility.ROWS) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      Put put = new Put(row);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>      put.setDurability(writeToWAL ? Durability.USE_DEFAULT : Durability.SKIP_WAL);<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>      for (int i = 0; i &lt; f.length; i++) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>        byte[] value1 = value != null ? value : row;<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>        put.addColumn(f[i], null, value1);<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>      }<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>      puts.add(put);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>    }<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    t.put(puts);<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>    return puts.size();<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>  }<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span><a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>  /** A tracker for tracking and validating table rows<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>   * generated with {@link HBaseTestingUtility#loadTable(HTable, byte[])}<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>   */<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>  public static class SeenRowTracker {<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>    int dim = 'z' - 'a' + 1;<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    int[][][] seenRows = new int[dim][dim][dim]; //count of how many times the row is seen<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>    byte[] startRow;<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>    byte[] stopRow;<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span><a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>    public SeenRowTracker(byte[] startRow, byte[] stopRow) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>      this.startRow = startRow;<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>      this.stopRow = stopRow;<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>    }<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span><a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    void reset() {<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>      for (byte[] row : ROWS) {<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>        seenRows[i(row[0])][i(row[1])][i(row[2])] = 0;<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>      }<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>    int i(byte b) {<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>      return b - 'a';<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>    public void addRow(byte[] row) {<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>      seenRows[i(row[0])][i(row[1])][i(row[2])]++;<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span><a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    /** Validate that all the rows between startRow and stopRow are seen exactly once, and<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>     * all other rows none<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>     */<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>    public void validate() {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>        for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>          for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>            int count = seenRows[i(b1)][i(b2)][i(b3)];<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>            int expectedCount = 0;<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>            if (Bytes.compareTo(new byte[] {b1,b2,b3}, startRow) &gt;= 0<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>                &amp;&amp; Bytes.compareTo(new byte[] {b1,b2,b3}, stopRow) &lt; 0) {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>              expectedCount = 1;<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>            }<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>            if (count != expectedCount) {<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>              String row = new String(new byte[] {b1,b2,b3});<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>              throw new RuntimeException("Row:" + row + " has a seen count of " + count + " instead of " + expectedCount);<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>        }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>      }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    }<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>  public int loadRegion(final HRegion r, final byte[] f) throws IOException {<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>    return loadRegion(r, f, false);<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>  public int loadRegion(final Region r, final byte[] f) throws IOException {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>    return loadRegion((HRegion)r, f);<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>  }<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span><a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>  /**<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>   * Load region with rows from 'aaa' to 'zzz'.<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>   * @param r Region<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>   * @param f Family<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>   * @param flush flush the cache if true<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>   * @return Count of rows loaded.<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>   * @throws IOException<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>   */<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>  public int loadRegion(final HRegion r, final byte[] f, final boolean flush)<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>  throws IOException {<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    byte[] k = new byte[3];<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>    int rowCount = 0;<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          k[0] = b1;<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>          k[1] = b2;<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          k[2] = b3;<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>          Put put = new Put(k);<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>          put.setDurability(Durability.SKIP_WAL);<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>          put.addColumn(f, null, k);<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>          if (r.getWAL() == null) {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>            put.setDurability(Durability.SKIP_WAL);<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>          }<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>          int preRowCount = rowCount;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>          int pause = 10;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>          int maxPause = 1000;<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>          while (rowCount == preRowCount) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>            try {<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>              r.put(put);<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>              rowCount++;<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>            } catch (RegionTooBusyException e) {<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>              pause = (pause * 2 &gt;= maxPause) ? maxPause : pause * 2;<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>              Threads.sleep(pause);<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>            }<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>          }<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>        }<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>      }<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>      if (flush) {<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        r.flush(true);<a name="line.2060"></a>
+<span class="sourceLineNo">1877</span>    if (!admin.isTableDisabled(tableName)) {<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      admin.disableTable(tableName);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>    }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    admin.truncateTable(tableName, preserveRegions);<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    return (HTable) getConnection().getTable(tableName);<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Truncate a table using the admin command.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   * Effectively disables, deletes, and recreates the table.<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>   * For previous behavior of issuing row deletes, see<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>   * deleteTableData.<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>   * Expressly does not preserve regions of existing table.<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>   * @param tableName table which must exist.<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>   * @return HTable for the new table<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>   */<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>  public HTable truncateTable(final TableName tableName) throws IOException {<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    return truncateTable(tableName, false);<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>  }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span><a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>  /**<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>   * @param t Table<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>   * @param f Family<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>   * @return Count of rows loaded.<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>   * @throws IOException<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>   */<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>  public int loadTable(final Table t, final byte[] f) throws IOException {<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>    return loadTable(t, new byte[][] {f});<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>  }<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span><a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>  /**<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>   * @param t Table<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>   * @param f Family<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>   * @return Count of rows loaded.<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>   * @throws IOException<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>   */<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>  public int loadTable(final Table t, final byte[] f, boolean writeToWAL) throws IOException {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>    return loadTable(t, new byte[][] {f}, null, writeToWAL);<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span><a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>  /**<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>   * @param t Table<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>   * @param f Array of Families to load<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>   * @return Count of rows loaded.<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>   * @throws IOException<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>   */<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>  public int loadTable(final Table t, final byte[][] f) throws IOException {<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    return loadTable(t, f, null);<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>  }<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span><a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>  /**<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>   * @param t Table<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>   * @param f Array of Families to load<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>   * @return Count of rows loaded.<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>   * @throws IOException<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>   */<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>  public int loadTable(final Table t, final byte[][] f, byte[] value) throws IOException {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>    return loadTable(t, f, value, true);<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>  }<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span><a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>  /**<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>   * @param t Table<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>   * @param f Array of Families to load<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @return Count of rows loaded.<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  public int loadTable(final Table t, final byte[][] f, byte[] value, boolean writeToWAL) throws IOException {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>    for (byte[] row : HBaseTestingUtility.ROWS) {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>      Put put = new Put(row);<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>      put.setDurability(writeToWAL ? Durability.USE_DEFAULT : Durability.SKIP_WAL);<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>      for (int i = 0; i &lt; f.length; i++) {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        byte[] value1 = value != null ? value : row;<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        put.addColumn(f[i], null, value1);<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>      puts.add(put);<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>    }<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    t.put(puts);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>    return puts.size();<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>  }<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span><a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>  /** A tracker for tracking and validating table rows<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>   * generated with {@link HBaseTestingUtility#loadTable(HTable, byte[])}<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>   */<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>  public static class SeenRowTracker {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>    int dim = 'z' - 'a' + 1;<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>    int[][][] seenRows = new int[dim][dim][dim]; //count of how many times the row is seen<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>    byte[] startRow;<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    byte[] stopRow;<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span><a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    public SeenRowTracker(byte[] startRow, byte[] stopRow) {<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>      this.startRow = startRow;<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>      this.stopRow = stopRow;<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>    }<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span><a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>    void reset() {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>      for (byte[] row : ROWS) {<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>        seenRows[i(row[0])][i(row[1])][i(row[2])] = 0;<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><a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    int i(byte b) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      return b - 'a';<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>    }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span><a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    public void addRow(byte[] row) {<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>      seenRows[i(row[0])][i(row[1])][i(row[2])]++;<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    }<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span><a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    /** Validate that all the rows between startRow and stopRow are seen exactly once, and<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>     * all other rows none<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>     */<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    public void validate() {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>          for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>            int count = seenRows[i(b1)][i(b2)][i(b3)];<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>            int expectedCount = 0;<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>            if (Bytes.compareTo(new byte[] {b1,b2,b3}, startRow) &gt;= 0<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>                &amp;&amp; Bytes.compareTo(new byte[] {b1,b2,b3}, stopRow) &lt; 0) {<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>              expectedCount = 1;<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>            }<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>            if (count != expectedCount) {<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>              String row = new String(new byte[] {b1,b2,b3});<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>              throw new RuntimeException("Row:" + row + " has a seen count of " + count + " instead of " + expectedCount);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>            }<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>          }<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><a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>  public int loadRegion(final HRegion r, final byte[] f) throws IOException {<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    return loadRegion(r, f, false);<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  public int loadRegion(final Region r, final byte[] f) throws IOException {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>    return loadRegion((HRegion)r, f);<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>  }<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span><a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>  /**<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>   * Load region with rows from 'aaa' to 'zzz'.<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>   * @param r Region<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>   * @param f Family<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>   * @param flush flush the cache if true<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>   * @return Count of rows loaded.<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>   * @throws IOException<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>   */<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>  public int loadRegion(final HRegion r, final byte[] f, final boolean flush)<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>  throws IOException {<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>    byte[] k = new byte[3];<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>    int rowCount = 0;<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          k[0] = b1;<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>          k[1] = b2;<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          k[2] = b3;<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>          Put put = new Put(k);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          put.setDurability(Durability.SKIP_WAL);<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>          put.addColumn(f, null, k);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>          if (r.getWAL() == null) {<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>            put.setDurability(Durability.SKIP_WAL);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>          }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>          int preRowCount = rowCount;<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>          int pause = 10;<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>          int maxPause = 1000;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>          while (rowCount == preRowCount) {<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>            try {<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>              r.put(put);<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>              rowCount++;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>            } catch (RegionTooBusyException e) {<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>              pause = (pause * 2 &gt;= maxPause) ? maxPause : pause * 2;<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>              Threads.sleep(pause);<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>        }<a name="line.2060"></a>
 <span class="sourceLineNo">2061</span>      }<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>    }<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>    return rowCount;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>  }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span><a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>  public void loadNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      throws IOException {<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      Put put = new Put(data);<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>      put.addColumn(f, null, data);<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      t.put(put);<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><a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>  public void verifyNumericRows(Table table, final byte[] f, int startRow, int endRow,<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      int replicaId)<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      throws IOException {<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      Get get = new Get(data);<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>      get.setReplicaId(replicaId);<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>      get.setConsistency(Consistency.TIMELINE);<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>      Result result = table.get(get);<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>      assertEquals(failMsg, result.getColumnCells(f, null).size(), 1);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      assertTrue(failMsg,<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>          cell.getValueLength()));<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    }<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>  }<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span><a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow)<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      throws IOException {<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    verifyNumericRows((HRegion)region, f, startRow, endRow);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow)<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>      throws IOException {<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>    verifyNumericRows(region, f, startRow, endRow, true);<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>  }<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span><a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow,<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      final boolean present) throws IOException {<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    verifyNumericRows((HRegion)region, f, startRow, endRow, present);<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>  }<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span><a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow,<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>      final boolean present) throws IOException {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>      Result result = region.get(new Get(data));<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span><a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>      boolean hasResult = result != null &amp;&amp; !result.isEmpty();<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      assertEquals(failMsg + result, present, hasResult);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>      if (!present) continue;<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span><a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      assertEquals(failMsg, result.getColumnCells(f, null).size(), 1);<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      assertTrue(failMsg,<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>          cell.getValueLength()));<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>  }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span><a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  public void deleteNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      throws IOException {<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      Delete delete = new Delete(data);<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      delete.addFamily(f);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>      t.delete(delete);<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    }<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>   * Return the number of rows in the given table.<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>   */<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>  public int countRows(final Table table) throws IOException {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>    return countRows(table, new Scan());<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>  }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span><a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  public int countRows(final Table table, final Scan scan) throws IOException {<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>    ResultScanner results = table.getScanner(scan);<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>    int count = 0;<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>    for (@SuppressWarnings("unused") Result res : results) {<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      count++;<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>    }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    results.close();<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>    return count;<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span><a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>  public int countRows(final Table table, final byte[]... families) throws IOException {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>    Scan scan = new Scan();<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    for (byte[] family: families) {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>      scan.addFamily(family);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    }<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    ResultScanner results = table.getScanner(scan);<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>    int count = 0;<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>    for (@SuppressWarnings("unused") Result res : results) {<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>      count++;<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    }<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    results.close();<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    return count;<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  /**<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   * Return the number of rows in the given table.<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  public int countRows(final TableName tableName) throws IOException {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    Table table = getConnection().getTable(tableName);<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    try {<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>      return countRows(table);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    } finally {<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      table.close();<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    }<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>  /**<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>   * Return an md5 digest of the entire contents of a table.<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>   */<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  public String checksumRows(final Table table) throws Exception {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    Scan scan = new Scan();<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    ResultScanner results = table.getScanner(scan);<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>    MessageDigest digest = MessageDigest.getInstance("MD5");<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>    for (Result res : results) {<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>      digest.update(res.getRow());<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    }<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    results.close();<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    return digest.toString();<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>  /** All the row values for the data loaded by {@link #loadTable(HTable, byte[])} */<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>  public static final byte[][] ROWS = new byte[(int) Math.pow('z' - 'a' + 1, 3)][3]; // ~52KB<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  static {<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>    int i = 0;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          ROWS[i][0] = b1;<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>          ROWS[i][1] = b2;<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>          ROWS[i][2] = b3;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>          i++;<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>        }<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>      }<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    }<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>  }<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span><a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>  public static final byte[][] KEYS = {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    HConstants.EMPTY_BYTE_ARRAY, Bytes.toBytes("bbb"),<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>    Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>    Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>    Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>    Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    Bytes.toBytes("xxx"), Bytes.toBytes("yyy")<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>  };<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span><a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>  public static final byte[][] KEYS_FOR_HBA_CREATE_TABLE = {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      Bytes.toBytes("bbb"),<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>      Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>      Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>      Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      Bytes.toBytes("xxx"), Bytes.toBytes("yyy"), Bytes.toBytes("zzz")<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>  };<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span><a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>  /**<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>   * Create rows in hbase:meta for regions of the specified table with the specified<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>   * start keys.  The first startKey should be a 0 length byte array if you<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>   * want to form a proper range of regions.<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>   * @param conf<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>   * @param htd<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>   * @param startKeys<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>   * @return list of region info for regions added to meta<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>   * @throws IOException<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>   */<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  public List&lt;HRegionInfo&gt; createMultiRegionsInMeta(final Configuration conf,<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>      final HTableDescriptor htd, byte [][] startKeys)<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  throws IOException {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    Table meta = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>    Arrays.sort(startKeys, Bytes.BYTES_COMPARATOR);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>    List&lt;HRegionInfo&gt; newRegions = new ArrayList&lt;HRegionInfo&gt;(startKeys.length);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    MetaTableAccessor<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        .updateTableState(getConnection(), htd.getTableName(), TableState.State.ENABLED);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>    // add custom ones<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    for (int i = 0; i &lt; startKeys.length; i++) {<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>      int j = (i + 1) % startKeys.length;<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      HRegionInfo hri = new HRegionInfo(htd.getTableName(), startKeys[i],<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>          startKeys[j]);<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>      MetaTableAccessor.addRegionToMeta(meta, hri);<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>      newRegions.add(hri);<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>    }<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span><a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>    meta.close();<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>    return newRegions;<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>  }<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span><a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  /**<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>   * Create an unmanaged WAL. Be sure to close it when you're through.<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>   */<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>  public static WAL createWal(final Configuration conf, final Path rootDir, final HRegionInfo hri)<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>      throws IOException {<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>    // The WAL subsystem will use the default rootDir rather than the passed in rootDir<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // unless I pass along via the conf.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Configuration confForWAL = new Configuration(conf);<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    confForWAL.set(HConstants.HBASE_DIR, rootDir.toString());<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    return (new WALFactory(confForWAL,<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>        Collections.&lt;WALActionsListener&gt;singletonList(new MetricsWAL()),<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>        "hregion-" + RandomStringUtils.randomNumeric(8))).<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>        getWAL(hri.getEncodedNameAsBytes(), hri.getTable().getNamespace());<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>  }<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span><a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>  /**<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>   */<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>  public static HRegion createRegionAndWAL(final HRegionInfo info, final Path rootDir,<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      final Configuration conf, final HTableDescriptor htd) throws IOException {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    return createRegionAndWAL(info, rootDir, conf, htd, true);<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  }<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span><a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>  /**<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static HRegion createRegionAndWAL(final HRegionInfo info, final Path rootDir,<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>      final Configuration conf, final HTableDescriptor htd, boolean initialize)<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      throws IOException {<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    WAL wal = createWal(conf, rootDir, info);<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    return HRegion.createHRegion(info, rootDir, conf, htd, wal, initialize);<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>  }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span><a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>  /**<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>   * Returns all rows from the hbase:meta table.<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>   *<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>   * @throws IOException When reading the rows fails.<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>   */<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>  public List&lt;byte[]&gt; getMetaTableRows() throws IOException {<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    // TODO: Redo using MetaTableAccessor class<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;byte[]&gt;();<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    for (Result result : s) {<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>      LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        Bytes.toStringBinary(result.getRow()));<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      rows.add(result.getRow());<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    }<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    s.close();<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    t.close();<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>    return rows;<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>  }<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span><a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>  /**<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>   * Returns all rows from the hbase:meta table for a given user table<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>   *<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>   * @throws IOException When reading the rows fails.<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>   */<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>  public List&lt;byte[]&gt; getMetaTableRows(TableName tableName) throws IOException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    // TODO: Redo using MetaTableAccessor.<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;byte[]&gt;();<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    for (Result result : s) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      HRegionInfo info = MetaTableAccessor.getHRegionInfo(result);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (info == null) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        LOG.error("No region info for row " + Bytes.toString(result.getRow()));<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        // TODO figure out what to do for this new hosed case.<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>        continue;<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      }<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span><a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>      if (info.getTable().equals(tableName)) {<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            Bytes.toStringBinary(result.getRow()) + info);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        rows.add(result.getRow());<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>    s.close();<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>    t.close();<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>    return rows;<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>  }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span><a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  /**<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>   * Tool to get the reference to the region server object that holds the<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>   * region of the specified user table.<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>   * It first searches for the meta rows that contain the region of the<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>   * specified table, then gets the index of that RS, and finally retrieves<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>   * the RS's reference.<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>   * @param tableName user table to lookup in hbase:meta<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>   * @return region server that holds it, null if the row doesn't exist<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>   * @throws IOException<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>   * @throws InterruptedException<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>   */<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>  public HRegionServer getRSForFirstRegionInTable(TableName tableName)<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>      throws IOException, InterruptedException {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    List&lt;byte[]&gt; metaRows = getMetaTableRows(tableName);<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    if (metaRows == null || metaRows.isEmpty()) {<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>      return null;<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    }<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    LOG.debug("Found " + metaRows.size() + " rows for table " +<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      tableName);<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    byte [] firstrow = metaRows.get(0);<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.debug("FirstRow=" + Bytes.toString(firstrow));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    long pause = getConfiguration().getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>      HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    int numRetries = getConfiguration().getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER);<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>    RetryCounter retrier = new RetryCounter(numRetries+1, (int)pause, TimeUnit.MICROSECONDS);<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    while(retrier.shouldRetry()) {<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>      int index = getMiniHBaseCluster().getServerWith(firstrow);<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (index != -1) {<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>        return getMiniHBaseCluster().getRegionServerThreads().get(index).getRegionServer();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>      }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      // Came back -1.  Region may not be online yet.  Sleep a while.<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      retrier.sleepUntilNextRetry();<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    }<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>    return null;<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>  }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span><a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>  /**<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt; with a default number of<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>   * &lt;code&gt;TaskTracker&lt;/code&gt;'s.<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>   *<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>   * @throws IOException When starting the cluster fails.<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>   */<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>  public MiniMRCluster startMiniMapReduceCluster() throws IOException {<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    startMiniMapReduceCluster(2);<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>    return mrCluster;<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  }<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span><a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>  /**<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>   * Tasktracker has a bug where changing the hadoop.log.dir system property<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>   * will not change its internal static LOG_DIR variable.<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>   */<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>  private void forceChangeTaskLogDir() {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>    Field logDirField;<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    try {<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>      logDirField = TaskLog.class.getDeclaredField("LOG_DIR");<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>      logDirField.setAccessible(true);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span><a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>      Field modifiersField = Field.class.getDeclaredField("modifiers");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>      modifiersField.setAccessible(true);<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      modifiersField.setInt(logDirField, logDirField.getModifiers() &amp; ~Modifier.FINAL);<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span><a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>      logDirField.set(null, new File(hadoopLogDir, "userlogs"));<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>    } catch (SecurityException e) {<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      throw new RuntimeException(e);<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>    } catch (NoSuchFieldException e) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>      // TODO Auto-generated catch block<a name="line.2419"></a>
+<span class="sourceLineNo">2062</span>      if (flush) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        r.flush(true);<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>      }<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>    }<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>    return rowCount;<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>  }<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span><a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>  public void loadNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>      throws IOException {<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      Put put = new Put(data);<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>      put.addColumn(f, null, data);<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      t.put(put);<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  }<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span><a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>  public void verifyNumericRows(Table table, final byte[] f, int startRow, int endRow,<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      int replicaId)<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      throws IOException {<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>      Get get = new Get(data);<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>      get.setReplicaId(replicaId);<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      get.setConsistency(Consistency.TIMELINE);<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>      Result result = table.get(get);<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>      assertEquals(failMsg, result.getColumnCells(f, null).size(), 1);<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>      assertTrue(failMsg,<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>          cell.getValueLength()));<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>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow)<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>      throws IOException {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    verifyNumericRows((HRegion)region, f, startRow, endRow);<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>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow)<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>      throws IOException {<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>    verifyNumericRows(region, f, startRow, endRow, true);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>  }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span><a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>      final boolean present) throws IOException {<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>    verifyNumericRows((HRegion)region, f, startRow, endRow, present);<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>  }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span><a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow,<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      final boolean present) throws IOException {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      Result result = region.get(new Get(data));<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span><a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>      boolean hasResult = result != null &amp;&amp; !result.isEmpty();<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>      assertEquals(failMsg + result, present, hasResult);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>      if (!present) continue;<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span><a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>      assertEquals(failMsg, result.getColumnCells(f, null).size(), 1);<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      assertTrue(failMsg,<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>          cell.getValueLength()));<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>    }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>  }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span><a name="line.2132"></a>
+<span class="sourceLineNo">2133</span>  public void deleteNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>      throws IOException {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>      Delete delete = new Delete(data);<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>      delete.addFamily(f);<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>      t.delete(delete);<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>    }<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>  }<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span><a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>  /**<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>   * Return the number of rows in the given table.<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>   */<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>  public int countRows(final Table table) throws IOException {<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>    return countRows(table, new Scan());<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>  }<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span><a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>  public int countRows(final Table table, final Scan scan) throws IOException {<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>    ResultScanner results = table.getScanner(scan);<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>    int count = 0;<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>    for (@SuppressWarnings("unused") Result res : results) {<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>      count++;<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>    }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>    results.close();<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>    return count;<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>  }<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span><a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  public int countRows(final Table table, final byte[]... families) throws IOException {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    Scan scan = new Scan();<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>    for (byte[] family: families) {<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>      scan.addFamily(family);<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>    }<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>    ResultScanner results = table.getScanner(scan);<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>    int count = 0;<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>    for (@SuppressWarnings("unused") Result res : results) {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>      count++;<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    }<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    results.close();<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>    return count;<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>  }<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span><a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>  /**<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   * Return the number of rows in the given table.<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>   */<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>  public int countRows(final TableName tableName) throws IOException {<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    Table table = getConnection().getTable(tableName);<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    try {<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>      return countRows(table);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    } finally {<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>      table.close();<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    }<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>   * Return an md5 digest of the entire contents of a table.<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>   */<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>  public String checksumRows(final Table table) throws Exception {<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span><a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    Scan scan = new Scan();<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>    ResultScanner results = table.getScanner(scan);<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>    MessageDigest digest = MessageDigest.getInstance("MD5");<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>    for (Result res : results) {<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>      digest.update(res.getRow());<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>    }<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>    results.close();<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>    return digest.toString();<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>  }<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span><a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>  /** All the row values for the data loaded by {@link #loadTable(HTable, byte[])} */<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>  public static final byte[][] ROWS = new byte[(int) Math.pow('z' - 'a' + 1, 3)][3]; // ~52KB<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>  static {<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    int i = 0;<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>          ROWS[i][0] = b1;<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>          ROWS[i][1] = b2;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>          ROWS[i][2] = b3;<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>          i++;<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>        }<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>      }<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>  public static final byte[][] KEYS = {<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>    HConstants.EMPTY_BYTE_ARRAY, Bytes.toBytes("bbb"),<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>    Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>    Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>    Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>    Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>    Bytes.toBytes("xxx"), Bytes.toBytes("yyy")<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>  };<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span><a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>  public static final byte[][] KEYS_FOR_HBA_CREATE_TABLE = {<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>      Bytes.toBytes("bbb"),<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>      Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>      Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>      Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>      Bytes.toBytes("xxx"), Bytes.toBytes("yyy"), Bytes.toBytes("zzz")<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>  };<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span><a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>  /**<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>   * Create r

<TRUNCATED>